Add strerrordesc_np() and strerrorname_np().
strerrordesc_np() isn't very useful (being just another name for
strerror()), but strerrorname_np() lets you get "ENOSYS" for ENOSYS,
which will make some of our test assertion messages clearer when we
switch over from strerror().
This also adds `%#m` formatting to all the relevant functions.
Test: treehugger
Change-Id: Icfe07a39a307d591c3f4f2a09d008dc021643062
diff --git a/libc/async_safe/async_safe_log.cpp b/libc/async_safe/async_safe_log.cpp
index 2bff616..451cb8c 100644
--- a/libc/async_safe/async_safe_log.cpp
+++ b/libc/async_safe/async_safe_log.cpp
@@ -361,7 +361,19 @@
buffer[1] = 'x';
format_integer(buffer + 2, sizeof(buffer) - 2, value, 'x');
} else if (c == 'm') {
- strerror_r(errno, buffer, sizeof(buffer));
+#if __ANDROID_API_LEVEL__ >= 35 // This library is used in mainline modules.
+ if (alternate) {
+ const char* name = strerrorname_np(errno);
+ if (name) {
+ strcpy(buffer, name);
+ } else {
+ format_integer(buffer, sizeof(buffer), errno, 'd');
+ }
+ } else
+#endif
+ {
+ strerror_r(errno, buffer, sizeof(buffer));
+ }
} else if (tolower(c) == 'b' || c == 'd' || c == 'i' || c == 'o' || c == 'u' ||
tolower(c) == 'x') {
/* integers - first read value from stack */