@@ -169,60 +169,65 @@ char* ICACHE_FLASH_ATTR strncat(char * dest, const char * src, size_t n) {
169
169
return dest ;
170
170
}
171
171
172
+ char * ICACHE_FLASH_ATTR strtok_r (char * s , const char * delim , char * * last ) {
173
+ const char * spanp ;
174
+ char * tok ;
175
+ char c ;
176
+ char sc ;
177
+
178
+ if (s == NULL && (s = * last ) == NULL ) {
179
+ return (NULL );
180
+ }
172
181
173
- char * ICACHE_FLASH_ATTR strtok_r (char * str , const char * delimiters , char * * temp ) {
174
- static char * ret = NULL ;
175
- char * start = NULL ;
176
- char * end = NULL ;
177
- uint32_t size = 0 ;
178
182
179
- if (str == NULL ) {
180
- if (temp == NULL ) {
181
- return NULL ;
183
+ // Skip (span) leading delimiters
184
+ //
185
+ cont :
186
+ c = * s ++ ;
187
+ for (spanp = delim ; (sc = * spanp ++ ) != 0 ;) {
188
+ if (c == sc ) {
189
+ goto cont ;
182
190
}
183
- start = * temp ;
184
- } else {
185
- start = str ;
186
191
}
187
192
188
- if (start == NULL ) {
189
- return NULL ;
193
+ // check for no delimiters left
194
+ //
195
+ if (c == '\0' ) {
196
+ * last = NULL ;
197
+ return (NULL );
190
198
}
191
199
192
- if (delimiters == NULL ) {
193
- return NULL ;
194
- }
200
+ tok = s - 1 ;
195
201
196
- end = start ;
197
202
198
- while (1 ) {
199
- for (uint16_t i = 0 ; i < strlen (delimiters ); i ++ ) {
200
- if (* end == * (delimiters + i )) {
201
- break ;
203
+ // Scan token
204
+ // Note that delim must have one NUL; we stop if we see that, too.
205
+ //
206
+ for (;;) {
207
+ c = * s ++ ;
208
+ spanp = (char * )delim ;
209
+ do {
210
+ if ((sc = * spanp ++ ) == c ) {
211
+ if (c == 0 ) {
212
+ s = NULL ;
213
+ }
214
+ else {
215
+ s [-1 ] = '\0' ;
216
+ }
217
+ * last = s ;
218
+ return (tok );
202
219
}
203
- }
204
- end ++ ;
205
- if (* end == 0x00 ) {
206
- break ;
207
- }
208
- }
209
220
210
- * temp = end ;
211
-
212
- if (ret != NULL ) {
213
- free (ret );
221
+ } while (sc != 0 );
214
222
}
215
223
216
- size = (end - start );
217
- ret = (char * ) malloc (size );
218
- strncpy (ret , start , size );
219
- return ret ;
224
+ // NOTREACHED EVER
220
225
}
221
226
222
- char * ICACHE_FLASH_ATTR strtok (char * str , const char * delimiters ) {
223
- static char * ret = NULL ;
224
- ret = strtok_r ( str , delimiters , & ret );
225
- return ret ;
227
+ char * ICACHE_FLASH_ATTR strtok (char * s , const char * delim ) {
228
+ static char * last ;
229
+
230
+ return ( strtok_r ( s , delim , & last )) ;
226
231
}
227
232
228
233
int ICACHE_FLASH_ATTR strcasecmp (const char * str1 , const char * str2 ) {
0 commit comments