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:
parent
5c273f8556
commit
36af55d997
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
typedef enum ConditionType {
|
||||
CONDITION_PATH_EXISTS,
|
||||
CONDITION_DIRECTORY_NOT_EMPTY,
|
||||
CONDITION_KERNEL_COMMAND_LINE,
|
||||
CONDITION_NULL,
|
||||
_CONDITION_TYPE_MAX,
|
||||
|
@ -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" },
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user