summaryrefslogtreecommitdiffstats
path: root/daemon/guestfsd.c
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-08-14 13:55:00 +0100
committerRichard W.M. Jones <rjones@redhat.com>2012-08-30 22:00:48 +0100
commit4d28c696dbe8c90d2e9c8495ba5c334b6942004a (patch)
treef6676fc7daa0e45c4586dab8bee933310d64f4df /daemon/guestfsd.c
parentbedbb0870030ff46783dbaef8a3b258ca89acccd (diff)
downloadlibguestfs-4d28c696dbe8c90d2e9c8495ba5c334b6942004a.tar.gz
libguestfs-4d28c696dbe8c90d2e9c8495ba5c334b6942004a.tar.xz
libguestfs-4d28c696dbe8c90d2e9c8495ba5c334b6942004a.zip
daemon: New utility functions 'join_strings', 'concat_strings'.
Useful functions for concatenating strings together. (cherry picked from commit 637b06ab1384f0c904715ba76fc759dac1b95500)
Diffstat (limited to 'daemon/guestfsd.c')
-rw-r--r--daemon/guestfsd.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
index e1645a02..f888cdc6 100644
--- a/daemon/guestfsd.c
+++ b/daemon/guestfsd.c
@@ -574,6 +574,47 @@ sort_device_names (char **argv, size_t len)
qsort (argv, len, sizeof (char *), compare_device_names_vp);
}
+char *
+concat_strings (char *const *argv)
+{
+ return join_strings ("", argv);
+}
+
+char *
+join_strings (const char *separator, char *const *argv)
+{
+ size_t i, len, seplen, rlen;
+ char *r;
+
+ seplen = strlen (separator);
+
+ len = 0;
+ for (i = 0; argv[i] != NULL; ++i) {
+ if (i > 0)
+ len += seplen;
+ len += strlen (argv[i]);
+ }
+ len++; /* for final \0 */
+
+ r = malloc (len);
+ if (r == NULL)
+ return NULL;
+
+ rlen = 0;
+ for (i = 0; argv[i] != NULL; ++i) {
+ if (i > 0) {
+ memcpy (&r[rlen], separator, seplen);
+ rlen += seplen;
+ }
+ len = strlen (argv[i]);
+ memcpy (&r[rlen], argv[i], len);
+ rlen += len;
+ }
+ r[rlen] = '\0';
+
+ return r;
+}
+
/* Easy ways to run external commands. For full documentation, see
* 'commandrvf' below.
*/