Bug Summary

File:build-scan/../src/libsystemd/sd-network/sd-network.c
Warning:line 313, column 9
Value stored to 'fd' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name sd-network.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -relaxed-aliasing -menable-no-infs -menable-no-nans -menable-unsafe-fp-math -fno-signed-zeros -mreassociate -freciprocal-math -fdenormal-fp-math=preserve-sign,preserve-sign -ffp-contract=fast -fno-rounding-math -ffast-math -ffinite-math-only -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/12.0.0 -include config.h -I src/libsystemd/libsystemd_static.a.p -I src/libsystemd -I ../src/libsystemd -I src/basic -I ../src/basic -I src/shared -I ../src/shared -I src/systemd -I ../src/systemd -I src/journal -I ../src/journal -I src/journal-remote -I ../src/journal-remote -I src/nspawn -I ../src/nspawn -I src/resolve -I ../src/resolve -I src/timesync -I ../src/timesync -I ../src/time-wait-sync -I src/login -I ../src/login -I src/udev -I ../src/udev -I src/libudev -I ../src/libudev -I src/core -I ../src/core -I ../src/libsystemd/sd-bus -I ../src/libsystemd/sd-device -I ../src/libsystemd/sd-hwdb -I ../src/libsystemd/sd-id128 -I ../src/libsystemd/sd-netlink -I ../src/libsystemd/sd-network -I src/libsystemd-network -I ../src/libsystemd-network -I . -I .. -D _FILE_OFFSET_BITS=64 -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/12.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -Wwrite-strings -Wno-unused-parameter -Wno-missing-field-initializers -Wno-unused-result -Wno-format-signedness -Wno-error=nonnull -std=gnu99 -fconst-strings -fdebug-compilation-dir /home/mrc0mmand/repos/@redhat-plumbers/systemd-rhel8/build-scan -ferror-limit 19 -fvisibility default -stack-protector 2 -fgnuc-version=4.2.1 -fcolor-diagnostics -analyzer-output=html -faddrsig -o /tmp/scan-build-2021-07-16-221226-1465241-1 -x c ../src/libsystemd/sd-network/sd-network.c
1/* SPDX-License-Identifier: LGPL-2.1+ */
2
3#include <errno(*__errno_location ()).h>
4#include <poll.h>
5#include <string.h>
6#include <sys/inotify.h>
7
8#include "sd-network.h"
9
10#include "alloc-util.h"
11#include "fd-util.h"
12#include "fileio.h"
13#include "fs-util.h"
14#include "macro.h"
15#include "parse-util.h"
16#include "stdio-util.h"
17#include "string-util.h"
18#include "strv.h"
19#include "util.h"
20
21_public___attribute__ ((visibility("default"))) int sd_network_get_operational_state(char **state) {
22 _cleanup_free___attribute__((cleanup(freep))) char *s = NULL((void*)0);
23 int r;
24
25 assert_return(state, -EINVAL)do { if (!(((__builtin_expect(!!(state),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("state"), "../src/libsystemd/sd-network/sd-network.c"
, 25, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
26
27 r = parse_env_file(NULL((void*)0), "/run/systemd/netif/state", NEWLINE"\n\r", "OPER_STATE", &s, NULL((void*)0));
28 if (r == -ENOENT2)
29 return -ENODATA61;
30 if (r < 0)
31 return r;
32 if (isempty(s))
33 return -ENODATA61;
34
35 *state = TAKE_PTR(s)({ typeof(s) _ptr_ = (s); (s) = ((void*)0); _ptr_; });
36
37 return 0;
38}
39
40static int network_get_strv(const char *key, char ***ret) {
41 _cleanup_strv_free___attribute__((cleanup(strv_freep))) char **a = NULL((void*)0);
42 _cleanup_free___attribute__((cleanup(freep))) char *s = NULL((void*)0);
43 int r;
44
45 assert_return(ret, -EINVAL)do { if (!(((__builtin_expect(!!(ret),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("ret"), "../src/libsystemd/sd-network/sd-network.c"
, 45, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
46
47 r = parse_env_file(NULL((void*)0), "/run/systemd/netif/state", NEWLINE"\n\r", key, &s, NULL((void*)0));
48 if (r == -ENOENT2)
49 return -ENODATA61;
50 if (r < 0)
51 return r;
52 if (isempty(s)) {
53 *ret = NULL((void*)0);
54 return 0;
55 }
56
57 a = strv_split(s, " ");
58 if (!a)
59 return -ENOMEM12;
60
61 strv_uniq(a);
62 r = (int) strv_length(a);
63
64 *ret = TAKE_PTR(a)({ typeof(a) _ptr_ = (a); (a) = ((void*)0); _ptr_; });
65
66 return r;
67}
68
69_public___attribute__ ((visibility("default"))) int sd_network_get_dns(char ***ret) {
70 return network_get_strv("DNS", ret);
71}
72
73_public___attribute__ ((visibility("default"))) int sd_network_get_ntp(char ***ret) {
74 return network_get_strv("NTP", ret);
75}
76
77_public___attribute__ ((visibility("default"))) int sd_network_get_search_domains(char ***ret) {
78 return network_get_strv("DOMAINS", ret);
79}
80
81_public___attribute__ ((visibility("default"))) int sd_network_get_route_domains(char ***ret) {
82 return network_get_strv("ROUTE_DOMAINS", ret);
83}
84
85static int network_link_get_string(int ifindex, const char *field, char **ret) {
86 char path[STRLEN("/run/systemd/netif/links/")(sizeof("""/run/systemd/netif/links/""") - 1) + DECIMAL_STR_MAX(ifindex)(2+(sizeof(ifindex) <= 1 ? 3 : sizeof(ifindex) <= 2 ? 5
: sizeof(ifindex) <= 4 ? 10 : sizeof(ifindex) <= 8 ? 20
: sizeof(int[-2*(sizeof(ifindex) > 8)])))
+ 1];
87 _cleanup_free___attribute__((cleanup(freep))) char *s = NULL((void*)0);
88 int r;
89
90 assert_return(ifindex > 0, -EINVAL)do { if (!(((__builtin_expect(!!(ifindex > 0),1))) ? (1) :
(log_assert_failed_return_realm(LOG_REALM_SYSTEMD, ("ifindex > 0"
), "../src/libsystemd/sd-network/sd-network.c", 90, __PRETTY_FUNCTION__
), 0))) return (-22); } while (0)
;
91 assert_return(ret, -EINVAL)do { if (!(((__builtin_expect(!!(ret),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("ret"), "../src/libsystemd/sd-network/sd-network.c"
, 91, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
92
93 xsprintf(path, "/run/systemd/netif/links/%i", ifindex)do { if ((__builtin_expect(!!(!(((size_t) snprintf(path, __extension__
(__builtin_choose_expr( !__builtin_types_compatible_p(typeof
(path), typeof(&*(path))), sizeof(path)/sizeof((path)[0])
, ((void)0))), "/run/systemd/netif/links/%i", ifindex) < (
__extension__ (__builtin_choose_expr( !__builtin_types_compatible_p
(typeof(path), typeof(&*(path))), sizeof(path)/sizeof((path
)[0]), ((void)0))))))),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("xsprintf: " "path" "[] must be big enough"), "../src/libsystemd/sd-network/sd-network.c"
, 93, __PRETTY_FUNCTION__); } while (0)
;
94
95 r = parse_env_file(NULL((void*)0), path, NEWLINE"\n\r", field, &s, NULL((void*)0));
96 if (r == -ENOENT2)
97 return -ENODATA61;
98 if (r < 0)
99 return r;
100 if (isempty(s))
101 return -ENODATA61;
102
103 *ret = TAKE_PTR(s)({ typeof(s) _ptr_ = (s); (s) = ((void*)0); _ptr_; });
104
105 return 0;
106}
107
108static int network_link_get_strv(int ifindex, const char *key, char ***ret) {
109 char path[STRLEN("/run/systemd/netif/links/")(sizeof("""/run/systemd/netif/links/""") - 1) + DECIMAL_STR_MAX(ifindex)(2+(sizeof(ifindex) <= 1 ? 3 : sizeof(ifindex) <= 2 ? 5
: sizeof(ifindex) <= 4 ? 10 : sizeof(ifindex) <= 8 ? 20
: sizeof(int[-2*(sizeof(ifindex) > 8)])))
+ 1];
110 _cleanup_strv_free___attribute__((cleanup(strv_freep))) char **a = NULL((void*)0);
111 _cleanup_free___attribute__((cleanup(freep))) char *s = NULL((void*)0);
112 int r;
113
114 assert_return(ifindex > 0, -EINVAL)do { if (!(((__builtin_expect(!!(ifindex > 0),1))) ? (1) :
(log_assert_failed_return_realm(LOG_REALM_SYSTEMD, ("ifindex > 0"
), "../src/libsystemd/sd-network/sd-network.c", 114, __PRETTY_FUNCTION__
), 0))) return (-22); } while (0)
;
115 assert_return(ret, -EINVAL)do { if (!(((__builtin_expect(!!(ret),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("ret"), "../src/libsystemd/sd-network/sd-network.c"
, 115, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
116
117 xsprintf(path, "/run/systemd/netif/links/%i", ifindex)do { if ((__builtin_expect(!!(!(((size_t) snprintf(path, __extension__
(__builtin_choose_expr( !__builtin_types_compatible_p(typeof
(path), typeof(&*(path))), sizeof(path)/sizeof((path)[0])
, ((void)0))), "/run/systemd/netif/links/%i", ifindex) < (
__extension__ (__builtin_choose_expr( !__builtin_types_compatible_p
(typeof(path), typeof(&*(path))), sizeof(path)/sizeof((path
)[0]), ((void)0))))))),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("xsprintf: " "path" "[] must be big enough"), "../src/libsystemd/sd-network/sd-network.c"
, 117, __PRETTY_FUNCTION__); } while (0)
;
118 r = parse_env_file(NULL((void*)0), path, NEWLINE"\n\r", key, &s, NULL((void*)0));
119 if (r == -ENOENT2)
120 return -ENODATA61;
121 if (r < 0)
122 return r;
123 if (isempty(s)) {
124 *ret = NULL((void*)0);
125 return 0;
126 }
127
128 a = strv_split(s, " ");
129 if (!a)
130 return -ENOMEM12;
131
132 strv_uniq(a);
133 r = (int) strv_length(a);
134
135 *ret = TAKE_PTR(a)({ typeof(a) _ptr_ = (a); (a) = ((void*)0); _ptr_; });
136
137 return r;
138}
139
140_public___attribute__ ((visibility("default"))) int sd_network_link_get_setup_state(int ifindex, char **state) {
141 return network_link_get_string(ifindex, "ADMIN_STATE", state);
142}
143
144_public___attribute__ ((visibility("default"))) int sd_network_link_get_network_file(int ifindex, char **filename) {
145 return network_link_get_string(ifindex, "NETWORK_FILE", filename);
146}
147
148_public___attribute__ ((visibility("default"))) int sd_network_link_get_operational_state(int ifindex, char **state) {
149 return network_link_get_string(ifindex, "OPER_STATE", state);
150}
151
152_public___attribute__ ((visibility("default"))) int sd_network_link_get_required_for_online(int ifindex) {
153 _cleanup_free___attribute__((cleanup(freep))) char *s = NULL((void*)0);
154 int r;
155
156 r = network_link_get_string(ifindex, "REQUIRED_FOR_ONLINE", &s);
157 if (r < 0) {
158 /* Handle -ENODATA as RequiredForOnline=yes, for compatibility */
159 if (r == -ENODATA61)
160 return true1;
161 return r;
162 }
163
164 return parse_boolean(s);
165}
166
167_public___attribute__ ((visibility("default"))) int sd_network_link_get_llmnr(int ifindex, char **llmnr) {
168 return network_link_get_string(ifindex, "LLMNR", llmnr);
169}
170
171_public___attribute__ ((visibility("default"))) int sd_network_link_get_mdns(int ifindex, char **mdns) {
172 return network_link_get_string(ifindex, "MDNS", mdns);
173}
174
175_public___attribute__ ((visibility("default"))) int sd_network_link_get_dns_over_tls(int ifindex, char **dns_over_tls) {
176 return network_link_get_string(ifindex, "DNS_OVER_TLS", dns_over_tls);
177}
178
179_public___attribute__ ((visibility("default"))) int sd_network_link_get_dnssec(int ifindex, char **dnssec) {
180 return network_link_get_string(ifindex, "DNSSEC", dnssec);
181}
182
183_public___attribute__ ((visibility("default"))) int sd_network_link_get_dnssec_negative_trust_anchors(int ifindex, char ***nta) {
184 return network_link_get_strv(ifindex, "DNSSEC_NTA", nta);
185}
186
187_public___attribute__ ((visibility("default"))) int sd_network_link_get_timezone(int ifindex, char **ret) {
188 return network_link_get_string(ifindex, "TIMEZONE", ret);
189}
190
191_public___attribute__ ((visibility("default"))) int sd_network_link_get_dns(int ifindex, char ***ret) {
192 return network_link_get_strv(ifindex, "DNS", ret);
193}
194
195_public___attribute__ ((visibility("default"))) int sd_network_link_get_ntp(int ifindex, char ***ret) {
196 return network_link_get_strv(ifindex, "NTP", ret);
197}
198
199_public___attribute__ ((visibility("default"))) int sd_network_link_get_search_domains(int ifindex, char ***ret) {
200 return network_link_get_strv(ifindex, "DOMAINS", ret);
201}
202
203_public___attribute__ ((visibility("default"))) int sd_network_link_get_route_domains(int ifindex, char ***ret) {
204 return network_link_get_strv(ifindex, "ROUTE_DOMAINS", ret);
205}
206
207static int network_link_get_ifindexes(int ifindex, const char *key, int **ret) {
208 char path[STRLEN("/run/systemd/netif/links/")(sizeof("""/run/systemd/netif/links/""") - 1) + DECIMAL_STR_MAX(ifindex)(2+(sizeof(ifindex) <= 1 ? 3 : sizeof(ifindex) <= 2 ? 5
: sizeof(ifindex) <= 4 ? 10 : sizeof(ifindex) <= 8 ? 20
: sizeof(int[-2*(sizeof(ifindex) > 8)])))
+ 1];
209 _cleanup_free___attribute__((cleanup(freep))) int *ifis = NULL((void*)0);
210 _cleanup_free___attribute__((cleanup(freep))) char *s = NULL((void*)0);
211 size_t allocated = 0, c = 0;
212 const char *x;
213 int r;
214
215 assert_return(ifindex > 0, -EINVAL)do { if (!(((__builtin_expect(!!(ifindex > 0),1))) ? (1) :
(log_assert_failed_return_realm(LOG_REALM_SYSTEMD, ("ifindex > 0"
), "../src/libsystemd/sd-network/sd-network.c", 215, __PRETTY_FUNCTION__
), 0))) return (-22); } while (0)
;
216 assert_return(ret, -EINVAL)do { if (!(((__builtin_expect(!!(ret),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("ret"), "../src/libsystemd/sd-network/sd-network.c"
, 216, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
217
218 xsprintf(path, "/run/systemd/netif/links/%i", ifindex)do { if ((__builtin_expect(!!(!(((size_t) snprintf(path, __extension__
(__builtin_choose_expr( !__builtin_types_compatible_p(typeof
(path), typeof(&*(path))), sizeof(path)/sizeof((path)[0])
, ((void)0))), "/run/systemd/netif/links/%i", ifindex) < (
__extension__ (__builtin_choose_expr( !__builtin_types_compatible_p
(typeof(path), typeof(&*(path))), sizeof(path)/sizeof((path
)[0]), ((void)0))))))),0))) log_assert_failed_realm(LOG_REALM_SYSTEMD
, ("xsprintf: " "path" "[] must be big enough"), "../src/libsystemd/sd-network/sd-network.c"
, 218, __PRETTY_FUNCTION__); } while (0)
;
219 r = parse_env_file(NULL((void*)0), path, NEWLINE"\n\r", key, &s, NULL((void*)0));
220 if (r == -ENOENT2)
221 return -ENODATA61;
222 if (r < 0)
223 return r;
224
225 for (x = s;;) {
226 _cleanup_free___attribute__((cleanup(freep))) char *word = NULL((void*)0);
227
228 r = extract_first_word(&x, &word, NULL((void*)0), 0);
229 if (r < 0)
230 return r;
231 if (r == 0)
232 break;
233
234 r = parse_ifindex(word, &ifindex);
235 if (r < 0)
236 return r;
237
238 if (!GREEDY_REALLOC(ifis, allocated, c + 2)greedy_realloc((void**) &(ifis), &(allocated), (c + 2
), sizeof((ifis)[0]))
)
239 return -ENOMEM12;
240
241 ifis[c++] = ifindex;
242 }
243
244 if (ifis)
245 ifis[c] = 0; /* Let's add a 0 ifindex to the end, to be nice */
246
247 *ret = TAKE_PTR(ifis)({ typeof(ifis) _ptr_ = (ifis); (ifis) = ((void*)0); _ptr_; }
)
;
248
249 return c;
250}
251
252_public___attribute__ ((visibility("default"))) int sd_network_link_get_carrier_bound_to(int ifindex, int **ret) {
253 return network_link_get_ifindexes(ifindex, "CARRIER_BOUND_TO", ret);
254}
255
256_public___attribute__ ((visibility("default"))) int sd_network_link_get_carrier_bound_by(int ifindex, int **ret) {
257 return network_link_get_ifindexes(ifindex, "CARRIER_BOUND_BY", ret);
258}
259
260static inline int MONITOR_TO_FD(sd_network_monitor *m) {
261 return (int) (unsigned long) m - 1;
262}
263
264static inline sd_network_monitor* FD_TO_MONITOR(int fd) {
265 return (sd_network_monitor*) (unsigned long) (fd + 1);
266}
267
268static int monitor_add_inotify_watch(int fd) {
269 int k;
270
271 k = inotify_add_watch(fd, "/run/systemd/netif/links/", IN_MOVED_TO0x00000080|IN_DELETE0x00000200);
272 if (k >= 0)
273 return 0;
274 else if (errno(*__errno_location ()) != ENOENT2)
275 return -errno(*__errno_location ());
276
277 k = inotify_add_watch(fd, "/run/systemd/netif/", IN_CREATE0x00000100|IN_ISDIR0x40000000);
278 if (k >= 0)
279 return 0;
280 else if (errno(*__errno_location ()) != ENOENT2)
281 return -errno(*__errno_location ());
282
283 k = inotify_add_watch(fd, "/run/systemd/", IN_CREATE0x00000100|IN_ISDIR0x40000000);
284 if (k < 0)
285 return -errno(*__errno_location ());
286
287 return 0;
288}
289
290_public___attribute__ ((visibility("default"))) int sd_network_monitor_new(sd_network_monitor **m, const char *category) {
291 _cleanup_close___attribute__((cleanup(closep))) int fd = -1;
292 int k;
293 bool_Bool good = false0;
294
295 assert_return(m, -EINVAL)do { if (!(((__builtin_expect(!!(m),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("m"), "../src/libsystemd/sd-network/sd-network.c"
, 295, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
296
297 fd = inotify_init1(IN_NONBLOCKIN_NONBLOCK|IN_CLOEXECIN_CLOEXEC);
298 if (fd < 0)
299 return -errno(*__errno_location ());
300
301 if (!category || streq(category, "links")(strcmp((category),("links")) == 0)) {
302 k = monitor_add_inotify_watch(fd);
303 if (k < 0)
304 return k;
305
306 good = true1;
307 }
308
309 if (!good)
310 return -EINVAL22;
311
312 *m = FD_TO_MONITOR(fd);
313 fd = -1;
Value stored to 'fd' is never read
314
315 return 0;
316}
317
318_public___attribute__ ((visibility("default"))) sd_network_monitor* sd_network_monitor_unref(sd_network_monitor *m) {
319 int fd;
320
321 if (m) {
322 fd = MONITOR_TO_FD(m);
323 close_nointr(fd);
324 }
325
326 return NULL((void*)0);
327}
328
329_public___attribute__ ((visibility("default"))) int sd_network_monitor_flush(sd_network_monitor *m) {
330 union inotify_event_buffer buffer;
331 struct inotify_event *e;
332 ssize_t l;
333 int fd, k;
334
335 assert_return(m, -EINVAL)do { if (!(((__builtin_expect(!!(m),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("m"), "../src/libsystemd/sd-network/sd-network.c"
, 335, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
336
337 fd = MONITOR_TO_FD(m);
338
339 l = read(fd, &buffer, sizeof(buffer));
340 if (l < 0) {
341 if (IN_SET(errno, EAGAIN, EINTR)({ _Bool _found = 0; static __attribute__ ((unused)) char _static_assert__macros_need_to_be_extended
[20 - sizeof((int[]){11, 4})/sizeof(int)]; switch((*__errno_location
())) { case 11: case 4: _found = 1; break; default: break; }
_found; })
)
342 return 0;
343
344 return -errno(*__errno_location ());
345 }
346
347 FOREACH_INOTIFY_EVENT(e, buffer, l)for ((e) = &buffer.ev; (uint8_t*) (e) < (uint8_t*) (buffer
.raw) + (l); (e) = (struct inotify_event*) ((uint8_t*) (e) + sizeof
(struct inotify_event) + (e)->len))
{
348 if (e->mask & IN_ISDIR0x40000000) {
349 k = monitor_add_inotify_watch(fd);
350 if (k < 0)
351 return k;
352
353 k = inotify_rm_watch(fd, e->wd);
354 if (k < 0)
355 return -errno(*__errno_location ());
356 }
357 }
358
359 return 0;
360}
361
362_public___attribute__ ((visibility("default"))) int sd_network_monitor_get_fd(sd_network_monitor *m) {
363
364 assert_return(m, -EINVAL)do { if (!(((__builtin_expect(!!(m),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("m"), "../src/libsystemd/sd-network/sd-network.c"
, 364, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
365
366 return MONITOR_TO_FD(m);
367}
368
369_public___attribute__ ((visibility("default"))) int sd_network_monitor_get_events(sd_network_monitor *m) {
370
371 assert_return(m, -EINVAL)do { if (!(((__builtin_expect(!!(m),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("m"), "../src/libsystemd/sd-network/sd-network.c"
, 371, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
372
373 /* For now we will only return POLLIN here, since we don't
374 * need anything else ever for inotify. However, let's have
375 * this API to keep our options open should we later on need
376 * it. */
377 return POLLIN0x001;
378}
379
380_public___attribute__ ((visibility("default"))) int sd_network_monitor_get_timeout(sd_network_monitor *m, uint64_t *timeout_usec) {
381
382 assert_return(m, -EINVAL)do { if (!(((__builtin_expect(!!(m),1))) ? (1) : (log_assert_failed_return_realm
(LOG_REALM_SYSTEMD, ("m"), "../src/libsystemd/sd-network/sd-network.c"
, 382, __PRETTY_FUNCTION__), 0))) return (-22); } while (0)
;
383 assert_return(timeout_usec, -EINVAL)do { if (!(((__builtin_expect(!!(timeout_usec),1))) ? (1) : (
log_assert_failed_return_realm(LOG_REALM_SYSTEMD, ("timeout_usec"
), "../src/libsystemd/sd-network/sd-network.c", 383, __PRETTY_FUNCTION__
), 0))) return (-22); } while (0)
;
384
385 /* For now we will only return (uint64_t) -1, since we don't
386 * need any timeout. However, let's have this API to keep our
387 * options open should we later on need it. */
388 *timeout_usec = (uint64_t) -1;
389 return 0;
390}