• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

systemd / systemd / 15263807472

26 May 2025 08:53PM UTC coverage: 72.046% (-0.002%) from 72.048%
15263807472

push

github

yuwata
src/core/manager.c: log preset activity on first boot

This gives us a little more information about what units were enabled
or disabled on that first boot and will be useful for OS developers
tracking down the source of unit state.

An example with this enabled looks like:

```
NET: Registered PF_VSOCK protocol family
systemd[1]: Applying preset policy.
systemd[1]: Unit /etc/systemd/system/dnsmasq.service is masked, ignoring.
systemd[1]: Unit /etc/systemd/system/systemd-repart.service is masked, ignoring.
systemd[1]: Removed '/etc/systemd/system/sockets.target.wants/systemd-resolved-monitor.socket'.
systemd[1]: Removed '/etc/systemd/system/sockets.target.wants/systemd-resolved-varlink.socket'.
systemd[1]: Created symlink '/etc/systemd/system/multi-user.target.wants/var-mnt-workdir.mount' → '/etc/systemd/system/var-mnt-workdir.mount'.
systemd[1]: Created symlink '/etc/systemd/system/multi-user.target.wants/var-mnt-workdir\x2dtmp.mount' → '/etc/systemd/system/var-mnt-workdir\x2dtmp.mount'.
systemd[1]: Created symlink '/etc/systemd/system/afterburn-sshkeys.target.requires/afterburn-sshkeys@core.service' → '/usr/lib/systemd/system/afterburn-sshkeys@.service'.
systemd[1]: Created symlink '/etc/systemd/system/sockets.target.wants/systemd-resolved-varlink.socket' → '/usr/lib/systemd/system/systemd-resolved-varlink.socket'.
systemd[1]: Created symlink '/etc/systemd/system/sockets.target.wants/systemd-resolved-monitor.socket' → '/usr/lib/systemd/system/systemd-resolved-monitor.socket'.
systemd[1]: Populated /etc with preset unit settings.
```

Considering it only happens on first boot and not on every boot I think
the extra information is worth the extra verbosity in the logs just for
that boot.

5 of 6 new or added lines in 1 file covered. (83.33%)

5463 existing lines in 165 files now uncovered.

299151 of 415222 relevant lines covered (72.05%)

702386.45 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.5
/src/basic/parse-util.h
1
/* SPDX-License-Identifier: LGPL-2.1-or-later */
2
#pragma once
3

4
#include "forward.h"
5

6
typedef unsigned long loadavg_t;
7

8
int parse_boolean(const char *v) _pure_;
9
int parse_tristate_full(const char *v, const char *third, int *ret);
10
static inline int parse_tristate(const char *v, int *ret) {
6,881✔
11
        return parse_tristate_full(v, NULL, ret);
6,881✔
12
}
13
int parse_pid(const char *s, pid_t* ret_pid);
14
int parse_mode(const char *s, mode_t *ret);
15
int parse_ifindex(const char *s);
16
int parse_mtu(int family, const char *s, uint32_t *ret);
17

18
int parse_size(const char *t, uint64_t base, uint64_t *size);
19
int parse_sector_size(const char *t, uint64_t *ret);
20
int parse_range(const char *t, unsigned *lower, unsigned *upper);
21
int parse_errno(const char *t);
22
int parse_fd(const char *t);
23

24
#define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30)
25
#define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29)
26
#define SAFE_ATO_REFUSE_LEADING_WHITESPACE (1U << 28)
27
#define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
28
#define SAFE_ATO_MASK_FLAGS(base) ((base) & ~SAFE_ATO_ALL_FLAGS)
29

30
int safe_atou_full(const char *s, unsigned base, unsigned *ret_u);
31
static inline int safe_atou(const char *s, unsigned *ret_u) {
1,523,949✔
32
        return safe_atou_full(s, 0, ret_u);
1,523,949✔
33
}
34

35
int safe_atou_bounded(const char *s, unsigned min, unsigned max, unsigned *ret);
36

37
int safe_atoi(const char *s, int *ret_i);
38
int safe_atolli(const char *s, long long *ret_i);
39

40
int safe_atou8_full(const char *s, unsigned base, uint8_t *ret);
41

42
static inline int safe_atou8(const char *s, uint8_t *ret) {
143,331✔
43
        return safe_atou8_full(s, 0, ret);
143,331✔
44
}
45

46
int safe_atou16_full(const char *s, unsigned base, uint16_t *ret);
47

48
static inline int safe_atou16(const char *s, uint16_t *ret) {
111✔
49
        return safe_atou16_full(s, 0, ret);
111✔
50
}
51

52
static inline int safe_atoux16(const char *s, uint16_t *ret) {
3,372✔
53
        return safe_atou16_full(s, 16, ret);
3,372✔
54
}
55

56
int safe_atoi16(const char *s, int16_t *ret);
57

58
static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
20,401✔
59
        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
226,925✔
60
        return safe_atou_full(s, base, (unsigned*) ret_u);
226,912✔
61
}
62

