1 /*---------------------------------------------------------------------------* 2 * platform_utils.c * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20 21 22 #ifndef NO_STDERR 23 #include <stdio.h> 24 #endif 25 26 #include <string.h> 27 #include "pmemory.h" 28 #include "platform_utils.h" 29 30 31 /* 32 safe_strtok() 33 Use this in place of regular strtok. which is dangerous because it modifies 34 a global variable. This function does not. 35 36 Returns the position in NULL terminated input_str where seps are found, 37 and the length of the token 38 Seps contains a NULL terminated string of separators 39 Returns NULL if error 40 41 If no more tokens left, token_len is 0 42 */ 43 44 char * safe_strtok(char *input_str, char *seps, int * token_len) 45 { 46 int i, j, k, n, m; 47 int sep_found; 48 char *pos; 49 50 m = strlen(seps); 51 52 if (!m || !input_str) 53 return NULL; 54 55 n = strlen(input_str); 56 pos = input_str; 57 58 for (i=0, sep_found = 0; i<n; i++) { 59 for (j=0; j<m; j++) { 60 if (*pos == seps[j]) { 61 /* found seperator */ 62 sep_found++; 63 break; 64 } 65 } 66 if (sep_found == i) { 67 /* found first non separator */ 68 break; 69 } 70 pos++; 71 } 72 73 *token_len = 0; 74 75 /* now find ending position of token */ 76 for (k=i; k<n; k++) { 77 for (j=0; j<m; j++) { 78 if (pos[k-i] == seps[j]) { 79 /* first occurance equals separator*/ 80 return pos; 81 } 82 } 83 (*token_len)++; 84 } 85 86 /* no more tokens */ 87 return pos; 88 } 89 90 91 /* C54 and WinCE does not have strdup or stricmp */ 92 #if defined TI_DSP || defined UNDER_CE 93 int stricmp(const char *str1, const char *str2) 94 { 95 if(str1 == NULL || str2 == NULL){ 96 #ifndef NO_STDERR 97 PLogError(L("stricmp: str1 or str2 is NULL\n")); 98 #endif 99 exit (1); 100 } 101 102 for (; *str1 != '\0' && *str2 != '\0' && tolower(*str1) == tolower(*str2); 103 str1++, str2++) 104 ; 105 if (*str1 == '\0') 106 return *str2 == '\0'? 0 : -1; 107 else if (*str2 == '\0') 108 return 1; 109 else 110 return tolower(*str1) < tolower(*str2)? -1 : 1; 111 } 112 113 char * strdup(char *in_string) 114 { 115 char * new_string = NULL; 116 117 if(in_string == NULL){ 118 #ifndef NO_STDERR 119 PLogError(L("strdup: input string is NULL\n")); 120 #endif 121 return NULL; 122 } 123 124 new_string = (char *)MALLOC(sizeof(char)*(strlen(in_string)+1), MTAG); 125 if(!new_string) 126 return NULL; 127 128 strcpy(new_string, in_string); 129 return new_string; 130 } 131 #endif 132 133