X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=adns.git;a=blobdiff_plain;f=regress%2Fhrecord.c.m4;h=cb40eae74ca77b34b52df2d2d027bc99a2dac313;hp=8dcf4cbd22f9c172bbcbcccd41c67013f4e41dad;hb=e16c09ea29b6cb09b1f9a098aaed65da5fa4501a;hpb=bb7ba6773439e5bf3dfcc2779783a09906176550 diff --git a/regress/hrecord.c.m4 b/regress/hrecord.c.m4 index 8dcf4cb..cb40eae 100644 --- a/regress/hrecord.c.m4 +++ b/regress/hrecord.c.m4 @@ -2,7 +2,12 @@ m4_dnl hrecord.c.m4 m4_dnl (part of complex test harness, not of the library) m4_dnl - recording routines -m4_dnl This file is part of adns, which is Copyright (C) 1997, 1998 Ian Jackson +m4_dnl This file is +m4_dnl Copyright (C) 1997-2000 Ian Jackson +m4_dnl +m4_dnl It is part of adns, which is +m4_dnl Copyright (C) 1997-2000 Ian Jackson +m4_dnl Copyright (C) 1999 Tony Finch m4_dnl m4_dnl This program is free software; you can redistribute it and/or modify m4_dnl it under the terms of the GNU General Public License as published by @@ -22,13 +27,50 @@ m4_include(hmacros.i4) #include #include -#include #include +#include + +#include +#include +#include #include "harness.h" -static int begin_set; -static struct timeval begin; +static FILE *Toutputfile; + +void Tshutdown(void) { +} + +static void R_recordtime(void) { + int r; + struct timeval tv, tvrel; + + Tensureoutputfile(); + r= gettimeofday(&tv,0); if (r) Tfailed("gettimeofday syscallbegin"); + tvrel.tv_sec= tv.tv_sec - currenttime.tv_sec; + tvrel.tv_usec= tv.tv_usec - currenttime.tv_usec; + if (tv.tv_usec < 0) { tvrel.tv_usec += 1000000; tvrel.tv_sec--; } + Tvbf("\n +%ld.%06ld",(long)tvrel.tv_sec,(long)tvrel.tv_usec); + currenttime= tv; +} + +void Tensureoutputfile(void) { + const char *fdstr; + int fd, r; + + if (Toutputfile) return; + + Toutputfile= stdout; + fdstr= getenv("ADNS_TEST_OUT_FD"); + if (fdstr) { + fd= atoi(fdstr); + Toutputfile= fdopen(fd,"a"); if (!Toutputfile) Tfailed("fdopen ADNS_TEST_OUT_FD"); + } + + r= gettimeofday(¤ttime,0); if (r) Tfailed("gettimeofday syscallbegin"); + if (fprintf(Toutputfile," start %ld.%06ld\n", + (long)currenttime.tv_sec,(long)currenttime.tv_usec) == EOF) Toutputerr(); +} void Q_vb(void) { if (!adns__vbuf_append(&vb,"",1)) Tnomem(); @@ -40,7 +82,7 @@ void Q_vb(void) { static void R_vb(void) { Q_vb(); } - + m4_define(`hm_syscall', ` hm_create_proto_h int H$1(hm_args_massage($3,void)) { @@ -68,33 +110,29 @@ int H$1(hm_args_massage($3,void)) { m4_define(`hm_rv_succfail',` if (r) { Tvberrno(e); goto x_error; } Tvba("OK");') - m4_define(`hm_rv_must',`Tmust("$1","return",!r);') + m4_define(`hm_rv_must',`Tmust("$1","return",!r); Tvba("OK");') m4_define(`hm_rv_len',` if (r==-1) { Tvberrno(e); goto x_error; } Tmust("$1","return",r<=$'`1); - Tvbf("%d",r);') + Tvba("OK");') + m4_define(`hm_rv_fcntl',` + if (r==-1) { Tvberrno(e); goto x_error; } + if (cmd == F_GETFL) { + Tvbf(r & O_NONBLOCK ? "O_NONBLOCK|..." : "~O_NONBLOCK&..."); + } else { + if (cmd == F_SETFL) { + Tmust("$1","return",!r); + } else { + Tmust("cmd","F_GETFL/F_SETFL",0); + } + Tvba("OK"); + }') $2 hm_create_nothing m4_define(`hm_arg_fdset_io',`Tvba(" $'`1="); Tvbfdset($'`2,$'`1);') + m4_define(`hm_arg_pollfds_io',`Tvba(" $'`1="); Tvbpollfds($'`1,$'`2);') m4_define(`hm_arg_addr_out',`Tvba(" $'`1="); Tvbaddr($'`1,*$'`2);') - m4_define(`hm_arg_timeval_out_abs',` - if (!begin_set) { - Tvbf(" $'`1=%ld.%06ld",$'`1->tv_sec,$'`1->tv_usec); - begin= *$'`1; - begin_set= 1; - } else { - struct timeval diff; - diff.tv_sec= $'`1->tv_sec - begin.tv_sec; - diff.tv_usec= $'`1->tv_usec - begin.tv_usec; - if (diff.tv_usec < 0) { - diff.tv_sec -= 1; - diff.tv_usec += 1000000; - } - assert(diff.tv_sec >= 0); - assert(diff.tv_usec >= 0); - Tvbf(" $'`1=+%ld.%06ld",diff.tv_sec,diff.tv_usec); - }') $3 hm_create_nothing @@ -105,13 +143,17 @@ int H$1(hm_args_massage($3,void)) { m4_define(`hm_rv_fd',`x_error:') m4_define(`hm_rv_succfail',`x_error:') m4_define(`hm_rv_len',`x_error:') + m4_define(`hm_rv_fcntl',`x_error:') m4_define(`hm_rv_must',`') $2 + R_recordtime(); R_vb(); errno= e; return r; } ') +m4_define(`hm_specsyscall', `') + m4_include(`hsyscalls.i4')