From b9ec8c36cda84e0cce58c9952c43ac4e99a09a4d Mon Sep 17 00:00:00 2001
From: Glauber Costa <glommer@cloudius-systems.com>
Date: Mon, 26 May 2014 16:35:52 +0400
Subject: [PATCH] libc: implement gai_strerror

Code from musl.

Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
---
 libc/build.mk                |  1 +
 libc/network/gai_strerror.cc | 23 +++++++++++++++++++++++
 2 files changed, 24 insertions(+)
 create mode 100644 libc/network/gai_strerror.cc

diff --git a/libc/build.mk b/libc/build.mk
index 361ee3aca..f06577ffa 100644
--- a/libc/build.mk
+++ b/libc/build.mk
@@ -377,6 +377,7 @@ libc += network/inet_pton.o
 libc += network/inet_ntop.o
 libc += network/proto.o
 libc += network/if_indextoname.o
+libc += network/gai_strerror.o
 
 libc += prng/rand.o
 libc += prng/random.o
diff --git a/libc/network/gai_strerror.cc b/libc/network/gai_strerror.cc
new file mode 100644
index 000000000..0bf3e3797
--- /dev/null
+++ b/libc/network/gai_strerror.cc
@@ -0,0 +1,23 @@
+#include <netdb.h>
+
+static const char msgs[] =
+	"Invalid flags\0"
+	"Name does not resolve\0"
+	"Try again\0"
+	"Non-recoverable error\0"
+	"Unknown error\0"
+	"Unrecognized address family or invalid length\0"
+	"Unrecognized socket type\0"
+	"Unrecognized service\0"
+	"Unknown error\0"
+	"Out of memory\0"
+	"System error\0"
+	"Overflow\0"
+	"\0Unknown error";
+
+const char *gai_strerror(int ecode)
+{
+	const char *s;
+	for (s=msgs, ecode++; ecode && *s; ecode++, s++) for (; *s; s++);
+	return *s ? s : s+1;
+}
-- 
GitLab