chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
log: also set errno to the passed error code before processing format string in log_s...
[elogind.git]
/
src
/
shared
/
log.c
diff --git
a/src/shared/log.c
b/src/shared/log.c
index ba959b914e117ef0d3639dc3bdff35604d74fa9b..eba5853ab0a53ed9ad587b2a5f7c2339472b8eb1 100644
(file)
--- 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) {
const char *object,
const char *buffer) {
- char header_priority[1
6], 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,
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) {
const char *object,
const char *buffer) {
- char header_priority[1
6], 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)
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 ((level & LOG_FACMASK) == 0)
level = log_facility | LOG_PRI(level);
+ if (error < 0)
+ error = -error;
+
do {
char *e;
int k = 0;
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);
}
return log_dispatch(level, error, file, line, func, NULL, NULL, buffer);
}
-int log_
meta
v(
+int log_
internal
v(
int level,
int error,
const char*file,
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)
/* 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);
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);
}
return log_dispatch(level, error, file, line, func, NULL, NULL, buffer);
}
-int log_
meta
(
+int log_
internal
(
int level,
int error,
const char*file,
int level,
int error,
const char*file,
@@
-664,13
+667,13
@@
int log_meta(
va_list ap;
va_start(ap, format);
va_list ap;
va_start(ap, format);
- r = log_
meta
v(level, error, file, line, func, format, ap);
+ r = log_
internal
v(level, error, file, line, func, format, ap);
va_end(ap);
return r;
}
va_end(ap);
return r;
}
-int log_
metav_object
(
+int log_
object_internalv
(
int level,
int error,
const char*file,
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)
/* 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);
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);
}
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,
int level,
int error,
const char*file,
@@
-711,7
+714,7
@@
int log_meta_object(
va_list ap;
va_start(ap, format);
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;
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) {
}
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;
}
return -ENOMEM;
}
@@
-781,6
+784,9
@@
int log_struct_internal(
if ((level & LOG_FACMASK) == 0)
level = log_facility | LOG_PRI(level);
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) &&
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 */
* 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);
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;
while (format) {
va_list aq;
+ if (error != 0)
+ errno = error;
+
va_copy(aq, ap);
vsnprintf(buf, sizeof(buf), format, aq);
va_end(aq);
va_copy(aq, ap);
vsnprintf(buf, sizeof(buf), format, aq);
va_end(aq);