tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Incompat change (6 weeks ago) in stdio breaks formail (from procmail)
Date: Sun, 19 May 2013 02:56:06 +0000
From: David Holland <dholland-tech%NetBSD.org@localhost>
Message-ID: <20130519025606.GA3700%netbsd.org@localhost>
| I'd vote for explicitly testing for ESPIPE; it's the Right Thing (tm).
When I started sending the previous message, that was how I had expected
it to end - I even had a patch prepared which does that, which I had
intended including. By the time I finished the message, I had pretty
much convinced myself that the simplicity of just ignoring the error
(and leaving the code the way it has been for a long long time) was
better, so, I didn't bother including the patch in the message.
But, here it is, in case others decide this is the better way. I think
the problem needs to be fixed, one way or the other - I am not a developer,
so I don't get a vote, and either change works OK for me.
kre
Index: stdio.c
===================================================================
RCS file: /cvsroot/NetBSD/src/lib/libc/stdio/stdio.c,v
retrieving revision 1.21
diff -u -r1.21 stdio.c
--- stdio.c 27 Mar 2012 15:05:42 -0000 1.21
+++ stdio.c 19 May 2013 01:40:55 -0000
@@ -86,8 +86,12 @@
_DIAGASSERT(buf != NULL);
if (fp->_flags & __SAPP)
- if (lseek(__sfileno(fp), (off_t)0, SEEK_END) == (off_t)-1)
- return -1;
+ if (lseek(__sfileno(fp), (off_t)0, SEEK_END) == (off_t)-1) {
+ if (errno == ESPIPE) /* if unseekable, OK, */
+ fp->_flags &= ~__SAPP; /* all writes append. */
+ else
+ return -1;
+ }
fp->_flags &= ~__SOFF; /* in case FAPPEND mode is set */
return write(__sfileno(fp), buf, n);
}
Home |
Main Index |
Thread Index |
Old Index