diff --git a/mozglue/misc/Printf.cpp b/mozglue/misc/Printf.cpp index de7c4a13da3a..338fc54d72bf 100644 --- a/mozglue/misc/Printf.cpp +++ b/mozglue/misc/Printf.cpp @@ -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 diff --git a/mozglue/tests/TestPrintf.cpp b/mozglue/tests/TestPrintf.cpp index 6a0fbec35143..d3af76f36067 100644 --- a/mozglue/tests/TestPrintf.cpp +++ b/mozglue/tests/TestPrintf.cpp @@ -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"));