#include <sys/uio.h>
#include "alloc-util.h"
+#include "iovec-util-fundamental.h"
#include "macro.h"
extern const struct iovec iovec_nul_byte; /* Points to a single NUL byte */
bool iovec_increment(struct iovec *iovec, size_t n, size_t k);
-/* This accepts both const and non-const pointers */
-#define IOVEC_MAKE(base, len) \
- (struct iovec) { \
- .iov_base = (void*) (base), \
- .iov_len = (len), \
- }
-
static inline struct iovec* iovec_make_string(struct iovec *iovec, const char *s) {
assert(iovec);
/* We don't use strlen_ptr() here, because we don't want to include string-util.h for now */
.iov_len = STRLEN(s), \
}
-static inline void iovec_done(struct iovec *iovec) {
- /* A _cleanup_() helper that frees the iov_base in the iovec */
- assert(iovec);
-
- iovec->iov_base = mfree(iovec->iov_base);
- iovec->iov_len = 0;
-}
-
static inline void iovec_done_erase(struct iovec *iovec) {
assert(iovec);
iovec->iov_len = 0;
}
-static inline bool iovec_is_set(const struct iovec *iovec) {
- /* Checks if the iovec points to a non-empty chunk of memory */
- return iovec && iovec->iov_len > 0 && iovec->iov_base;
-}
-
-static inline bool iovec_is_valid(const struct iovec *iovec) {
- /* Checks if the iovec is either NULL, empty or points to a valid bit of memory */
- return !iovec || (iovec->iov_base || iovec->iov_len == 0);
-}
-
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);
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#if SD_BOOT
+/* struct iovec is a POSIX userspace construct. Let's introduce it also in EFI mode, it's just so useful */
+struct iovec {
+ void *iov_base;
+ size_t iov_len;
+};
+
+static inline void free(void *p);
+#endif
+
+/* This accepts both const and non-const pointers */
+#define IOVEC_MAKE(base, len) \
+ (struct iovec) { \
+ .iov_base = (void*) (base), \
+ .iov_len = (len), \
+ }
+
+static inline void iovec_done(struct iovec *iovec) {
+ /* A _cleanup_() helper that frees the iov_base in the iovec */
+ assert(iovec);
+
+ iovec->iov_base = mfree(iovec->iov_base);
+ iovec->iov_len = 0;
+}
+
+static inline bool iovec_is_set(const struct iovec *iovec) {
+ /* Checks if the iovec points to a non-empty chunk of memory */
+ return iovec && iovec->iov_len > 0 && iovec->iov_base;
+}
+
+static inline bool iovec_is_valid(const struct iovec *iovec) {
+ /* Checks if the iovec is either NULL, empty or points to a valid bit of memory */
+ return !iovec || (iovec->iov_base || iovec->iov_len == 0);
+}