summaryrefslogtreecommitdiff
path: root/misc/team/patches/patch-ab
diff options
context:
space:
mode:
Diffstat (limited to 'misc/team/patches/patch-ab')
-rw-r--r--misc/team/patches/patch-ab406
1 files changed, 406 insertions, 0 deletions
diff --git a/misc/team/patches/patch-ab b/misc/team/patches/patch-ab
new file mode 100644
index 00000000000..d02d548725c
--- /dev/null
+++ b/misc/team/patches/patch-ab
@@ -0,0 +1,406 @@
+--- team.c-orig Fri May 22 15:35:25 1998
++++ team.c Fri May 22 15:35:59 1998
+@@ -58,8 +58,8 @@
+ upstream to it, which has much the same effect.
+ */
+
+-#define TeamLVOLSZ (1L<<10)
+-#define TeamHVOLSZ ((long unsigned) 3 * ((long unsigned) 1 << 30))
++#define TeamLVOLSZ (off_t unsigned)(1L<<10)
++#define TeamHVOLSZ ((off_t unsigned) 3 * ((off_t unsigned) 1 << 62))
+
+ #define TeamLBUFSZ (64) /* Low buffer size */
+ #define TeamDBUFSZ (60*512) /* Default buffer size */
+@@ -84,11 +84,23 @@
+ #include <sys/file.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
++#ifdef HAVE_WAIT_H
++#include <sys/wait.h>
++#endif
++
++#ifdef HAVE_PARAM_H
++#include <sys/param.h>
++#endif
++
+
+ #ifdef sun
+ # undef F_SETLKW
+ #endif
+
++#if (defined(BSD) && BSD >= 199306)
++# undef F_SETLKW
++#endif
++
+ #if (PCG)
+ # include "Extend.h"
+ # include "Here.h"
+@@ -99,6 +111,7 @@
+ # define fast register
+ # define global /* extern */
+ # define local static
++# define When case
+ # define when break; case
+ # define otherwise break; default
+ # define mode(which,name) typedef which name name; which name
+@@ -160,6 +173,7 @@
+
+ local bool verbose = false;
+ local bool report = true;
++local bool guyhaderror = false;
+
+ extern int errno;
+ local time_t origin;
+@@ -190,7 +204,7 @@
+ {
+ int fd;
+ short status;
+- long unsigned size;
++ off_t unsigned size;
+ };
+
+ local Fd FdIn,FdOut;
+@@ -199,7 +213,7 @@
+ (
+ fast Fd *fd
+ _ int ffd
+-_ long unsigned size
++_ off_t unsigned size
+ )
+ {
+ fd->status = (ffd >= 0) ? FdOPEN : FdCLOSED;
+@@ -252,12 +266,12 @@
+ to->fd = from->fd;
+ }
+
+-local long unsigned FdRetry on((fd,which,done,space)) is
++local off_t unsigned FdRetry on((fd,which,done,space)) is
+ (
+ fast Fd *fd
+ _ char *which
+-_ long unsigned done
+-_ long unsigned space
++_ off_t unsigned done
++_ off_t unsigned space
+ )
+ {
+ int tty;
+@@ -286,16 +300,21 @@
+ do
+ {
+ #if (defined i386 || defined sun)
++# if !(defined(BSD) && (BSD >= 199306))
+ extern char *(sys_errlist[]);
++# endif
++# if (defined(BSD) && (BSD >= 199306)) && __STDC__
++ const
++# endif
+ char *errmsg = sys_errlist[errno];
+ #else
+ char errmsg[32];
+ (void) sprintf(errmsg,"Error %d",errno);
+ #endif
+ if (errno)
+- mesg("'%s' on %s after %luk. Continue [cyn] ? ",errmsg,which,done>>10);
++ mesg("'%s' on %s after %quk. Continue [cyn] ? ",errmsg,which,done>>10);
+ else
+- mesg("EOF on %s after %luk. Continue [cyn] ? ",which,done>>10);
++ mesg("EOF on %s after %quk. Continue [cyn] ? ",which,done>>10);
+
+ read(tty,reply,sizeof reply);
+ }
+@@ -320,7 +339,7 @@
+ local unsigned FdCanDo on((remaining,available)) is
+ (
+ fast address remaining
+-_ fast long unsigned available
++_ fast off_t unsigned available
+ )
+ {
+ return (remaining < available)
+@@ -332,16 +351,16 @@
+ fast Fd *fd
+ _ pointer buffer
+ _ fast address todo
+-_ long unsigned done
++_ off_t unsigned done
+ )
+ {
+- fast long unsigned space;
++ fast off_t unsigned space;
+ fast int bytesRead;
+ fast address justDone;
+
+ switch (fd->status)
+ {
+- when FdEOF: return 0;
++ When FdEOF: return 0;
+ when FdERROR: return -1;
+ when FdCLOSED: return -1;
+
+@@ -373,16 +392,16 @@
+ fast Fd *fd
+ _ pointer buffer
+ _ fast address todo
+-_ long unsigned done
++_ off_t unsigned done
+ )
+ {
+- fast long unsigned space;
++ fast off_t unsigned space;
+ fast int bytesWritten;
+ fast address justDone;
+
+ switch (fd->status)
+ {
+- when FdEOF: return 0;
++ When FdEOF: return 0;
+ when FdERROR: return -1;
+ when FdCLOSED: return -1;
+
+@@ -453,7 +472,7 @@
+ {
+ Token token;
+ short status;
+- long unsigned done;
++ off_t unsigned done;
+ };
+
+ local bool StreamSend on((fd,token,status,done)) is
+@@ -461,7 +480,7 @@
+ fast Fd *fd
+ _ Token token
+ _ short status
+-_ long unsigned done
++_ off_t unsigned done
+ )
+ {
+ fast int n;
+@@ -483,7 +502,7 @@
+ fast Fd *fd
+ _ Token *tokenp
+ _ short *statusp
+-_ long unsigned *donep
++_ off_t unsigned *donep
+ )
+ {
+ fast int n;
+@@ -536,7 +555,7 @@
+ #define GuyRECEIVE(guy,tokenp,statusp,donep) \
+ StreamReceive(&guy->upStream,tokenp,statusp,donep)
+
+-local bool GuyStop of((Guy *,char *,long unsigned));
++local bool GuyStop of((Guy *,char *,off_t unsigned));
+
+ local bool GuyStart on((guy,bufsize)) is
+ (
+@@ -547,7 +566,7 @@
+ fast char *buffer;
+ Token token;
+ short status;
+- long unsigned done;
++ off_t unsigned done;
+ bool received;
+ static int bytesRead,bytesWritten;
+
+@@ -564,7 +583,7 @@
+ while ((received = GuyRECEIVE(guy,&token,&status,&done)) && token != TokenSTOP)
+ switch (token)
+ {
+- when TokenREAD:
++ When TokenREAD:
+ FdIn.status = status;
+
+ Mesg(("GuyStart reading %d chars\n",bufsize));
+@@ -577,7 +596,7 @@
+ done += bytesRead;
+
+ if (verbose)
+- mesg("%luk read \r",done>>10);
++ mesg("%quk read \r",done>>10);
+
+ if (!GuySEND(guy,TokenREAD,FdIn.status,done))
+ GuyStop(guy,"guy cannot send READ",done);
+@@ -595,7 +614,7 @@
+ done += bytesWritten;
+
+ if (verbose)
+- mesg("%luk written\r",done>>10);
++ mesg("%quk written\r",done>>10);
+
+ if (!GuySEND(guy,TokenWRITE,FdOut.status,done))
+ GuyStop(guy,"guy cannot send WRITE",done);
+@@ -619,7 +638,7 @@
+ (
+ fast Guy *guy
+ _ char *errormsg
+-_ long unsigned done
++_ off_t unsigned done
+ )
+ {
+ Mesg(("GuyStop guy %#o\n",guy));
+@@ -627,8 +646,8 @@
+ if (done)
+ {
+ if (report)
+- mesg("%lu kilobytes, %lu seconds\r\n",
+- done>>10,(long unsigned) (time((time_t *) 0)-origin));
++ mesg("%qu kilobytes, %lu seconds\r\n",
++ done>>10,(off_t unsigned) (time((time_t *) 0)-origin));
+ else if (verbose)
+ mesg("\n");
+ }
+@@ -637,7 +656,7 @@
+ {
+ mesg("team: guy pid %u: %s\n",guy->pid,errormsg);
+ call GuySEND(guy,TokenABORT,FdERROR,0L);
+- exit(1);
++ exit(2);
+ /*NOTREACHED*/
+ }
+
+@@ -697,8 +716,8 @@
+ (
+ fast Team *team
+ _ address bufsize
+-_ long unsigned isize
+-_ long unsigned osize
++_ off_t unsigned isize
++_ off_t unsigned osize
+ )
+ {
+ /*
+@@ -797,6 +816,9 @@
+ {
+ pid = getpid();
+
++ /* Set SIGPIPE handling back to the default in the guys */
++ signal(SIGPIPE, SIG_DFL);
++
+ if (!FdClose(&last_downstream))
+ perror("cannot close inherited first link");
+
+@@ -816,13 +838,13 @@
+ }
+ }
+
+- if (!StreamSend(&last_downstream,TokenREAD,FdOPEN,0L))
++ if (!StreamSend(&last_downstream,TokenREAD,FdOPEN,0L) && errno != EPIPE)
+ {
+ perror("cannot send first READ token");
+ return false;
+ }
+
+- if (!StreamSend(&last_downstream,TokenWRITE,FdOPEN,0L))
++ if (!StreamSend(&last_downstream,TokenWRITE,FdOPEN,0L) && errno != EPIPE)
+ {
+ perror("cannot send first WRITE token");
+ return false;
+@@ -864,6 +886,14 @@
+
+ --team->active;
+
++#ifdef WIFEXITED
++ /* If a guy had an error, its exit status is 2. Also catch a killed guy */
++ if ((WIFEXITED(status) && WEXITSTATUS(status) == 2) ||
++ (WIFSIGNALED(status) && WTERMSIG(status) != SIGPIPE)) {
++ guyhaderror = true;
++ }
++#endif
++
+ if (status != 0 && team->active != 0)
+ return false;
+ }
+@@ -914,8 +944,8 @@
+ syntax: team [-[vr]] [-iI[bkm] [-oO[bkm] [N[bkm] [P]]\n\
+ copies standard input to output\n\
+ -v gives ongoing report, -r final report\n\
+- I is input volume size (default %lum)\n\
+- O is output volume size (default %lum)\n\
++ I is input volume size (default %qum)\n\
++ O is output volume size (default %qum)\n\
+ N is buffer size (default %luk)\n\
+ P is number of processes (default %u)\n\
+ (postfix b means *512, k means *1KB, m means *1MB)\n\
+@@ -927,19 +957,19 @@
+ /*NOTREACHED*/
+ }
+
+-local long unsigned atos on((s)) is
++local off_t unsigned atos on((s)) is
+ (
+ fast char *s
+ )
+ {
+- fast unsigned long l;
++ fast off_t unsigned l;
+
+ for (
+ s, l = 0L;
+ *s >= '0' && *s <= '9';
+ s++
+ )
+- l = l*10L + (long unsigned) (*s-'0');
++ l = l*10L + (off_t unsigned) (*s-'0');
+
+ if (*s == 'b') l *= (1L<<9);
+ if (*s == 'k') l *= (1L<<10);
+@@ -958,8 +988,8 @@
+ short unsigned teamsize;
+
+ address bufsize;
+- long unsigned isize;
+- long unsigned osize;
++ off_t unsigned isize;
++ off_t unsigned osize;
+ int opt;
+
+ teamsize = TeamDTEAMSZ;
+@@ -971,11 +1001,11 @@
+ while ((opt = getopt(argc,argv,"vri:o:")) != -1)
+ switch (opt)
+ {
+- when 'i':
++ When 'i':
+ isize = atos(optarg);
+ if (isize < TeamLVOLSZ || isize > TeamHVOLSZ)
+ {
+- fprintf(stderr,"team: invalid input volume size %lu\n",isize);
++ fprintf(stderr,"team: invalid input volume size %qu\n",isize);
+ usage();
+ }
+
+@@ -983,7 +1013,7 @@
+ osize = atos(optarg);
+ if (osize < TeamLVOLSZ || osize > TeamHVOLSZ)
+ {
+- fprintf(stderr,"team: invalid output volume size %lu\n",osize);
++ fprintf(stderr,"team: invalid output volume size %qu\n",osize);
+ usage();
+ }
+
+@@ -1032,6 +1062,11 @@
+
+ origin = time((time_t *) 0);
+
++ /*
++ * Ignore SIGPIPE in the parent as it affects the exit status reporting.
++ */
++ signal(SIGPIPE, SIG_IGN);
++
+ if (!TeamStart(&team,bufsize,isize,osize))
+ {
+ mesg("team: cannot start the team\n");
+@@ -1052,6 +1087,12 @@
+ if (!TeamClose(&team))
+ {
+ mesg("team: cannot close the team\n");
++ return 1;
++ }
++
++ if (guyhaderror)
++ {
++ mesg("team: guy had error\n");
+ return 1;
+ }
+