X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Tools%2FNetTest_Runner%2Fstack.c;h=07f8be7a58aea02e76126416d6aa9a2983dcca52;hb=13078002b01ee4f63eb2001d2ef479a2a006ea32;hp=65f8352286de65adec15e5e31109e30c0f02869c;hpb=d2f1a4c62225533351551870cbe44d94a4ec4fab;p=tpg%2Facess2.git diff --git a/Tools/NetTest_Runner/stack.c b/Tools/NetTest_Runner/stack.c index 65f83522..07f8be7a 100644 --- a/Tools/NetTest_Runner/stack.c +++ b/Tools/NetTest_Runner/stack.c @@ -12,6 +12,8 @@ #include #include +#include +#include #define MAX_ARGS 16 @@ -53,6 +55,7 @@ void Stack_AddInterface(const char *Name, int AddrType, const void *Addr, int Ma break; default: assert(AddrType == 4); + fprintf(stderr, "Stack_AddInterface: Bad address type %i\n", AddrType); exit(1); } } @@ -63,14 +66,24 @@ void Stack_AddRoute(int Type, const void *Network, int MaskBits, const void *Nex void Stack_AddArg(const char *Fmt, ...) { + if( giNumStackArgs == MAX_ARGS ) { + fprintf(stderr, "ERROR: Too many arguments to stack, %i max\n", MAX_ARGS); + return ; + } va_list args; + va_start(args, Fmt); size_t len = vsnprintf(NULL, 0, Fmt, args); va_end(args); + char *arg = malloc(len+1); + assert(arg); + va_start(args, Fmt); vsnprintf(arg, len+1, Fmt, args); va_end(args); + + assert( arg[len] == '\0' ); gasStackArgs[giNumStackArgs++] = arg; } @@ -81,7 +94,7 @@ void sigchld_handler(int signum) fprintf(stderr, "FAILURE: Child exited (%i)\n", status); } -int Stack_Start(const char *Subcommand) +int Stack_Start(const char *RunName, const char *Subcommand) { Stack_AddArg(Subcommand); @@ -96,8 +109,8 @@ int Stack_Start(const char *Subcommand) fcntl(giStack_InFD, F_SETFD, FD_CLOEXEC); FILE *fp; - fp = fopen("stdout.txt", "a"); fprintf(fp, "--- Startup\n"); fclose(fp); - fp = fopen("stderr.txt", "a"); fprintf(fp, "--- Startup\n"); fclose(fp); + fp = fopen("stdout.txt", "a"); fprintf(fp, "--- TEST: %s\n", RunName); fclose(fp); + fp = fopen("stderr.txt", "a"); fprintf(fp, "--- TEST: %s\n", RunName); fclose(fp); posix_spawn_file_actions_t fa; posix_spawn_file_actions_init(&fa); @@ -111,6 +124,8 @@ int Stack_Start(const char *Subcommand) fprintf(stderr, "posix_spawn failed: %s", strerror(rv)); return 1; } + + posix_spawn_file_actions_destroy(&fa); return 0; } @@ -121,6 +136,10 @@ void Stack_Kill(void) kill(giStack_PID, SIGTERM); giStack_PID = 0; } + + for( int i = 1; i < giNumStackArgs; i ++ ) + free(gasStackArgs[i]); + giNumStackArgs = 1; } int Stack_SendCommand(const char *Fmt, ...)