/* Parse and insert methods from methods string */ void parse_methods_string(char *str) { char *method, *tmp, *i; int num_methods = 0; #ifdef DEBUG ASSERT(str); #endif if (strlen(str) == 0) LOG_DIE("Empty methods string provided"); /* Make a temporary copy of the string so we don't modify the original */ if ((tmp = malloc(strlen(str) + 1)) == NULL) LOG_DIE("Cannot allocate memory for methods string buffer"); strcpy(tmp, str); for (i = tmp; (method = strtok(i, ",")); i = NULL) { method = str_strip_whitespace(method); method = str_tolower(method); if (strlen(method) == 0) continue; if (insert_method(method)) num_methods++; } free(tmp); if (num_methods == 0) LOG_DIE("No valid methods found in string"); return; }
/* Parse and insert output fields from format string */ void parse_format_string(char *str) { char *name, *tmp, *i; int num_nodes = 0; size_t len; #ifdef DEBUG ASSERT(str); #endif len = strlen(str); if (len == 0) LOG_DIE("Empty format string provided"); /* Make a temporary copy of the string so we don't modify the original */ if ((tmp = str_duplicate(str)) == NULL) LOG_DIE("Cannot allocate memory for format string buffer"); for (i = tmp; (name = strtok(i, ",")); i = NULL) { /* Normalize input field text */ name = str_strip_whitespace(name); name = str_tolower(name); len = strlen(name); if (len == 0) continue; if (insert_field(name, len)) num_nodes++; } free(tmp); if (num_nodes == 0) LOG_DIE("No valid fields found in format string"); #ifdef DEBUG int j, num_buckets = 0, num_chain, max_chain = 0; FORMAT_NODE *node; for (j = 0; j < HASHSIZE; j++) { if (fields[j]) num_buckets++; num_chain = 0; for (node = fields[j]; node != NULL; node = node->next) num_chain++; if (num_chain > max_chain) max_chain = num_chain; } PRINT("----------------------------"); PRINT("Hash buckets: %d", HASHSIZE); PRINT("Nodes inserted: %d", num_nodes); PRINT("Buckets in use: %d", num_buckets); PRINT("Hash collisions: %d", num_nodes - num_buckets); PRINT("Longest hash chain: %d", max_chain); PRINT("----------------------------"); #endif return; }