/src/systemd/src/shared/condition.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* SPDX-License-Identifier: LGPL-2.1+ */ |
2 | | #pragma once |
3 | | |
4 | | #include <stdbool.h> |
5 | | #include <stdio.h> |
6 | | |
7 | | #include "list.h" |
8 | | #include "macro.h" |
9 | | |
10 | | typedef enum ConditionType { |
11 | | CONDITION_ARCHITECTURE, |
12 | | CONDITION_VIRTUALIZATION, |
13 | | CONDITION_HOST, |
14 | | CONDITION_KERNEL_COMMAND_LINE, |
15 | | CONDITION_KERNEL_VERSION, |
16 | | CONDITION_SECURITY, |
17 | | CONDITION_CAPABILITY, |
18 | | CONDITION_AC_POWER, |
19 | | CONDITION_MEMORY, |
20 | | CONDITION_CPUS, |
21 | | |
22 | | CONDITION_NEEDS_UPDATE, |
23 | | CONDITION_FIRST_BOOT, |
24 | | |
25 | | CONDITION_PATH_EXISTS, |
26 | | CONDITION_PATH_EXISTS_GLOB, |
27 | | CONDITION_PATH_IS_DIRECTORY, |
28 | | CONDITION_PATH_IS_SYMBOLIC_LINK, |
29 | | CONDITION_PATH_IS_MOUNT_POINT, |
30 | | CONDITION_PATH_IS_READ_WRITE, |
31 | | CONDITION_DIRECTORY_NOT_EMPTY, |
32 | | CONDITION_FILE_NOT_EMPTY, |
33 | | CONDITION_FILE_IS_EXECUTABLE, |
34 | | |
35 | | CONDITION_NULL, |
36 | | |
37 | | CONDITION_USER, |
38 | | CONDITION_GROUP, |
39 | | |
40 | | CONDITION_CONTROL_GROUP_CONTROLLER, |
41 | | |
42 | | _CONDITION_TYPE_MAX, |
43 | | _CONDITION_TYPE_INVALID = -1 |
44 | | } ConditionType; |
45 | | |
46 | | typedef enum ConditionResult { |
47 | | CONDITION_UNTESTED, |
48 | | CONDITION_SUCCEEDED, |
49 | | CONDITION_FAILED, |
50 | | CONDITION_ERROR, |
51 | | _CONDITION_RESULT_MAX, |
52 | | _CONDITION_RESULT_INVALID = -1 |
53 | | } ConditionResult; |
54 | | |
55 | | typedef struct Condition { |
56 | | ConditionType type:8; |
57 | | |
58 | | bool trigger:1; |
59 | | bool negate:1; |
60 | | |
61 | | ConditionResult result:6; |
62 | | |
63 | | char *parameter; |
64 | | |
65 | | LIST_FIELDS(struct Condition, conditions); |
66 | | } Condition; |
67 | | |
68 | | Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate); |
69 | | void condition_free(Condition *c); |
70 | | Condition* condition_free_list_type(Condition *first, ConditionType type); |
71 | 104k | static inline Condition* condition_free_list(Condition *first) { |
72 | 104k | return condition_free_list_type(first, _CONDITION_TYPE_INVALID); |
73 | 104k | } Unexecuted instantiation: fuzz-netdev-parser.c:condition_free_list netdev.c:condition_free_list Line | Count | Source | 71 | 13.4k | static inline Condition* condition_free_list(Condition *first) { | 72 | 13.4k | return condition_free_list_type(first, _CONDITION_TYPE_INVALID); | 73 | 13.4k | } |
Unexecuted instantiation: geneve.c:condition_free_list Unexecuted instantiation: wireguard.c:condition_free_list Unexecuted instantiation: fou-tunnel.c:condition_free_list Unexecuted instantiation: l2tp-tunnel.c:condition_free_list Unexecuted instantiation: macsec.c:condition_free_list Unexecuted instantiation: networkd-link.c:condition_free_list Unexecuted instantiation: networkd-lldp-rx.c:condition_free_list Unexecuted instantiation: networkd-lldp-tx.c:condition_free_list Unexecuted instantiation: networkd-manager.c:condition_free_list Unexecuted instantiation: networkd-ndisc.c:condition_free_list Unexecuted instantiation: networkd-neighbor.c:condition_free_list Unexecuted instantiation: networkd-radv.c:condition_free_list Unexecuted instantiation: networkd-network-bus.c:condition_free_list networkd-network.c:condition_free_list Line | Count | Source | 71 | 12.1k | static inline Condition* condition_free_list(Condition *first) { | 72 | 12.1k | return condition_free_list_type(first, _CONDITION_TYPE_INVALID); | 73 | 12.1k | } |
Unexecuted instantiation: networkd-route.c:condition_free_list Unexecuted instantiation: networkd-routing-policy-rule.c:condition_free_list Unexecuted instantiation: networkd-speed-meter.c:condition_free_list Unexecuted instantiation: networkd-util.c:condition_free_list Unexecuted instantiation: networkd-network-gperf.c:condition_free_list Unexecuted instantiation: netdev-gperf.c:condition_free_list Unexecuted instantiation: bond.c:condition_free_list Unexecuted instantiation: bridge.c:condition_free_list Unexecuted instantiation: networkd-address-label.c:condition_free_list Unexecuted instantiation: networkd-address-pool.c:condition_free_list Unexecuted instantiation: networkd-address.c:condition_free_list Unexecuted instantiation: networkd-brvlan.c:condition_free_list Unexecuted instantiation: networkd-can.c:condition_free_list Unexecuted instantiation: networkd-conf.c:condition_free_list Unexecuted instantiation: networkd-dhcp4.c:condition_free_list Unexecuted instantiation: networkd-dhcp6.c:condition_free_list Unexecuted instantiation: networkd-fdb.c:condition_free_list Unexecuted instantiation: networkd-ipv4ll.c:condition_free_list Unexecuted instantiation: networkd-ipv6-proxy-ndp.c:condition_free_list Unexecuted instantiation: networkd-link-bus.c:condition_free_list Unexecuted instantiation: networkd-manager-bus.c:condition_free_list Unexecuted instantiation: networkd-gperf.c:condition_free_list Unexecuted instantiation: network-internal.c:condition_free_list Unexecuted instantiation: fuzz-network-parser.c:condition_free_list Unexecuted instantiation: fuzz-unit-file.c:condition_free_list Unexecuted instantiation: load-fragment-gperf.c:condition_free_list Unexecuted instantiation: ip-address-access.c:condition_free_list load-fragment.c:condition_free_list Line | Count | Source | 71 | 1.33k | static inline Condition* condition_free_list(Condition *first) { | 72 | 1.33k | return condition_free_list_type(first, _CONDITION_TYPE_INVALID); | 73 | 1.33k | } |
Unexecuted instantiation: manager.c:condition_free_list Unexecuted instantiation: path.c:condition_free_list Unexecuted instantiation: service.c:condition_free_list Unexecuted instantiation: socket.c:condition_free_list Unexecuted instantiation: timer.c:condition_free_list Unexecuted instantiation: transaction.c:condition_free_list Unexecuted instantiation: unit-printf.c:condition_free_list unit.c:condition_free_list Line | Count | Source | 71 | 73.6k | static inline Condition* condition_free_list(Condition *first) { | 72 | 73.6k | return condition_free_list_type(first, _CONDITION_TYPE_INVALID); | 73 | 73.6k | } |
Unexecuted instantiation: automount.c:condition_free_list Unexecuted instantiation: bpf-firewall.c:condition_free_list Unexecuted instantiation: cgroup.c:condition_free_list Unexecuted instantiation: dbus-automount.c:condition_free_list Unexecuted instantiation: dbus-job.c:condition_free_list Unexecuted instantiation: dbus-manager.c:condition_free_list Unexecuted instantiation: dbus-path.c:condition_free_list Unexecuted instantiation: dbus-scope.c:condition_free_list Unexecuted instantiation: dbus-service.c:condition_free_list Unexecuted instantiation: dbus-socket.c:condition_free_list Unexecuted instantiation: dbus-timer.c:condition_free_list Unexecuted instantiation: dbus-unit.c:condition_free_list Unexecuted instantiation: dbus-util.c:condition_free_list Unexecuted instantiation: dbus.c:condition_free_list Unexecuted instantiation: device.c:condition_free_list Unexecuted instantiation: dynamic-user.c:condition_free_list Unexecuted instantiation: emergency-action.c:condition_free_list Unexecuted instantiation: execute.c:condition_free_list Unexecuted instantiation: job.c:condition_free_list Unexecuted instantiation: load-dropin.c:condition_free_list Unexecuted instantiation: mount.c:condition_free_list Unexecuted instantiation: scope.c:condition_free_list Unexecuted instantiation: slice.c:condition_free_list Unexecuted instantiation: swap.c:condition_free_list Unexecuted instantiation: target.c:condition_free_list Unexecuted instantiation: bpf-devices.c:condition_free_list Unexecuted instantiation: dbus-cgroup.c:condition_free_list Unexecuted instantiation: dbus-device.c:condition_free_list Unexecuted instantiation: dbus-execute.c:condition_free_list Unexecuted instantiation: dbus-kill.c:condition_free_list Unexecuted instantiation: dbus-mount.c:condition_free_list Unexecuted instantiation: dbus-slice.c:condition_free_list Unexecuted instantiation: dbus-swap.c:condition_free_list Unexecuted instantiation: dbus-target.c:condition_free_list Unexecuted instantiation: udev-builtin-net_setup_link.c:condition_free_list link-config.c:condition_free_list Line | Count | Source | 71 | 4.45k | static inline Condition* condition_free_list(Condition *first) { | 72 | 4.45k | return condition_free_list_type(first, _CONDITION_TYPE_INVALID); | 73 | 4.45k | } |
Unexecuted instantiation: ethtool-util.c:condition_free_list Unexecuted instantiation: link-config-gperf.c:condition_free_list Unexecuted instantiation: fuzz-link-parser.c:condition_free_list Unexecuted instantiation: bus-unit-util.c:condition_free_list Unexecuted instantiation: condition.c:condition_free_list |
74 | | |
75 | | int condition_test(Condition *c); |
76 | | typedef int (*condition_test_logger_t)(void *userdata, int level, int error, const char *file, int line, const char *func, const char *format, ...) _printf_(7, 8); |
77 | | bool condition_test_list(Condition *first, const char *(*to_string)(ConditionType t), condition_test_logger_t logger, void *userdata); |
78 | | |
79 | | void condition_dump(Condition *c, FILE *f, const char *prefix, const char *(*to_string)(ConditionType t)); |
80 | | void condition_dump_list(Condition *c, FILE *f, const char *prefix, const char *(*to_string)(ConditionType t)); |
81 | | |
82 | | const char* condition_type_to_string(ConditionType t) _const_; |
83 | | ConditionType condition_type_from_string(const char *s) _pure_; |
84 | | |
85 | | const char* assert_type_to_string(ConditionType t) _const_; |
86 | | ConditionType assert_type_from_string(const char *s) _pure_; |
87 | | |
88 | | const char* condition_result_to_string(ConditionResult r) _const_; |
89 | | ConditionResult condition_result_from_string(const char *s) _pure_; |
90 | | |
91 | 0 | static inline bool condition_takes_path(ConditionType t) { |
92 | 0 | return IN_SET(t, |
93 | | CONDITION_PATH_EXISTS, |
94 | | CONDITION_PATH_EXISTS_GLOB, |
95 | | CONDITION_PATH_IS_DIRECTORY, |
96 | | CONDITION_PATH_IS_SYMBOLIC_LINK, |
97 | | CONDITION_PATH_IS_MOUNT_POINT, |
98 | | CONDITION_PATH_IS_READ_WRITE, |
99 | | CONDITION_DIRECTORY_NOT_EMPTY, |
100 | | CONDITION_FILE_NOT_EMPTY, |
101 | | CONDITION_FILE_IS_EXECUTABLE, |
102 | | CONDITION_NEEDS_UPDATE); |
103 | | } Unexecuted instantiation: fuzz-netdev-parser.c:condition_takes_path Unexecuted instantiation: netdev.c:condition_takes_path Unexecuted instantiation: geneve.c:condition_takes_path Unexecuted instantiation: wireguard.c:condition_takes_path Unexecuted instantiation: fou-tunnel.c:condition_takes_path Unexecuted instantiation: l2tp-tunnel.c:condition_takes_path Unexecuted instantiation: macsec.c:condition_takes_path Unexecuted instantiation: networkd-link.c:condition_takes_path Unexecuted instantiation: networkd-lldp-rx.c:condition_takes_path Unexecuted instantiation: networkd-lldp-tx.c:condition_takes_path Unexecuted instantiation: networkd-manager.c:condition_takes_path Unexecuted instantiation: networkd-ndisc.c:condition_takes_path Unexecuted instantiation: networkd-neighbor.c:condition_takes_path Unexecuted instantiation: networkd-radv.c:condition_takes_path Unexecuted instantiation: networkd-network-bus.c:condition_takes_path Unexecuted instantiation: networkd-network.c:condition_takes_path Unexecuted instantiation: networkd-route.c:condition_takes_path Unexecuted instantiation: networkd-routing-policy-rule.c:condition_takes_path Unexecuted instantiation: networkd-speed-meter.c:condition_takes_path Unexecuted instantiation: networkd-util.c:condition_takes_path Unexecuted instantiation: networkd-network-gperf.c:condition_takes_path Unexecuted instantiation: netdev-gperf.c:condition_takes_path Unexecuted instantiation: bond.c:condition_takes_path Unexecuted instantiation: bridge.c:condition_takes_path Unexecuted instantiation: networkd-address-label.c:condition_takes_path Unexecuted instantiation: networkd-address-pool.c:condition_takes_path Unexecuted instantiation: networkd-address.c:condition_takes_path Unexecuted instantiation: networkd-brvlan.c:condition_takes_path Unexecuted instantiation: networkd-can.c:condition_takes_path Unexecuted instantiation: networkd-conf.c:condition_takes_path Unexecuted instantiation: networkd-dhcp4.c:condition_takes_path Unexecuted instantiation: networkd-dhcp6.c:condition_takes_path Unexecuted instantiation: networkd-fdb.c:condition_takes_path Unexecuted instantiation: networkd-ipv4ll.c:condition_takes_path Unexecuted instantiation: networkd-ipv6-proxy-ndp.c:condition_takes_path Unexecuted instantiation: networkd-link-bus.c:condition_takes_path Unexecuted instantiation: networkd-manager-bus.c:condition_takes_path Unexecuted instantiation: networkd-gperf.c:condition_takes_path Unexecuted instantiation: network-internal.c:condition_takes_path Unexecuted instantiation: fuzz-network-parser.c:condition_takes_path Unexecuted instantiation: fuzz-unit-file.c:condition_takes_path Unexecuted instantiation: load-fragment-gperf.c:condition_takes_path Unexecuted instantiation: ip-address-access.c:condition_takes_path Unexecuted instantiation: load-fragment.c:condition_takes_path Unexecuted instantiation: manager.c:condition_takes_path Unexecuted instantiation: path.c:condition_takes_path Unexecuted instantiation: service.c:condition_takes_path Unexecuted instantiation: socket.c:condition_takes_path Unexecuted instantiation: timer.c:condition_takes_path Unexecuted instantiation: transaction.c:condition_takes_path Unexecuted instantiation: unit-printf.c:condition_takes_path Unexecuted instantiation: unit.c:condition_takes_path Unexecuted instantiation: automount.c:condition_takes_path Unexecuted instantiation: bpf-firewall.c:condition_takes_path Unexecuted instantiation: cgroup.c:condition_takes_path Unexecuted instantiation: dbus-automount.c:condition_takes_path Unexecuted instantiation: dbus-job.c:condition_takes_path Unexecuted instantiation: dbus-manager.c:condition_takes_path Unexecuted instantiation: dbus-path.c:condition_takes_path Unexecuted instantiation: dbus-scope.c:condition_takes_path Unexecuted instantiation: dbus-service.c:condition_takes_path Unexecuted instantiation: dbus-socket.c:condition_takes_path Unexecuted instantiation: dbus-timer.c:condition_takes_path Unexecuted instantiation: dbus-unit.c:condition_takes_path Unexecuted instantiation: dbus-util.c:condition_takes_path Unexecuted instantiation: dbus.c:condition_takes_path Unexecuted instantiation: device.c:condition_takes_path Unexecuted instantiation: dynamic-user.c:condition_takes_path Unexecuted instantiation: emergency-action.c:condition_takes_path Unexecuted instantiation: execute.c:condition_takes_path Unexecuted instantiation: job.c:condition_takes_path Unexecuted instantiation: load-dropin.c:condition_takes_path Unexecuted instantiation: mount.c:condition_takes_path Unexecuted instantiation: scope.c:condition_takes_path Unexecuted instantiation: slice.c:condition_takes_path Unexecuted instantiation: swap.c:condition_takes_path Unexecuted instantiation: target.c:condition_takes_path Unexecuted instantiation: bpf-devices.c:condition_takes_path Unexecuted instantiation: dbus-cgroup.c:condition_takes_path Unexecuted instantiation: dbus-device.c:condition_takes_path Unexecuted instantiation: dbus-execute.c:condition_takes_path Unexecuted instantiation: dbus-kill.c:condition_takes_path Unexecuted instantiation: dbus-mount.c:condition_takes_path Unexecuted instantiation: dbus-slice.c:condition_takes_path Unexecuted instantiation: dbus-swap.c:condition_takes_path Unexecuted instantiation: dbus-target.c:condition_takes_path Unexecuted instantiation: udev-builtin-net_setup_link.c:condition_takes_path Unexecuted instantiation: link-config.c:condition_takes_path Unexecuted instantiation: ethtool-util.c:condition_takes_path Unexecuted instantiation: link-config-gperf.c:condition_takes_path Unexecuted instantiation: fuzz-link-parser.c:condition_takes_path Unexecuted instantiation: bus-unit-util.c:condition_takes_path Unexecuted instantiation: condition.c:condition_takes_path |