diff --git a/src/basic/audit-util.c b/src/basic/audit-util.c index 92479affa3..bf96e080d2 100644 --- a/src/basic/audit-util.c +++ b/src/basic/audit-util.c @@ -10,7 +10,7 @@ #include "audit-util.h" #include "fd-util.h" #include "fileio.h" -#include "io-util.h" +#include "iovec-util.h" #include "macro.h" #include "parse-util.h" #include "process-util.h" diff --git a/src/basic/io-util.c b/src/basic/io-util.c index 25831e47dc..ede959fabc 100644 --- a/src/basic/io-util.c +++ b/src/basic/io-util.c @@ -7,6 +7,7 @@ #include "errno-util.h" #include "io-util.h" +#include "iovec-util.h" #include "string-util.h" #include "time-util.h" @@ -304,138 +305,3 @@ ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length) { return q - (const uint8_t*) p; } - -char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value) { - char *x; - - x = strjoin(field, value); - if (x) - iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x); - return x; -} - -char* set_iovec_string_field_free(struct iovec *iovec, size_t *n_iovec, const char *field, char *value) { - char *x; - - x = set_iovec_string_field(iovec, n_iovec, field, value); - free(value); - return x; -} - -struct iovec_wrapper *iovw_new(void) { - return malloc0(sizeof(struct iovec_wrapper)); -} - -void iovw_free_contents(struct iovec_wrapper *iovw, bool free_vectors) { - if (free_vectors) - for (size_t i = 0; i < iovw->count; i++) - free(iovw->iovec[i].iov_base); - - iovw->iovec = mfree(iovw->iovec); - iovw->count = 0; -} - -struct iovec_wrapper *iovw_free_free(struct iovec_wrapper *iovw) { - iovw_free_contents(iovw, true); - - return mfree(iovw); -} - -struct iovec_wrapper *iovw_free(struct iovec_wrapper *iovw) { - iovw_free_contents(iovw, false); - - return mfree(iovw); -} - -int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len) { - if (iovw->count >= IOV_MAX) - return -E2BIG; - - if (!GREEDY_REALLOC(iovw->iovec, iovw->count + 1)) - return -ENOMEM; - - iovw->iovec[iovw->count++] = IOVEC_MAKE(data, len); - return 0; -} - -int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const char *value) { - _cleanup_free_ char *x = NULL; - int r; - - x = strjoin(field, value); - if (!x) - return -ENOMEM; - - r = iovw_put(iovw, x, strlen(x)); - if (r >= 0) - TAKE_PTR(x); - - return r; -} - -int iovw_put_string_field_free(struct iovec_wrapper *iovw, const char *field, char *value) { - _cleanup_free_ _unused_ char *free_ptr = value; - - return iovw_put_string_field(iovw, field, value); -} - -void iovw_rebase(struct iovec_wrapper *iovw, char *old, char *new) { - for (size_t i = 0; i < iovw->count; i++) - iovw->iovec[i].iov_base = (char *)iovw->iovec[i].iov_base - old + new; -} - -size_t iovw_size(struct iovec_wrapper *iovw) { - size_t n = 0; - - for (size_t i = 0; i < iovw->count; i++) - n += iovw->iovec[i].iov_len; - - return n; -} - -int iovw_append(struct iovec_wrapper *target, const struct iovec_wrapper *source) { - size_t original_count; - int r; - - assert(target); - - /* This duplicates the source and merges it into the target. */ - - if (iovw_isempty(source)) - return 0; - - original_count = target->count; - - FOREACH_ARRAY(iovec, source->iovec, source->count) { - void *dup; - - dup = memdup(iovec->iov_base, iovec->iov_len); - if (!dup) { - r = -ENOMEM; - goto rollback; - } - - r = iovw_consume(target, dup, iovec->iov_len); - if (r < 0) - goto rollback; - } - - return 0; - -rollback: - for (size_t i = original_count; i < target->count; i++) - free(target->iovec[i].iov_base); - - target->count = original_count; - return r; -} - -void iovec_array_free(struct iovec *iov, size_t n) { - if (!iov) - return; - - for (size_t i = 0; i < n; i++) - free(iov[i].iov_base); - - free(iov); -} diff --git a/src/basic/io-util.h b/src/basic/io-util.h index 2a1b2fe5da..e027c1a878 100644 --- a/src/basic/io-util.h +++ b/src/basic/io-util.h @@ -6,7 +6,6 @@ #include #include #include -#include #include "macro.h" #include "time-util.h" @@ -28,38 +27,6 @@ int fd_wait_for_event(int fd, int event, usec_t timeout); ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length); -static inline size_t IOVEC_TOTAL_SIZE(const struct iovec *i, size_t n) { - size_t r = 0; - - for (size_t j = 0; j < n; j++) - r += i[j].iov_len; - - return r; -} - -static inline bool IOVEC_INCREMENT(struct iovec *i, size_t n, size_t k) { - /* Returns true if there is nothing else to send (bytes written cover all of the iovec), - * false if there's still work to do. */ - - for (size_t j = 0; j < n; j++) { - size_t sub; - - if (i[j].iov_len == 0) - continue; - if (k == 0) - return false; - - sub = MIN(i[j].iov_len, k); - i[j].iov_len -= sub; - i[j].iov_base = (uint8_t*) i[j].iov_base + sub; - k -= sub; - } - - assert(k == 0); /* Anything else would mean that we wrote more bytes than available, - * or the kernel reported writing more bytes than sent. */ - return true; -} - static inline bool FILE_SIZE_VALID(uint64_t l) { /* ftruncate() and friends take an unsigned file size, but actually cannot deal with file sizes larger than * 2^63 since the kernel internally handles it as signed value. This call allows checking for this early. */ @@ -77,51 +44,3 @@ static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) { return FILE_SIZE_VALID(l); } - -#define IOVEC_NULL (struct iovec) {} -#define IOVEC_MAKE(base, len) (struct iovec) { .iov_base = (base), .iov_len = (len) } -#define IOVEC_MAKE_STRING(string) \ - ({ \ - char *_s = (char*) (string); \ - IOVEC_MAKE(_s, strlen(_s)); \ - }) - -char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value); -char* set_iovec_string_field_free(struct iovec *iovec, size_t *n_iovec, const char *field, char *value); - -struct iovec_wrapper { - struct iovec *iovec; - size_t count; -}; - -struct iovec_wrapper *iovw_new(void); -struct iovec_wrapper *iovw_free(struct iovec_wrapper *iovw); -struct iovec_wrapper *iovw_free_free(struct iovec_wrapper *iovw); - -DEFINE_TRIVIAL_CLEANUP_FUNC(struct iovec_wrapper*, iovw_free_free); - -void iovw_free_contents(struct iovec_wrapper *iovw, bool free_vectors); - -int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len); -static inline int iovw_consume(struct iovec_wrapper *iovw, void *data, size_t len) { - /* Move data into iovw or free on error */ - int r; - - r = iovw_put(iovw, data, len); - if (r < 0) - free(data); - - return r; -} - -static inline bool iovw_isempty(const struct iovec_wrapper *iovw) { - return !iovw || iovw->count == 0; -} - -int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const char *value); -int iovw_put_string_field_free(struct iovec_wrapper *iovw, const char *field, char *value); -void iovw_rebase(struct iovec_wrapper *iovw, char *old, char *new); -size_t iovw_size(struct iovec_wrapper *iovw); -int iovw_append(struct iovec_wrapper *target, const struct iovec_wrapper *source); - -void iovec_array_free(struct iovec *iov, size_t n); diff --git a/src/basic/iovec-util.c b/src/basic/iovec-util.c new file mode 100644 index 0000000000..11aa630ae6 --- /dev/null +++ b/src/basic/iovec-util.c @@ -0,0 +1,73 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "iovec-util.h" +#include "string-util.h" + +size_t iovec_total_size(const struct iovec *i, size_t n) { + size_t sum = 0; + + assert(i || n == 0); + + FOREACH_ARRAY(j, i, n) + sum += j->iov_len; + + return sum; +} + +bool iovec_increment(struct iovec *i, size_t n, size_t k) { + assert(i || n == 0); + + /* Returns true if there is nothing else to send (bytes written cover all of the iovec), + * false if there's still work to do. */ + + FOREACH_ARRAY(j, i, n) { + size_t sub; + + if (j->iov_len == 0) + continue; + if (k == 0) + return false; + + sub = MIN(j->iov_len, k); + j->iov_len -= sub; + j->iov_base = (uint8_t*) j->iov_base + sub; + k -= sub; + } + + assert(k == 0); /* Anything else would mean that we wrote more bytes than available, + * or the kernel reported writing more bytes than sent. */ + return true; +} + +char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value) { + char *x; + + assert(iovec); + assert(n_iovec); + + x = strjoin(field, value); + if (x) + iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x); + return x; +} + +char* set_iovec_string_field_free(struct iovec *iovec, size_t *n_iovec, const char *field, char *value) { + char *x; + + assert(iovec); + assert(n_iovec); + + x = set_iovec_string_field(iovec, n_iovec, field, value); + free(value); + return x; +} + +void iovec_array_free(struct iovec *iov, size_t n) { + if (!iov) + return; + + for (size_t i = 0; i < n; i++) + free(iov[i].iov_base); + + free(iov); +} diff --git a/src/basic/iovec-util.h b/src/basic/iovec-util.h new file mode 100644 index 0000000000..1f72898cba --- /dev/null +++ b/src/basic/iovec-util.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include +#include +#include + +#include "macro.h" + +size_t iovec_total_size(const struct iovec *i, size_t n); + +bool iovec_increment(struct iovec *i, size_t n, size_t k); + +#define IOVEC_NULL (const struct iovec) {} + +#define IOVEC_MAKE(base, len) (struct iovec) { .iov_base = (base), .iov_len = (len) } +#define IOVEC_MAKE_STRING(string) \ + ({ \ + const char *_s = (string); \ + IOVEC_MAKE((char*) _s, strlen(_s)); \ + }) + +char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value); +char* set_iovec_string_field_free(struct iovec *iovec, size_t *n_iovec, const char *field, char *value); + +void iovec_array_free(struct iovec *iov, size_t n); diff --git a/src/basic/iovec-wrapper.c b/src/basic/iovec-wrapper.c new file mode 100644 index 0000000000..b335acd108 --- /dev/null +++ b/src/basic/iovec-wrapper.c @@ -0,0 +1,131 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "alloc-util.h" +#include "iovec-util.h" +#include "iovec-wrapper.h" +#include "string-util.h" + +struct iovec_wrapper *iovw_new(void) { + return new0(struct iovec_wrapper, 1); +} + +void iovw_free_contents(struct iovec_wrapper *iovw, bool free_vectors) { + assert(iovw); + + if (free_vectors) + for (size_t i = 0; i < iovw->count; i++) + free(iovw->iovec[i].iov_base); + + iovw->iovec = mfree(iovw->iovec); + iovw->count = 0; +} + +struct iovec_wrapper *iovw_free_free(struct iovec_wrapper *iovw) { + if (!iovw) + return NULL; + + iovw_free_contents(iovw, /* free_vectors= */ true); + return mfree(iovw); +} + +struct iovec_wrapper *iovw_free(struct iovec_wrapper *iovw) { + if (!iovw) + return NULL; + + iovw_free_contents(iovw, /* free_vectors= */ false); + return mfree(iovw); +} + +int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len) { + assert(iovw); + + if (len == 0) + return 0; + + assert(data); + + if (iovw->count >= IOV_MAX) + return -E2BIG; + + if (!GREEDY_REALLOC(iovw->iovec, iovw->count + 1)) + return -ENOMEM; + + iovw->iovec[iovw->count++] = IOVEC_MAKE(data, len); + return 0; +} + +int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const char *value) { + _cleanup_free_ char *x = NULL; + int r; + + assert(iovw); + + x = strjoin(field, value); + if (!x) + return -ENOMEM; + + r = iovw_put(iovw, x, strlen(x)); + if (r >= 0) + TAKE_PTR(x); + + return r; +} + +int iovw_put_string_field_free(struct iovec_wrapper *iovw, const char *field, char *value) { + _cleanup_free_ _unused_ char *free_ptr = value; + + return iovw_put_string_field(iovw, field, value); +} + +void iovw_rebase(struct iovec_wrapper *iovw, void *old, void *new) { + assert(iovw); + + FOREACH_ARRAY(i, iovw->iovec, iovw->count) { + assert(i->iov_base >= old); + i->iov_base = (uint8_t*) i->iov_base - (uint8_t*) old + (uint8_t*) new; + } +} + +size_t iovw_size(const struct iovec_wrapper *iovw) { + if (!iovw) + return 0; + + return iovec_total_size(iovw->iovec, iovw->count); +} + +int iovw_append(struct iovec_wrapper *target, const struct iovec_wrapper *source) { + size_t original_count; + int r; + + assert(target); + + /* This duplicates the source and merges it into the target. */ + + if (iovw_isempty(source)) + return 0; + + original_count = target->count; + + FOREACH_ARRAY(iovec, source->iovec, source->count) { + void *dup; + + dup = memdup(iovec->iov_base, iovec->iov_len); + if (!dup) { + r = -ENOMEM; + goto rollback; + } + + r = iovw_consume(target, dup, iovec->iov_len); + if (r < 0) + goto rollback; + } + + return 0; + +rollback: + for (size_t i = original_count; i < target->count; i++) + free(target->iovec[i].iov_base); + + target->count = original_count; + return r; +} diff --git a/src/basic/iovec-wrapper.h b/src/basic/iovec-wrapper.h new file mode 100644 index 0000000000..05e220c1d0 --- /dev/null +++ b/src/basic/iovec-wrapper.h @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include +#include + +#include "macro.h" + +struct iovec_wrapper { + struct iovec *iovec; + size_t count; +}; + +struct iovec_wrapper *iovw_new(void); +struct iovec_wrapper *iovw_free(struct iovec_wrapper *iovw); +struct iovec_wrapper *iovw_free_free(struct iovec_wrapper *iovw); + +DEFINE_TRIVIAL_CLEANUP_FUNC(struct iovec_wrapper*, iovw_free_free); + +void iovw_free_contents(struct iovec_wrapper *iovw, bool free_vectors); + +int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len); +static inline int iovw_consume(struct iovec_wrapper *iovw, void *data, size_t len) { + /* Move data into iovw or free on error */ + int r; + + r = iovw_put(iovw, data, len); + if (r < 0) + free(data); + + return r; +} + +static inline bool iovw_isempty(const struct iovec_wrapper *iovw) { + return !iovw || iovw->count == 0; +} + +int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const char *value); +int iovw_put_string_field_free(struct iovec_wrapper *iovw, const char *field, char *value); +void iovw_rebase(struct iovec_wrapper *iovw, void *old, void *new); +size_t iovw_size(const struct iovec_wrapper *iovw); +int iovw_append(struct iovec_wrapper *target, const struct iovec_wrapper *source); diff --git a/src/basic/log.c b/src/basic/log.c index 17b9b2afe0..e7fe84611e 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -21,7 +21,7 @@ #include "errno-util.h" #include "fd-util.h" #include "format-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "log.h" #include "macro.h" #include "missing_syscall.h" @@ -541,7 +541,7 @@ static int write_to_syslog( if (!syslog_is_stream) break; - if (IOVEC_INCREMENT(iovec, ELEMENTSOF(iovec), n)) + if (iovec_increment(iovec, ELEMENTSOF(iovec), n)) break; } diff --git a/src/basic/meson.build b/src/basic/meson.build index 0e4c5584da..438e8493b8 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build @@ -45,6 +45,8 @@ basic_sources = files( 'inotify-util.c', 'io-util.c', 'ioprio-util.c', + 'iovec-util.c', + 'iovec-wrapper.c', 'label.c', 'limits-util.c', 'locale-util.c', diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c index 74322645de..ed9f01dd9e 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c @@ -20,7 +20,7 @@ #include "fd-util.h" #include "fileio.h" #include "hexdecoct.h" -#include "io-util.h" +#include "iovec-util.h" #include "ioprio-util.h" #include "journal-file.h" #include "load-fragment.h" diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c index a70f64f7ff..9e465791b3 100644 --- a/src/core/dynamic-user.c +++ b/src/core/dynamic-user.c @@ -10,7 +10,7 @@ #include "fileio.h" #include "format-util.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "lock-util.h" #include "nscd-flush.h" #include "parse-util.h" diff --git a/src/core/exec-invoke.c b/src/core/exec-invoke.c index 02d6af29f8..3b8cec8258 100644 --- a/src/core/exec-invoke.c +++ b/src/core/exec-invoke.c @@ -40,6 +40,7 @@ #include "fd-util.h" #include "hexdecoct.h" #include "io-util.h" +#include "iovec-util.h" #include "missing_ioprio.h" #include "missing_prctl.h" #include "missing_securebits.h" diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index ece2ec840f..6e3a22bc16 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -39,7 +39,7 @@ #include "firewall-util.h" #include "fs-util.h" #include "hexdecoct.h" -#include "io-util.h" +#include "iovec-util.h" #include "ioprio-util.h" #include "ip-protocol-list.h" #include "journal-file.h" diff --git a/src/core/show-status.c b/src/core/show-status.c index c6b106fc9c..d5eb724159 100644 --- a/src/core/show-status.c +++ b/src/core/show-status.c @@ -6,7 +6,7 @@ #include "alloc-util.h" #include "fd-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "parse-util.h" #include "show-status.h" #include "string-table.h" diff --git a/src/core/unit.c b/src/core/unit.c index a60656709a..179059b94f 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -33,7 +33,7 @@ #include "format-util.h" #include "id128-util.h" #include "install.h" -#include "io-util.h" +#include "iovec-util.h" #include "label-util.h" #include "load-dropin.h" #include "load-fragment.h" diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c index 1962512c67..1a49c8d777 100644 --- a/src/coredump/coredump.c +++ b/src/coredump/coredump.c @@ -29,7 +29,7 @@ #include "fd-util.h" #include "fileio.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-importer.h" #include "journal-send.h" #include "log.h" diff --git a/src/fuzz/fuzz-varlink.c b/src/fuzz/fuzz-varlink.c index 3407760fbf..18db78ce98 100644 --- a/src/fuzz/fuzz-varlink.c +++ b/src/fuzz/fuzz-varlink.c @@ -6,7 +6,7 @@ #include "fd-util.h" #include "fuzz.h" #include "hexdecoct.h" -#include "io-util.h" +#include "iovec-util.h" #include "varlink.h" #include "log.h" @@ -41,7 +41,7 @@ static int io_callback(sd_event_source *s, int fd, uint32_t revents, void *userd else assert_se(errno == EAGAIN); } else - IOVEC_INCREMENT(iov, 1, n); + iovec_increment(iov, 1, n); } if (revents & EPOLLIN) { diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c index a2ebf97c9c..bddfe76c1a 100644 --- a/src/journal/journald-audit.c +++ b/src/journal/journald-audit.c @@ -7,7 +7,7 @@ #include "errno-util.h" #include "fd-util.h" #include "hexdecoct.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-internal.h" #include "journald-audit.h" #include "missing_audit.h" diff --git a/src/journal/journald-console.c b/src/journal/journald-console.c index d914f92999..dfa4096a91 100644 --- a/src/journal/journald-console.c +++ b/src/journal/journald-console.c @@ -8,7 +8,7 @@ #include "fd-util.h" #include "fileio.h" #include "format-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journald-console.h" #include "journald-server.h" #include "parse-util.h" diff --git a/src/journal/journald-context.c b/src/journal/journald-context.c index cc5b4bc6ad..f5f6ec590f 100644 --- a/src/journal/journald-context.c +++ b/src/journal/journald-context.c @@ -11,7 +11,7 @@ #include "fd-util.h" #include "fileio.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-internal.h" #include "journal-util.h" #include "journald-client.h" diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c index 5ee4c7e057..28d48808d0 100644 --- a/src/journal/journald-kmsg.c +++ b/src/journal/journald-kmsg.c @@ -15,7 +15,7 @@ #include "fd-util.h" #include "format-util.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-internal.h" #include "journald-kmsg.h" #include "journald-server.h" diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c index 4888c38fdb..06073ac0a5 100644 --- a/src/journal/journald-native.c +++ b/src/journal/journald-native.c @@ -9,7 +9,7 @@ #include "alloc-util.h" #include "fd-util.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-importer.h" #include "journal-internal.h" #include "journal-util.h" diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 371338211a..58e23f7f76 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -28,7 +28,7 @@ #include "hostname-util.h" #include "id128-util.h" #include "initrd-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-authenticate.h" #include "journal-file-util.h" #include "journal-internal.h" @@ -962,7 +962,7 @@ static void server_write_to_journal( return; } - log_debug_errno(r, "Failed to write entry to %s (%zu items, %zu bytes): %m", f->path, n, IOVEC_TOTAL_SIZE(iovec, n)); + log_debug_errno(r, "Failed to write entry to %s (%zu items, %zu bytes): %m", f->path, n, iovec_total_size(iovec, n)); if (!shall_try_append_again(f, r)) return; @@ -992,7 +992,7 @@ static void server_write_to_journal( if (r < 0) log_ratelimit_error_errno(r, FAILED_TO_WRITE_ENTRY_RATELIMIT, "Failed to write entry to %s (%zu items, %zu bytes) despite vacuuming, ignoring: %m", - f->path, n, IOVEC_TOTAL_SIZE(iovec, n)); + f->path, n, iovec_total_size(iovec, n)); else server_schedule_sync(s, priority); } diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c index 222b036698..05a715e46b 100644 --- a/src/journal/journald-stream.c +++ b/src/journal/journald-stream.c @@ -18,7 +18,7 @@ #include "fd-util.h" #include "fileio.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-internal.h" #include "journald-client.h" #include "journald-console.h" diff --git a/src/journal/journald-syslog.c b/src/journal/journald-syslog.c index c1c0a913eb..f6accb5b44 100644 --- a/src/journal/journald-syslog.c +++ b/src/journal/journald-syslog.c @@ -9,7 +9,7 @@ #include "alloc-util.h" #include "fd-util.h" #include "format-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-internal.h" #include "journald-client.h" #include "journald-console.h" diff --git a/src/libsystemd-network/icmp6-util.c b/src/libsystemd-network/icmp6-util.c index ecd0dd0f31..a0521f0562 100644 --- a/src/libsystemd-network/icmp6-util.c +++ b/src/libsystemd-network/icmp6-util.c @@ -17,7 +17,7 @@ #include "fd-util.h" #include "icmp6-util.h" #include "in-addr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "socket-util.h" #define IN6ADDR_ALL_ROUTERS_MULTICAST_INIT \ diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 7ecd207993..a74a239e12 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -24,7 +24,7 @@ #include "event-util.h" #include "fd-util.h" #include "hostname-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "memory-util.h" #include "network-common.h" #include "random-util.h" diff --git a/src/libsystemd-network/sd-dhcp-server.c b/src/libsystemd-network/sd-dhcp-server.c index a2385ccb89..22a03203a8 100644 --- a/src/libsystemd-network/sd-dhcp-server.c +++ b/src/libsystemd-network/sd-dhcp-server.c @@ -15,7 +15,7 @@ #include "dns-domain.h" #include "fd-util.h" #include "in-addr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "memory-util.h" #include "network-common.h" #include "ordered-set.h" diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index d2402e676a..08b8676850 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -21,7 +21,7 @@ #include "hexdecoct.h" #include "hostname-util.h" #include "in-addr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "random-util.h" #include "socket-util.h" #include "sort-util.h" diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index 7da22c90c2..511d06d805 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -16,7 +16,7 @@ #include "fd-util.h" #include "icmp6-util.h" #include "in-addr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "macro.h" #include "memory-util.h" #include "network-common.h" diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c index f1cf6a8cc4..f0818b801c 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -12,7 +12,7 @@ #include "bus-signature.h" #include "bus-type.h" #include "fd-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "memfd-util.h" #include "memory-util.h" #include "string-util.h" @@ -1506,7 +1506,7 @@ _public_ int sd_bus_message_append_string_iovec( assert_return(iov || n == 0, -EINVAL); assert_return(!m->poisoned, -ESTALE); - size = IOVEC_TOTAL_SIZE(iov, n); + size = iovec_total_size(iov, n); r = sd_bus_message_append_string_space(m, size, &p); if (r < 0) @@ -2160,7 +2160,7 @@ _public_ int sd_bus_message_append_array_iovec( assert_return(iov || n == 0, -EINVAL); assert_return(!m->poisoned, -ESTALE); - size = IOVEC_TOTAL_SIZE(iov, n); + size = iovec_total_size(iov, n); r = sd_bus_message_append_array_space(m, type, size, &p); if (r < 0) diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c index 5079d68550..3c59d0d615 100644 --- a/src/libsystemd/sd-bus/bus-socket.c +++ b/src/libsystemd/sd-bus/bus-socket.c @@ -18,6 +18,7 @@ #include "fs-util.h" #include "hexdecoct.h" #include "io-util.h" +#include "iovec-util.h" #include "macro.h" #include "memory-util.h" #include "path-util.h" diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c index 5711e5e18a..7c370ab7bc 100644 --- a/src/libsystemd/sd-daemon/sd-daemon.c +++ b/src/libsystemd/sd-daemon/sd-daemon.c @@ -19,6 +19,7 @@ #include "fd-util.h" #include "fs-util.h" #include "io-util.h" +#include "iovec-util.h" #include "parse-util.h" #include "path-util.h" #include "process-util.h" @@ -584,14 +585,14 @@ static int pid_notify_with_fds_internal( send_ucred = false; } else { /* Unless we're using SOCK_STREAM, we expect to write all the contents immediately. */ - if (type != SOCK_STREAM && (size_t) n < IOVEC_TOTAL_SIZE(msghdr.msg_iov, msghdr.msg_iovlen)) + if (type != SOCK_STREAM && (size_t) n < iovec_total_size(msghdr.msg_iov, msghdr.msg_iovlen)) return -EIO; /* Make sure we only send fds and ucred once, even if we're using SOCK_STREAM. */ msghdr.msg_control = NULL; msghdr.msg_controllen = 0; } - } while (!IOVEC_INCREMENT(msghdr.msg_iov, msghdr.msg_iovlen, n)); + } while (!iovec_increment(msghdr.msg_iov, msghdr.msg_iovlen, n)); return 1; } diff --git a/src/libsystemd/sd-device/device-monitor.c b/src/libsystemd/sd-device/device-monitor.c index 10d455888f..15cb8d0774 100644 --- a/src/libsystemd/sd-device/device-monitor.c +++ b/src/libsystemd/sd-device/device-monitor.c @@ -20,7 +20,7 @@ #include "fd-util.h" #include "format-util.h" #include "hashmap.h" -#include "io-util.h" +#include "iovec-util.h" #include "missing_socket.h" #include "mountpoint-util.h" #include "set.h" diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c index 784c7e5fb1..1ca721e6c9 100644 --- a/src/libsystemd/sd-journal/journal-send.c +++ b/src/libsystemd/sd-journal/journal-send.c @@ -19,6 +19,7 @@ #include "fd-util.h" #include "fileio.h" #include "io-util.h" +#include "iovec-util.h" #include "journal-send.h" #include "memfd-util.h" #include "missing_syscall.h" diff --git a/src/libsystemd/sd-journal/test-journal-append.c b/src/libsystemd/sd-journal/test-journal-append.c index fbbf44add4..90a7ccb00f 100644 --- a/src/libsystemd/sd-journal/test-journal-append.c +++ b/src/libsystemd/sd-journal/test-journal-append.c @@ -8,7 +8,7 @@ #include "chattr-util.h" #include "fd-util.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-file-util.h" #include "log.h" #include "mmap-cache.h" diff --git a/src/libsystemd/sd-journal/test-journal-interleaving.c b/src/libsystemd/sd-journal/test-journal-interleaving.c index d8588759d1..fe97a9e4a6 100644 --- a/src/libsystemd/sd-journal/test-journal-interleaving.c +++ b/src/libsystemd/sd-journal/test-journal-interleaving.c @@ -8,7 +8,7 @@ #include "alloc-util.h" #include "chattr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-file-util.h" #include "journal-vacuum.h" #include "log.h" diff --git a/src/libsystemd/sd-journal/test-journal-stream.c b/src/libsystemd/sd-journal/test-journal-stream.c index 2897de4905..1dbfdcd607 100644 --- a/src/libsystemd/sd-journal/test-journal-stream.c +++ b/src/libsystemd/sd-journal/test-journal-stream.c @@ -7,7 +7,7 @@ #include "alloc-util.h" #include "chattr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-file-util.h" #include "journal-internal.h" #include "log.h" diff --git a/src/libsystemd/sd-journal/test-journal-verify.c b/src/libsystemd/sd-journal/test-journal-verify.c index 7853b36495..d05312c88f 100644 --- a/src/libsystemd/sd-journal/test-journal-verify.c +++ b/src/libsystemd/sd-journal/test-journal-verify.c @@ -6,7 +6,7 @@ #include "chattr-util.h" #include "fd-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-file-util.h" #include "journal-verify.h" #include "log.h" diff --git a/src/libsystemd/sd-journal/test-journal.c b/src/libsystemd/sd-journal/test-journal.c index a0916a0a24..badf6cdb45 100644 --- a/src/libsystemd/sd-journal/test-journal.c +++ b/src/libsystemd/sd-journal/test-journal.c @@ -4,7 +4,7 @@ #include #include "chattr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-authenticate.h" #include "journal-file-util.h" #include "journal-vacuum.h" diff --git a/src/libsystemd/sd-netlink/netlink-message-nfnl.c b/src/libsystemd/sd-netlink/netlink-message-nfnl.c index edde5d2a88..ff7f7c3480 100644 --- a/src/libsystemd/sd-netlink/netlink-message-nfnl.c +++ b/src/libsystemd/sd-netlink/netlink-message-nfnl.c @@ -7,7 +7,7 @@ #include "sd-netlink.h" -#include "io-util.h" +#include "iovec-util.h" #include "netlink-internal.h" #include "netlink-types.h" #include "netlink-util.h" diff --git a/src/libsystemd/sd-netlink/netlink-socket.c b/src/libsystemd/sd-netlink/netlink-socket.c index 635867bb58..64cde89ecf 100644 --- a/src/libsystemd/sd-netlink/netlink-socket.c +++ b/src/libsystemd/sd-netlink/netlink-socket.c @@ -10,7 +10,7 @@ #include "alloc-util.h" #include "fd-util.h" #include "format-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "netlink-internal.h" #include "netlink-types.h" #include "socket-util.h" diff --git a/src/libsystemd/sd-netlink/netlink-util.c b/src/libsystemd/sd-netlink/netlink-util.c index 6ded66b935..636af1a2d5 100644 --- a/src/libsystemd/sd-netlink/netlink-util.c +++ b/src/libsystemd/sd-netlink/netlink-util.c @@ -3,7 +3,7 @@ #include "sd-netlink.h" #include "fd-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "memory-util.h" #include "netlink-internal.h" #include "netlink-util.h" diff --git a/src/libsystemd/sd-resolve/sd-resolve.c b/src/libsystemd/sd-resolve/sd-resolve.c index dcd3547f8b..2000f86e69 100644 --- a/src/libsystemd/sd-resolve/sd-resolve.c +++ b/src/libsystemd/sd-resolve/sd-resolve.c @@ -19,6 +19,7 @@ #include "errno-util.h" #include "fd-util.h" #include "io-util.h" +#include "iovec-util.h" #include "list.h" #include "memory-util.h" #include "missing_syscall.h" diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c index 347cc9b0c0..09302c0dee 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -19,7 +19,7 @@ #include "format-util.h" #include "fs-util.h" #include "in-addr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "local-addresses.h" #include "machine-dbus.h" #include "machine.h" diff --git a/src/portable/portable.c b/src/portable/portable.c index a672bff3c5..89d9200770 100644 --- a/src/portable/portable.c +++ b/src/portable/portable.c @@ -22,7 +22,7 @@ #include "fileio.h" #include "fs-util.h" #include "install.h" -#include "io-util.h" +#include "iovec-util.h" #include "locale-util.h" #include "loop-util.h" #include "mkdir.h" diff --git a/src/pstore/pstore.c b/src/pstore/pstore.c index 4501b38cff..3c1d9bd74b 100644 --- a/src/pstore/pstore.c +++ b/src/pstore/pstore.c @@ -28,7 +28,7 @@ #include "fd-util.h" #include "fileio.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "journal-importer.h" #include "log.h" #include "macro.h" diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c index 85e4762ba2..ddd1db5e09 100644 --- a/src/resolve/resolved-dns-stream.c +++ b/src/resolve/resolved-dns-stream.c @@ -5,7 +5,7 @@ #include "alloc-util.h" #include "fd-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "macro.h" #include "missing_network.h" #include "resolved-dns-stream.h" @@ -331,7 +331,7 @@ static int on_stream_io(sd_event_source *es, int fd, uint32_t revents, void *use IOVEC_MAKE(DNS_PACKET_DATA(s->write_packet), s->write_packet->size), }; - IOVEC_INCREMENT(iov, ELEMENTSOF(iov), s->n_written); + iovec_increment(iov, ELEMENTSOF(iov), s->n_written); ssize_t ss = dns_stream_writev(s, iov, ELEMENTSOF(iov), 0); if (ss < 0) { diff --git a/src/resolve/resolved-dnstls-gnutls.c b/src/resolve/resolved-dnstls-gnutls.c index acdad6fa91..61f38ef4b4 100644 --- a/src/resolve/resolved-dnstls-gnutls.c +++ b/src/resolve/resolved-dnstls-gnutls.c @@ -171,7 +171,7 @@ ssize_t dnstls_stream_writev(DnsStream *stream, const struct iovec *iov, size_t assert(stream->encrypted); assert(stream->dnstls_data.session); assert(iov); - assert(IOVEC_TOTAL_SIZE(iov, iovcnt) > 0); + assert(iovec_total_size(iov, iovcnt) > 0); gnutls_record_cork(stream->dnstls_data.session); diff --git a/src/resolve/resolved-dnstls-openssl.c b/src/resolve/resolved-dnstls-openssl.c index 4a0132ad3d..b217417a1a 100644 --- a/src/resolve/resolved-dnstls-openssl.c +++ b/src/resolve/resolved-dnstls-openssl.c @@ -322,14 +322,14 @@ ssize_t dnstls_stream_writev(DnsStream *stream, const struct iovec *iov, size_t assert(stream->encrypted); assert(stream->dnstls_data.ssl); assert(iov); - assert(IOVEC_TOTAL_SIZE(iov, iovcnt) > 0); + assert(iovec_total_size(iov, iovcnt) > 0); if (iovcnt == 1) return dnstls_stream_write(stream, iov[0].iov_base, iov[0].iov_len); /* As of now, OpenSSL can not accumulate multiple writes, so join into a single buffer. Suboptimal, but better than multiple SSL_write calls. */ - count = IOVEC_TOTAL_SIZE(iov, iovcnt); + count = iovec_total_size(iov, iovcnt); buf = new(char, count); for (size_t i = 0, pos = 0; i < iovcnt; pos += iov[i].iov_len, i++) memcpy(buf + pos, iov[i].iov_base, iov[i].iov_len); diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index ed3800ed8a..fd800cedfe 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -19,6 +19,7 @@ #include "hostname-util.h" #include "idn-util.h" #include "io-util.h" +#include "iovec-util.h" #include "memstream-util.h" #include "missing_network.h" #include "missing_socket.h" diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c index 416130b9cc..a5cf8974db 100644 --- a/src/shared/ask-password-api.c +++ b/src/shared/ask-password-api.c @@ -28,6 +28,7 @@ #include "fs-util.h" #include "glyph-util.h" #include "io-util.h" +#include "iovec-util.h" #include "keyring-util.h" #include "log.h" #include "macro.h" diff --git a/src/shared/journal-importer.h b/src/shared/journal-importer.h index 6cbac4c4e1..d84dcc4bb0 100644 --- a/src/shared/journal-importer.h +++ b/src/shared/journal-importer.h @@ -9,6 +9,7 @@ #include "sd-id128.h" #include "io-util.h" +#include "iovec-wrapper.h" #include "time-util.h" /* Make sure not to make this smaller than the maximum coredump size. diff --git a/src/shared/openssl-util.h b/src/shared/openssl-util.h index 3f2971375a..e3f34a8576 100644 --- a/src/shared/openssl-util.h +++ b/src/shared/openssl-util.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "io-util.h" +#include "iovec-util.h" #include "macro.h" #include "sha256.h" diff --git a/src/shared/varlink.c b/src/shared/varlink.c index 683ceb314a..3ecc7502f3 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -11,6 +11,7 @@ #include "glyph-util.h" #include "hashmap.h" #include "io-util.h" +#include "iovec-util.h" #include "list.h" #include "path-util.h" #include "process-util.h" diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c index 721cdbd5fd..fd197ca622 100644 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@ -13,7 +13,7 @@ #include "fd-util.h" #include "fileio.h" #include "fs-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "memfd-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/test/test-log.c b/src/test/test-log.c index e337a3c7df..b0363c612a 100644 --- a/src/test/test-log.c +++ b/src/test/test-log.c @@ -5,6 +5,8 @@ #include "format-util.h" #include "io-util.h" +#include "iovec-util.h" +#include "iovec-wrapper.h" #include "log.h" #include "process-util.h" #include "string-util.h" diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c index 2c5d31e5f8..3372805aa1 100644 --- a/src/test/test-socket-util.c +++ b/src/test/test-socket-util.c @@ -14,7 +14,7 @@ #include "fd-util.h" #include "fs-util.h" #include "in-addr-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "log.h" #include "macro.h" #include "path-util.h" diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 7d9a8c018f..24ba8231f5 100644 --- a/src/udev/udev-ctrl.c +++ b/src/udev/udev-ctrl.c @@ -14,7 +14,7 @@ #include "errno-util.h" #include "fd-util.h" #include "format-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "socket-util.h" #include "strxcpyx.h" #include "udev-ctrl.h" diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c index 88a4c608e4..dab36c9057 100644 --- a/src/udev/udev-manager.c +++ b/src/udev/udev-manager.c @@ -14,7 +14,7 @@ #include "fs-util.h" #include "hashmap.h" #include "inotify-util.h" -#include "io-util.h" +#include "iovec-util.h" #include "limits-util.h" #include "list.h" #include "mkdir.h"