The mouse driver uses %i in some debug messages
Signed-off-by: Peter Hutterer <[email protected]>
---
os/log.c | 10 ++++++++++
test/signal-logging.c | 21 +++++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/os/log.c b/os/log.c
index 25da9f6..4348739 100644
--- a/os/log.c
+++ b/os/log.c
@@ -290,6 +290,7 @@ pnprintf(char *string, size_t size, const char *f, va_list
args)
int p_len;
int i;
uint64_t ui;
+ int64_t si;
for (; f_idx < f_len && s_idx < size - 1; f_idx++) {
if (f[f_idx] != '%') {
@@ -314,6 +315,15 @@ pnprintf(char *string, size_t size, const char *f, va_list
args)
for (i = 0; i < p_len && s_idx < size - 1; i++)
string[s_idx++] = number[i];
break;
+ case 'i':
+ case 'd':
+ si = va_arg(args, int);
+ FormatInt64(si, number);
+ p_len = strlen_sigsafe(number);
+
+ for (i = 0; i < p_len && s_idx < size - 1; i++)
+ string[s_idx++] = number[i];
+ break;
case 'p':
string[s_idx++] = '0';
diff --git a/test/signal-logging.c b/test/signal-logging.c
index 0e352aa..3206dde 100644
--- a/test/signal-logging.c
+++ b/test/signal-logging.c
@@ -242,6 +242,27 @@ static void logging_format(void)
ui <<= 1;
} while(ui);
+ /* signed number substitution */
+ i = 0;
+ do {
+ char expected[30];
+ sprintf(expected, "(EE) %d\n", i);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%d\n", i);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+
+ sprintf(expected, "(EE) %d\n", i | INT_MIN);
+ LogMessageVerbSigSafe(X_ERROR, -1, "%d\n", i | INT_MIN);
+ read_log_msg(logmsg);
+ assert(strcmp(logmsg, expected) == 0);
+
+ if (i == 0)
+ i = 1;
+ else
+ i <<= 1;
+ } while(i > INT_MIN);
+
/* hex number substitution */
ui = 0;
do {
--
1.7.11.2
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel