]>
| Commit | Line | Data |
|---|---|---|
| 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ | |
| 2 | #pragma once | |
| 3 | ||
| 4 | #include "basic-forward.h" | |
| 5 | ||
| 6 | int flush_fd(int fd); | |
| 7 | ||
| 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); | |
| 10 | ||
| 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); | |
| 14 | } | |
| 15 | ||
| 16 | int pipe_eof(int fd); | |
| 17 | ||
| 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); | |
| 21 | } | |
| 22 | ||
| 23 | int fd_wait_for_event(int fd, int event, usec_t timeout); | |
| 24 | ||
| 25 | ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length); | |
| 26 | ||
| 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. */ | |
| 30 | ||
| 31 | return (l >> 63) == 0; | |
| 32 | } | |
| 33 | ||
| 34 | static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) { | |
| 35 | ||
| 36 | /* Same as above, but allows one extra value: -1 as indication for infinity. */ | |
| 37 | ||
| 38 | if (l == UINT64_MAX) | |
| 39 | return true; | |
| 40 | ||
| 41 | return FILE_SIZE_VALID(l); | |
| 42 | } |