Merge pull request #8199 from keszybz/small-things
Sundry small cleanups
This commit is contained in:
@@ -209,7 +209,7 @@ static void backspace_string(int ttyfd, const char *str) {
|
||||
if (ttyfd < 0)
|
||||
return;
|
||||
|
||||
/* Backspaces back for enough characters to entirely undo printing of the specified string. */
|
||||
/* Backspaces through enough characters to entirely undo printing of the specified string. */
|
||||
|
||||
m = utf8_n_codepoints(str);
|
||||
if (m == (size_t) -1)
|
||||
|
||||
@@ -1021,3 +1021,119 @@ int config_parse_ip_port(
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_join_controllers(
|
||||
const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
const char *section,
|
||||
unsigned section_line,
|
||||
const char *lvalue,
|
||||
int ltype,
|
||||
const char *rvalue,
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
char ****ret = data;
|
||||
const char *whole_rvalue = rvalue;
|
||||
unsigned n = 0;
|
||||
_cleanup_(strv_free_freep) char ***controllers = NULL;
|
||||
|
||||
assert(filename);
|
||||
assert(lvalue);
|
||||
assert(rvalue);
|
||||
assert(ret);
|
||||
|
||||
for (;;) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
char **l;
|
||||
int r;
|
||||
|
||||
r = extract_first_word(&rvalue, &word, NULL, EXTRACT_QUOTES);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_ERR, filename, line, r, "Invalid value for %s: %s", lvalue, whole_rvalue);
|
||||
return r;
|
||||
}
|
||||
if (r == 0)
|
||||
break;
|
||||
|
||||
l = strv_split(word, ",");
|
||||
if (!l)
|
||||
return log_oom();
|
||||
strv_uniq(l);
|
||||
|
||||
if (strv_length(l) <= 1) {
|
||||
strv_free(l);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!controllers) {
|
||||
controllers = new(char**, 2);
|
||||
if (!controllers) {
|
||||
strv_free(l);
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
controllers[0] = l;
|
||||
controllers[1] = NULL;
|
||||
|
||||
n = 1;
|
||||
} else {
|
||||
char ***a;
|
||||
char ***t;
|
||||
|
||||
t = new0(char**, n+2);
|
||||
if (!t) {
|
||||
strv_free(l);
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
n = 0;
|
||||
|
||||
for (a = controllers; *a; a++)
|
||||
if (strv_overlap(*a, l)) {
|
||||
if (strv_extend_strv(&l, *a, false) < 0) {
|
||||
strv_free(l);
|
||||
strv_free_free(t);
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
} else {
|
||||
char **c;
|
||||
|
||||
c = strv_copy(*a);
|
||||
if (!c) {
|
||||
strv_free(l);
|
||||
strv_free_free(t);
|
||||
return log_oom();
|
||||
}
|
||||
|
||||
t[n++] = c;
|
||||
}
|
||||
|
||||
t[n++] = strv_uniq(l);
|
||||
|
||||
strv_free_free(controllers);
|
||||
controllers = t;
|
||||
}
|
||||
}
|
||||
if (!isempty(rvalue))
|
||||
log_syntax(unit, LOG_ERR, filename, line, 0, "Trailing garbage, ignoring.");
|
||||
|
||||
/* As a special case, return a single empty strv, to override the default */
|
||||
if (!controllers) {
|
||||
controllers = new(char**, 2);
|
||||
if (!controllers)
|
||||
return log_oom();
|
||||
controllers[0] = strv_new(NULL, NULL);
|
||||
if (!controllers[0])
|
||||
return log_oom();
|
||||
controllers[1] = NULL;
|
||||
}
|
||||
|
||||
strv_free_free(*ret);
|
||||
*ret = controllers;
|
||||
controllers = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+39
-47
@@ -121,44 +121,46 @@ int config_parse_many(
|
||||
void *userdata);
|
||||
|
||||
/* Generic parsers */
|
||||
int config_parse_int(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_unsigned(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_long(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_uint8(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_uint16(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_uint32(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_uint64(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_double(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_iec_size(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_si_size(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_iec_uint64(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_bool(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_tristate(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_string(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_path(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_strv(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_sec(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_nsec(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_log_facility(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_log_level(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_signal(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_personality(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_ifname(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
int config_parse_ip_port(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||
#define GENERIC_PARSER_ARGS \
|
||||
const char *unit, \
|
||||
const char *filename, \
|
||||
unsigned line, \
|
||||
const char *section, \
|
||||
unsigned section_line, \
|
||||
const char *lvalue, \
|
||||
int ltype, \
|
||||
const char *rvalue, \
|
||||
void *data, \
|
||||
void *userdata
|
||||
int config_parse_int(GENERIC_PARSER_ARGS);
|
||||
int config_parse_unsigned(GENERIC_PARSER_ARGS);
|
||||
int config_parse_long(GENERIC_PARSER_ARGS);
|
||||
int config_parse_uint8(GENERIC_PARSER_ARGS);
|
||||
int config_parse_uint16(GENERIC_PARSER_ARGS);
|
||||
int config_parse_uint32(GENERIC_PARSER_ARGS);
|
||||
int config_parse_uint64(GENERIC_PARSER_ARGS);
|
||||
int config_parse_double(GENERIC_PARSER_ARGS);
|
||||
int config_parse_iec_size(GENERIC_PARSER_ARGS);
|
||||
int config_parse_si_size(GENERIC_PARSER_ARGS);
|
||||
int config_parse_iec_uint64(GENERIC_PARSER_ARGS);
|
||||
int config_parse_bool(GENERIC_PARSER_ARGS);
|
||||
int config_parse_tristate(GENERIC_PARSER_ARGS);
|
||||
int config_parse_string(GENERIC_PARSER_ARGS);
|
||||
int config_parse_path(GENERIC_PARSER_ARGS);
|
||||
int config_parse_strv(GENERIC_PARSER_ARGS);
|
||||
int config_parse_sec(GENERIC_PARSER_ARGS);
|
||||
int config_parse_nsec(GENERIC_PARSER_ARGS);
|
||||
int config_parse_mode(GENERIC_PARSER_ARGS);
|
||||
int config_parse_log_facility(GENERIC_PARSER_ARGS);
|
||||
int config_parse_log_level(GENERIC_PARSER_ARGS);
|
||||
int config_parse_signal(GENERIC_PARSER_ARGS);
|
||||
int config_parse_personality(GENERIC_PARSER_ARGS);
|
||||
int config_parse_ifname(GENERIC_PARSER_ARGS);
|
||||
int config_parse_ip_port(GENERIC_PARSER_ARGS);
|
||||
int config_parse_join_controllers(GENERIC_PARSER_ARGS);
|
||||
|
||||
#define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg) \
|
||||
int function(const char *unit, \
|
||||
const char *filename, \
|
||||
unsigned line, \
|
||||
const char *section, \
|
||||
unsigned section_line, \
|
||||
const char *lvalue, \
|
||||
int ltype, \
|
||||
const char *rvalue, \
|
||||
void *data, \
|
||||
void *userdata) { \
|
||||
\
|
||||
int function(GENERIC_PARSER_ARGS) { \
|
||||
type *i = data, x; \
|
||||
\
|
||||
assert(filename); \
|
||||
@@ -177,17 +179,7 @@ int config_parse_ip_port(const char *unit, const char *filename, unsigned line,
|
||||
}
|
||||
|
||||
#define DEFINE_CONFIG_PARSE_ENUMV(function,name,type,invalid,msg) \
|
||||
int function(const char *unit, \
|
||||
const char *filename, \
|
||||
unsigned line, \
|
||||
const char *section, \
|
||||
unsigned section_line, \
|
||||
const char *lvalue, \
|
||||
int ltype, \
|
||||
const char *rvalue, \
|
||||
void *data, \
|
||||
void *userdata) { \
|
||||
\
|
||||
int function(GENERIC_PARSER_ARGS) { \
|
||||
type **enums = data, x, *ys; \
|
||||
_cleanup_free_ type *xs = NULL; \
|
||||
const char *word, *state; \
|
||||
|
||||
Reference in New Issue
Block a user