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

systemd / systemd / 16307057356

15 Jul 2025 11:29PM UTC coverage: 72.142% (-0.02%) from 72.166%
16307057356

push

github

web-flow
fsck,quotacheck: add credentials support and drop support of /forcefsck and friends (#38197)

17 of 54 new or added lines in 2 files covered. (31.48%)

2680 existing lines in 65 files now uncovered.

301900 of 418480 relevant lines covered (72.14%)

731273.64 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) {
5,516✔
11
        return parse_tristate_full(v, NULL, ret);
5,516✔
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
int parse_user_shell(const char *s, char **ret_sh, bool *ret_copy);
24

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

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

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

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

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

43
static inline int safe_atou8(const char *s, uint8_t *ret) {
144,288✔
44
        return safe_atou8_full(s, 0, ret);
144,288✔
45
}
46

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

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

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

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

59
static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
227,327✔
60
        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
227,327✔
61
        return safe_atou_full(s, base, (unsigned*) ret_u);
227,314✔
62
}
63

64
static inline int safe_atou32(const char *s, uint32_t *ret_u) {
21,712✔
65
        return safe_atou32_full(s, 0, (unsigned*) ret_u);
21,726✔
66
}
67

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

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

75
static inline int safe_atollu(const char *s, unsigned long long *ret_llu) {
1,425,138✔
76
        return safe_atollu_full(s, 0, ret_llu);
1,418,846✔
77
}
78

79
static inline int safe_atou64(const char *s, uint64_t *ret_u) {
1,415,665✔
80
        assert_cc(sizeof(uint64_t) == sizeof(unsigned long long));
1,415,665✔
81
        return safe_atollu(s, (unsigned long long*) ret_u);
1,413,008✔
82
}
83

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

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

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

114
static inline int safe_atolu(const char *s, unsigned long *ret_u) {
122,210✔
115
        return safe_atolu_full(s, 0, ret_u);
119,676✔
116
}
117

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

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

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

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

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

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

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

149
/* 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
150
 * to a loadavg_t. */
151
int store_loadavg_fixed_point(unsigned long i, unsigned long f, loadavg_t *ret);
152
int parse_loadavg_fixed_point(const char *s, loadavg_t *ret);
153

154
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