63
static inline int safe_atou32(const char *s, uint32_t *ret_u) {
20,360✔
64
        return safe_atou32_full(s, 0, (unsigned*) ret_u);
20,374✔
65
}
66

67
static inline int safe_atoi32(const char *s, int32_t *ret_i) {
25✔
68
        assert_cc(sizeof(int32_t) == sizeof(int));
25✔
69
        return safe_atoi(s, (int*) ret_i);
25✔
70
}
71

72
int safe_atollu_full(const char *s, unsigned base, unsigned long long *ret_llu);
73

74
static inline int safe_atollu(const char *s, unsigned long long *ret_llu) {
1,429,985✔
75
        return safe_atollu_full(s, 0, ret_llu);
1,425,630✔
76
}
77

78
static inline int safe_atou64(const char *s, uint64_t *ret_u) {
1,422,136✔
79
        assert_cc(sizeof(uint64_t) == sizeof(unsigned long long));
1,422,136✔
80
        return safe_atollu(s, (unsigned long long*) ret_u);
1,418,929✔
81
}
82

83
static inline int safe_atoi64(const char *s, int64_t *ret_i) {
22✔
84
        assert_cc(sizeof(int64_t) == sizeof(long long));
22✔
85
        return safe_atolli(s, (long long*) ret_i);
22✔
86
}
87

88
static inline int safe_atoux64(const char *s, uint64_t *ret) {
49,763✔
89
        assert_cc(sizeof(int64_t) == sizeof(unsigned long long));
49,763✔
90
        return safe_atollu_full(s, 16, (unsigned long long*) ret);
49,763✔
91
}
92

93
#if LONG_MAX == INT_MAX
94
static inline int safe_atolu_full(const char *s, unsigned base, unsigned long *ret_u) {
95
        assert_cc(sizeof(unsigned long) == sizeof(unsigned));
96
        return safe_atou_full(s, base, (unsigned*) ret_u);
97
}
98
static inline int safe_atoli(const char *s, long *ret_u) {
99
        assert_cc(sizeof(long) == sizeof(int));
100
        return safe_atoi(s, (int*) ret_u);
101
}
102
#else
103
static inline int safe_atolu_full(const char *s, unsigned base, unsigned long *ret_u) {
122,439✔
104
        assert_cc(sizeof(unsigned long) == sizeof(unsigned long long));
122,439✔
105
        return safe_atollu_full(s, base, (unsigned long long*) ret_u);
23,707✔
106
}
UNCOV
107
static inline int safe_atoli(const char *s, long *ret_u) {
×
UNCOV
108
        assert_cc(sizeof(long) == sizeof(long long));
×
UNCOV
109
        return safe_atolli(s, (long long*) ret_u);
×
110
}
111
#endif
112

113
static inline int safe_atolu(const char *s, unsigned long *ret_u) {
114,769✔
114
        return safe_atolu_full(s, 0, ret_u);
112,372✔
115
}
116

117
#if SIZE_MAX == UINT_MAX
118
static inline int safe_atozu(const char *s, size_t *ret_u) {
119
        assert_cc(sizeof(size_t) == sizeof(unsigned));
120
        return safe_atou(s, (unsigned *) ret_u);
121
}
122
#else
123
static inline int safe_atozu(const char *s, size_t *ret_u) {
2,397✔
124
        assert_cc(sizeof(size_t) == sizeof(unsigned long));
2,397✔
125
        return safe_atolu(s, ret_u);
2,397✔
126
}
127
#endif
128

129
int safe_atod(const char *s, double *ret_d);
130

131
int parse_fractional_part_u(const char **s, size_t digits, unsigned *res);
132

133
int parse_nice(const char *p, int *ret);
134

135
int parse_ip_port(const char *s, uint16_t *ret);
136
int parse_ip_port_range(const char *s, uint16_t *low, uint16_t *high, bool allow_zero);
137

138
int parse_oom_score_adjust(const char *s, int *ret);
139

140
/* Implement floating point using fixed integers, to improve performance when
141
 * calculating load averages. These macros can be used to extract the integer
142
 * and decimal parts of a value. */
143
#define LOADAVG_PRECISION_BITS  11
144
#define LOADAVG_FIXED_POINT_1_0 (1 << LOADAVG_PRECISION_BITS)
145
#define LOADAVG_INT_SIDE(x)     ((x) >> LOADAVG_PRECISION_BITS)
146
#define LOADAVG_DECIMAL_SIDE(x) LOADAVG_INT_SIDE(((x) & (LOADAVG_FIXED_POINT_1_0 - 1)) * 100)
147

148
/* Given a Linux load average (e.g. decimal number 34.89 where 34 is passed as i and 89 is passed as f), convert it
149
 * to a loadavg_t. */
150
int store_loadavg_fixed_point(unsigned long i, unsigned long f, loadavg_t *ret);
151
int parse_loadavg_fixed_point(const char *s, loadavg_t *ret);
152

153
bool nft_identifier_valid(const char *id);
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc