[make-initrd] [PATCH 1/3] Reimplement ueventd
Leonid Krivoshein
klark.devel at gmail.com
Fri May 5 06:08:25 MSK 2023
On 5/4/23 16:42, Alexey Gladkov wrote:
> [...]
> diff --git a/datasrc/ueventd/logging.c b/datasrc/ueventd/logging.c
> new file mode 100644
> index 00000000..671f6814
> --- /dev/null
> +++ b/datasrc/ueventd/logging.c
> @@ -0,0 +1,63 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +
> +#include <stdio.h>
> +#include <stdarg.h>
> +#include <strings.h>
> +#include <errno.h>
> +#include <time.h>
> +
> +#include "ueventd.h"
> +
> +#define default_logfile "/var/log/ueventd.log"
> +
> +int log_priority = LOG_INFO;
> +
> [...]
> +void message(int priority, const char *fmt, ...)
> +{
> + va_list ap;
> + va_start(ap, fmt);
> + if (priority <= log_priority) {
> + time_t ts = time(NULL);
> + struct tm *t = localtime(&ts);
> + fprintf(stderr, "[%04d-%02d-%02d %02d:%02d:%02d] %s: ",
> + t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
> + t->tm_hour, t->tm_min, t->tm_sec,
> + program_invocation_short_name);
Кажется, есть риск спутать сообщения от разных потоков, тут должен быть
целостный буферизированный вывод через snprintf(). Мой комментарий как
раз в месте потенциального разрыва. Если журналирование выстраивается в
один поток выполнения, проблемы нет.
> + vfprintf(stderr, fmt, ap);
> + fprintf(stderr, "\n");
> + }
> + va_end(ap);
> +}
> [...]
--
WBR, Leonid Krivoshein.
More information about the Make-initrd
mailing list