]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
b77c08e0 TG |
2 | #pragma once |
3 | ||
b77c08e0 TG |
4 | #include <stdbool.h> |
5 | #include <stdio.h> | |
6 | ||
7 | #include "list.h" | |
8 | #include "macro.h" | |
9 | ||
10 | typedef enum ConditionType { | |
651c3318 LP |
11 | CONDITION_ARCHITECTURE, |
12 | CONDITION_VIRTUALIZATION, | |
13 | CONDITION_HOST, | |
14 | CONDITION_KERNEL_COMMAND_LINE, | |
5022f08a | 15 | CONDITION_KERNEL_VERSION, |
651c3318 LP |
16 | CONDITION_SECURITY, |
17 | CONDITION_CAPABILITY, | |
18 | CONDITION_AC_POWER, | |
19 | ||
20 | CONDITION_NEEDS_UPDATE, | |
21 | CONDITION_FIRST_BOOT, | |
59fccdc5 | 22 | |
b77c08e0 TG |
23 | CONDITION_PATH_EXISTS, |
24 | CONDITION_PATH_EXISTS_GLOB, | |
25 | CONDITION_PATH_IS_DIRECTORY, | |
26 | CONDITION_PATH_IS_SYMBOLIC_LINK, | |
27 | CONDITION_PATH_IS_MOUNT_POINT, | |
28 | CONDITION_PATH_IS_READ_WRITE, | |
29 | CONDITION_DIRECTORY_NOT_EMPTY, | |
30 | CONDITION_FILE_NOT_EMPTY, | |
31 | CONDITION_FILE_IS_EXECUTABLE, | |
59fccdc5 | 32 | |
651c3318 | 33 | CONDITION_NULL, |
59fccdc5 | 34 | |
c465a29f FS |
35 | CONDITION_USER, |
36 | CONDITION_GROUP, | |
37 | ||
e16647c3 CD |
38 | CONDITION_CONTROL_GROUP_CONTROLLER, |
39 | ||
b77c08e0 TG |
40 | _CONDITION_TYPE_MAX, |
41 | _CONDITION_TYPE_INVALID = -1 | |
42 | } ConditionType; | |
43 | ||
cc50ef13 LP |
44 | typedef enum ConditionResult { |
45 | CONDITION_UNTESTED, | |
46 | CONDITION_SUCCEEDED, | |
47 | CONDITION_FAILED, | |
48 | CONDITION_ERROR, | |
49 | _CONDITION_RESULT_MAX, | |
50 | _CONDITION_RESULT_INVALID = -1 | |
51 | } ConditionResult; | |
592fd144 | 52 | |
b77c08e0 | 53 | typedef struct Condition { |
59fccdc5 | 54 | ConditionType type:8; |
b77c08e0 TG |
55 | |
56 | bool trigger:1; | |
57 | bool negate:1; | |
58 | ||
59fccdc5 LP |
59 | ConditionResult result:6; |
60 | ||
b77c08e0 | 61 | char *parameter; |
b77c08e0 TG |
62 | |
63 | LIST_FIELDS(struct Condition, conditions); | |
64 | } Condition; | |
65 | ||
66 | Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate); | |
67 | void condition_free(Condition *c); | |
447021aa | 68 | Condition* condition_free_list(Condition *c); |
b77c08e0 | 69 | |
d1bddcec LP |
70 | int condition_test(Condition *c); |
71 | ||
59fccdc5 LP |
72 | void condition_dump(Condition *c, FILE *f, const char *prefix, const char *(*to_string)(ConditionType t)); |
73 | void condition_dump_list(Condition *c, FILE *f, const char *prefix, const char *(*to_string)(ConditionType t)); | |
b77c08e0 TG |
74 | |
75 | const char* condition_type_to_string(ConditionType t) _const_; | |
59fccdc5 LP |
76 | ConditionType condition_type_from_string(const char *s) _pure_; |
77 | ||
78 | const char* assert_type_to_string(ConditionType t) _const_; | |
79 | ConditionType assert_type_from_string(const char *s) _pure_; | |
cc50ef13 LP |
80 | |
81 | const char* condition_result_to_string(ConditionResult r) _const_; | |
82 | ConditionResult condition_result_from_string(const char *s) _pure_; | |
d8f37c89 YW |
83 | |
84 | static inline bool condition_takes_path(ConditionType t) { | |
85 | return IN_SET(t, | |
86 | CONDITION_PATH_EXISTS, | |
87 | CONDITION_PATH_EXISTS_GLOB, | |
88 | CONDITION_PATH_IS_DIRECTORY, | |
89 | CONDITION_PATH_IS_SYMBOLIC_LINK, | |
90 | CONDITION_PATH_IS_MOUNT_POINT, | |
91 | CONDITION_PATH_IS_READ_WRITE, | |
92 | CONDITION_DIRECTORY_NOT_EMPTY, | |
93 | CONDITION_FILE_NOT_EMPTY, | |
94 | CONDITION_FILE_IS_EXECUTABLE, | |
95 | CONDITION_NEEDS_UPDATE); | |
96 | } |