mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-07 16:23:38 +03:00
commit
491b15c433
@ -169,60 +169,65 @@ char* ICACHE_FLASH_ATTR strncat(char * dest, const char * src, size_t n) {
|
|||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* ICACHE_FLASH_ATTR strtok_r(char* s, const char* delim, char** last) {
|
||||||
|
const char* spanp;
|
||||||
|
char* tok;
|
||||||
|
char c;
|
||||||
|
char sc;
|
||||||
|
|
||||||
char* ICACHE_FLASH_ATTR strtok_r(char * str, const char * delimiters, char ** temp) {
|
if (s == NULL && (s = *last) == NULL) {
|
||||||
static char * ret = NULL;
|
return (NULL);
|
||||||
char * start = NULL;
|
}
|
||||||
char * end = NULL;
|
|
||||||
uint32_t size = 0;
|
|
||||||
|
|
||||||
if(str == NULL) {
|
|
||||||
if(temp == NULL) {
|
// Skip (span) leading delimiters
|
||||||
return NULL;
|
//
|
||||||
|
cont:
|
||||||
|
c = *s++;
|
||||||
|
for (spanp = delim; (sc = *spanp++) != 0;) {
|
||||||
|
if (c == sc) {
|
||||||
|
goto cont;
|
||||||
}
|
}
|
||||||
start = *temp;
|
|
||||||
} else {
|
|
||||||
start = str;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(start == NULL) {
|
// check for no delimiters left
|
||||||
return NULL;
|
//
|
||||||
|
if (c == '\0') {
|
||||||
|
*last = NULL;
|
||||||
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(delimiters == NULL) {
|
tok = s - 1;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
end = start;
|
|
||||||
|
|
||||||
while(1) {
|
// Scan token
|
||||||
for(uint16_t i = 0; i < strlen(delimiters); i++) {
|
// Note that delim must have one NUL; we stop if we see that, too.
|
||||||
if(*end == *(delimiters + i)) {
|
//
|
||||||
break;
|
for (;;) {
|
||||||
|
c = *s++;
|
||||||
|
spanp = (char *)delim;
|
||||||
|
do {
|
||||||
|
if ((sc = *spanp++) == c) {
|
||||||
|
if (c == 0) {
|
||||||
|
s = NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
s[-1] = '\0';
|
||||||
|
}
|
||||||
|
*last = s;
|
||||||
|
return (tok);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
end++;
|
} while (sc != 0);
|
||||||
if(*end == 0x00) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*temp = end;
|
// NOTREACHED EVER
|
||||||
|
|
||||||
if(ret != NULL) {
|
|
||||||
free(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
size = (end - start);
|
|
||||||
ret = (char *) malloc(size);
|
|
||||||
strncpy(ret, start, size);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* ICACHE_FLASH_ATTR strtok(char * str, const char * delimiters) {
|
char* ICACHE_FLASH_ATTR strtok(char* s, const char* delim) {
|
||||||
static char * ret = NULL;
|
static char* last;
|
||||||
ret = strtok_r(str, delimiters, &ret);
|
|
||||||
return ret;
|
return (strtok_r(s, delim, &last));
|
||||||
}
|
}
|
||||||
|
|
||||||
int ICACHE_FLASH_ATTR strcasecmp(const char * str1, const char * str2) {
|
int ICACHE_FLASH_ATTR strcasecmp(const char * str1, const char * str2) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user