mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-07 20:24:09 +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 */
|
/* Allocate a pointer, do not fail */
|
||||||
static void *must_alloc(size_t sz)
|
static void *must_alloc(size_t sz)
|
||||||
{
|
{
|
||||||
return must_realloc(NULL, 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
|
* This is a special case - return a copy of @entry
|
||||||
* prepending 'name='. I.e. turn systemd into name=systemd.
|
* prepending 'name='. I.e. turn systemd into name=systemd.
|
||||||
@ -259,8 +235,6 @@ struct hierarchy *get_hierarchy(const char *c)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *must_make_path(const char *first, ...) __attribute__((sentinel));
|
|
||||||
|
|
||||||
#define BATCH_SIZE 50
|
#define BATCH_SIZE 50
|
||||||
static void batch_realloc(char **mem, size_t oldlen, size_t newlen)
|
static void batch_realloc(char **mem, size_t oldlen, size_t newlen)
|
||||||
{
|
{
|
||||||
@ -1187,33 +1161,6 @@ out_free:
|
|||||||
return NULL;
|
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)
|
static int cgroup_rmdir(char *dirname)
|
||||||
{
|
{
|
||||||
struct dirent *direntp;
|
struct dirent *direntp;
|
||||||
|
@ -2337,3 +2337,50 @@ int run_command(char *buf, size_t buf_size, int (*child_fn)(void *), void *args)
|
|||||||
|
|
||||||
return fret;
|
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);
|
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 */
|
#endif /* __LXC_UTILS_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user