/*---------------------------------------------------------------------------* * platform_utils.c * * * * Copyright 2007, 2008 Nuance Communciations, Inc. * * * * Licensed under the Apache License, Version 2.0 (the 'License'); * * you may not use this file except in compliance with the License. * * * * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an 'AS IS' BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * * *---------------------------------------------------------------------------*/ #ifndef NO_STDERR #include <stdio.h> #endif #include <string.h> #include "pmemory.h" #include "platform_utils.h" /* safe_strtok() Use this in place of regular strtok. which is dangerous because it modifies a global variable. This function does not. Returns the position in NULL terminated input_str where seps are found, and the length of the token Seps contains a NULL terminated string of separators Returns NULL if error If no more tokens left, token_len is 0 */ char * safe_strtok(char *input_str, char *seps, int * token_len) { int i, j, k, n, m; int sep_found; char *pos; m = strlen(seps); if (!m || !input_str) return NULL; n = strlen(input_str); pos = input_str; for (i=0, sep_found = 0; i<n; i++) { for (j=0; j<m; j++) { if (*pos == seps[j]) { /* found seperator */ sep_found++; break; } } if (sep_found == i) { /* found first non separator */ break; } pos++; } *token_len = 0; /* now find ending position of token */ for (k=i; k<n; k++) { for (j=0; j<m; j++) { if (pos[k-i] == seps[j]) { /* first occurance equals separator*/ return pos; } } (*token_len)++; } /* no more tokens */ return pos; } /* C54 and WinCE does not have strdup or stricmp */ #if defined TI_DSP || defined UNDER_CE int stricmp(const char *str1, const char *str2) { if(str1 == NULL || str2 == NULL){ #ifndef NO_STDERR PLogError(L("stricmp: str1 or str2 is NULL\n")); #endif exit (1); } for (; *str1 != '\0' && *str2 != '\0' && tolower(*str1) == tolower(*str2); str1++, str2++) ; if (*str1 == '\0') return *str2 == '\0'? 0 : -1; else if (*str2 == '\0') return 1; else return tolower(*str1) < tolower(*str2)? -1 : 1; } char * strdup(char *in_string) { char * new_string = NULL; if(in_string == NULL){ #ifndef NO_STDERR PLogError(L("strdup: input string is NULL\n")); #endif return NULL; } new_string = (char *)MALLOC(sizeof(char)*(strlen(in_string)+1), MTAG); if(!new_string) return NULL; strcpy(new_string, in_string); return new_string; } #endif