X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgetdelim.c;h=12f2167c91fb2c15a55644386eb7529dd1f478e1;hb=b472b51e158594a679f8e49eea49cf14d1c3be9a;hp=0547c7fae2c8cd25b0b4005fb58f10c6c9d1ae1a;hpb=3156a948b9bb9d2f15d636c86864b3baa182de2a;p=gnulib.git diff --git a/lib/getdelim.c b/lib/getdelim.c index 0547c7fae..12f2167c9 100644 --- a/lib/getdelim.c +++ b/lib/getdelim.c @@ -1,6 +1,6 @@ /* getdelim.c --- Implementation of replacement getdelim function. - Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006, 2007 Free - Software Foundation, Inc. + Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -24,27 +24,25 @@ #include #include +#include #include #include -#ifndef SIZE_MAX -# define SIZE_MAX ((size_t) -1) -#endif #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif -#if !HAVE_FLOCKFILE + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +# define getc_maybe_unlocked(fp) getc(fp) +#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED # undef flockfile -# define flockfile(x) ((void) 0) -#endif -#if !HAVE_FUNLOCKFILE # undef funlockfile +# define flockfile(x) ((void) 0) # define funlockfile(x) ((void) 0) -#endif - -/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */ -#ifndef EOVERFLOW -# define EOVERFLOW E2BIG +# define getc_maybe_unlocked(fp) getc(fp) +#else +# define getc_maybe_unlocked(fp) getc_unlocked(fp) #endif /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and @@ -69,20 +67,22 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) if (*lineptr == NULL || *n == 0) { + char *new_lineptr; *n = 120; - *lineptr = (char *) realloc (*lineptr, *n); - if (*lineptr == NULL) + new_lineptr = (char *) realloc (*lineptr, *n); + if (new_lineptr == NULL) { result = -1; goto unlock_return; } + *lineptr = new_lineptr; } for (;;) { int i; - i = getc (fp); + i = getc_maybe_unlocked (fp); if (i == EOF) { result = -1;