X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Flog.c;h=eba5853ab0a53ed9ad587b2a5f7c2339472b8eb1;hp=ba959b914e117ef0d3639dc3bdff35604d74fa9b;hb=6357ac664c9ce8ae5b83bdb98011da24185e4efa;hpb=086891e5c119abb9854237fc32e736fe2d67234c diff --git a/src/shared/log.c b/src/shared/log.c index ba959b914..eba5853ab 100644 --- a/src/shared/log.c +++ b/src/shared/log.c @@ -366,7 +366,7 @@ static int write_to_syslog( const char *object, const char *buffer) { - char header_priority[16], header_time[64], header_pid[16]; + char header_priority[1 + DECIMAL_STR_MAX(int) + 2], header_time[64], header_pid[1 + DECIMAL_STR_MAX(pid_t) + 4]; struct iovec iovec[5] = {}; struct msghdr msghdr = { .msg_iov = iovec, @@ -429,7 +429,7 @@ static int write_to_kmsg( const char *object, const char *buffer) { - char header_priority[16], header_pid[16]; + char header_priority[1 + DECIMAL_STR_MAX(int) + 2], header_pid[1 + DECIMAL_STR_MAX(pid_t) + 4]; struct iovec iovec[5] = {}; if (kmsg_fd < 0) @@ -545,6 +545,9 @@ static int log_dispatch( if ((level & LOG_FACMASK) == 0) level = log_facility | LOG_PRI(level); + if (error < 0) + error = -error; + do { char *e; int k = 0; @@ -627,7 +630,7 @@ int log_dump_internal( return log_dispatch(level, error, file, line, func, NULL, NULL, buffer); } -int log_metav( +int log_internalv( int level, int error, const char*file, @@ -644,7 +647,7 @@ int log_metav( /* Make sure that %m maps to the specified error */ if (error != 0) - errno = error; + errno = abs(error); vsnprintf(buffer, sizeof(buffer), format, ap); char_array_0(buffer); @@ -652,7 +655,7 @@ int log_metav( return log_dispatch(level, error, file, line, func, NULL, NULL, buffer); } -int log_meta( +int log_internal( int level, int error, const char*file, @@ -664,13 +667,13 @@ int log_meta( va_list ap; va_start(ap, format); - r = log_metav(level, error, file, line, func, format, ap); + r = log_internalv(level, error, file, line, func, format, ap); va_end(ap); return r; } -int log_metav_object( +int log_object_internalv( int level, int error, const char*file, @@ -689,7 +692,7 @@ int log_metav_object( /* Make sure that %m maps to the specified error */ if (error != 0) - errno = error; + errno = abs(error); vsnprintf(buffer, sizeof(buffer), format, ap); char_array_0(buffer); @@ -697,7 +700,7 @@ int log_metav_object( return log_dispatch(level, error, file, line, func, object_field, object, buffer); } -int log_meta_object( +int log_object_internal( int level, int error, const char*file, @@ -711,7 +714,7 @@ int log_meta_object( va_list ap; va_start(ap, format); - r = log_metav_object(level, error, file, line, func, object_field, object, format, ap); + r = log_object_internalv(level, error, file, line, func, object_field, object, format, ap); va_end(ap); return r; @@ -756,7 +759,7 @@ void log_assert_failed_return(const char *text, const char *file, int line, cons } int log_oom_internal(const char *file, int line, const char *func) { - log_meta(LOG_ERR, ENOMEM, file, line, func, "Out of memory."); + log_internal(LOG_ERR, ENOMEM, file, line, func, "Out of memory."); return -ENOMEM; } @@ -781,6 +784,9 @@ int log_struct_internal( if ((level & LOG_FACMASK) == 0) level = log_facility | LOG_PRI(level); + if (error < 0) + error = -error; + if ((log_target == LOG_TARGET_AUTO || log_target == LOG_TARGET_JOURNAL_OR_KMSG || log_target == LOG_TARGET_JOURNAL) && @@ -807,6 +813,9 @@ int log_struct_internal( * since vasprintf() leaves it afterwards at * an undefined location */ + if (error != 0) + errno = error; + va_copy(aq, ap); if (vasprintf(&buf, format, aq) < 0) { va_end(aq); @@ -850,6 +859,9 @@ int log_struct_internal( while (format) { va_list aq; + if (error != 0) + errno = error; + va_copy(aq, ap); vsnprintf(buf, sizeof(buf), format, aq); va_end(aq);