Commit | Line | Data |
---|---|---|
6457985e GH |
1 | From e2b1bab19a782cb62bb010d1c2925ab7314fb113 Mon Sep 17 00:00:00 2001 |
2 | diff --git a/absl/base/internal/strerror.cc b/absl/base/internal/strerror.cc | |
3 | index d66ba120..0d6226fd 100644 | |
4 | --- a/absl/base/internal/strerror.cc | |
5 | +++ b/absl/base/internal/strerror.cc | |
6 | @@ -51,7 +51,6 @@ const char* StrErrorAdaptor(int errnum, char* buf, size_t buflen) { | |
7 | } | |
8 | ||
9 | std::string StrErrorInternal(int errnum) { | |
10 | - absl::base_internal::ErrnoSaver errno_saver; | |
11 | char buf[100]; | |
12 | const char* str = StrErrorAdaptor(errnum, buf, sizeof buf); | |
13 | if (*str == '\0') { | |
14 | @@ -76,6 +75,7 @@ std::array<std::string, kSysNerr>* NewStrErrorTable() { | |
15 | } // namespace | |
16 | ||
17 | std::string StrError(int errnum) { | |
18 | + absl::base_internal::ErrnoSaver errno_saver; | |
19 | static const auto* table = NewStrErrorTable(); | |
20 | if (errnum >= 0 && errnum < static_cast<int>(table->size())) { | |
21 | return (*table)[errnum]; | |
22 | diff --git a/absl/base/internal/strerror_test.cc b/absl/base/internal/strerror_test.cc | |
23 | index a53da97f..e32d5b5c 100644 | |
24 | --- a/absl/base/internal/strerror_test.cc | |
25 | +++ b/absl/base/internal/strerror_test.cc | |
26 | @@ -62,12 +62,14 @@ TEST(StrErrorTest, MultipleThreads) { | |
27 | ++counter; | |
28 | errno = ERANGE; | |
29 | const std::string value = absl::base_internal::StrError(i); | |
30 | + // EXPECT_* could change errno. Stash it first. | |
31 | + int check_err = errno; | |
32 | + EXPECT_THAT(check_err, Eq(ERANGE)); | |
33 | // Only the GNU implementation is guaranteed to provide the | |
34 | // string "Unknown error nnn". POSIX doesn't say anything. | |
35 | if (!absl::StartsWith(value, "Unknown error ")) { | |
36 | - EXPECT_THAT(absl::base_internal::StrError(i), Eq(expected_strings[i])); | |
37 | + EXPECT_THAT(value, Eq(expected_strings[i])); | |
38 | } | |
39 | - EXPECT_THAT(errno, Eq(ERANGE)); | |
40 | } | |
41 | }; | |
42 |