[systemd-devel] [PATCH 2/4] load-fragment: unify config_parse_condition_{kernel, virt}
Michal Schmidt
mschmidt at redhat.com
Sun Apr 3 07:22:12 PDT 2011
They only differ in the condition type, otherwise the code is identical.
Replace them with a more generic config_parse_condition_string().
---
src/load-fragment.c | 44 ++++++--------------------------------------
1 files changed, 6 insertions(+), 38 deletions(-)
diff --git a/src/load-fragment.c b/src/load-fragment.c
index 05d858e..cb8c250 100644
--- a/src/load-fragment.c
+++ b/src/load-fragment.c
@@ -1479,39 +1479,7 @@ static int config_parse_condition_path(
return 0;
}
-static int config_parse_condition_kernel(
- const char *filename,
- unsigned line,
- const char *section,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
-
- Unit *u = data;
- bool trigger, negate;
- Condition *c;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(data);
-
- if ((trigger = rvalue[0] == '|'))
- rvalue++;
-
- if ((negate = rvalue[0] == '!'))
- rvalue++;
-
- if (!(c = condition_new(CONDITION_KERNEL_COMMAND_LINE, rvalue, trigger, negate)))
- return -ENOMEM;
-
- LIST_PREPEND(Condition, conditions, u->meta.conditions, c);
- return 0;
-}
-
-static int config_parse_condition_virt(
+static int config_parse_condition_string(
const char *filename,
unsigned line,
const char *section,
@@ -1521,6 +1489,7 @@ static int config_parse_condition_virt(
void *data,
void *userdata) {
+ ConditionType cond = ltype;
Unit *u = data;
bool trigger, negate;
Condition *c;
@@ -1536,7 +1505,7 @@ static int config_parse_condition_virt(
if ((negate = rvalue[0] == '!'))
rvalue++;
- if (!(c = condition_new(CONDITION_VIRTUALIZATION, rvalue, trigger, negate)))
+ if (!(c = condition_new(cond, rvalue, trigger, negate)))
return -ENOMEM;
LIST_PREPEND(Condition, conditions, u->meta.conditions, c);
@@ -1756,9 +1725,8 @@ static void dump_items(FILE *f, const ConfigItem *items) {
{ config_parse_notify_access, "ACCESS" },
{ config_parse_ip_tos, "TOS" },
{ config_parse_condition_path, "CONDITION" },
- { config_parse_condition_kernel, "CONDITION" },
+ { config_parse_condition_string, "CONDITION" },
{ config_parse_condition_null, "CONDITION" },
- { config_parse_condition_virt, "CONDITION" },
};
assert(f);
@@ -1883,8 +1851,8 @@ static int load_from_path(Unit *u, const char *path) {
{ "ConditionPathExists", config_parse_condition_path, CONDITION_PATH_EXISTS, u, "Unit" },
{ "ConditionPathIsDirectory", config_parse_condition_path, CONDITION_PATH_IS_DIRECTORY, u, "Unit" },
{ "ConditionDirectoryNotEmpty", config_parse_condition_path, CONDITION_DIRECTORY_NOT_EMPTY, u, "Unit" },
- { "ConditionKernelCommandLine", config_parse_condition_kernel, 0, u, "Unit" },
- { "ConditionVirtualization",config_parse_condition_virt, 0, u, "Unit" },
+ { "ConditionKernelCommandLine", config_parse_condition_string, CONDITION_KERNEL_COMMAND_LINE, u, "Unit" },
+ { "ConditionVirtualization", config_parse_condition_string, CONDITION_VIRTUALIZATION, u, "Unit" },
{ "ConditionNull", config_parse_condition_null, 0, u, "Unit" },
{ "PIDFile", config_parse_path, 0, &u->service.pid_file, "Service" },
More information about the systemd-devel
mailing list