Commit 742a862b authored by Lennart Poettering's avatar Lennart Poettering
Browse files

condition: add ConditionFileNotEmpty=

https://bugs.freedesktop.org/show_bug.cgi?id=54448
parent b5b46d59
...@@ -755,6 +755,7 @@ ...@@ -755,6 +755,7 @@
<term><varname>ConditionPathIsMountPoint=</varname></term> <term><varname>ConditionPathIsMountPoint=</varname></term>
<term><varname>ConditionPathIsReadWrite=</varname></term> <term><varname>ConditionPathIsReadWrite=</varname></term>
<term><varname>ConditionDirectoryNotEmpty=</varname></term> <term><varname>ConditionDirectoryNotEmpty=</varname></term>
<term><varname>ConditionFileNotEmpty=</varname></term>
<term><varname>ConditionFileIsExecutable=</varname></term> <term><varname>ConditionFileIsExecutable=</varname></term>
<term><varname>ConditionKernelCommandLine=</varname></term> <term><varname>ConditionKernelCommandLine=</varname></term>
<term><varname>ConditionVirtualization=</varname></term> <term><varname>ConditionVirtualization=</varname></term>
...@@ -825,21 +826,28 @@ ...@@ -825,21 +826,28 @@
(i.e. not mounted (i.e. not mounted
read-only).</para> read-only).</para>
<para><varname>ConditionFileIsExecutable=</varname> <para><varname>ConditionDirectoryNotEmpty=</varname>
is similar to is similar to
<varname>ConditionPathExists=</varname> <varname>ConditionPathExists=</varname>
but verifies whether a certain path but verifies whether a certain path
exists, is a regular file and marked exists and is a non-empty
executable.</para> directory.</para>
<para><varname>ConditionDirectoryNotEmpty=</varname> <para><varname>ConditionFileNotEmpty=</varname>
is similar to is similar to
<varname>ConditionPathExists=</varname> <varname>ConditionPathExists=</varname>
but verifies whether a certain path but verifies whether a certain path
exists and is a non-empty exists and refers to a regular file
directory.</para> with a non-zero size.</para>
<para><varname>ConditionFileIsExecutable=</varname>
is similar to
<varname>ConditionPathExists=</varname>
but verifies whether a certain path
exists, is a regular file and marked
executable.</para>
<para>Similarly, <para>Similar,
<varname>ConditionKernelCommandLine=</varname> <varname>ConditionKernelCommandLine=</varname>
may be used to check whether a may be used to check whether a
specific kernel command line option is specific kernel command line option is
......
...@@ -261,6 +261,15 @@ bool condition_test(Condition *c) { ...@@ -261,6 +261,15 @@ bool condition_test(Condition *c) {
return !(k == -ENOENT || k > 0) == !c->negate; return !(k == -ENOENT || k > 0) == !c->negate;
} }
case CONDITION_FILE_NOT_EMPTY: {
struct stat st;
if (stat(c->parameter, &st) < 0)
return c->negate;
return (S_ISREG(st.st_mode) && st.st_size > 0) == !c->negate;
}
case CONDITION_FILE_IS_EXECUTABLE: { case CONDITION_FILE_IS_EXECUTABLE: {
struct stat st; struct stat st;
...@@ -350,6 +359,7 @@ static const char* const condition_type_table[_CONDITION_TYPE_MAX] = { ...@@ -350,6 +359,7 @@ static const char* const condition_type_table[_CONDITION_TYPE_MAX] = {
[CONDITION_PATH_IS_MOUNT_POINT] = "ConditionPathIsMountPoint", [CONDITION_PATH_IS_MOUNT_POINT] = "ConditionPathIsMountPoint",
[CONDITION_PATH_IS_READ_WRITE] = "ConditionPathIsReadWrite", [CONDITION_PATH_IS_READ_WRITE] = "ConditionPathIsReadWrite",
[CONDITION_DIRECTORY_NOT_EMPTY] = "ConditionDirectoryNotEmpty", [CONDITION_DIRECTORY_NOT_EMPTY] = "ConditionDirectoryNotEmpty",
[CONDITION_FILE_NOT_EMPTY] = "ConditionFileNotEmpty",
[CONDITION_KERNEL_COMMAND_LINE] = "ConditionKernelCommandLine", [CONDITION_KERNEL_COMMAND_LINE] = "ConditionKernelCommandLine",
[CONDITION_VIRTUALIZATION] = "ConditionVirtualization", [CONDITION_VIRTUALIZATION] = "ConditionVirtualization",
[CONDITION_SECURITY] = "ConditionSecurity", [CONDITION_SECURITY] = "ConditionSecurity",
......
...@@ -33,6 +33,7 @@ typedef enum ConditionType { ...@@ -33,6 +33,7 @@ typedef enum ConditionType {
CONDITION_PATH_IS_MOUNT_POINT, CONDITION_PATH_IS_MOUNT_POINT,
CONDITION_PATH_IS_READ_WRITE, CONDITION_PATH_IS_READ_WRITE,
CONDITION_DIRECTORY_NOT_EMPTY, CONDITION_DIRECTORY_NOT_EMPTY,
CONDITION_FILE_NOT_EMPTY,
CONDITION_FILE_IS_EXECUTABLE, CONDITION_FILE_IS_EXECUTABLE,
CONDITION_KERNEL_COMMAND_LINE, CONDITION_KERNEL_COMMAND_LINE,
CONDITION_VIRTUALIZATION, CONDITION_VIRTUALIZATION,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment