X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=regress%2Fhcommon.c.m4;h=6f29b41a15abc594d8f3ce2a0424f85abfea528d;hb=baa953c9d9107b862f8f66ac014c95b965e686e1;hp=0fb5229352f06c1d5c321ede36411ab554cc01d5;hpb=4e25ff4e538e8af8837b0b982a56ecc838fd7e27;p=adns.git diff --git a/regress/hcommon.c.m4 b/regress/hcommon.c.m4 index 0fb5229..6f29b41 100644 --- a/regress/hcommon.c.m4 +++ b/regress/hcommon.c.m4 @@ -2,16 +2,16 @@ m4_dnl hcommon.c m4_dnl (part of complex test harness, not of the library) m4_dnl - routines used for both record and playback -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 This file is part of adns, which is +m4_dnl Copyright (C) 1997-2000,2003,2006,2014-2016 Ian Jackson +m4_dnl Copyright (C) 2014 Mark Wooding +m4_dnl Copyright (C) 1999-2000,2003,2006 Tony Finch +m4_dnl Copyright (C) 1991 Massachusetts Institute of Technology +m4_dnl (See the file INSTALL for full details.) 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 -m4_dnl the Free Software Foundation; either version 2, or (at your option) +m4_dnl the Free Software Foundation; either version 3, or (at your option) m4_dnl any later version. m4_dnl m4_dnl This program is distributed in the hope that it will be useful, @@ -20,8 +20,7 @@ m4_dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the m4_dnl GNU General Public License for more details. m4_dnl m4_dnl You should have received a copy of the GNU General Public License -m4_dnl along with this program; if not, write to the Free Software Foundation, -m4_dnl Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +m4_dnl along with this program; if not, write to the Free Software Foundation. m4_include(hmacros.i4) @@ -61,12 +60,14 @@ const struct Terrno Terrnos[]= { { "ECONNRESET", ECONNRESET }, { "ECONNREFUSED", ECONNREFUSED }, { "EPIPE", EPIPE }, + { "ENOTSOCK", ENOTSOCK }, { 0, 0 } }; static vbuf vbw; int Hgettimeofday(struct timeval *tv, struct timezone *tz) { + Tensurerecordfile(); Tmust("gettimeofday","tz",!tz); *tv= currenttime; return 0; @@ -99,6 +100,10 @@ void Q$1(hm_args_massage($3,void)) { m4_define(`hm_arg_must', `') m4_define(`hm_arg_socktype', ` Tvbf($'`1==SOCK_STREAM ? " $'`1=SOCK_STREAM" : " $'`1=SOCK_DGRAM");') + m4_define(`hm_arg_addrfam', ` + Tvbf($'`1==AF_INET ? " $'`1=AF_INET" : + $'`1==AF_INET6 ? " $'`1=AF_INET6" : + " $'`1=AF_???");') m4_define(`hm_arg_ign', `') m4_define(`hm_arg_fd', `Tvbf(" $'`1=%d",$'`1);') m4_define(`hm_arg_fcntl_cmd_arg', ` @@ -112,7 +117,7 @@ void Q$1(hm_args_massage($3,void)) { m4_define(`hm_arg_addr_in', `Tvba(" $'`1="); Tvbaddr($'`1,$'`2);') m4_define(`hm_arg_bytes_in', `') m4_define(`hm_arg_bytes_out', `Tvbf(" $'`4=%lu",(unsigned long)$'`4);') - m4_define(`hm_arg_addr_out', `Tvbf(" *$'`2=%d",$'`2);') + m4_define(`hm_arg_addr_out', `') $3 hm_create_nothing @@ -128,11 +133,14 @@ m4_define(`hm_specsyscall', `') m4_include(`hsyscalls.i4') void Tvbaddr(const struct sockaddr *addr, int len) { - const struct sockaddr_in *ai= (const struct sockaddr_in*)addr; - - assert(len==sizeof(struct sockaddr_in)); - assert(ai->sin_family==AF_INET); - Tvbf("%s:%u",inet_ntoa(ai->sin_addr),htons(ai->sin_port)); + char buf[ADNS_ADDR2TEXT_BUFLEN]; + int err, port; + int sz= sizeof(buf); + + err= adns_addr2text(addr, 0, buf,&sz, &port); + assert(!err); + + Tvbf(strchr(buf, ':') ? "[%s]:%d" : "%s:%d", buf,port); } void Tvbbytes(const void *buf, int len) { @@ -152,6 +160,11 @@ void Tvbfdset(int max, const fd_set *fds) { int i; const char *comma= ""; + if (!fds) { + Tvba("null"); + return; + } + Tvba("["); for (i=0; isz; } else { osz= 0; } np= Hmalloc(nsz); - memcpy(np,op, osz>nsz ? nsz : osz); + if (osz) memcpy(np,op, osz>nsz ? nsz : osz); Hfree(op); return np; } -void Hexit(int rv) { +void Texit(int rv) { struct malloced *loopnode; Tshutdown(); @@ -307,9 +320,21 @@ void Hexit(int rv) { if (mallocedlist.head) { fprintf(stderr,"adns test harness: memory leaked:"); for (loopnode=mallocedlist.head; loopnode; loopnode=loopnode->next) - fprintf(stderr," %lu(%lu)",loopnode->count,(unsigned long)loopnode->sz); + fprintf(stderr," %lu",loopnode->count); putc('\n',stderr); if (ferror(stderr)) exit(-1); } exit(rv); } + +void Hexit(int rv) { + vb.used= 0; + Tvbf("exit %d", rv); + Q_vb(); + Texit(0); +} + +pid_t Hgetpid(void) { + return 2264; /* just some number */ +} +