git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Usermode/libaxwin4 - Handle demarshal failure
[tpg/acess2.git]
/
Tools
/
NetTest_Runner
/
stack.c
diff --git
a/Tools/NetTest_Runner/stack.c
b/Tools/NetTest_Runner/stack.c
index
c359d84
..
07f8be7
100644
(file)
--- a/
Tools/NetTest_Runner/stack.c
+++ b/
Tools/NetTest_Runner/stack.c
@@
-12,6
+12,8
@@
#include <fcntl.h>
#include <spawn.h>
#include <fcntl.h>
#include <spawn.h>
+#include <sys/types.h>
+#include <sys/wait.h>
#define MAX_ARGS 16
#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);
break;
default:
assert(AddrType == 4);
+ fprintf(stderr, "Stack_AddInterface: Bad address type %i\n", AddrType);
exit(1);
}
}
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, ...)
{
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_list args;
+
va_start(args, Fmt);
size_t len = vsnprintf(NULL, 0, Fmt, args);
va_end(args);
va_start(args, Fmt);
size_t len = vsnprintf(NULL, 0, Fmt, args);
va_end(args);
+
char *arg = malloc(len+1);
char *arg = malloc(len+1);
+ assert(arg);
+
va_start(args, Fmt);
vsnprintf(arg, len+1, Fmt, args);
va_end(args);
va_start(args, Fmt);
vsnprintf(arg, len+1, Fmt, args);
va_end(args);
+
+ assert( arg[len] == '\0' );
gasStackArgs[giNumStackArgs++] = arg;
}
gasStackArgs[giNumStackArgs++] = arg;
}
@@
-81,7
+94,7
@@
void sigchld_handler(int signum)
fprintf(stderr, "FAILURE: Child exited (%i)\n", status);
}
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);
{
Stack_AddArg(Subcommand);
@@
-96,8
+109,8
@@
int Stack_Start(const char *Subcommand)
fcntl(giStack_InFD, F_SETFD, FD_CLOEXEC);
FILE *fp;
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);
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;
}
fprintf(stderr, "posix_spawn failed: %s", strerror(rv));
return 1;
}
+
+ posix_spawn_file_actions_destroy(&fa);
return 0;
}
return 0;
}
@@
-121,11
+136,24
@@
void Stack_Kill(void)
kill(giStack_PID, SIGTERM);
giStack_PID = 0;
}
kill(giStack_PID, SIGTERM);
giStack_PID = 0;
}
+
+ for( int i = 1; i < giNumStackArgs; i ++ )
+ free(gasStackArgs[i]);
+ giNumStackArgs = 1;
}
}
-int Stack_SendCommand(const char *
CommandString
)
+int Stack_SendCommand(const char *
Fmt, ...
)
{
{
- write(giStack_InFD, CommandString, strlen(CommandString));
+ va_list args;
+ va_start(args, Fmt);
+ size_t len = vsnprintf(NULL, 0, Fmt, args);
+ va_end(args);
+ char command[len+1];
+ va_start(args, Fmt);
+ vsnprintf(command, len+1, Fmt, args);
+ va_end(args);
+
+ write(giStack_InFD, command, len);
write(giStack_InFD, "\n", 1);
return 0;
}
write(giStack_InFD, "\n", 1);
return 0;
}
UCC
git Repository :: git.ucc.asn.au