diff --git a/os/log.c b/os/log.c index e4e9e8b9d..9f95743b5 100644 --- a/os/log.c +++ b/os/log.c @@ -450,6 +450,13 @@ pnprintf(char *string, size_t size, const char *f, va_list args) string[s_idx++] = number[i]; } break; + case 'c': + { + char c = va_arg(args, int); + if (s_idx < size - 1) + string[s_idx++] = c; + } + break; case '%': string[s_idx++] = '%'; break; diff --git a/test/signal-logging.c b/test/signal-logging.c index 65baa456f..b45d8d4f3 100644 --- a/test/signal-logging.c +++ b/test/signal-logging.c @@ -201,6 +201,11 @@ static void logging_format(void) read_log_msg(logmsg); assert(strcmp(logmsg, "(EE) test %\n") == 0); + /* character */ + LogMessageVerbSigSafe(X_ERROR, -1, "test %c\n", 'a'); + read_log_msg(logmsg); + assert(strcmp(logmsg, "(EE) test a\n") == 0); + /* string substitution */ LogMessageVerbSigSafe(X_ERROR, -1, "%s\n", "substituted string"); read_log_msg(logmsg);