diff options
author | Elliott Hughes <enh@google.com> | 2018-09-06 10:42:40 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2018-09-06 10:42:40 -0700 |
commit | f340a56d1c7aa469ccb4150521aba19f5c73dcf0 (patch) | |
tree | cc41e09773b753e85fb7a503cd257cf808fea7c0 /tests/stdio_test.cpp | |
parent | 74934aaf10d629de477095f0b92c467849f89638 (diff) |
Use strerror_r(3) for the printf family %m.
There's TLS space used for unknown errno values, and a call to printf
shouldn't clobber that. No-one will ever hit this in real life, but
since it's easily fixed...
Bug: http://b/112776560
Test: ran tests
Change-Id: I8c2437f2e5214e652119791d4e162a197b049d5b
Diffstat (limited to 'tests/stdio_test.cpp')
-rw-r--r-- | tests/stdio_test.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/stdio_test.cpp b/tests/stdio_test.cpp index 4107a7490..54b913add 100644 --- a/tests/stdio_test.cpp +++ b/tests/stdio_test.cpp @@ -2369,6 +2369,16 @@ TEST(STDIO_TEST, printf_m) { ASSERT_STREQ("<Invalid argument>", buf); } +TEST(STDIO_TEST, printf_m_does_not_clobber_strerror) { + char buf[BUFSIZ]; + const char* m = strerror(-1); + ASSERT_STREQ("Unknown error -1", m); + errno = -2; + snprintf(buf, sizeof(buf), "<%m>"); + ASSERT_STREQ("<Unknown error -2>", buf); + ASSERT_STREQ("Unknown error -1", m); +} + TEST(STDIO_TEST, wprintf_m) { wchar_t buf[BUFSIZ]; errno = 0; @@ -2382,6 +2392,16 @@ TEST(STDIO_TEST, wprintf_m) { ASSERT_EQ(std::wstring(L"<Invalid argument>"), buf); } +TEST(STDIO_TEST, wprintf_m_does_not_clobber_strerror) { + wchar_t buf[BUFSIZ]; + const char* m = strerror(-1); + ASSERT_STREQ("Unknown error -1", m); + errno = -2; + swprintf(buf, sizeof(buf), L"<%m>"); + ASSERT_EQ(std::wstring(L"<Unknown error -2>"), buf); + ASSERT_STREQ("Unknown error -1", m); +} + TEST(STDIO_TEST, fopen_append_mode_and_ftell) { TemporaryFile tf; SetFileTo(tf.filename, "0123456789"); |