summaryrefslogtreecommitdiff
path: root/gl/getdelim.c
diff options
context:
space:
mode:
authorSimon Josefsson <simon@josefsson.org>2010-01-26 15:39:52 +0100
committerSimon Josefsson <simon@josefsson.org>2010-01-26 15:39:52 +0100
commitd8d94c27e1c30a7a09fbfa77bdfd995e2307a7f6 (patch)
tree0b1ee6da324163860b2a2ea7a23c8946a59031ac /gl/getdelim.c
parentba4d206c53fdd9f6c1b19c2ae571054b5765c5f2 (diff)
downloadgnutls-d8d94c27e1c30a7a09fbfa77bdfd995e2307a7f6.tar.gz
Update gnulib files.
Diffstat (limited to 'gl/getdelim.c')
-rw-r--r--gl/getdelim.c82
1 files changed, 43 insertions, 39 deletions
diff --git a/gl/getdelim.c b/gl/getdelim.c
index b74e5b5350..66d07b9ae0 100644
--- a/gl/getdelim.c
+++ b/gl/getdelim.c
@@ -1,6 +1,6 @@
/* getdelim.c --- Implementation of replacement getdelim function.
- Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006, 2007,
- 2008, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1996, 1997, 1998, 2001, 2003, 2005, 2006, 2007, 2008,
+ 2009, 2010 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
@@ -21,6 +21,10 @@
#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 <stdio.h>
#include <limits.h>
@@ -34,15 +38,15 @@
#if USE_UNLOCKED_IO
# include "unlocked-io.h"
-# define getc_maybe_unlocked(fp) getc(fp)
+# define getc_maybe_unlocked(fp) getc(fp)
#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED
# undef flockfile
# undef funlockfile
# define flockfile(x) ((void) 0)
# define funlockfile(x) ((void) 0)
-# define getc_maybe_unlocked(fp) getc(fp)
+# define getc_maybe_unlocked(fp) getc(fp)
#else
-# define getc_maybe_unlocked(fp) getc_unlocked(fp)
+# define getc_maybe_unlocked(fp) getc_unlocked(fp)
#endif
/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and
@@ -71,10 +75,10 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
*n = 120;
new_lineptr = (char *) realloc (*lineptr, *n);
if (new_lineptr == NULL)
- {
- result = -1;
- goto unlock_return;
- }
+ {
+ result = -1;
+ goto unlock_return;
+ }
*lineptr = new_lineptr;
}
@@ -84,44 +88,44 @@ getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
i = getc_maybe_unlocked (fp);
if (i == EOF)
- {
- result = -1;
- break;
- }
+ {
+ result = -1;
+ break;
+ }
/* Make enough space for len+1 (for final NUL) bytes. */
if (cur_len + 1 >= *n)
- {
- size_t needed_max =
- SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
- size_t needed = 2 * *n + 1; /* Be generous. */
- char *new_lineptr;
-
- if (needed_max < needed)
- needed = needed_max;
- if (cur_len + 1 >= needed)
- {
- result = -1;
- errno = EOVERFLOW;
- goto unlock_return;
- }
-
- new_lineptr = (char *) realloc (*lineptr, needed);
- if (new_lineptr == NULL)
- {
- result = -1;
- goto unlock_return;
- }
-
- *lineptr = new_lineptr;
- *n = needed;
- }
+ {
+ size_t needed_max =
+ SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX;
+ size_t needed = 2 * *n + 1; /* Be generous. */
+ char *new_lineptr;
+
+ if (needed_max < needed)
+ needed = needed_max;
+ if (cur_len + 1 >= needed)
+ {
+ result = -1;
+ errno = EOVERFLOW;
+ goto unlock_return;
+ }
+
+ new_lineptr = (char *) realloc (*lineptr, needed);
+ if (new_lineptr == NULL)
+ {
+ result = -1;
+ goto unlock_return;
+ }
+
+ *lineptr = new_lineptr;
+ *n = needed;
+ }
(*lineptr)[cur_len] = i;
cur_len++;
if (i == delimiter)
- break;
+ break;
}
(*lineptr)[cur_len] = '\0';
result = cur_len ? cur_len : result;