char* my_strtok(char* str, const char* delimiters) { static char* last = NULL; char* tokenbeg; char* tokenend; if (delimiters == NULL) { return NULL; } if (str != NULL) { last = str; } if ((*last == STREND) && (str == NULL)) { return NULL; } tokenbeg = last; tokenend = my_strpbrk(tokenbeg, delimiters); if (tokenend == NULL) { last += my_strlen(last); return tokenbeg; } while ((tokenend - tokenbeg) < 1) { tokenbeg = tokenend + 1; tokenend = my_strpbrk(tokenend + 1, delimiters); } last = tokenend + 1; *tokenend = STREND; return tokenbeg; }
int TV_ttf_add_row(const char *field_name, const char *type_name, const void *value) { size_t remaining; int out; /* printf ( "TV_ttf_add_row: on entry TV_ttf_data_format_control == %d\n", TV_ttf_data_format_control ); */ /* Called at the wrong time */ if (TV_ttf_data_format_control == TV_FORMAT_INACTIVE) return TV_ttf_ec_not_active; if (my_strpbrk(field_name, "\n\t") != NULL) return TV_ttf_ec_invalid_characters; if (my_strpbrk(type_name, "\n\t") != NULL) return TV_ttf_ec_invalid_characters; if (TV_ttf_data_format_control == TV_FORMAT_FIRST_CALL) { /* Zero out the buffer to avoid confusion, and set the write point to the top of the buffer. */ my_zeroit(TV_ttf_data_format_buffer, sizeof (TV_ttf_data_format_buffer)); TV_ttf_data_buffer_ptr = TV_ttf_data_format_buffer; TV_ttf_data_format_control = TV_FORMAT_APPEND_CALL; } remaining = TV_ttf_data_buffer_ptr + DATA_FORMAT_BUFFER_SIZE - TV_ttf_data_format_buffer; /* out = snprintf(TV_ttf_data_buffer_ptr, remaining, "%s\t%s\t%p\n", field_name, type_name, value); */ out = marshal_row ( TV_ttf_data_buffer_ptr, remaining, field_name, type_name, value, 0, 0 ); if (out < 1) return TV_ttf_ec_buffer_exhausted; TV_ttf_data_buffer_ptr += out; return 0; } /* TV_ttf_add_row */