]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/io-util.h
237a9ff77f785370c6e077dd9e827996115bdeef
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
8 ssize_t
loop_read(int fd
, void *buf
, size_t nbytes
, bool do_poll
);
9 int loop_read_exact(int fd
, void *buf
, size_t nbytes
, bool do_poll
);
11 int loop_write_full(int fd
, const void *buf
, size_t nbytes
, usec_t timeout
) _nonnull_if_nonzero_(2, 3);
12 static inline int loop_write(int fd
, const void *buf
, size_t nbytes
) {
13 return loop_write_full(fd
, buf
, nbytes
, 0);
18 int ppoll_usec_full(struct pollfd
*fds
, size_t n_fds
, usec_t timeout
, const sigset_t
*ss
) _nonnull_if_nonzero_(1, 2);
19 _nonnull_if_nonzero_(1, 2) static inline int ppoll_usec(struct pollfd
*fds
, size_t n_fds
, usec_t timeout
) {
20 return ppoll_usec_full(fds
, n_fds
, timeout
, NULL
);
23 int fd_wait_for_event(int fd
, int event
, usec_t timeout
);
25 ssize_t
sparse_write(int fd
, const void *p
, size_t sz
, size_t run_length
);
27 static inline bool FILE_SIZE_VALID(uint64_t l
) {
28 /* ftruncate() and friends take an unsigned file size, but actually cannot deal with file sizes larger than
29 * 2^63 since the kernel internally handles it as signed value. This call allows checking for this early. */
31 return (l
>> 63) == 0;
34 static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l
) {
36 /* Same as above, but allows one extra value: -1 as indication for infinity. */
41 return FILE_SIZE_VALID(l
);