diff options
Diffstat (limited to 'lib/getdelim.c')
-rw-r--r-- | lib/getdelim.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/getdelim.c b/lib/getdelim.c index 6c2dd3d..175d5c7 100644 --- a/lib/getdelim.c +++ b/lib/getdelim.c @@ -1,7 +1,5 @@ -/* -*- buffer-read-only: t -*- vi: set ro: */ -/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* getdelim.c --- Implementation of replacement getdelim function. - Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2012 Free Software + Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2016 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or @@ -19,12 +17,12 @@ /* Ported from glibc by Simon Josefsson. */ -#include <config.h> - /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ #define _GL_ARG_NONNULL(params) +#include <config.h> + #include <stdio.h> #include <limits.h> @@ -49,6 +47,16 @@ # define getc_maybe_unlocked(fp) getc_unlocked(fp) #endif +static void +alloc_failed (void) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* Avoid errno problem without using the realloc module; see: + http://lists.gnu.org/archive/html/bug-gnulib/2016-08/msg00025.html */ + errno = ENOMEM; +#endif +} + /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'ed as @@ -76,6 +84,7 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) new_lineptr = (char *) realloc (*lineptr, *n); if (new_lineptr == NULL) { + alloc_failed (); result = -1; goto unlock_return; } @@ -113,6 +122,7 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) new_lineptr = (char *) realloc (*lineptr, needed); if (new_lineptr == NULL) { + alloc_failed (); result = -1; goto unlock_return; } |