On Thu, 10 Aug 2017, Jeff King wrote: > On Thu, Aug 10, 2017 at 09:58:37PM +0200, René Scharfe wrote: > > > So the function is returning -1 and leaving ENOMEM in errno on > > > Yaroslav's system. > > > I wonder if we are truly hitting out of memory, though. The same > > > symptom could bee seen if getdelim() does not touch errno when it > > > returns -1, but some other system call earlier set it to ENOMEM, > > > for example. > > That can happen when the end of a file is reached; getdelim() returns > > -1 and leaves errno unchanged. So we need to set errno to 0 just > > before that call. > Good catch. That's a bug in my original conversoin of > strbuf_getwholeline(). I think this did it! at least on this simple test... yet to test a bit more in those scenarios we ran into it before while testing git-annex. commit 36ef5e3ad2c187d3be664c33dbc8c06e59bceaf4 (HEAD -> bf-seterrno0) Author: Yaroslav O. Halchenko <yhalchen@xxxxxxxxxxxxxxxxxxxxxxx> Date: Thu Aug 10 20:26:47 2017 +0000 BF: set errno to 0 before getdelim call to get unbiased assesment later diff --git a/strbuf.c b/strbuf.c index 89d22e3b0..323c49ceb 100644 --- a/strbuf.c +++ b/strbuf.c @@ -476,6 +476,7 @@ int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term) /* Translate slopbuf to NULL, as we cannot call realloc on it */ if (!sb->alloc) sb->buf = NULL; + errno = 0; r = getdelim(&sb->buf, &sb->alloc, term, fp); if (r > 0) { -- Yaroslav O. Halchenko Center for Open Neuroscience http://centerforopenneuroscience.org Dartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755 Phone: +1 (603) 646-9834 Fax: +1 (603) 646-1419 WWW: http://www.linkedin.com/in/yarik