io-util: add new IOVEC_INIT/IOVEC_MAKE macros
This adds IOVEC_INIT() and IOVEC_MAKE() for initializing iovec structures from a pointer and a size. On top of these IOVEC_INIT_STRING() and IOVEC_MAKE_STRING() are added which take a string and automatically determine the size of the string using strlen(). This patch removes the old IOVEC_SET_STRING() macro, given that IOVEC_MAKE_STRING() is now useful for similar purposes. Note that the old IOVEC_SET_STRING() invocations were two characters shorter than the new ones using IOVEC_MAKE_STRING(), but I think the new syntax is more readable and more generic as it simply resolves to a C99 literal structure initialization. Moreover, we can use very similar syntax now for initializing strings and pointer+size iovec entries. We canalso use the new macros to initialize function parameters on-the-fly or array definitions. And given that we shouldn't have so many ways to do the same stuff, let's just settle on the new macros. (This also converts some code to use _cleanup_ where dynamically allocated strings were using IOVEC_SET_STRING() before, to modernize things a bit)
This commit is contained in:
+5
-8
@@ -40,14 +40,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);
|
||||
|
||||
#define IOVEC_SET_STRING(i, s) \
|
||||
do { \
|
||||
struct iovec *_i = &(i); \
|
||||
char *_s = (char *)(s); \
|
||||
_i->iov_base = _s; \
|
||||
_i->iov_len = strlen(_s); \
|
||||
} while (false)
|
||||
|
||||
static inline size_t IOVEC_TOTAL_SIZE(const struct iovec *i, unsigned n) {
|
||||
unsigned j;
|
||||
size_t r = 0;
|
||||
@@ -93,3 +85,8 @@ static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) {
|
||||
return FILE_SIZE_VALID(l);
|
||||
|
||||
}
|
||||
|
||||
#define IOVEC_INIT(base, len) { .iov_base = (base), .iov_len = (len) }
|
||||
#define IOVEC_MAKE(base, len) (struct iovec) IOVEC_INIT(base, len)
|
||||
#define IOVEC_INIT_STRING(string) IOVEC_INIT((char*) string, strlen(string))
|
||||
#define IOVEC_MAKE_STRING(string) (struct iovec) IOVEC_INIT_STRING(string)
|
||||
|
||||
@@ -20,8 +20,9 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "journal-importer.h"
|
||||
#include "fd-util.h"
|
||||
#include "io-util.h"
|
||||
#include "journal-importer.h"
|
||||
#include "parse-util.h"
|
||||
#include "string-util.h"
|
||||
#include "unaligned.h"
|
||||
@@ -38,7 +39,7 @@ static int iovw_put(struct iovec_wrapper *iovw, void* data, size_t len) {
|
||||
if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
|
||||
return log_oom();
|
||||
|
||||
iovw->iovec[iovw->count++] = (struct iovec) {data, len};
|
||||
iovw->iovec[iovw->count++] = IOVEC_MAKE(data, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+23
-23
@@ -351,22 +351,22 @@ static int write_to_console(
|
||||
|
||||
if (log_target == LOG_TARGET_CONSOLE_PREFIXED) {
|
||||
xsprintf(prefix, "<%i>", level);
|
||||
IOVEC_SET_STRING(iovec[n++], prefix);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(prefix);
|
||||
}
|
||||
|
||||
highlight = LOG_PRI(level) <= LOG_ERR && show_color;
|
||||
|
||||
if (show_location) {
|
||||
snprintf(location, sizeof(location), "(%s:%i) ", file, line);
|
||||
IOVEC_SET_STRING(iovec[n++], location);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(location);
|
||||
}
|
||||
|
||||
if (highlight)
|
||||
IOVEC_SET_STRING(iovec[n++], ANSI_HIGHLIGHT_RED);
|
||||
IOVEC_SET_STRING(iovec[n++], buffer);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(ANSI_HIGHLIGHT_RED);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(buffer);
|
||||
if (highlight)
|
||||
IOVEC_SET_STRING(iovec[n++], ANSI_NORMAL);
|
||||
IOVEC_SET_STRING(iovec[n++], "\n");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(ANSI_NORMAL);
|
||||
iovec[n++] = IOVEC_MAKE_STRING("\n");
|
||||
|
||||
if (writev(console_fd, iovec, n) < 0) {
|
||||
|
||||
@@ -425,11 +425,11 @@ static int write_to_syslog(
|
||||
|
||||
xsprintf(header_pid, "["PID_FMT"]: ", getpid_cached());
|
||||
|
||||
IOVEC_SET_STRING(iovec[0], header_priority);
|
||||
IOVEC_SET_STRING(iovec[1], header_time);
|
||||
IOVEC_SET_STRING(iovec[2], program_invocation_short_name);
|
||||
IOVEC_SET_STRING(iovec[3], header_pid);
|
||||
IOVEC_SET_STRING(iovec[4], buffer);
|
||||
iovec[0] = IOVEC_MAKE_STRING(header_priority);
|
||||
iovec[1] = IOVEC_MAKE_STRING(header_time);
|
||||
iovec[2] = IOVEC_MAKE_STRING(program_invocation_short_name);
|
||||
iovec[3] = IOVEC_MAKE_STRING(header_pid);
|
||||
iovec[4] = IOVEC_MAKE_STRING(buffer);
|
||||
|
||||
/* When using syslog via SOCK_STREAM separate the messages by NUL chars */
|
||||
if (syslog_is_stream)
|
||||
@@ -470,11 +470,11 @@ static int write_to_kmsg(
|
||||
xsprintf(header_priority, "<%i>", level);
|
||||
xsprintf(header_pid, "["PID_FMT"]: ", getpid_cached());
|
||||
|
||||
IOVEC_SET_STRING(iovec[0], header_priority);
|
||||
IOVEC_SET_STRING(iovec[1], program_invocation_short_name);
|
||||
IOVEC_SET_STRING(iovec[2], header_pid);
|
||||
IOVEC_SET_STRING(iovec[3], buffer);
|
||||
IOVEC_SET_STRING(iovec[4], "\n");
|
||||
iovec[0] = IOVEC_MAKE_STRING(header_priority);
|
||||
iovec[1] = IOVEC_MAKE_STRING(program_invocation_short_name);
|
||||
iovec[2] = IOVEC_MAKE_STRING(header_pid);
|
||||
iovec[3] = IOVEC_MAKE_STRING(buffer);
|
||||
iovec[4] = IOVEC_MAKE_STRING("\n");
|
||||
|
||||
if (writev(kmsg_fd, iovec, ELEMENTSOF(iovec)) < 0)
|
||||
return -errno;
|
||||
@@ -547,10 +547,10 @@ static int write_to_journal(
|
||||
|
||||
log_do_header(header, sizeof(header), level, error, file, line, func, object_field, object, extra_field, extra);
|
||||
|
||||
IOVEC_SET_STRING(iovec[0], header);
|
||||
IOVEC_SET_STRING(iovec[1], "MESSAGE=");
|
||||
IOVEC_SET_STRING(iovec[2], buffer);
|
||||
IOVEC_SET_STRING(iovec[3], "\n");
|
||||
iovec[0] = IOVEC_MAKE_STRING(header);
|
||||
iovec[1] = IOVEC_MAKE_STRING("MESSAGE=");
|
||||
iovec[2] = IOVEC_MAKE_STRING(buffer);
|
||||
iovec[3] = IOVEC_MAKE_STRING("\n");
|
||||
|
||||
mh.msg_iov = iovec;
|
||||
mh.msg_iovlen = ELEMENTSOF(iovec);
|
||||
@@ -872,7 +872,7 @@ int log_format_iovec(
|
||||
* the next format string */
|
||||
VA_FORMAT_ADVANCE(format, ap);
|
||||
|
||||
IOVEC_SET_STRING(iovec[(*n)++], m);
|
||||
iovec[(*n)++] = IOVEC_MAKE_STRING(m);
|
||||
|
||||
if (newline_separator) {
|
||||
iovec[*n].iov_base = (char*) &nl;
|
||||
@@ -893,9 +893,9 @@ int log_struct_internal(
|
||||
const char *func,
|
||||
const char *format, ...) {
|
||||
|
||||
LogRealm realm = LOG_REALM_REMOVE_LEVEL(level);
|
||||
char buf[LINE_MAX];
|
||||
bool found = false;
|
||||
LogRealm realm = LOG_REALM_REMOVE_LEVEL(level);
|
||||
PROTECT_ERRNO;
|
||||
va_list ap;
|
||||
|
||||
@@ -926,7 +926,7 @@ int log_struct_internal(
|
||||
|
||||
/* If the journal is available do structured logging */
|
||||
log_do_header(header, sizeof(header), level, error, file, line, func, NULL, NULL, NULL, NULL);
|
||||
IOVEC_SET_STRING(iovec[n++], header);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(header);
|
||||
|
||||
va_start(ap, format);
|
||||
r = log_format_iovec(iovec, ELEMENTSOF(iovec), &n, true, error, format, ap);
|
||||
|
||||
+6
-11
@@ -23,13 +23,14 @@
|
||||
|
||||
#include "dynamic-user.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "fs-util.h"
|
||||
#include "io-util.h"
|
||||
#include "parse-util.h"
|
||||
#include "random-util.h"
|
||||
#include "stdio-util.h"
|
||||
#include "string-util.h"
|
||||
#include "user-util.h"
|
||||
#include "fileio.h"
|
||||
|
||||
/* Takes a value generated randomly or by hashing and turns it into a UID in the right range */
|
||||
#define UID_CLAMP_INTO_RANGE(rnd) (((uid_t) (rnd) % (DYNAMIC_UID_MAX - DYNAMIC_UID_MIN + 1)) + DYNAMIC_UID_MIN)
|
||||
@@ -245,8 +246,8 @@ static int pick_uid(const char *name, uid_t *ret_uid) {
|
||||
/* Let's store the user name in the lock file, so that we can use it for looking up the username for a UID */
|
||||
l = pwritev(lock_fd,
|
||||
(struct iovec[2]) {
|
||||
{ .iov_base = (char*) name, .iov_len = strlen(name) },
|
||||
{ .iov_base = (char[1]) { '\n' }, .iov_len = 1 }
|
||||
IOVEC_INIT_STRING(name),
|
||||
IOVEC_INIT((char[1]) { '\n' }, 1),
|
||||
}, 2, 0);
|
||||
if (l < 0) {
|
||||
(void) unlink(lock_path);
|
||||
@@ -271,10 +272,7 @@ static int pick_uid(const char *name, uid_t *ret_uid) {
|
||||
|
||||
static int dynamic_user_pop(DynamicUser *d, uid_t *ret_uid, int *ret_lock_fd) {
|
||||
uid_t uid = UID_INVALID;
|
||||
struct iovec iov = {
|
||||
.iov_base = &uid,
|
||||
.iov_len = sizeof(uid),
|
||||
};
|
||||
struct iovec iov = IOVEC_INIT(&uid, sizeof(uid));
|
||||
union {
|
||||
struct cmsghdr cmsghdr;
|
||||
uint8_t buf[CMSG_SPACE(sizeof(int))];
|
||||
@@ -314,10 +312,7 @@ static int dynamic_user_pop(DynamicUser *d, uid_t *ret_uid, int *ret_lock_fd) {
|
||||
}
|
||||
|
||||
static int dynamic_user_push(DynamicUser *d, uid_t uid, int lock_fd) {
|
||||
struct iovec iov = {
|
||||
.iov_base = &uid,
|
||||
.iov_len = sizeof(uid),
|
||||
};
|
||||
struct iovec iov = IOVEC_INIT(&uid, sizeof(uid));
|
||||
union {
|
||||
struct cmsghdr cmsghdr;
|
||||
uint8_t buf[CMSG_SPACE(sizeof(int))];
|
||||
|
||||
+3
-3
@@ -2351,9 +2351,9 @@ static int send_user_lookup(
|
||||
|
||||
if (writev(user_lookup_fd,
|
||||
(struct iovec[]) {
|
||||
{ .iov_base = &uid, .iov_len = sizeof(uid) },
|
||||
{ .iov_base = &gid, .iov_len = sizeof(gid) },
|
||||
{ .iov_base = unit->id, .iov_len = strlen(unit->id) }}, 3) < 0)
|
||||
IOVEC_INIT(&uid, sizeof(uid)),
|
||||
IOVEC_INIT(&gid, sizeof(gid)),
|
||||
IOVEC_INIT_STRING(unit->id) }, 3) < 0)
|
||||
return -errno;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -93,21 +93,21 @@ int status_vprintf(const char *status, bool ellipse, bool ephemeral, const char
|
||||
}
|
||||
|
||||
if (prev_ephemeral)
|
||||
IOVEC_SET_STRING(iovec[n++], "\r" ANSI_ERASE_TO_END_OF_LINE);
|
||||
iovec[n++] = IOVEC_MAKE_STRING("\r" ANSI_ERASE_TO_END_OF_LINE);
|
||||
prev_ephemeral = ephemeral;
|
||||
|
||||
if (status) {
|
||||
if (!isempty(status)) {
|
||||
IOVEC_SET_STRING(iovec[n++], "[");
|
||||
IOVEC_SET_STRING(iovec[n++], status);
|
||||
IOVEC_SET_STRING(iovec[n++], "] ");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("[");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(status);
|
||||
iovec[n++] = IOVEC_MAKE_STRING("] ");
|
||||
} else
|
||||
IOVEC_SET_STRING(iovec[n++], status_indent);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(status_indent);
|
||||
}
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], s);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(s);
|
||||
if (!ephemeral)
|
||||
IOVEC_SET_STRING(iovec[n++], "\n");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("\n");
|
||||
|
||||
if (writev(fd, iovec, n) < 0)
|
||||
return -errno;
|
||||
|
||||
+14
-16
@@ -749,7 +749,7 @@ static int submit_coredump(
|
||||
const char *coredump_filename;
|
||||
|
||||
coredump_filename = strjoina("COREDUMP_FILENAME=", filename);
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], coredump_filename);
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING(coredump_filename);
|
||||
} else if (arg_storage == COREDUMP_STORAGE_EXTERNAL)
|
||||
log_info("The core will not be stored: size %"PRIu64" is greater than %"PRIu64" (the configured maximum)",
|
||||
coredump_size, arg_external_size_max);
|
||||
@@ -804,10 +804,10 @@ log:
|
||||
return 0;
|
||||
}
|
||||
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], core_message);
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING(core_message);
|
||||
|
||||
if (truncated)
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], "COREDUMP_TRUNCATED=1");
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING("COREDUMP_TRUNCATED=1");
|
||||
|
||||
/* Optionally store the entire coredump in the journal */
|
||||
if (arg_storage == COREDUMP_STORAGE_JOURNAL) {
|
||||
@@ -817,11 +817,9 @@ log:
|
||||
/* Store the coredump itself in the journal */
|
||||
|
||||
r = allocate_journal_field(coredump_fd, (size_t) coredump_size, &coredump_data, &sz);
|
||||
if (r >= 0) {
|
||||
iovec[n_iovec].iov_base = coredump_data;
|
||||
iovec[n_iovec].iov_len = sz;
|
||||
n_iovec++;
|
||||
} else
|
||||
if (r >= 0)
|
||||
iovec[n_iovec++] = IOVEC_MAKE(coredump_data, sz);
|
||||
else
|
||||
log_warning_errno(r, "Failed to attach the core to the journal entry: %m");
|
||||
} else
|
||||
log_info("The core will not be stored: size %"PRIu64" is greater than %"PRIu64" (the configured maximum)",
|
||||
@@ -1070,7 +1068,7 @@ static char* set_iovec_field(struct iovec iovec[27], size_t *n_iovec, const char
|
||||
|
||||
x = strappend(field, value);
|
||||
if (x)
|
||||
IOVEC_SET_STRING(iovec[(*n_iovec)++], x);
|
||||
iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x);
|
||||
return x;
|
||||
}
|
||||
|
||||
@@ -1162,7 +1160,7 @@ static int gather_pid_metadata(
|
||||
if (sd_pid_get_owner_uid(pid, &owner_uid) >= 0) {
|
||||
r = asprintf(&t, "COREDUMP_OWNER_UID=" UID_FMT, owner_uid);
|
||||
if (r > 0)
|
||||
IOVEC_SET_STRING(iovec[(*n_iovec)++], t);
|
||||
iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(t);
|
||||
}
|
||||
|
||||
if (sd_pid_get_slice(pid, &t) >= 0)
|
||||
@@ -1218,7 +1216,7 @@ static int gather_pid_metadata(
|
||||
|
||||
t = strjoin("COREDUMP_TIMESTAMP=", context[CONTEXT_TIMESTAMP], "000000", NULL);
|
||||
if (t)
|
||||
IOVEC_SET_STRING(iovec[(*n_iovec)++], t);
|
||||
iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(t);
|
||||
|
||||
if (safe_atoi(context[CONTEXT_SIGNAL], &signo) >= 0 && SIGNAL_VALID(signo))
|
||||
set_iovec_field(iovec, n_iovec, "COREDUMP_SIGNAL_NAME=SIG", signal_to_string(signo));
|
||||
@@ -1253,10 +1251,10 @@ static int process_kernel(int argc, char* argv[]) {
|
||||
|
||||
n_iovec = n_to_free;
|
||||
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], "MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR);
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING("MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR);
|
||||
|
||||
assert_cc(2 == LOG_CRIT);
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], "PRIORITY=2");
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING("PRIORITY=2");
|
||||
|
||||
assert(n_iovec <= ELEMENTSOF(iovec));
|
||||
|
||||
@@ -1344,15 +1342,15 @@ static int process_backtrace(int argc, char *argv[]) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], message);
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING(message);
|
||||
} else {
|
||||
for (i = 0; i < importer.iovw.count; i++)
|
||||
iovec[n_iovec++] = importer.iovw.iovec[i];
|
||||
}
|
||||
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], "MESSAGE_ID=" SD_MESSAGE_BACKTRACE_STR);
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING("MESSAGE_ID=" SD_MESSAGE_BACKTRACE_STR);
|
||||
assert_cc(2 == LOG_CRIT);
|
||||
IOVEC_SET_STRING(iovec[n_iovec++], "PRIORITY=2");
|
||||
iovec[n_iovec++] = IOVEC_MAKE_STRING("PRIORITY=2");
|
||||
|
||||
assert(n_iovec <= n_allocated);
|
||||
|
||||
|
||||
+29
-41
@@ -114,9 +114,8 @@ _public_ int sd_journal_printv(int priority, const char *format, va_list ap) {
|
||||
if (isempty(buffer+8))
|
||||
return 0;
|
||||
|
||||
zero(iov);
|
||||
IOVEC_SET_STRING(iov[0], buffer);
|
||||
IOVEC_SET_STRING(iov[1], p);
|
||||
iov[0] = IOVEC_MAKE_STRING(buffer);
|
||||
iov[1] = IOVEC_MAKE_STRING(p);
|
||||
|
||||
return sd_journal_sendv(iov, 2);
|
||||
}
|
||||
@@ -167,7 +166,7 @@ _printf_(1, 0) static int fill_iovec_sprintf(const char *format, va_list ap, int
|
||||
|
||||
(void) strstrip(buffer); /* strip trailing whitespace, keep prefixing whitespace */
|
||||
|
||||
IOVEC_SET_STRING(iov[i++], buffer);
|
||||
iov[i++] = IOVEC_MAKE_STRING(buffer);
|
||||
|
||||
format = va_arg(ap, char *);
|
||||
}
|
||||
@@ -259,27 +258,19 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
|
||||
* newline, then the size (64bit LE), followed
|
||||
* by the data and a final newline */
|
||||
|
||||
w[j].iov_base = iov[i].iov_base;
|
||||
w[j].iov_len = c - (char*) iov[i].iov_base;
|
||||
j++;
|
||||
|
||||
IOVEC_SET_STRING(w[j++], "\n");
|
||||
w[j++] = IOVEC_MAKE(iov[i].iov_base, c - (char*) iov[i].iov_base);
|
||||
w[j++] = IOVEC_MAKE_STRING("\n");
|
||||
|
||||
l[i] = htole64(iov[i].iov_len - (c - (char*) iov[i].iov_base) - 1);
|
||||
w[j].iov_base = &l[i];
|
||||
w[j].iov_len = sizeof(uint64_t);
|
||||
j++;
|
||||
|
||||
w[j].iov_base = c + 1;
|
||||
w[j].iov_len = iov[i].iov_len - (c - (char*) iov[i].iov_base) - 1;
|
||||
j++;
|
||||
w[j++] = IOVEC_MAKE(&l[i], sizeof(uint64_t));
|
||||
|
||||
w[j++] = IOVEC_MAKE(c + 1, iov[i].iov_len - (c - (char*) iov[i].iov_base) - 1);
|
||||
} else
|
||||
/* Nothing special? Then just add the line and
|
||||
* append a newline */
|
||||
w[j++] = iov[i];
|
||||
|
||||
IOVEC_SET_STRING(w[j++], "\n");
|
||||
w[j++] = IOVEC_MAKE_STRING("\n");
|
||||
}
|
||||
|
||||
if (!have_syslog_identifier &&
|
||||
@@ -291,9 +282,9 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) {
|
||||
* since everything else is much nicer to retrieve
|
||||
* from the outside. */
|
||||
|
||||
IOVEC_SET_STRING(w[j++], "SYSLOG_IDENTIFIER=");
|
||||
IOVEC_SET_STRING(w[j++], program_invocation_short_name);
|
||||
IOVEC_SET_STRING(w[j++], "\n");
|
||||
w[j++] = IOVEC_MAKE_STRING("SYSLOG_IDENTIFIER=");
|
||||
w[j++] = IOVEC_MAKE_STRING(program_invocation_short_name);
|
||||
w[j++] = IOVEC_MAKE_STRING("\n");
|
||||
}
|
||||
|
||||
fd = journal_fd();
|
||||
@@ -380,9 +371,9 @@ static int fill_iovec_perror_and_send(const char *message, int skip, struct iove
|
||||
xsprintf(error, "ERRNO=%i", _saved_errno_);
|
||||
|
||||
assert_cc(3 == LOG_ERR);
|
||||
IOVEC_SET_STRING(iov[skip+0], "PRIORITY=3");
|
||||
IOVEC_SET_STRING(iov[skip+1], buffer);
|
||||
IOVEC_SET_STRING(iov[skip+2], error);
|
||||
iov[skip+0] = IOVEC_MAKE_STRING("PRIORITY=3");
|
||||
iov[skip+1] = IOVEC_MAKE_STRING(buffer);
|
||||
iov[skip+2] = IOVEC_MAKE_STRING(error);
|
||||
|
||||
return sd_journal_sendv(iov, skip + 3);
|
||||
}
|
||||
@@ -492,20 +483,19 @@ _public_ int sd_journal_printv_with_location(int priority, const char *file, con
|
||||
* CODE_FUNC=, hence let's do it manually here. */
|
||||
ALLOCA_CODE_FUNC(f, func);
|
||||
|
||||
zero(iov);
|
||||
IOVEC_SET_STRING(iov[0], buffer);
|
||||
IOVEC_SET_STRING(iov[1], p);
|
||||
IOVEC_SET_STRING(iov[2], file);
|
||||
IOVEC_SET_STRING(iov[3], line);
|
||||
IOVEC_SET_STRING(iov[4], f);
|
||||
iov[0] = IOVEC_MAKE_STRING(buffer);
|
||||
iov[1] = IOVEC_MAKE_STRING(p);
|
||||
iov[2] = IOVEC_MAKE_STRING(file);
|
||||
iov[3] = IOVEC_MAKE_STRING(line);
|
||||
iov[4] = IOVEC_MAKE_STRING(f);
|
||||
|
||||
return sd_journal_sendv(iov, ELEMENTSOF(iov));
|
||||
}
|
||||
|
||||
_public_ int sd_journal_send_with_location(const char *file, const char *line, const char *func, const char *format, ...) {
|
||||
_cleanup_free_ struct iovec *iov = NULL;
|
||||
int r, i, j;
|
||||
va_list ap;
|
||||
struct iovec *iov = NULL;
|
||||
char *f;
|
||||
|
||||
va_start(ap, format);
|
||||
@@ -519,9 +509,9 @@ _public_ int sd_journal_send_with_location(const char *file, const char *line, c
|
||||
|
||||
ALLOCA_CODE_FUNC(f, func);
|
||||
|
||||
IOVEC_SET_STRING(iov[0], file);
|
||||
IOVEC_SET_STRING(iov[1], line);
|
||||
IOVEC_SET_STRING(iov[2], f);
|
||||
iov[0] = IOVEC_MAKE_STRING(file);
|
||||
iov[1] = IOVEC_MAKE_STRING(line);
|
||||
iov[2] = IOVEC_MAKE_STRING(f);
|
||||
|
||||
r = sd_journal_sendv(iov, i);
|
||||
|
||||
@@ -529,8 +519,6 @@ finish:
|
||||
for (j = 3; j < i; j++)
|
||||
free(iov[j].iov_base);
|
||||
|
||||
free(iov);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -550,9 +538,9 @@ _public_ int sd_journal_sendv_with_location(
|
||||
|
||||
ALLOCA_CODE_FUNC(f, func);
|
||||
|
||||
IOVEC_SET_STRING(niov[n++], file);
|
||||
IOVEC_SET_STRING(niov[n++], line);
|
||||
IOVEC_SET_STRING(niov[n++], f);
|
||||
niov[n++] = IOVEC_MAKE_STRING(file);
|
||||
niov[n++] = IOVEC_MAKE_STRING(line);
|
||||
niov[n++] = IOVEC_MAKE_STRING(f);
|
||||
|
||||
return sd_journal_sendv(niov, n);
|
||||
}
|
||||
@@ -567,9 +555,9 @@ _public_ int sd_journal_perror_with_location(
|
||||
|
||||
ALLOCA_CODE_FUNC(f, func);
|
||||
|
||||
IOVEC_SET_STRING(iov[0], file);
|
||||
IOVEC_SET_STRING(iov[1], line);
|
||||
IOVEC_SET_STRING(iov[2], f);
|
||||
iov[0] = IOVEC_MAKE_STRING(file);
|
||||
iov[1] = IOVEC_MAKE_STRING(line);
|
||||
iov[2] = IOVEC_MAKE_STRING(f);
|
||||
|
||||
return fill_iovec_perror_and_send(message, 3, iov);
|
||||
}
|
||||
|
||||
@@ -383,26 +383,26 @@ static void process_audit_string(Server *s, int type, const char *data, size_t s
|
||||
return;
|
||||
}
|
||||
|
||||
IOVEC_SET_STRING(iov[n_iov++], "_TRANSPORT=audit");
|
||||
iov[n_iov++] = IOVEC_MAKE_STRING("_TRANSPORT=audit");
|
||||
|
||||
sprintf(source_time_field, "_SOURCE_REALTIME_TIMESTAMP=%" PRIu64,
|
||||
(usec_t) seconds * USEC_PER_SEC + (usec_t) msec * USEC_PER_MSEC);
|
||||
IOVEC_SET_STRING(iov[n_iov++], source_time_field);
|
||||
iov[n_iov++] = IOVEC_MAKE_STRING(source_time_field);
|
||||
|
||||
sprintf(type_field, "_AUDIT_TYPE=%i", type);
|
||||
IOVEC_SET_STRING(iov[n_iov++], type_field);
|
||||
iov[n_iov++] = IOVEC_MAKE_STRING(type_field);
|
||||
|
||||
sprintf(id_field, "_AUDIT_ID=%" PRIu64, id);
|
||||
IOVEC_SET_STRING(iov[n_iov++], id_field);
|
||||
iov[n_iov++] = IOVEC_MAKE_STRING(id_field);
|
||||
|
||||
assert_cc(4 == LOG_FAC(LOG_AUTH));
|
||||
IOVEC_SET_STRING(iov[n_iov++], "SYSLOG_FACILITY=4");
|
||||
IOVEC_SET_STRING(iov[n_iov++], "SYSLOG_IDENTIFIER=audit");
|
||||
iov[n_iov++] = IOVEC_MAKE_STRING("SYSLOG_FACILITY=4");
|
||||
iov[n_iov++] = IOVEC_MAKE_STRING("SYSLOG_IDENTIFIER=audit");
|
||||
|
||||
type_name = audit_type_name_alloca(type);
|
||||
|
||||
m = strjoina("MESSAGE=", type_name, " ", p);
|
||||
IOVEC_SET_STRING(iov[n_iov++], m);
|
||||
iov[n_iov++] = IOVEC_MAKE_STRING(m);
|
||||
|
||||
z = n_iov;
|
||||
|
||||
|
||||
@@ -59,9 +59,10 @@ void server_forward_console(
|
||||
struct timespec ts;
|
||||
char tbuf[sizeof("[] ")-1 + DECIMAL_STR_MAX(ts.tv_sec) + DECIMAL_STR_MAX(ts.tv_nsec)-3 + 1];
|
||||
char header_pid[sizeof("[]: ")-1 + DECIMAL_STR_MAX(pid_t)];
|
||||
int n = 0, fd;
|
||||
_cleanup_free_ char *ident_buf = NULL;
|
||||
_cleanup_close_ int fd = -1;
|
||||
const char *tty;
|
||||
int n = 0;
|
||||
|
||||
assert(s);
|
||||
assert(message);
|
||||
@@ -75,7 +76,8 @@ void server_forward_console(
|
||||
xsprintf(tbuf, "[%5"PRI_TIME".%06"PRI_NSEC"] ",
|
||||
ts.tv_sec,
|
||||
(nsec_t)ts.tv_nsec / 1000);
|
||||
IOVEC_SET_STRING(iovec[n++], tbuf);
|
||||
|
||||
iovec[n++] = IOVEC_MAKE_STRING(tbuf);
|
||||
}
|
||||
|
||||
/* Second: identifier and PID */
|
||||
@@ -88,19 +90,19 @@ void server_forward_console(
|
||||
xsprintf(header_pid, "["PID_FMT"]: ", ucred->pid);
|
||||
|
||||
if (identifier)
|
||||
IOVEC_SET_STRING(iovec[n++], identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(identifier);
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], header_pid);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(header_pid);
|
||||
} else if (identifier) {
|
||||
IOVEC_SET_STRING(iovec[n++], identifier);
|
||||
IOVEC_SET_STRING(iovec[n++], ": ");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(": ");
|
||||
}
|
||||
|
||||
/* Fourth: message */
|
||||
IOVEC_SET_STRING(iovec[n++], message);
|
||||
IOVEC_SET_STRING(iovec[n++], "\n");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(message);
|
||||
iovec[n++] = IOVEC_MAKE_STRING("\n");
|
||||
|
||||
tty = s->tty_path ? s->tty_path : "/dev/console";
|
||||
tty = s->tty_path ?: "/dev/console";
|
||||
|
||||
/* Before you ask: yes, on purpose we open/close the console for each log line we write individually. This is a
|
||||
* good strategy to avoid journald getting killed by the kernel's SAK concept (it doesn't fix this entirely,
|
||||
@@ -115,6 +117,4 @@ void server_forward_console(
|
||||
|
||||
if (writev(fd, iovec, n) < 0)
|
||||
log_debug_errno(errno, "Failed to write to %s for logging: %m", tty);
|
||||
|
||||
safe_close(fd);
|
||||
}
|
||||
|
||||
+23
-33
@@ -26,6 +26,7 @@
|
||||
#include "libudev.h"
|
||||
#include "sd-messages.h"
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "escape.h"
|
||||
#include "fd-util.h"
|
||||
#include "format-util.h"
|
||||
@@ -45,11 +46,11 @@ void server_forward_kmsg(
|
||||
const char *message,
|
||||
const struct ucred *ucred) {
|
||||
|
||||
_cleanup_free_ char *ident_buf = NULL;
|
||||
struct iovec iovec[5];
|
||||
char header_priority[DECIMAL_STR_MAX(priority) + 3],
|
||||
header_pid[sizeof("[]: ")-1 + DECIMAL_STR_MAX(pid_t) + 1];
|
||||
int n = 0;
|
||||
char *ident_buf = NULL;
|
||||
|
||||
assert(s);
|
||||
assert(priority >= 0);
|
||||
@@ -68,7 +69,7 @@ void server_forward_kmsg(
|
||||
|
||||
/* First: priority field */
|
||||
xsprintf(header_priority, "<%i>", priority);
|
||||
IOVEC_SET_STRING(iovec[n++], header_priority);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(header_priority);
|
||||
|
||||
/* Second: identifier and PID */
|
||||
if (ucred) {
|
||||
@@ -80,22 +81,20 @@ void server_forward_kmsg(
|
||||
xsprintf(header_pid, "["PID_FMT"]: ", ucred->pid);
|
||||
|
||||
if (identifier)
|
||||
IOVEC_SET_STRING(iovec[n++], identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(identifier);
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], header_pid);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(header_pid);
|
||||
} else if (identifier) {
|
||||
IOVEC_SET_STRING(iovec[n++], identifier);
|
||||
IOVEC_SET_STRING(iovec[n++], ": ");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(": ");
|
||||
}
|
||||
|
||||
/* Fourth: message */
|
||||
IOVEC_SET_STRING(iovec[n++], message);
|
||||
IOVEC_SET_STRING(iovec[n++], "\n");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(message);
|
||||
iovec[n++] = IOVEC_MAKE_STRING("\n");
|
||||
|
||||
if (writev(s->dev_kmsg_fd, iovec, n) < 0)
|
||||
log_debug_errno(errno, "Failed to write to /dev/kmsg for logging: %m");
|
||||
|
||||
free(ident_buf);
|
||||
}
|
||||
|
||||
static bool is_us(const char *pid) {
|
||||
@@ -111,11 +110,11 @@ static bool is_us(const char *pid) {
|
||||
|
||||
static void dev_kmsg_record(Server *s, const char *p, size_t l) {
|
||||
struct iovec iovec[N_IOVEC_META_FIELDS + 7 + N_IOVEC_KERNEL_FIELDS + 2 + N_IOVEC_UDEV_FIELDS];
|
||||
char *message = NULL, *syslog_priority = NULL, *syslog_pid = NULL, *syslog_facility = NULL, *syslog_identifier = NULL, *source_time = NULL;
|
||||
_cleanup_free_ char *message = NULL, *syslog_priority = NULL, *syslog_pid = NULL, *syslog_facility = NULL, *syslog_identifier = NULL, *source_time = NULL, *identifier = NULL, *pid = NULL;
|
||||
int priority, r;
|
||||
unsigned n = 0, z = 0, j;
|
||||
unsigned long long usec;
|
||||
char *identifier = NULL, *pid = NULL, *e, *f, *k;
|
||||
char *e, *f, *k;
|
||||
uint64_t serial;
|
||||
size_t pl;
|
||||
char *kernel_device = NULL;
|
||||
@@ -216,7 +215,7 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) {
|
||||
if (startswith(m, "_KERNEL_DEVICE="))
|
||||
kernel_device = m + 15;
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], m);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(m);
|
||||
z++;
|
||||
|
||||
l -= (e - k) + 1;
|
||||
@@ -236,7 +235,7 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) {
|
||||
if (g) {
|
||||
b = strappend("_UDEV_DEVNODE=", g);
|
||||
if (b) {
|
||||
IOVEC_SET_STRING(iovec[n++], b);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(b);
|
||||
z++;
|
||||
}
|
||||
}
|
||||
@@ -245,7 +244,7 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) {
|
||||
if (g) {
|
||||
b = strappend("_UDEV_SYSNAME=", g);
|
||||
if (b) {
|
||||
IOVEC_SET_STRING(iovec[n++], b);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(b);
|
||||
z++;
|
||||
}
|
||||
}
|
||||
@@ -261,7 +260,7 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) {
|
||||
if (g) {
|
||||
b = strappend("_UDEV_DEVLINK=", g);
|
||||
if (b) {
|
||||
IOVEC_SET_STRING(iovec[n++], b);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(b);
|
||||
z++;
|
||||
}
|
||||
}
|
||||
@@ -274,18 +273,18 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) {
|
||||
}
|
||||
|
||||
if (asprintf(&source_time, "_SOURCE_MONOTONIC_TIMESTAMP=%llu", usec) >= 0)
|
||||
IOVEC_SET_STRING(iovec[n++], source_time);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(source_time);
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], "_TRANSPORT=kernel");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("_TRANSPORT=kernel");
|
||||
|
||||
if (asprintf(&syslog_priority, "PRIORITY=%i", priority & LOG_PRIMASK) >= 0)
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_priority);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_priority);
|
||||
|
||||
if (asprintf(&syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority)) >= 0)
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_facility);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_facility);
|
||||
|
||||
if ((priority & LOG_FACMASK) == LOG_KERN)
|
||||
IOVEC_SET_STRING(iovec[n++], "SYSLOG_IDENTIFIER=kernel");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("SYSLOG_IDENTIFIER=kernel");
|
||||
else {
|
||||
pl -= syslog_parse_identifier((const char**) &p, &identifier, &pid);
|
||||
|
||||
@@ -297,33 +296,24 @@ static void dev_kmsg_record(Server *s, const char *p, size_t l) {
|
||||
if (identifier) {
|
||||
syslog_identifier = strappend("SYSLOG_IDENTIFIER=", identifier);
|
||||
if (syslog_identifier)
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_identifier);
|
||||
}
|
||||
|
||||
if (pid) {
|
||||
syslog_pid = strappend("SYSLOG_PID=", pid);
|
||||
if (syslog_pid)
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_pid);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_pid);
|
||||
}
|
||||
}
|
||||
|
||||
if (cunescape_length_with_prefix(p, pl, "MESSAGE=", UNESCAPE_RELAX, &message) >= 0)
|
||||
IOVEC_SET_STRING(iovec[n++], message);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(message);
|
||||
|
||||
server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), NULL, NULL, priority, 0);
|
||||
|
||||
finish:
|
||||
for (j = 0; j < z; j++)
|
||||
free(iovec[j].iov_base);
|
||||
|
||||
free(message);
|
||||
free(syslog_priority);
|
||||
free(syslog_identifier);
|
||||
free(syslog_pid);
|
||||
free(syslog_facility);
|
||||
free(source_time);
|
||||
free(identifier);
|
||||
free(pid);
|
||||
}
|
||||
|
||||
static int server_read_dev_kmsg(Server *s) {
|
||||
|
||||
@@ -282,7 +282,7 @@ static int server_process_entry(
|
||||
}
|
||||
|
||||
tn = n++;
|
||||
IOVEC_SET_STRING(iovec[tn], "_TRANSPORT=journal");
|
||||
iovec[tn] = IOVEC_MAKE_STRING("_TRANSPORT=journal");
|
||||
entry_size += strlen("_TRANSPORT=journal");
|
||||
|
||||
if (entry_size + n + 1 > ENTRY_SIZE_MAX) { /* data + separators + trailer */
|
||||
|
||||
@@ -724,14 +724,14 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
|
||||
char *k; \
|
||||
k = newa(char, strlen(field "=") + DECIMAL_STR_MAX(type) + 1); \
|
||||
sprintf(k, field "=" format, value); \
|
||||
IOVEC_SET_STRING(iovec[n++], k); \
|
||||
iovec[n++] = IOVEC_MAKE_STRING(k); \
|
||||
}
|
||||
|
||||
#define IOVEC_ADD_STRING_FIELD(iovec, n, value, field) \
|
||||
if (!isempty(value)) { \
|
||||
char *k; \
|
||||
k = strjoina(field "=", value); \
|
||||
IOVEC_SET_STRING(iovec[n++], k); \
|
||||
iovec[n++] = IOVEC_MAKE_STRING(k); \
|
||||
}
|
||||
|
||||
#define IOVEC_ADD_ID128_FIELD(iovec, n, value, field) \
|
||||
@@ -739,7 +739,7 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
|
||||
char *k; \
|
||||
k = newa(char, strlen(field "=") + SD_ID128_STRING_MAX); \
|
||||
sd_id128_to_string(value, stpcpy(k, field "=")); \
|
||||
IOVEC_SET_STRING(iovec[n++], k); \
|
||||
iovec[n++] = IOVEC_MAKE_STRING(k); \
|
||||
}
|
||||
|
||||
#define IOVEC_ADD_SIZED_FIELD(iovec, n, value, value_size, field) \
|
||||
@@ -747,7 +747,7 @@ static void write_to_journal(Server *s, uid_t uid, struct iovec *iovec, unsigned
|
||||
char *k; \
|
||||
k = newa(char, strlen(field "=") + value_size + 1); \
|
||||
*((char*) mempcpy(stpcpy(k, field "="), value, value_size)) = 0; \
|
||||
IOVEC_SET_STRING(iovec[n++], k); \
|
||||
iovec[n++] = IOVEC_MAKE_STRING(k); \
|
||||
} \
|
||||
|
||||
static void dispatch_message_real(
|
||||
@@ -826,20 +826,20 @@ static void dispatch_message_real(
|
||||
|
||||
if (tv) {
|
||||
sprintf(source_time, "_SOURCE_REALTIME_TIMESTAMP=" USEC_FMT, timeval_load(tv));
|
||||
IOVEC_SET_STRING(iovec[n++], source_time);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(source_time);
|
||||
}
|
||||
|
||||
/* Note that strictly speaking storing the boot id here is
|
||||
* redundant since the entry includes this in-line
|
||||
* anyway. However, we need this indexed, too. */
|
||||
if (!isempty(s->boot_id_field))
|
||||
IOVEC_SET_STRING(iovec[n++], s->boot_id_field);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(s->boot_id_field);
|
||||
|
||||
if (!isempty(s->machine_id_field))
|
||||
IOVEC_SET_STRING(iovec[n++], s->machine_id_field);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(s->machine_id_field);
|
||||
|
||||
if (!isempty(s->hostname_field))
|
||||
IOVEC_SET_STRING(iovec[n++], s->hostname_field);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(s->hostname_field);
|
||||
|
||||
assert(n <= m);
|
||||
|
||||
@@ -870,15 +870,15 @@ void server_driver_message(Server *s, const char *message_id, const char *format
|
||||
assert(format);
|
||||
|
||||
assert_cc(3 == LOG_FAC(LOG_DAEMON));
|
||||
IOVEC_SET_STRING(iovec[n++], "SYSLOG_FACILITY=3");
|
||||
IOVEC_SET_STRING(iovec[n++], "SYSLOG_IDENTIFIER=systemd-journald");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("SYSLOG_FACILITY=3");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("SYSLOG_IDENTIFIER=systemd-journald");
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], "_TRANSPORT=driver");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("_TRANSPORT=driver");
|
||||
assert_cc(6 == LOG_INFO);
|
||||
IOVEC_SET_STRING(iovec[n++], "PRIORITY=6");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("PRIORITY=6");
|
||||
|
||||
if (message_id)
|
||||
IOVEC_SET_STRING(iovec[n++], message_id);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(message_id);
|
||||
m = n;
|
||||
|
||||
va_start(ap, format);
|
||||
@@ -899,8 +899,8 @@ void server_driver_message(Server *s, const char *message_id, const char *format
|
||||
xsprintf(buf, "MESSAGE=Entry printing failed: %s", strerror(-r));
|
||||
|
||||
n = 3;
|
||||
IOVEC_SET_STRING(iovec[n++], "PRIORITY=4");
|
||||
IOVEC_SET_STRING(iovec[n++], buf);
|
||||
iovec[n++] = IOVEC_MAKE_STRING("PRIORITY=4");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(buf);
|
||||
dispatch_message_real(s, iovec, n, ELEMENTSOF(iovec), s->my_context, NULL, LOG_INFO, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,22 +282,21 @@ static int stdout_stream_log(StdoutStream *s, const char *p, LineBreak line_brea
|
||||
if (s->server->forward_to_wall)
|
||||
server_forward_wall(s->server, priority, s->identifier, p, &s->ucred);
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], "_TRANSPORT=stdout");
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], s->id_field);
|
||||
iovec[n++] = IOVEC_MAKE_STRING("_TRANSPORT=stdout");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(s->id_field);
|
||||
|
||||
syslog_priority[strlen("PRIORITY=")] = '0' + LOG_PRI(priority);
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_priority);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_priority);
|
||||
|
||||
if (priority & LOG_FACMASK) {
|
||||
xsprintf(syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority));
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_facility);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_facility);
|
||||
}
|
||||
|
||||
if (s->identifier) {
|
||||
syslog_identifier = strappend("SYSLOG_IDENTIFIER=", s->identifier);
|
||||
if (syslog_identifier)
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_identifier);
|
||||
}
|
||||
|
||||
if (line_break != LINE_BREAK_NEWLINE) {
|
||||
@@ -309,12 +308,12 @@ static int stdout_stream_log(StdoutStream *s, const char *p, LineBreak line_brea
|
||||
c = line_break == LINE_BREAK_NUL ? "_LINE_BREAK=nul" :
|
||||
line_break == LINE_BREAK_LINE_MAX ? "_LINE_BREAK=line-max" :
|
||||
"_LINE_BREAK=eof";
|
||||
IOVEC_SET_STRING(iovec[n++], c);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(c);
|
||||
}
|
||||
|
||||
message = strappend("MESSAGE=", p);
|
||||
if (message)
|
||||
IOVEC_SET_STRING(iovec[n++], message);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(message);
|
||||
|
||||
if (s->context)
|
||||
(void) client_context_maybe_refresh(s->server, s->context, NULL, NULL, 0, NULL, USEC_INFINITY);
|
||||
|
||||
@@ -124,7 +124,7 @@ static void forward_syslog_raw(Server *s, int priority, const char *buffer, cons
|
||||
if (LOG_PRI(priority) > s->max_level_syslog)
|
||||
return;
|
||||
|
||||
IOVEC_SET_STRING(iovec, buffer);
|
||||
iovec = IOVEC_MAKE_STRING(buffer);
|
||||
forward_syslog_iovec(s, &iovec, 1, ucred, tv);
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ void server_forward_syslog(Server *s, int priority, const char *identifier, cons
|
||||
int n = 0;
|
||||
time_t t;
|
||||
struct tm *tm;
|
||||
char *ident_buf = NULL;
|
||||
_cleanup_free_ char *ident_buf = NULL;
|
||||
|
||||
assert(s);
|
||||
assert(priority >= 0);
|
||||
@@ -147,7 +147,7 @@ void server_forward_syslog(Server *s, int priority, const char *identifier, cons
|
||||
|
||||
/* First: priority field */
|
||||
xsprintf(header_priority, "<%i>", priority);
|
||||
IOVEC_SET_STRING(iovec[n++], header_priority);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(header_priority);
|
||||
|
||||
/* Second: timestamp */
|
||||
t = tv ? tv->tv_sec : ((time_t) (now(CLOCK_REALTIME) / USEC_PER_SEC));
|
||||
@@ -156,7 +156,7 @@ void server_forward_syslog(Server *s, int priority, const char *identifier, cons
|
||||
return;
|
||||
if (strftime(header_time, sizeof(header_time), "%h %e %T ", tm) <= 0)
|
||||
return;
|
||||
IOVEC_SET_STRING(iovec[n++], header_time);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(header_time);
|
||||
|
||||
/* Third: identifier and PID */
|
||||
if (ucred) {
|
||||
@@ -168,20 +168,18 @@ void server_forward_syslog(Server *s, int priority, const char *identifier, cons
|
||||
xsprintf(header_pid, "["PID_FMT"]: ", ucred->pid);
|
||||
|
||||
if (identifier)
|
||||
IOVEC_SET_STRING(iovec[n++], identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(identifier);
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], header_pid);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(header_pid);
|
||||
} else if (identifier) {
|
||||
IOVEC_SET_STRING(iovec[n++], identifier);
|
||||
IOVEC_SET_STRING(iovec[n++], ": ");
|
||||
iovec[n++] = IOVEC_MAKE_STRING(identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(": ");
|
||||
}
|
||||
|
||||
/* Fourth: message */
|
||||
IOVEC_SET_STRING(iovec[n++], message);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(message);
|
||||
|
||||
forward_syslog_iovec(s, iovec, n, ucred, tv);
|
||||
|
||||
free(ident_buf);
|
||||
}
|
||||
|
||||
int syslog_fixup_facility(int priority) {
|
||||
@@ -353,29 +351,29 @@ void server_process_syslog_message(
|
||||
if (s->forward_to_wall)
|
||||
server_forward_wall(s, priority, identifier, buf, ucred);
|
||||
|
||||
IOVEC_SET_STRING(iovec[n++], "_TRANSPORT=syslog");
|
||||
iovec[n++] = IOVEC_MAKE_STRING("_TRANSPORT=syslog");
|
||||
|
||||
xsprintf(syslog_priority, "PRIORITY=%i", priority & LOG_PRIMASK);
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_priority);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_priority);
|
||||
|
||||
if (priority & LOG_FACMASK) {
|
||||
xsprintf(syslog_facility, "SYSLOG_FACILITY=%i", LOG_FAC(priority));
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_facility);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_facility);
|
||||
}
|
||||
|
||||
if (identifier) {
|
||||
syslog_identifier = strjoina("SYSLOG_IDENTIFIER=", identifier);
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_identifier);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_identifier);
|
||||
}
|
||||
|
||||
if (pid) {
|
||||
syslog_pid = strjoina("SYSLOG_PID=", pid);
|
||||
IOVEC_SET_STRING(iovec[n++], syslog_pid);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(syslog_pid);
|
||||
}
|
||||
|
||||
message = strjoina("MESSAGE=", buf);
|
||||
if (message)
|
||||
IOVEC_SET_STRING(iovec[n++], message);
|
||||
iovec[n++] = IOVEC_MAKE_STRING(message);
|
||||
|
||||
if (ucred && pid_is_valid(ucred->pid)) {
|
||||
r = client_context_get(s, ucred->pid, ucred, label, label_len, NULL, &context);
|
||||
|
||||
@@ -609,9 +609,9 @@ static void test_writing_tmpfile(void) {
|
||||
int fd, r;
|
||||
struct iovec iov[3];
|
||||
|
||||
IOVEC_SET_STRING(iov[0], "abc\n");
|
||||
IOVEC_SET_STRING(iov[1], ALPHANUMERICAL "\n");
|
||||
IOVEC_SET_STRING(iov[2], "");
|
||||
iov[0] = IOVEC_MAKE_STRING("abc\n");
|
||||
iov[1] = IOVEC_MAKE_STRING(ALPHANUMERICAL "\n");
|
||||
iov[2] = IOVEC_MAKE_STRING("");
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
printf("tmpfile: %s", name);
|
||||
|
||||
Reference in New Issue
Block a user