Skip to content

Commit

Permalink
journald: rework end of line marker handling to use a field table
Browse files Browse the repository at this point in the history
(cherry picked from commit 549b737)
(cherry picked from commit d8fabe7)

Related: RHEL-65343
  • Loading branch information
tcornell-bus committed Nov 18, 2024
1 parent 2148cc7 commit 3f140e5
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions src/journal/journald-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ typedef enum LineBreak {
LINE_BREAK_NUL,
LINE_BREAK_LINE_MAX,
LINE_BREAK_EOF,
_LINE_BREAK_MAX,
_LINE_BREAK_INVALID = -1,
} LineBreak;

struct StdoutStream {
Expand Down Expand Up @@ -233,7 +235,11 @@ static int stdout_stream_save(StdoutStream *s) {
return log_error_errno(r, "Failed to save stream data %s: %m", s->state_file);
}

static int stdout_stream_log(StdoutStream *s, const char *p, LineBreak line_break) {
static int stdout_stream_log(
StdoutStream *s,
const char *p,
LineBreak line_break) {

struct iovec *iovec;
int priority;
char syslog_priority[] = "PRIORITY=\0";
Expand All @@ -245,6 +251,9 @@ static int stdout_stream_log(StdoutStream *s, const char *p, LineBreak line_brea
assert(s);
assert(p);

assert(line_break >= 0);
assert(line_break < _LINE_BREAK_MAX);

if (s->context)
(void) client_context_maybe_refresh(s->server, s->context, NULL, NULL, 0, NULL, USEC_INFINITY);
else if (pid_is_valid(s->ucred.pid)) {
Expand Down Expand Up @@ -296,17 +305,19 @@ static int stdout_stream_log(StdoutStream *s, const char *p, LineBreak line_brea
iovec[n++] = IOVEC_MAKE_STRING(syslog_identifier);
}

if (line_break != LINE_BREAK_NEWLINE) {
const char *c;
static const char * const line_break_field_table[_LINE_BREAK_MAX] = {
[LINE_BREAK_NEWLINE] = NULL, /* Do not add field if traditional newline */
[LINE_BREAK_NUL] = "_LINE_BREAK=nul",
[LINE_BREAK_LINE_MAX] = "_LINE_BREAK=line-max",
[LINE_BREAK_EOF] = "_LINE_BREAK=eof",
};

/* If this log message was generated due to an uncommon line break then mention this in the log
* entry */
const char *c = line_break_field_table[line_break];

c = line_break == LINE_BREAK_NUL ? "_LINE_BREAK=nul" :
line_break == LINE_BREAK_LINE_MAX ? "_LINE_BREAK=line-max" :
"_LINE_BREAK=eof";
/* If this log message was generated due to an uncommon line break then mention this in the log
* entry */
if (c)
iovec[n++] = IOVEC_MAKE_STRING(c);
}

message = strappend("MESSAGE=", p);
if (message)
Expand Down

0 comments on commit 3f140e5

Please sign in to comment.