Browse Source

LibC: Add herror() and hstrerror()

Michał Lach 3 years ago
parent
commit
6a7d3006d7
2 changed files with 26 additions and 0 deletions
  1. 22 0
      Userland/Libraries/LibC/netdb.cpp
  2. 4 0
      Userland/Libraries/LibC/netdb.h

+ 22 - 0
Userland/Libraries/LibC/netdb.cpp

@@ -829,4 +829,26 @@ int getnameinfo(const struct sockaddr* __restrict addr, socklen_t addrlen, char*
 
     return 0;
 }
+
+void herror(char const* s)
+{
+    dbgln("herror(): {}: {}", s, hstrerror(h_errno));
+    warnln("{}: {}", s, hstrerror(h_errno));
+}
+
+char const* hstrerror(int err)
+{
+    switch (err) {
+    case HOST_NOT_FOUND:
+        return "The specified host is unknown.";
+    case NO_DATA:
+        return "The requested name is valid but does not have an IP address.";
+    case NO_RECOVERY:
+        return "A nonrecoverable name server error occurred.";
+    case TRY_AGAIN:
+        return "A temporary error occurred on an authoritative name server. Try again later.";
+    default:
+        return "Unknown error.";
+    }
+}
 }

+ 4 - 0
Userland/Libraries/LibC/netdb.h

@@ -56,6 +56,7 @@ extern __thread int h_errno;
 
 #define HOST_NOT_FOUND 101
 #define NO_DATA 102
+#define NO_ADDRESS NO_DATA
 #define NO_RECOVERY 103
 #define TRY_AGAIN 104
 
@@ -105,4 +106,7 @@ void freeaddrinfo(struct addrinfo* res);
 char const* gai_strerror(int errcode);
 int getnameinfo(const struct sockaddr* __restrict addr, socklen_t addrlen, char* __restrict host, socklen_t hostlen, char* __restrict serv, socklen_t servlen, int flags);
 
+void herror(char const* s);
+char const* hstrerror(int err);
+
 __END_DECLS