X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/8b1171e6b5eb5524958f1876e2753f5b75a26cfd..3d5cde09d167be1609d27d0d93de2096250a310c:/regress/hplayback.c.m4 diff --git a/regress/hplayback.c.m4 b/regress/hplayback.c.m4 index ce295d0..e459ee6 100644 --- a/regress/hplayback.c.m4 +++ b/regress/hplayback.c.m4 @@ -2,7 +2,12 @@ m4_dnl hplayback.c.m4 m4_dnl (part of complex test harness, not of the library) m4_dnl - playback routines -m4_dnl This file is part of adns, which is Copyright (C) 1997-1999 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 @@ -35,10 +40,15 @@ m4_include(hmacros.i4) static FILE *Tinputfile, *Treportfile; static vbuf vb2; +extern void Tshutdown(void) { + adns__vbuf_free(&vb2); +} + static void Tensurereportfile(void) { const char *fdstr; int fd; + if (Treportfile) return; Treportfile= stderr; fdstr= getenv("ADNS_TEST_REPORT_FD"); if (!fdstr) return; fd= atoi(fdstr); @@ -68,6 +78,7 @@ static void Tensureinputfile(void) { fd= atoi(fdstr); Tinputfile= fdopen(fd,"r"); if (!Tinputfile) Tfailed("fdopen ADNS_TEST_IN_FD"); } + setvbuf(Tinputfile,0,_IONBF,0); if (!adns__vbuf_ensure(&vb2,1000)) Tnomem(); fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput(); @@ -110,8 +121,8 @@ static int Perrno(const char *stuff) { for (te= Terrnos; te->n && strcmp(te->n,stuff); te++); if (te->n) return te->v; - r= strtoul(stuff+1,&ep,10); - if (ep) Psyntax("errno value not recognised, not numeric"); + r= strtoul(stuff+2,&ep,10); + if (*ep) Psyntax("errno value not recognised, not numeric"); return r; } @@ -150,6 +161,7 @@ static void Pfdset(fd_set *set, int max) { } } +#ifdef HAVE_POLL static int Ppollfdevents(void) { int events; @@ -190,6 +202,7 @@ static void Ppollfds(struct pollfd *fds, int nfds) { } if (vb2.buf[vb2.used++] != hm_squote]hm_squote) Psyntax("pollfds end not ]"); } +#endif static void Paddr(struct sockaddr *addr, int *lenr) { struct sockaddr_in *sa= (struct sockaddr_in*)addr; @@ -264,7 +277,7 @@ void Q_vb(void) { m4_define(`hm_syscall', ` hm_create_proto_h int H$1(hm_args_massage($3,void)) { - int r; + int r, amtread; m4_define(`hm_rv_fd',`char *ep;') m4_define(`hm_rv_any',`char *ep;') m4_define(`hm_rv_len',`') @@ -288,10 +301,10 @@ int H$1(hm_args_massage($3,void)) { Tensurereportfile(); fprintf(Treportfile,"syscallr %s",vb2.buf); - vb2.avail= strlen(vb2.buf); - if (vb.avail<=0 || vb2.buf[--vb2.avail]!=hm_squote\nhm_squote) + amtread= strlen(vb2.buf); + if (amtread<=0 || vb2.buf[--amtread]!=hm_squote\nhm_squote) Psyntax("badly formed line"); - vb2.buf[vb2.avail]= 0; + vb2.buf[amtread]= 0; if (memcmp(vb2.buf," $1=",hm_r_offset)) Psyntax("syscall reply mismatch"); if (vb2.buf[hm_r_offset] == hm_squoteEhm_squote) { @@ -339,7 +352,8 @@ int H$1(hm_args_massage($3,void)) { m4_define(`hm_arg_pollfds_io',`Parg("$'`1"); Ppollfds($'`1,$'`2);') m4_define(`hm_arg_addr_out',`Parg("$'`1"); Paddr($'`1,$'`2);') $3 - if (vb2.used != vb2.avail) Psyntax("junk at end of line"); + assert(vb2.used <= amtread); + if (vb2.used != amtread) Psyntax("junk at end of line"); hm_create_nothing m4_define(`hm_arg_bytes_out',`r= Pbytes($'`2,$'`4);')