I added ERROR_PIPE(errno) to ast <error.h> thanks On Thu, 31 May 2012 23:35:08 +0200 Roland Mainz wrote: > On Thu, May 31, 2012 at 11:26 PM, Roland Mainz <[email protected]> > wrote: > > If the assumption below is correct (that an application has to handle > > both EPIPE and ECONRESET the same way) then some code in ksh93, libast > > and some utilties need to be updated. For example this fragment in > > io.c ... > > -- snip -- > > else if(mode==SF_WRITE && errno==EPIPE) > > { > > sfpurge(iop); > > return(-1); > > } > > -- snip -- > > ... needs to be changed to: > > -- snip -- > > else if(mode==SF_WRITE && ((errno==EPIPE) || (errno==ECONNRESET))) > > { > > sfpurge(iop); > > return(-1); > > } > > -- snip -- > > > > IMO a macro which tests for both EPIPE and ECONNRESET in an libast > > header would be usefull... example: > > -- snip -- > > #define EPIPE_GONE(errn) (((errn)==EPIPE) || ((errn)==ECONNRESET)) > > -- snip --
> Correction... AFAIK the macro should look like this: > #ifdef ECONNRESET > #define EPIPE_GONE(errn) (((errn)==EPIPE) || ((errn)==ECONNRESET)) > #else > #define EPIPE_GONE(errn) ((errn)==EPIPE) > #endif > AFAIK at least the following locations need to be updated: > -- snip -- > src/cmd/builtin/od.c: if (sfsync(sfstdout) && errno != EPIPE) > src/cmd/builtin/tr.c: if (errno != EPIPE) > src/lib/libcmd/tee.c: if ((sfmove(sfstdin, sfstdout, SF_UNBOUND, -1) > < 0 || !sfeof(sfstdin)) && errno != EPIPE && errno != EINTR) > src/lib/libcmd/head.c: if (sfmove(fp, sfstdout, keep, delim) > < 0 && errno != EPIPE && errno != EINTR) > src/lib/libcmd/cat.c: if (n < 0 && errno != EPIPE && errno != EINTR) > -- snip -- > ---- > Bye, > Roland > -- > __ . . __ > (o.\ \/ /.o) [email protected] > \__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer > /O /==\ O\ TEL +49 641 3992797 > (;O/ \/ \O;) _______________________________________________ ast-developers mailing list [email protected] https://mailman.research.att.com/mailman/listinfo/ast-developers
