From 8f1353eb949ebcb69fb756d8d908bcb40885249e Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 19 Dec 2015 04:02:35 +0100 Subject: [PATCH] Fix getaddrinfo error reporting. --- libc/netdb/gai_strerror.cpp | 21 ++++++++++++++++----- libc/netdb/getaddrinfo.cpp | 5 ++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/libc/netdb/gai_strerror.cpp b/libc/netdb/gai_strerror.cpp index 1f7d4085..6c930d05 100644 --- a/libc/netdb/gai_strerror.cpp +++ b/libc/netdb/gai_strerror.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2013. + Copyright(C) Jonas 'Sortie' Termansen 2013, 2015. This file is part of the Sortix C Library. @@ -23,12 +23,23 @@ *******************************************************************************/ #include - #include #include -extern "C" const char* gai_strerror(int) +extern "C" const char* gai_strerror(int err) { - fprintf(stderr, "%s is not implemented, aborting.\n", __func__); - abort(); + switch ( err ) + { + case EAI_AGAIN: return "Try again"; + case EAI_BADFLAGS: return "Invalid flags"; + case EAI_FAIL: return "Non-recoverable error"; + case EAI_FAMILY: return "Unrecognized address family or invalid length"; + case EAI_MEMORY: return "Out of memory"; + case EAI_NONAME: return "Name does not resolve"; + case EAI_SERVICE: return "Unrecognized service"; + case EAI_SOCKTYPE: return "Unrecognized socket type"; + case EAI_SYSTEM: return "System error"; + case EAI_OVERFLOW: return "Overflow"; + } + return "Unknown error"; } diff --git a/libc/netdb/getaddrinfo.cpp b/libc/netdb/getaddrinfo.cpp index b9d5b406..94b699fa 100644 --- a/libc/netdb/getaddrinfo.cpp +++ b/libc/netdb/getaddrinfo.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2013. + Copyright(C) Jonas 'Sortie' Termansen 2013, 2015. This file is part of the Sortix C Library. @@ -31,6 +31,5 @@ extern "C" int getaddrinfo(const char* restrict, const char* restrict, const struct addrinfo* restrict, struct addrinfo** restrict) { - fprintf(stderr, "%s is not implemented, aborting.\n", __func__); - abort(); + return EAI_NONAME; }