chiark / gitweb /
regress: fuzzraw: Introduce hm_rv_wlen
[adns.git] / regress / hfuzz.c
index c260d0df7692b6e9ff13e825a3b2c700be4659fc..4b500669fef8fe545e008aff7ba4730e6a3bc539 100644 (file)
@@ -45,7 +45,7 @@ FILE *Hfopen(const char *path, const char *mode) {
 static int t_argc;
 static char **t_argv;
 
-static FILE *t_stdin;
+static FILE *t_stdin, *stdoutcopy;
 static int t_sys_fd;
 
 static int bail(const char *msg) {
@@ -85,8 +85,9 @@ int Ttestinputfd(void) {
 }
 
 void Texit(int rv) {
-  fprintf(stderr,"**Texit(%d)**\n",rv);
-  Tallocshutdown();
+  fprintf(stdoutcopy,"rc=%d\n",rv);
+  if (ferror(stdoutcopy) || fclose(stdoutcopy)) baile("flush rc msg");
+  Tcommonshutdown();
   exit(0);
 }
 
@@ -96,6 +97,11 @@ int main(int argc, char **argv) {
   if (argc!=1)
     bail("usage: *_fuzz  (no arguments)");
 
+  int stdoutcopyfd= dup(1);
+  if (stdoutcopyfd<0) baile("dup 1 again");
+  stdoutcopy= fdopen(stdoutcopyfd,"w");
+  if (!stdoutcopy) baile("fdopen 1 again");
+
   t_argc = getint(50);
   t_argv = calloc(t_argc+1, sizeof(*t_argv));
   for (i=0; i<t_argc; i++) {
@@ -121,8 +127,11 @@ int main(int argc, char **argv) {
   if (dup2(fileno(t_stdin), 0)) baile("dup2 t_stdin");
   if (fseek(stdin, 0, SEEK_SET)) baile("rewind t_stdin");
 
-  if (dup2(1,2)!=2) baile("redirect stderr to stdout");
-
   int estatus = Hmain(t_argc, t_argv);
   Texit(estatus);
 }
+
+void Tmallocshutdown(void) { }
+void *Hmalloc(size_t s) { assert(s); return malloc(s); }
+void *Hrealloc(void *p, size_t s) { assert(s); return realloc(p,s); }
+void Hfree(void *p) { free(p); }