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

Re: [PATCH] mingw: emulate write(2) that fails with a EPIPE

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 17, 2015, 09:39 UTC
Message-ID
<alpine.DEB.2.20.1512171037310.6483@virtualbox>
In-Reply-To
<xmqq7fkedyx7.fsf@gitster.mtv.corp.google.com>
Hi Junio,
On Wed, 16 Dec 2015, Junio C Hamano wrote:
Show 27 quoted lines
> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
> 
> >  int mingw_fflush(FILE *stream);
> >  #define fflush mingw_fflush
> >  
> > +static inline ssize_t mingw_write(int fd, const void *buf, size_t len)
> > +{
> > +	ssize_t result = write(fd, buf, len);
> > +
> > +	if (result < 0 && errno == EINVAL && buf) {
> > +		/* check if fd is a pipe */
> > +		HANDLE h = (HANDLE) _get_osfhandle(fd);
> > +		if (GetFileType(h) == FILE_TYPE_PIPE)
> > +			errno = EPIPE;
> > +		else
> > +			errno = EINVAL;
> > +	}
> > +
> > +	return result;
> > +}
> > +
> > +#define write mingw_write
> > +
> 
> It strikes me a bit strange to see this inlined compared to what
> appears in the context.  Shouldn't the implementation be done in
> compat/mingw.c like all others?

My intuition (which I honestly did not verify using performance tests) was that write() is called *much* more often than, say, open(), and therefore I wanted to interfere as little as possible with the performance penalty. Hence the choice of an inlined function as opposed to a non-optimizable increment of the call chain.

If it bothers you a lot I will set aside time to perform performance tests.

Ciao, Dscho

Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 13 in “mingw: emulate write(2) that fails with a EPIPE”
  1. mingw: emulate write(2) that fails with a EPIPEJohannes Schindelin, Dec 16, 2015
  2. Junio C HamanoDec 16, 2015
  3. Johannes SchindelinDec 17, 2015
  4. Junio C HamanoDec 17, 2015
  5. Johannes SchindelinDec 17, 2015
  6. Eric SunshineDec 16, 2015
  7. Junio C HamanoDec 16, 2015
  8. Johannes SchindelinDec 17, 2015
  9. mingw: emulate write(2) that fails with a EPIPEJohannes Schindelin, Dec 17, 2015
  10. Junio C HamanoDec 17, 2015
  11. Johannes SchindelinDec 18, 2015
  12. Johannes SixtDec 18, 2015
  13. Junio C HamanoDec 21, 2015

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.