From: Eric S. Raymond Date: Mon, 3 Jul 2017 21:53:25 +0000 (-0400) Subject: Reducing use of dynamic allocation forecloses many errors. X-Git-Tag: takebird~61 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=df36b62c7436bdec84f29c14b3542cdcdaaa3784;p=open-adventure.git Reducing use of dynamic allocation forecloses many errors. --- diff --git a/misc.c b/misc.c index 4fa173d..0b00992 100644 --- a/misc.c +++ b/misc.c @@ -10,18 +10,6 @@ #include "advent.h" #include "dungeon.h" -static char* xstrdup(const char* s) -{ - char* ptr = strdup(s); - if (ptr == NULL) { - // LCOV_EXCL_START - // exclude from coverage analysis because we can't simulate an out of memory error in testing - fprintf(stderr, "Out of memory!\n"); - exit(EXIT_FAILURE); - } - return (ptr); -} - static void* xmalloc(size_t size) { void* ptr = malloc(size); @@ -293,19 +281,24 @@ void echo_input(FILE* destination, const char* input_prompt, const char* input) free(prompt_and_input); } -int word_count(char* s) +int word_count(char* str) { - char* copy = xstrdup(s); char delims[] = " \t"; int count = 0; - char* word; + int inblanks = true; + + for (char *s = str; *s; s++) + if (inblanks) { + if (strchr(delims, *s) == 0) { + ++count; + inblanks = false; + } + } else { + if (strchr(delims, *s) != 0) { + inblanks = true; + } + } - word = strtok(copy, delims); - while (word != NULL) { - word = strtok(NULL, delims); - ++count; - } - free(copy); return (count); }