X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=regress%2Fhplayback.c.m4;h=4fb12044e73b130d2bda88ce7819b707b0f8ca11;hb=31ce0ac48818d84aae5e7bfb3fe61049787e16fb;hp=b98d4333dc4bb2adaf8a94493df34b80fde6c838;hpb=bab7d030fa61e45227f4ce4f3096532bb7ceed31;p=adns.git diff --git a/regress/hplayback.c.m4 b/regress/hplayback.c.m4 index b98d433..4fb1204 100644 --- a/regress/hplayback.c.m4 +++ b/regress/hplayback.c.m4 @@ -45,7 +45,7 @@ m4_include(hmacros.i4) static FILE *Tinputfile, *Tfuzzrawfile, *Treportfile; static vbuf vb2; -static void Tensurereportfile(void) { +static void Tensure_reportfile(void) { const char *fdstr; int fd; @@ -56,7 +56,7 @@ static void Tensurereportfile(void) { Treportfile= fdopen(fd,"a"); if (!Treportfile) Tfailed("fdopen ADNS_TEST_REPORT_FD"); } -static void Tensurefuzzrawfile(void) { +static void Tensure_fuzzrawfile(void) { static int done; if (done) return; @@ -70,7 +70,7 @@ static void Tensurefuzzrawfile(void) { if (!Tfuzzrawfile) Tfailed("fdopen ADNS_TEST_FUZZRAW_DUMP_FD"); } -static void FR_write(void *p, size_t sz) { +static void FR_write(const void *p, size_t sz) { if (!Tfuzzrawfile) return; ssize_t got = fwrite(p,1,sz,Tfuzzrawfile); if (ferror(Tfuzzrawfile)) Tfailed("write fuzzraw output file"); @@ -105,11 +105,14 @@ void T_gettimeofday_hook(void) { FR_WRITE(delta); } -void Tensurerecordfile(void) { +void Tensuresetup(void) { int fd; int chars; unsigned long sec, usec; + Tensure_reportfile(); + Tensure_fuzzrawfile(); + if (Tinputfile) return; Tinputfile= stdin; fd = Ttestinputfd(); @@ -195,16 +198,19 @@ static void Pfdset(fd_set *set, int max) { if (vb2.buf[vb2.used++] != hm_squote[hm_squote) Psyntax("fd set start not ["); FD_ZERO(set); - if (vb2.buf[vb2.used] == hm_squote]hm_squote) { vb2.used++; return; } - for (;;) { - ul= strtoul(vb2.buf+vb2.used,&ep,10); - if (ul>=max) Psyntax("fd set member > max"); - if (ep == (char*)vb2.buf+vb2.used) Psyntax("empty entry in fd set"); - FD_SET(ul,set); - vb2.used= ep - (char*)vb2.buf; - c= vb2.buf[vb2.used++]; - if (c == hm_squote]hm_squote) break; - if (c != hm_squote,hm_squote) Psyntax("fd set separator not ,"); + if (vb2.buf[vb2.used] == hm_squote]hm_squote) { + vb2.used++; + } else { + for (;;) { + ul= strtoul(vb2.buf+vb2.used,&ep,10); + if (ul>=max) Psyntax("fd set member > max"); + if (ep == (char*)vb2.buf+vb2.used) Psyntax("empty entry in fd set"); + FD_SET(ul,set); + vb2.used= ep - (char*)vb2.buf; + c= vb2.buf[vb2.used++]; + if (c == hm_squote]hm_squote) break; + if (c != hm_squote,hm_squote) Psyntax("fd set separator not ,"); + } } uint16_t accum; @@ -288,6 +294,14 @@ static void Paddr(struct sockaddr *addr, int *lenr) { if (*ep && *ep != ' ') Psyntax("invalid port (bad syntax)"); if (ul >= 65536) Psyntax("port too large"); + if (Tfuzzrawfile) { + int tl = strlen(p); + FR_WRITE(tl); + FR_write(p,tl); + uint16_t port16 = ul; + FR_WRITE(port16); + } + a.len= sizeof(a.addr); err= adns_text2addr(p, (int)ul, 0, &a.addr.sa,&a.len); if (err) Psyntax("invalid address"); @@ -327,7 +341,7 @@ static int Pbytes(byte *buf, int maxlen) { void Q_vb(void) { const char *nl; - Tensurerecordfile(); + Tensuresetup(); if (!adns__vbuf_ensure(&vb2,vb.used+2)) Tnomem(); fread(vb2.buf,1,vb.used+2,Tinputfile); if (feof(Tinputfile)) { @@ -345,7 +359,6 @@ void Q_vb(void) { vb.used,vb.buf, vb.used,vb2.buf+1); exit(1); } - Tensurereportfile(); nl= memchr(vb.buf,'\n',vb.used); fprintf(Treportfile," %.*s\n", (int)(nl ? nl - (const char*)vb.buf : vb.used), vb.buf); } @@ -372,8 +385,7 @@ int H$1(hm_args_massage($3,void)) { if (!adns__vbuf_ensure(&vb2,1000)) Tnomem(); fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput(); - Tensurereportfile(); - Tensurefuzzrawfile(); + Tensuresetup(); fprintf(Treportfile,"%s",vb2.buf); amtread= strlen(vb2.buf); if (amtread<=0 || vb2.buf[--amtread]!=hm_squote\nhm_squote) @@ -381,6 +393,11 @@ int H$1(hm_args_massage($3,void)) { vb2.buf[amtread]= 0; if (memcmp(vb2.buf," $1=",hm_r_offset)) Psyntax("syscall reply mismatch"); +#ifdef FUZZRAW_SYNC + hm_fr_syscall_ident($1) + FR_WRITE(sync_expect); +#endif + m4_define(`hm_rv_check_errno',` if (vb2.buf[hm_r_offset] == hm_squoteEhm_squote) { int e; @@ -438,7 +455,7 @@ int H$1(hm_args_massage($3,void)) { Psyntax("fcntl flags not O_NONBLOCK|... or ~O_NONBLOCK&..."); } } else if (cmd == F_SETFL) { - hm_rv_succfail + hm_rv_check_success } else { Psyntax("fcntl not F_GETFL or F_SETFL"); }