ATTRIBUTE_CLIB_SECTION char * strtok_P (char *s, PGM_P delim) { static char *p; return strtok_rP (s, delim, &p); }
/** * Find needle on haystack * * @param const __FlashStringHelper *needle * @param char *haystack * @param __FlashStringHelper *separator * @return *char value **/ const char *uHTTP::parse(const __FlashStringHelper *needle, char *haystack, const __FlashStringHelper *sep){ char *act, *sub, *ptr; char buffer[uHTTP_BUFFER_SIZE]; strcpy(buffer, haystack); for(act = buffer; strncmp_P(sub, (const PROGMEM char *) needle, strlen_P((const PROGMEM char *) needle)); act = NULL){ sub = strtok_rP(act, (const PROGMEM char *) sep, &ptr); if(sub == NULL) break; } return (sub) ? strchr(sub, '=') + 1 : NULL; }