[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: patch adding argz_add and argz_count implementation
From: |
Ralf Wildenhues |
Subject: |
Re: patch adding argz_add and argz_count implementation |
Date: |
Tue, 26 Feb 2008 23:19:52 +0100 |
User-agent: |
Mutt/1.5.17+20080114 (2008-01-14) |
Hi Karl,
* Karl Berry wrote on Tue, Feb 26, 2008 at 06:11:34PM CET:
> Good, except that I'd prefer if argz_count used strlen instead of
>
> Ok, since you prefer it, I copied the strlen loop from libc. Below is a
> revised patch (for both files for convenience).
Thanks. Applied as shown below.
> I'll change the name in Libtool after 2.2. Maybe I'll even change it to
> use gnulib-tool ...
>
> If you start maintaining the argz files with gnulib as the master,
> please tell me so I can stop syncing from libtool to gnulib :).
Sure. FWIW I can also apply this to gnulib for you (I'm not sure if you
prefer to do that yourself).
Cheers,
Ralf
2008-02-26 Karl Berry <address@hidden>
* libltdl/argz.c (argz_add, argz_count): New functions.
* libltdl/argz_.h: Declare them.
Report by Juan Manuel Guerrero <address@hidden>.
Index: libltdl/argz.c
===================================================================
RCS file: /cvsroot/libtool/libtool/libltdl/argz.c,v
retrieving revision 1.11
diff -u -r1.11 argz.c
--- libltdl/argz.c 25 Mar 2007 12:12:42 -0000 1.11
+++ libltdl/argz.c 26 Feb 2008 22:16:15 -0000
@@ -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 @@
}
+/* 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,24 @@
}
}
}
+
+
+/* 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)
+ {
+ size_t part_len = strlen (argz);
+ argz += part_len + 1;
+ argz_len -= part_len + 1;
+ count++;
+ }
+
+ return count;
+}
Index: libltdl/argz_.h
===================================================================
RCS file: /cvsroot/libtool/libtool/libltdl/argz_.h,v
retrieving revision 1.8
diff -u -r1.8 argz_.h
--- libltdl/argz_.h 25 Apr 2007 21:17:58 -0000 1.8
+++ libltdl/argz_.h 26 Feb 2008 22:16:15 -0000
@@ -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 @@
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 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)
}