diff --git a/os/log.c b/os/log.c index df025fbca..e4e9e8b9d 100644 --- a/os/log.c +++ b/os/log.c @@ -450,6 +450,9 @@ pnprintf(char *string, size_t size, const char *f, va_list args) string[s_idx++] = number[i]; } break; + case '%': + string[s_idx++] = '%'; + break; default: va_arg(args, char*); string[s_idx++] = '%'; diff --git a/test/signal-logging.c b/test/signal-logging.c index 9038cf81f..65baa456f 100644 --- a/test/signal-logging.c +++ b/test/signal-logging.c @@ -196,6 +196,11 @@ static void logging_format(void) read_log_msg(logmsg); assert(strcmp(logmsg, "(EE) %s %d %u %% %p %i\n") == 0); + /* literal % */ + LogMessageVerbSigSafe(X_ERROR, -1, "test %%\n"); + read_log_msg(logmsg); + assert(strcmp(logmsg, "(EE) test %\n") == 0); + /* string substitution */ LogMessageVerbSigSafe(X_ERROR, -1, "%s\n", "substituted string"); read_log_msg(logmsg);