mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-04 14:55:36 +00:00
utils: move helpers from cgfsng.c to utils.{c,h}
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
c1cecfdd05
commit
04ad7ffe2a
@ -118,36 +118,12 @@ static void free_string_list(char **clist)
|
||||
}
|
||||
}
|
||||
|
||||
/* Re-alllocate a pointer, do not fail */
|
||||
static void *must_realloc(void *orig, size_t sz)
|
||||
{
|
||||
void *ret;
|
||||
|
||||
do {
|
||||
ret = realloc(orig, sz);
|
||||
} while (!ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Allocate a pointer, do not fail */
|
||||
static void *must_alloc(size_t sz)
|
||||
{
|
||||
return must_realloc(NULL, sz);
|
||||
}
|
||||
|
||||
/* return copy of string @entry; do not fail. */
|
||||
static char *must_copy_string(const char *entry)
|
||||
{
|
||||
char *ret;
|
||||
|
||||
if (!entry)
|
||||
return NULL;
|
||||
do {
|
||||
ret = strdup(entry);
|
||||
} while (!ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is a special case - return a copy of @entry
|
||||
* prepending 'name='. I.e. turn systemd into name=systemd.
|
||||
@ -259,8 +235,6 @@ struct hierarchy *get_hierarchy(const char *c)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char *must_make_path(const char *first, ...) __attribute__((sentinel));
|
||||
|
||||
#define BATCH_SIZE 50
|
||||
static void batch_realloc(char **mem, size_t oldlen, size_t newlen)
|
||||
{
|
||||
@ -1187,33 +1161,6 @@ out_free:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Concatenate all passed-in strings into one path. Do not fail. If any piece is
|
||||
* not prefixed with '/', add a '/'.
|
||||
*/
|
||||
static char *must_make_path(const char *first, ...)
|
||||
{
|
||||
va_list args;
|
||||
char *cur, *dest;
|
||||
size_t full_len = strlen(first);
|
||||
|
||||
dest = must_copy_string(first);
|
||||
|
||||
va_start(args, first);
|
||||
while ((cur = va_arg(args, char *)) != NULL) {
|
||||
full_len += strlen(cur);
|
||||
if (cur[0] != '/')
|
||||
full_len++;
|
||||
dest = must_realloc(dest, full_len + 1);
|
||||
if (cur[0] != '/')
|
||||
strcat(dest, "/");
|
||||
strcat(dest, cur);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
static int cgroup_rmdir(char *dirname)
|
||||
{
|
||||
struct dirent *direntp;
|
||||
|
@ -2337,3 +2337,50 @@ int run_command(char *buf, size_t buf_size, int (*child_fn)(void *), void *args)
|
||||
|
||||
return fret;
|
||||
}
|
||||
|
||||
char *must_make_path(const char *first, ...)
|
||||
{
|
||||
va_list args;
|
||||
char *cur, *dest;
|
||||
size_t full_len = strlen(first);
|
||||
|
||||
dest = must_copy_string(first);
|
||||
|
||||
va_start(args, first);
|
||||
while ((cur = va_arg(args, char *)) != NULL) {
|
||||
full_len += strlen(cur);
|
||||
if (cur[0] != '/')
|
||||
full_len++;
|
||||
dest = must_realloc(dest, full_len + 1);
|
||||
if (cur[0] != '/')
|
||||
strcat(dest, "/");
|
||||
strcat(dest, cur);
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
char *must_copy_string(const char *entry)
|
||||
{
|
||||
char *ret;
|
||||
|
||||
if (!entry)
|
||||
return NULL;
|
||||
do {
|
||||
ret = strdup(entry);
|
||||
} while (!ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void *must_realloc(void *orig, size_t sz)
|
||||
{
|
||||
void *ret;
|
||||
|
||||
do {
|
||||
ret = realloc(orig, sz);
|
||||
} while (!ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -375,4 +375,15 @@ int lxc_unstack_mountpoint(const char *path, bool lazy);
|
||||
*/
|
||||
int run_command(char *buf, size_t buf_size, int (*child_fn)(void *), void *args);
|
||||
|
||||
/* Concatenate all passed-in strings into one path. Do not fail. If any piece
|
||||
* is not prefixed with '/', add a '/'.
|
||||
*/
|
||||
char *must_make_path(const char *first, ...) __attribute__((sentinel));
|
||||
|
||||
/* return copy of string @entry; do not fail. */
|
||||
char *must_copy_string(const char *entry);
|
||||
|
||||
/* Re-alllocate a pointer, do not fail */
|
||||
void *must_realloc(void *orig, size_t sz);
|
||||
|
||||
#endif /* __LXC_UTILS_H */
|
||||
|
Loading…
Reference in New Issue
Block a user