mirror of https://github.com/libsdl-org/SDL
Fixed printf formatting for "%p" and added a unit test to check it
This commit is contained in:
parent
ecbbac7c72
commit
c63aa9545e
|
@ -1774,6 +1774,20 @@ static size_t SDL_PrintFloat(char *text, size_t maxlen, SDL_FormatInfo *info, do
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t SDL_PrintPointer(char *text, size_t maxlen, SDL_FormatInfo *info, const void *value)
|
||||||
|
{
|
||||||
|
char num[130];
|
||||||
|
size_t length;
|
||||||
|
|
||||||
|
if (!value) {
|
||||||
|
return SDL_PrintString(text, maxlen, info, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_ulltoa((unsigned long long)(uintptr_t)value, num, 16);
|
||||||
|
length = SDL_PrintString(text, maxlen, info, "0x");
|
||||||
|
return length + SDL_PrintString(TEXT_AND_LEN_ARGS, info, num);
|
||||||
|
}
|
||||||
|
|
||||||
/* NOLINTNEXTLINE(readability-non-const-parameter) */
|
/* NOLINTNEXTLINE(readability-non-const-parameter) */
|
||||||
int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap)
|
int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap)
|
||||||
{
|
{
|
||||||
|
@ -1906,6 +1920,9 @@ int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *f
|
||||||
done = SDL_TRUE;
|
done = SDL_TRUE;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
|
info.force_case = SDL_CASE_LOWER;
|
||||||
|
length += SDL_PrintPointer(TEXT_AND_LEN_ARGS, &info, va_arg(ap, void *));
|
||||||
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
info.force_case = SDL_CASE_LOWER;
|
info.force_case = SDL_CASE_LOWER;
|
||||||
SDL_FALLTHROUGH;
|
SDL_FALLTHROUGH;
|
||||||
|
|
|
@ -214,6 +214,12 @@ static int stdlib_snprintf(void *arg)
|
||||||
SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text);
|
SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text);
|
||||||
SDLTest_AssertCheck(result == 7, "Check result value, expected: 7, got: %d", result);
|
SDLTest_AssertCheck(result == 7, "Check result value, expected: 7, got: %d", result);
|
||||||
|
|
||||||
|
result = SDL_snprintf(text, sizeof(text), "%p", (void *)0x1234abcd);
|
||||||
|
expected = "0x1234abcd";
|
||||||
|
SDLTest_AssertPass("Call to SDL_snprintf(text, sizeof(text), \"%%p\", 0x1234abcd)");
|
||||||
|
SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text);
|
||||||
|
SDLTest_AssertCheck(result == SDL_strlen(expected), "Check result value, expected: %d, got: %d", (int)SDL_strlen(expected), result);
|
||||||
|
|
||||||
return TEST_COMPLETED;
|
return TEST_COMPLETED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue