diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-08-14 13:55:00 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-08-30 22:00:48 +0100 |
commit | 4d28c696dbe8c90d2e9c8495ba5c334b6942004a (patch) | |
tree | f6676fc7daa0e45c4586dab8bee933310d64f4df /daemon/guestfsd.c | |
parent | bedbb0870030ff46783dbaef8a3b258ca89acccd (diff) | |
download | libguestfs-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.c | 41 |
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. */ |