diff options
Diffstat (limited to 'misc/team/patches/patch-ab')
-rw-r--r-- | misc/team/patches/patch-ab | 406 |
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; + } + |