git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] upload-pack: use buffered I/O to talk to rev-list

From
Chris Torek <chris.torek@gmail.com>
Date
Aug 3, 2020, 15:54 UTC
Message-ID
<CAPx1Gvd7rULr-Z-mLDc2FCxyoepdMhK2t=j23-mr_6pvvHWynw@mail.gmail.com>
In-Reply-To
<87c4ab84-8db5-bd62-af66-fd88f788827b@web.de>
On Mon, Aug 3, 2020 at 7:00 AM René Scharfe <l.s.r@web.de> wrote:
Show 13 quoted lines
>
> Am 02.08.20 um 18:03 schrieb Chris Torek:
> > The fclose() call doesn't necessarily check ferror().  (The
> > FreeBSD stdio in particular definitely does not.)
>
> Thanks, didn't know that.  That's awful.  So the sentence "The fclose()
> and fdclose() functions may also fail and set errno for any of the
> errors specified for fflush(3)." from the FreeBSD manpage for fclose(3)
> actually means that while it will flush, it is free to ignore any
> flush errors?
>
> Or do you mean that fflush() can succeed on a stream that has its error
> indicator set?

The latter. You have to get particularly (un?)lucky here: say the buffer size is n, and the *last* write operation (fprintf, whatever) filled the buffer mod n and called fflush internally and that failed. Then at the time you call fclose() the buffer is empty. There is nothing to flush, so we just get the result of the system's close() call.

> In any case, we'd then better add a function that flushes the buffer,
> closes the stream and reports errors in its return code and errno --
> i.e. a sane fclose().

Unfortunately the global-variable nature of errno means it may be clobbered by the time you inspect it here, again with the same sort of issue above. It might be nice if C's error conventions were more like Go's, and stdio retained an earlier error, but this stuff all dates back to 16-bit "int" and 512-byte buffers and no room for nice stuff. :-)

Chris
Previous: René ScharfeNext: Johannes Sixt
Message 4 of 9 in “upload-pack: use buffered I/O to talk to rev-list”
  1. upload-pack: use buffered I/O to talk to rev-listRené Scharfe, Aug 2, 2020
  2. Chris TorekAug 2, 2020
  3. René ScharfeAug 3, 2020
  4. Chris TorekAug 3, 2020
  5. Johannes SixtAug 3, 2020
  6. upload-pack: use buffered I/O to talk to rev-listRené Scharfe, Aug 12, 2020
  7. Christian CouderAug 13, 2020
  8. René ScharfeAug 13, 2020
  9. Jeff KingAug 13, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.