[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CVS gsasl/lib/gl
From: |
gsasl-commit |
Subject: |
CVS gsasl/lib/gl |
Date: |
Sat, 01 Jan 2005 19:01:17 +0100 |
Update of /home/cvs/gsasl/lib/gl
In directory dopio:/tmp/cvs-serv21933/gl
Modified Files:
lgetdelim.c
Log Message:
Update.
--- /home/cvs/gsasl/lib/gl/lgetdelim.c 2005/01/01 16:59:28 1.2
+++ /home/cvs/gsasl/lib/gl/lgetdelim.c 2005/01/01 18:01:17 1.3
@@ -36,9 +36,7 @@
ssize_t
getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp)
{
- int result;
ssize_t cur_len = 0;
- ssize_t len;
if (lineptr == NULL || n == NULL)
return -1;
@@ -53,7 +51,6 @@
for (;;)
{
- size_t needed;
char *t;
int i;
@@ -61,22 +58,28 @@
if (i == EOF)
break;
- /* Make enough space for len+1 (for final NUL) bytes. */
- needed = cur_len + 1;
- if (needed > *n)
+ /* Make enough space for curlen+1 bytes plus last NUL. */
+ if (cur_len + 1 >= *n)
{
+ size_t needed = 2 * (cur_len + 1) + 1; /* Be generous. */
char *new_lineptr;
- if (needed < 2 * *n)
- needed = 2 * *n; /* Be generous. */
- new_lineptr = (char *) realloc (*lineptr, needed);
+ if (needed < cur_len)
+ return -1; /* overflow */
+
+ new_lineptr = realloc (*lineptr, needed);
if (new_lineptr == NULL)
return -1;
+
*lineptr = new_lineptr;
*n = needed;
}
- (*lineptr)[cur_len] = c;
+
+ (*lineptr)[cur_len] = i;
cur_len++;
+
+ if (i == delimiter)
+ break;
}
(*lineptr)[cur_len] = '\0';