X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fgetdelim.c;h=352b5974baf385f515d2232629b7b5ce8657b301;hb=d68417c03e69fde605af699ba9a9671c663d8baf;hp=e0b8a708ba7d4bb8b66e1f7629bc852e77451f19;hpb=7042775894700f8be0e6bc2a5ff3c49fc77296bc;p=pspp diff --git a/lib/getdelim.c b/lib/getdelim.c index e0b8a708ba..352b5974ba 100644 --- a/lib/getdelim.c +++ b/lib/getdelim.c @@ -1,5 +1,5 @@ /* getdelim.c --- Implementation of replacement getdelim function. - Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006 Free + Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or @@ -21,7 +21,7 @@ #include -#include "getdelim.h" +#include #include #include @@ -42,6 +42,11 @@ # define funlockfile(x) ((void) 0) #endif +/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */ +#ifndef EOVERFLOW +# define EOVERFLOW E2BIG +#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 @@ -62,10 +67,10 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) flockfile (fp); - if (*lineptr == NULL || *n == 0) + if (*n == 0) { *n = 120; - *lineptr = (char *) malloc (*n); + *lineptr = (char *) realloc (*lineptr, 120); if (*lineptr == NULL) { result = -1; @@ -97,6 +102,7 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) if (cur_len + 1 >= needed) { result = -1; + errno = EOVERFLOW; goto unlock_return; }