Bug 1598533 - Add support for %t modifier in PrintfTarget. r=nika,Gankra

Differential Revision: https://phabricator.services.mozilla.com/D103731
This commit is contained in:
Mike Hommey 2021-02-02 20:16:55 +00:00
parent f21eb2a491
commit 34b72664d0
2 changed files with 19 additions and 1 deletions

View File

@ -553,6 +553,15 @@ static bool BuildArgArray(const char* fmt, va_list ap, NumArgStateVector& nas) {
: sizeof(size_t) == sizeof(long) ? TYPE_LONG
: TYPE_LONGLONG;
c = *p++;
} else if (c == 't') {
static_assert(sizeof(ptrdiff_t) == sizeof(int) ||
sizeof(ptrdiff_t) == sizeof(long) ||
sizeof(ptrdiff_t) == sizeof(long long),
"ptrdiff_t is not one of the expected sizes");
nas[cn].type = sizeof(ptrdiff_t) == sizeof(int) ? TYPE_INTN
: sizeof(ptrdiff_t) == sizeof(long) ? TYPE_LONG
: TYPE_LONGLONG;
c = *p++;
}
// format
@ -831,6 +840,15 @@ bool mozilla::PrintfTarget::vprint(const char* fmt, va_list ap) {
: sizeof(size_t) == sizeof(long) ? TYPE_LONG
: TYPE_LONGLONG;
c = *fmt++;
} else if (c == 't') {
static_assert(sizeof(ptrdiff_t) == sizeof(int) ||
sizeof(ptrdiff_t) == sizeof(long) ||
sizeof(ptrdiff_t) == sizeof(long long),
"ptrdiff_t is not one of the expected sizes");
type = sizeof(ptrdiff_t) == sizeof(int) ? TYPE_INTN
: sizeof(ptrdiff_t) == sizeof(long) ? TYPE_LONG
: TYPE_LONGLONG;
c = *fmt++;
}
// format

View File

@ -132,7 +132,7 @@ static void TestPrintfFormats() {
MOZ_RELEASE_ASSERT(print_one("", "%.*lld", 0, 0ll));
MOZ_RELEASE_ASSERT(print_one("0xF0F0", "0x%llX", 0xf0f0ull));
MOZ_RELEASE_ASSERT(print_one("27270", "%zu", (size_t)27270));
MOZ_RELEASE_ASSERT(print_one("27270", "%zu", (size_t)27270));
MOZ_RELEASE_ASSERT(print_one("27270", "%tu", (ptrdiff_t)27270));
MOZ_RELEASE_ASSERT(print_one("hello", "he%so", "ll"));
MOZ_RELEASE_ASSERT(print_one("hello ", "%-8s", "hello"));
MOZ_RELEASE_ASSERT(print_one(" hello", "%8s", "hello"));