[libc-commits] [libc] [libc] Add `strerror` and `strerror_k` to the GPU (PR #99083)
Michael Jones via libc-commits
libc-commits at lists.llvm.org
Tue Jul 16 12:44:59 PDT 2024
================
@@ -6,153 +6,16 @@
//
//===----------------------------------------------------------------------===//
+#include "src/__support/StringUtil/platform_errors.h"
+#include "src/__support/macros/properties/architectures.h"
#include "src/string/strerror.h"
#include "test/UnitTest/Test.h"
TEST(LlvmLibcStrErrorTest, KnownErrors) {
ASSERT_STREQ(LIBC_NAMESPACE::strerror(0), "Success");
- const char *message_array[] = {
- "Success",
- "Operation not permitted",
- "No such file or directory",
- "No such process",
- "Interrupted system call",
- "Input/output error",
- "No such device or address",
- "Argument list too long",
- "Exec format error",
- "Bad file descriptor",
- "No child processes",
- "Resource temporarily unavailable",
- "Cannot allocate memory",
- "Permission denied",
- "Bad address",
- "Block device required",
- "Device or resource busy",
- "File exists",
- "Invalid cross-device link",
- "No such device",
- "Not a directory",
- "Is a directory",
- "Invalid argument",
- "Too many open files in system",
- "Too many open files",
- "Inappropriate ioctl for device",
- "Text file busy",
- "File too large",
- "No space left on device",
- "Illegal seek",
- "Read-only file system",
- "Too many links",
- "Broken pipe",
- "Numerical argument out of domain",
- "Numerical result out of range",
- "Resource deadlock avoided",
- "File name too long",
- "No locks available",
- "Function not implemented",
- "Directory not empty",
- "Too many levels of symbolic links",
- "Unknown error 41", // Unknown
- "No message of desired type",
- "Identifier removed",
- "Channel number out of range",
- "Level 2 not synchronized",
- "Level 3 halted",
- "Level 3 reset",
- "Link number out of range",
- "Protocol driver not attached",
- "No CSI structure available",
- "Level 2 halted",
- "Invalid exchange",
- "Invalid request descriptor",
- "Exchange full",
- "No anode",
- "Invalid request code",
- "Invalid slot",
- "Unknown error 58", // Unknown
- "Bad font file format",
- "Device not a stream",
- "No data available",
- "Timer expired",
- "Out of streams resources",
- "Machine is not on the network",
- "Package not installed",
- "Object is remote",
- "Link has been severed",
- "Advertise error",
- "Srmount error",
- "Communication error on send",
- "Protocol error",
- "Multihop attempted",
- "RFS specific error",
- "Bad message",
- "Value too large for defined data type",
- "Name not unique on network",
- "File descriptor in bad state",
- "Remote address changed",
- "Can not access a needed shared library",
- "Accessing a corrupted shared library",
- ".lib section in a.out corrupted",
- "Attempting to link in too many shared libraries",
- "Cannot exec a shared library directly",
- "Unknown error 84", // Unknown
- "Interrupted system call should be restarted",
- "Streams pipe error",
- "Too many users",
- "Socket operation on non-socket",
- "Destination address required",
- "Message too long",
- "Protocol wrong type for socket",
- "Protocol not available",
- "Protocol not supported",
- "Socket type not supported",
- "Operation not supported",
- "Protocol family not supported",
- "Address family not supported by protocol",
- "Address already in use",
- "Cannot assign requested address",
- "Network is down",
- "Network is unreachable",
- "Network dropped connection on reset",
- "Software caused connection abort",
- "Connection reset by peer",
- "No buffer space available",
- "Transport endpoint is already connected",
- "Transport endpoint is not connected",
- "Cannot send after transport endpoint shutdown",
- "Too many references: cannot splice",
- "Connection timed out",
- "Connection refused",
- "Host is down",
- "No route to host",
- "Operation already in progress",
- "Operation now in progress",
- "Stale file handle",
- "Structure needs cleaning",
- "Not a XENIX named type file",
- "No XENIX semaphores available",
- "Is a named type file",
- "Remote I/O error",
- "Disk quota exceeded",
- "No medium found",
- "Wrong medium type",
- "Operation canceled",
- "Required key not available",
- "Key has expired",
- "Key has been revoked",
- "Key was rejected by service",
- "Owner died",
- "State not recoverable",
- "Operation not possible due to RF-kill",
- "Memory page has hardware error",
- };
-
- for (size_t i = 0; i < (sizeof(message_array) / sizeof(char *)); ++i) {
- EXPECT_STREQ(LIBC_NAMESPACE::strerror(static_cast<int>(i)),
- message_array[i]);
- }
+ for (auto [i, msg] : LIBC_NAMESPACE::PLATFORM_ERRORS)
+ EXPECT_STREQ(LIBC_NAMESPACE::strerror(static_cast<int>(i)), msg.begin());
----------------
michaelrj-google wrote:
I'm somewhat hesitant to do it this way, since it's effectively comparing the values against themselves, but I can't think of a better solution.
https://github.com/llvm/llvm-project/pull/99083
More information about the libc-commits
mailing list