shared/dropin: minor modernization

This commit is contained in:
Mike Yuan 2024-05-13 16:48:32 +08:00 committed by Luca Boccassi
parent 1ea7bda77f
commit f9ef2aad28
2 changed files with 57 additions and 31 deletions

View file

@ -23,39 +23,48 @@
#include "strv.h"
#include "unit-name.h"
int drop_in_file(const char *dir, const char *unit, unsigned level,
const char *name, char **ret_p, char **ret_q) {
int drop_in_file(
const char *dir,
const char *unit,
unsigned level,
const char *name,
char **ret_unit_dir,
char **ret_path) {
char prefix[DECIMAL_STR_MAX(unsigned) + 1] = {};
_cleanup_free_ char *b = NULL, *p = NULL, *q = NULL;
_cleanup_free_ char *n = NULL, *unit_dir = NULL, *path = NULL;
assert(dir);
assert(unit);
assert(name);
assert(ret_p);
assert(ret_q);
assert(ret_unit_dir);
assert(ret_path);
n = xescape(name, "/.");
if (!n)
return -ENOMEM;
if (!filename_is_valid(n))
return -EINVAL;
if (level != UINT_MAX)
xsprintf(prefix, "%u-", level);
b = xescape(name, "/.");
if (!b)
unit_dir = path_join(dir, strjoina(unit, ".d"));
path = strjoin(unit_dir, "/", prefix, n, ".conf");
if (!unit_dir || !path)
return -ENOMEM;
if (!filename_is_valid(b))
return -EINVAL;
p = strjoin(dir, "/", unit, ".d");
q = strjoin(p, "/", prefix, b, ".conf");
if (!p || !q)
return -ENOMEM;
*ret_p = TAKE_PTR(p);
*ret_q = TAKE_PTR(q);
*ret_unit_dir = TAKE_PTR(unit_dir);
*ret_path = TAKE_PTR(path);
return 0;
}
int write_drop_in(const char *dir, const char *unit, unsigned level,
const char *name, const char *data) {
int write_drop_in(
const char *dir,
const char *unit,
unsigned level,
const char *name,
const char *data) {
_cleanup_free_ char *p = NULL, *q = NULL;
int r;
@ -73,9 +82,14 @@ int write_drop_in(const char *dir, const char *unit, unsigned level,
return write_string_file_atomic_label(q, data);
}
int write_drop_in_format(const char *dir, const char *unit, unsigned level,
const char *name, const char *format, ...) {
_cleanup_free_ char *p = NULL;
int write_drop_in_format(
const char *dir,
const char *unit,
unsigned level,
const char *name,
const char *format, ...) {
_cleanup_free_ char *content = NULL;
va_list ap;
int r;
@ -85,13 +99,13 @@ int write_drop_in_format(const char *dir, const char *unit, unsigned level,
assert(format);
va_start(ap, format);
r = vasprintf(&p, format, ap);
r = vasprintf(&content, format, ap);
va_end(ap);
if (r < 0)
return -ENOMEM;
return write_drop_in(dir, unit, level, name, p);
return write_drop_in(dir, unit, level, name, content);
}
static int unit_file_add_dir(

View file

@ -6,14 +6,26 @@
#include "set.h"
#include "unit-name.h"
int drop_in_file(const char *dir, const char *unit, unsigned level,
const char *name, char **_p, char **_q);
int drop_in_file(
const char *dir,
const char *unit,
unsigned level,
const char *name,
char **ret_unit_dir,
char **ret_path);
int write_drop_in(const char *dir, const char *unit, unsigned level,
const char *name, const char *data);
int write_drop_in_format(const char *dir, const char *unit, unsigned level,
const char *name, const char *format, ...) _printf_(5, 6);
int write_drop_in(
const char *dir,
const char *unit,
unsigned level,
const char *name,
const char *data);
int write_drop_in_format(
const char *dir,
const char *unit,
unsigned level,
const char *name,
const char *format, ...) _printf_(5, 6);
int unit_file_find_dropin_paths(
const char *original_root,