#include #include #include #include #include #include #define MAX_LINE 1024 void err_sys(char* message) { perror(message); exit(EXIT_FAILURE); } void* secure_malloc(int size) { void* res = malloc(size); if(!res) { fprintf(stderr, "malloc() failure -- out of memory?"); exit(EXIT_FAILURE); } return res; } char* secure_strdup(char* source) { void* res = secure_malloc(strlen(source)+1); strcpy(res, source); return res; } int count_words(char* line) { int words=0, in_word=0; while(*line) { if(isspace(*line)) { in_word = 0; } else { if(in_word == 0) { words++; in_word = 1; } } line++; } return words; } char **build_argv(char* line) { int argc = count_words(line); int i; char *new; char **argv; if(argc ==0) { return NULL; } argv = secure_malloc(sizeof(char*)*(argc+1)); for(i=0; i