1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-11 05:17:44 +03:00

unit: introduce ConditionDirectoryNotEmpty=

This commit is contained in:
Lennart Poettering 2010-11-15 20:06:49 +01:00
parent 5c273f8556
commit 36af55d997
5 changed files with 24 additions and 4 deletions

View File

@ -573,6 +573,7 @@
<varlistentry>
<term><varname>ConditionPathExists=</varname></term>
<term><varname>ConditionDirectoryNotEmpty=</varname></term>
<term><varname>ConditionKernelCommandLine=</varname></term>
<term><varname>ConditionNull=</varname></term>
@ -594,7 +595,12 @@
is prefixed with an exclamation mark
(!), the test is negated, and the unit
only started if the path does not
exist. Similarly
exist. <varname>ConditionDirectoryNotEmpty=</varname>
is similar to
<varname>ConditionPathExists=</varname>
but verifies whether a cetrain path is
exists and is a non-empty
directory. Similarly
<varname>ConditionKernelCommandLine=</varname>
may be used to check whether a
specific kernel command line option is

View File

@ -106,6 +106,13 @@ bool condition_test(Condition *c) {
case CONDITION_PATH_EXISTS:
return (access(c->parameter, F_OK) >= 0) == !c->negate;
case CONDITION_DIRECTORY_NOT_EMPTY: {
int k;
k = dir_is_empty(c->parameter);
return !(k == -ENOENT || k > 0) == !c->negate;
}
case CONDITION_KERNEL_COMMAND_LINE:
return !!test_kernel_command_line(c->parameter) == !c->negate;

View File

@ -28,6 +28,7 @@
typedef enum ConditionType {
CONDITION_PATH_EXISTS,
CONDITION_DIRECTORY_NOT_EMPTY,
CONDITION_KERNEL_COMMAND_LINE,
CONDITION_NULL,
_CONDITION_TYPE_MAX,

View File

@ -1448,7 +1448,8 @@ static int config_parse_condition_path(
return 0;
}
if (!(c = condition_new(CONDITION_PATH_EXISTS, rvalue, negate)))
if (!(c = condition_new(streq(lvalue, "ConditionPathExists") ? CONDITION_PATH_EXISTS : CONDITION_DIRECTORY_NOT_EMPTY,
rvalue, negate)))
return -ENOMEM;
LIST_PREPEND(Condition, conditions, u->meta.conditions, c);
@ -1815,6 +1816,7 @@ static int load_from_path(Unit *u, const char *path) {
{ "DefaultDependencies", config_parse_bool, &u->meta.default_dependencies, "Unit" },
{ "JobTimeoutSec", config_parse_usec, &u->meta.job_timeout, "Unit" },
{ "ConditionPathExists", config_parse_condition_path, u, "Unit" },
{ "ConditionDirectoryNotEmpty", config_parse_condition_path, u, "Unit" },
{ "ConditionKernelCommandLine", config_parse_condition_kernel, u, "Unit" },
{ "ConditionNull", config_parse_condition_null, u, "Unit" },

View File

@ -355,9 +355,13 @@ static void path_enter_waiting(Path *p, bool initial, bool recheck) {
good = access(s->path, F_OK) >= 0;
break;
case PATH_DIRECTORY_NOT_EMPTY:
good = dir_is_empty(s->path) == 0;
case PATH_DIRECTORY_NOT_EMPTY: {
int k;
k = dir_is_empty(s->path);
good = !(k == -ENOENT || k > 0);
break;
}
case PATH_CHANGED: {
bool b;