[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
patch adding argz_add and argz_count implementation
From: |
Karl Berry |
Subject: |
patch adding argz_add and argz_count implementation |
Date: |
Mon, 25 Feb 2008 11:59:39 -0600 |
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)
}
- patch adding argz_add and argz_count implementation,
Karl Berry <=