* string/argz-stringify.c (__argz_stringify): Fix loop termination
authorRoland McGrath <roland@gnu.org>
Fri, 10 Mar 2000 08:24:48 +0000 (08:24 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 10 Mar 2000 08:24:48 +0000 (08:24 +0000)
conditions so as not to clobber the final '\0' when there is only one
element in the vector.

ChangeLog
string/argz-stringify.c

index 4e9b7ff..ef6d64c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2000-02-23  Roland McGrath  <roland@baalperazim.frob.com>
+
+       * string/argz-stringify.c (__argz_stringify): Fix loop termination
+       conditions so as not to clobber the final '\0' when there is only one
+       element in the vector.
+
 2000-03-09  Roland McGrath  <roland@baalperazim.frob.com>
 
        * io/sys/stat.h: Fix inverted sense of `defined __S_IFSOCK' test,
index 0bbc807..83ff119 100644 (file)
@@ -1,7 +1,7 @@
 /* Routines for dealing with '\0' separated arg vectors.
-   Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1995,96,97,2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Written by Miles Bader <miles@gnu.ai.mit.edu>
+   Written by Miles Bader <miles@gnu.org>
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public License as
@@ -27,15 +27,14 @@ void
 __argz_stringify (char *argz, size_t len, int sep)
 {
   if (len > 0)
-    do
+    while (1)
       {
        size_t part_len = strnlen (argz, len);
        argz += part_len;
        len -= part_len;
-       if (len == 0)
+       if (len-- <= 1)         /* includes final '\0' we want to stop at */
          break;
        *argz++ = sep;
       }
-    while (--len > 0);
 }
 weak_alias (__argz_stringify, argz_stringify)