chiark / gitweb /
FOUND on davenant
[adns.git] / regress / hplayback.c.m4
index 01e60db9373cd42550a3648a4c73baad4e494cb8..868aa527ddc8d515702bec939236095247a8e40e 100644 (file)
@@ -2,12 +2,11 @@ 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
-m4_dnl    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
-m4_dnl
-m4_dnl  It is part of adns, which is
-m4_dnl    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
-m4_dnl    Copyright (C) 1999 Tony Finch <dot@dotat.at>
+m4_dnl  This file is part of adns, which is
+m4_dnl    Copyright (C) 1997-2000,2003,2006  Ian Jackson
+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
@@ -27,13 +26,17 @@ m4_include(hmacros.i4)
 
 #include <assert.h>
 #include <string.h>
-#include <fcntl.h>
 #include <errno.h>
 #include <stdlib.h>
 
+#include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <sys/time.h>
+
+#include <unistd.h>
+#include <fcntl.h>
 
 #include "harness.h"
 
@@ -65,7 +68,7 @@ static void Pcheckinput(void) {
   if (feof(Tinputfile)) Psyntax("eof at syscall reply");
 }
 
-static void Tensureinputfile(void) {
+void Tensurerecordfile(void) {
   const char *fdstr;
   int fd;
   int chars;
@@ -150,9 +153,11 @@ 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 (;;) {
     r= strtoul(vb2.buf+vb2.used,&ep,10);
     if (r>=max) Psyntax("fd set member > max");
+    if (ep == (char*)vb2.buf+vb2.used) Psyntax("empty entry in fd set");
     FD_SET(r,set);
     vb2.used= ep - (char*)vb2.buf;
     c= vb2.buf[vb2.used++];
@@ -253,8 +258,9 @@ static int Pbytes(byte *buf, int maxlen) {
   
 void Q_vb(void) {
   int r;
+  const char *nl;
 
-  Tensureinputfile();
+  Tensurerecordfile();
   if (!adns__vbuf_ensure(&vb2,vb.used+2)) Tnomem();
   r= fread(vb2.buf,1,vb.used+2,Tinputfile);
   if (feof(Tinputfile)) {
@@ -272,6 +278,9 @@ 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);
 }
 
 m4_define(`hm_syscall', `
@@ -300,7 +309,7 @@ int H$1(hm_args_massage($3,void)) {
  fgets(vb2.buf,vb2.avail,Tinputfile); Pcheckinput();
 
  Tensurereportfile();
- fprintf(Treportfile,"syscallr %s",vb2.buf);
+ fprintf(Treportfile,"%s",vb2.buf);
  amtread= strlen(vb2.buf);
  if (amtread<=0 || vb2.buf[--amtread]!=hm_squote\nhm_squote)
   Psyntax("badly formed line");
@@ -364,4 +373,6 @@ int H$1(hm_args_massage($3,void)) {
 }
 ')
 
+m4_define(`hm_specsyscall', `')
+
 m4_include(`hsyscalls.i4')