gsasl-commit
[Top][All Lists]
Advanced

[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';
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]