summaryrefslogtreecommitdiff
path: root/rpmio
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2010-03-15 11:54:55 +0200
committerPanu Matilainen <pmatilai@redhat.com>2010-03-15 11:54:55 +0200
commit35052b96232810cbf0d91a4f1d1d3ff25a142fd0 (patch)
treee950369f14295a9f35eca7a4cd37b20a746bf363 /rpmio
parent8c5332984e32d27d28f9a440947b070af0d14c45 (diff)
downloadrpm-35052b96232810cbf0d91a4f1d1d3ff25a142fd0.tar.gz
rpm-35052b96232810cbf0d91a4f1d1d3ff25a142fd0.tar.bz2
rpm-35052b96232810cbf0d91a4f1d1d3ff25a142fd0.zip
Add an enhanced argvSplitString() function for splitting strings to argv's
- Returns the newly created argv instead of useless "this always returns 0" - By default make a "real" split, including empty strings - Flags argument allows controlling behavior, for now only flag is to preserve argvSplit() behavior but leaves room for future enhancements such as quoted splitting etc
Diffstat (limited to 'rpmio')
-rw-r--r--rpmio/argv.c14
-rw-r--r--rpmio/argv.h14
2 files changed, 25 insertions, 3 deletions
diff --git a/rpmio/argv.c b/rpmio/argv.c
index d63346269..f21da1c5d 100644
--- a/rpmio/argv.c
+++ b/rpmio/argv.c
@@ -168,7 +168,7 @@ int argvAppend(ARGV_t * argvp, ARGV_const_t av)
return 0;
}
-int argvSplit(ARGV_t * argvp, const char * str, const char * seps)
+ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags)
{
char *dest = xmalloc(strlen(str) + 1);
ARGV_t argv;
@@ -189,14 +189,22 @@ int argvSplit(ARGV_t * argvp, const char * str, const char * seps)
argv = xmalloc( (argc + 1) * sizeof(*argv));
for (c = 0, s = dest; s < t; s+= strlen(s) + 1) {
- if (*s == '\0')
+ if (*s == '\0' && (flags & ARGV_SKIPEMPTY))
continue;
argv[c] = xstrdup(s);
c++;
}
argv[c] = NULL;
- *argvp = argv;
free(dest);
+ return argv;
+}
+
+/* Backwards compatibility */
+int argvSplit(ARGV_t * argvp, const char * str, const char * seps)
+{
+ if (argvp) {
+ *argvp = argvSplitString(str, seps, ARGV_SKIPEMPTY);
+ }
return 0;
}
diff --git a/rpmio/argv.h b/rpmio/argv.h
index 6a6fc7f14..86ec1373a 100644
--- a/rpmio/argv.h
+++ b/rpmio/argv.h
@@ -138,6 +138,20 @@ int argvAddNum(ARGV_t * argvp, int val);
*/
int argvAppend(ARGV_t * argvp, ARGV_const_t av);
+typedef enum argvFlags_e {
+ ARGV_NONE = 0,
+ ARGV_SKIPEMPTY = (1 << 0), /* omit empty strings from result */
+} argvFlags;
+
+/** \ingroup rpmargv
+ * Split a string into an argv array.
+ * @param str string arg to split
+ * @param seps seperator characters
+ * @param flags flags to control behavior
+ * @return argv array
+ */
+ARGV_t argvSplitString(const char * str, const char * seps, argvFlags flags);
+
/** \ingroup rpmargv
* Split a string into an argv array.
* @retval *argvp argv array