]> sourceware.org Git - newlib-cygwin.git/commitdiff
* libc/argz/argz_add_sep.c (argz_add_sep): Handle empty string
authorCorinna Vinschen <corinna@vinschen.de>
Tue, 29 May 2007 07:49:14 +0000 (07:49 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Tue, 29 May 2007 07:49:14 +0000 (07:49 +0000)
argument.
* libc/argz/argz_append.c (argz_append): Handle empty buf argument.
* libc/argz/argz_create_sep.c (argz_create_sep): Return (NULL, 0)
on empty input strings.
* libc/argz/argz_extract.c (argz_extract): Check argz_len before
looping through argz.
* libc/argz/argz_stringify.c (argz_stringify): Ditto.

newlib/ChangeLog
newlib/libc/argz/argz_add_sep.c
newlib/libc/argz/argz_append.c
newlib/libc/argz/argz_create_sep.c
newlib/libc/argz/argz_extract.c
newlib/libc/argz/argz_stringify.c

index 6d79bcbc043073245068e3af9f54e86eb1ab780c..65f1f12f527b242884a74d0af8a2dd04687335bc 100644 (file)
@@ -1,3 +1,14 @@
+2007-05-29  Corinna Vinschen  <corinna@vinschen.de>
+
+       * libc/argz/argz_add_sep.c (argz_add_sep): Handle empty string
+       argument.
+       * libc/argz/argz_append.c (argz_append): Handle empty buf argument.
+       * libc/argz/argz_create_sep.c (argz_create_sep): Return (NULL, 0)
+       on empty input strings.
+       * libc/argz/argz_extract.c (argz_extract): Check argz_len before
+       looping through argz.
+       * libc/argz/argz_stringify.c (argz_stringify): Ditto.
+
 2007-05-27  Brian Dessent  <brian@dessent.net>
 
        * libc/stdio/vfprintf.c (_VFPRINTF_R): Populate 'ox' when
index 5a56ec93105e41b13c7c31eec5dc6b822c6ab776..7dfbb4d6e9f351589435b76bd75e3f902bf681da 100644 (file)
@@ -23,11 +23,14 @@ _DEFUN (argz_add_sep, (argz, argz_len, str, sep),
 
   argz_create_sep (str, sep, &str_argz, &str_argz_len);
 
-  *argz_len += str_argz_len;
+  if (str_argz_len)
+    {
+      *argz_len += str_argz_len;
 
-  if(!(*argz = (char *)realloc(*argz, *argz_len)))
-    return ENOMEM;
+      if(!(*argz = (char *)realloc(*argz, *argz_len)))
+       return ENOMEM;
 
-  memcpy(*argz + last, str_argz, str_argz_len);
+      memcpy(*argz + last, str_argz, str_argz_len);
+    }
   return 0;
 }
index 7519e160885337456e78400e11842dbe4c870142..75d5c9315508ccaa5dd27f1e470acb433d347e46 100644 (file)
@@ -16,13 +16,16 @@ _DEFUN (argz_append, (argz, argz_len, buf, buf_len),
        const char *buf _AND
        size_t buf_len)
 {
-  size_t last = *argz_len;
+  if (buf_len)
+    {
+      size_t last = *argz_len;
 
-  *argz_len += buf_len;
+      *argz_len += buf_len;
 
-  if(!(*argz = (char *)realloc(*argz, *argz_len)))
-    return ENOMEM;
+      if(!(*argz = (char *)realloc(*argz, *argz_len)))
+       return ENOMEM;
 
-  memcpy(*argz + last, buf, buf_len);
+      memcpy(*argz + last, buf, buf_len);
+    }
   return 0;
 }
index bf02b492a40a65a4e50854532edae32f39465f01..cf27c9284fbcb2a4ab318fe90f38a22ea36031db 100644 (file)
@@ -25,13 +25,20 @@ _DEFUN (argz_create_sep, (string, sep, argz, argz_len),
   char *token = 0;
   char *iter = 0;
 
+  *argz_len = 0;
+
+  if (!string || string[0] == '\0')
+    {
+      *argz= NULL;
+      return 0;
+    }
+
   delim[0] = sep;
   delim[1] = '\0';
 
   running = strdup(string);
   old_running = running;
 
-  *argz_len = 0;
   while ((token = strsep(&running, delim)))
     {
       len = strlen(token);
index 289c6e1001f15a610592a9e30f1ce90a4027ff0d..56c6046847d8e209e9747e6b530fcdeb11e6dd8f 100644 (file)
@@ -17,14 +17,15 @@ _DEFUN (argz_extract, (argz, argz_len, argv),
   int j = 0;
   const size_t count = argz_count(argz, argz_len);
 
-  for (i = argz_len - 2; i > 0; i--)
-    {
-      if (argz[i] == '\0')
-        {
-          j++;
-          argv[count - j] = &argz[i + 1];
-        }
-    }
+  if (argz_len > 1)
+    for (i = argz_len - 2; i > 0; i--)
+      {
+       if (argz[i] == '\0')
+         {
+           j++;
+           argv[count - j] = &argz[i + 1];
+         }
+      }
   argv[0] = &argz[0];
   argv[count] = NULL;
 }
index 6ff5dd0013c1dbda229f33c91976b8b69db61731..febf8b4f9cbfa32af6974e9896a1afe578e675e2 100644 (file)
@@ -16,9 +16,10 @@ _DEFUN (argz_stringify, (argz, argz_len, sep),
   size_t i;
 
   /* len includes trailing \0, which we don't want to replace. */
-  for (i = 0; i < argz_len - 1; i++)
-    {
-      if (argz[i] == '\0')
-        argz[i] = sep;
-    }
+  if (argz_len > 1)
+    for (i = 0; i < argz_len - 1; i++)
+      {
+       if (argz[i] == '\0')
+         argz[i] = sep;
+      }
 }
This page took 0.054963 seconds and 5 git commands to generate.