A Texinfo contributor made use of two argz functions that are not in the implementation in gnulib, argz_add and argz_count. As a result, of course compilation failed on non-glibc systems. They seemed trivial to implement, so here is a patch for argz.c and argz_.h. How does it look?
Actually, the whole argz_.h vs argz.in.h thing is a bit confusing. It seems like gnulib uses argz.in.h, but the libtool sources use argz_.h. I guess I should change the name when syncing from libtool to gnulib? Or maybe change the name in libtool? Thanks, Karl P.S. I see in passing there are more argz functions not present, but since I didn't need them, I didn't do anything about them. The code from libc/string/argz* could perhaps be used if the need ever arises. --- a/lib/argz.c +++ b/lib/argz.c @@ -1,6 +1,6 @@ /* argz.c -- argz implementation for non-glibc systems - Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Gary V. Vaughan, 2004 NOTE: The canonical source of this file is maintained with the @@ -76,6 +76,14 @@ argz_append (char **pargz, size_t *pargz_len, const char *buf, size_t buf_len) } +/* Add a string to the argz vector. */ +error_t +argz_add (char **pargz, size_t *pargz_len, const char *str) +{ + return argz_append (pargz, pargz_len, str, strlen (str) + 1); +} + + error_t argz_create_sep (const char *str, int delim, char **pargz, size_t *pargz_len) { @@ -223,3 +231,22 @@ argz_stringify (char *argz, size_t argz_len, int sep) } } } + + +/* Count number of elements (null bytes) in argz vector. */ + +size_t +argz_count (const char *argz, size_t argz_len) +{ + size_t count = 0; + + assert ((argz && argz_len) || (!argz && !argz_len)); + + while (--argz_len > 0) + { + if (argz[argz_len] == EOS_CHAR) + count++; + } + + return count; +} --- a/lib/argz_.h +++ b/lib/argz_.h @@ -1,6 +1,6 @@ /* lt__argz.h -- internal argz interface for non-glibc systems - Copyright (C) 2004, 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2007, 2008 Free Software Foundation, Inc. Written by Gary V. Vaughan, 2004 NOTE: The canonical source of this file is maintained with the @@ -49,6 +49,8 @@ extern "C" { LT_SCOPE error_t argz_append (char **pargz, size_t *pargz_len, const char *buf, size_t buf_len); +LT_SCOPE error_t argz_add (char **pargz, size_t *pargz_len, + const char *str); LT_SCOPE error_t argz_create_sep(const char *str, int delim, char **pargz, size_t *pargz_len); LT_SCOPE error_t argz_insert (char **pargz, size_t *pargz_len, @@ -56,6 +58,7 @@ LT_SCOPE error_t argz_insert (char **pargz, size_t *pargz_len, LT_SCOPE char * argz_next (char *argz, size_t argz_len, const char *entry); LT_SCOPE void argz_stringify (char *argz, size_t argz_len, int sep); +LT_SCOPE size_t argz_count (const char *argz, size_t argz_len); #if defined(__cplusplus) } _______________________________________________ Bug-libtool mailing list Bug-libtool@gnu.org http://lists.gnu.org/mailman/listinfo/bug-libtool