Reducing use of dynamic allocation forecloses many errors.

This commit is contained in:
Eric S. Raymond 2017-07-03 17:53:25 -04:00
parent 6e67222206
commit df36b62c74

31
misc.c
View file

@ -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;
word = strtok(copy, delims);
while (word != NULL) {
word = strtok(NULL, delims);
for (char *s = str; *s; s++)
if (inblanks) {
if (strchr(delims, *s) == 0) {
++count;
inblanks = false;
}
free(copy);
} else {
if (strchr(delims, *s) != 0) {
inblanks = true;
}
}
return (count);
}