about summary refs log tree commit diff
path: root/string/argz-stringify.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-01-26 01:34:13 +0000
committerUlrich Drepper <drepper@redhat.com>2000-01-26 01:34:13 +0000
commitf00ebd7f811ac03665c877846cad3750b0815122 (patch)
treeb11cd0722a54a37a5e2f645dd11fa6ebc365e7ca /string/argz-stringify.c
parent488fb3c7368721be174d78f45bb3f5d89940446e (diff)
downloadglibc-f00ebd7f811ac03665c877846cad3750b0815122.tar.gz
glibc-f00ebd7f811ac03665c877846cad3750b0815122.tar.xz
glibc-f00ebd7f811ac03665c877846cad3750b0815122.zip
Update.
2000-01-25  Ulrich Drepper  <drepper@cygnus.com>

	* string/argz-stringify.c: Handle case of missing \0 at the end of
	the given argz.
Diffstat (limited to 'string/argz-stringify.c')
-rw-r--r--string/argz-stringify.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/string/argz-stringify.c b/string/argz-stringify.c
index cd57b98d42..0bbc807953 100644
--- a/string/argz-stringify.c
+++ b/string/argz-stringify.c
@@ -1,5 +1,5 @@
 /* Routines for dealing with '\0' separated arg vectors.
-   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Miles Bader <miles@gnu.ai.mit.edu>
 
@@ -26,13 +26,16 @@
 void
 __argz_stringify (char *argz, size_t len, int sep)
 {
-  while (len > 0)
-    {
-      size_t part_len = strlen (argz);
-      argz += part_len;
-      len -= part_len + 1;
-      if (len > 0)
+  if (len > 0)
+    do
+      {
+	size_t part_len = strnlen (argz, len);
+	argz += part_len;
+	len -= part_len;
+	if (len == 0)
+	  break;
 	*argz++ = sep;
-    }
+      }
+    while (--len > 0);
 }
 weak_alias (__argz_stringify, argz_stringify)