mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
daemon: New utility functions 'join_strings', 'concat_strings'.
Useful functions for concatenating strings together.
(cherry picked from commit 637b06ab13)
This commit is contained in:
@@ -59,6 +59,13 @@ extern int is_power_of_2 (unsigned long v);
|
||||
extern void sort_device_names (char **argv, size_t len);
|
||||
extern int compare_device_names (const char *a, const char *b);
|
||||
|
||||
/* Concatenate strings, optionally with a separator string between
|
||||
* each. On error, these return NULL but do NOT call reply_with_* nor
|
||||
* free anything.
|
||||
*/
|
||||
extern char *concat_strings (char *const *argv);
|
||||
extern char *join_strings (const char *separator, char *const *argv);
|
||||
|
||||
#define command(out,err,name,...) commandf((out),(err),0,(name),__VA_ARGS__)
|
||||
#define commandr(out,err,name,...) commandrf((out),(err),0,(name),__VA_ARGS__)
|
||||
#define commandv(out,err,argv) commandvf((out),(err),0,(argv))
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user