Commit 5b7e1f9e authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

gai_strerror: provide private implementation

There are systems (like NetWare) without its own gai_strerror()
function.
parent c33aee16
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -415,6 +415,44 @@ static bool init_resolve_thread (struct connectdata *conn,
  return FALSE;
}

#if defined(HAVE_GETADDRINFO) && !defined(HAVE_GAI_STRERROR) && !defined(WIN32)
/* NetWare has getaddrinfo but lacks gai_strerror.
   Windows has a gai_strerror but it is bad (not thread-safe) and the generic
   socket error string function can be used for this pupose. */
static const char *gai_strerror(int ecode)
{
  switch (ecode){
  case EAI_AGAIN:
    return "The name could not be resolved at this time";
  case EAI_BADFLAGS:
    return "The flags parameter had an invalid value";
  case EAI_FAIL:
    return "A non-recoverable error occurred when attempting to "
      "resolve the name";
  case EAI_FAMILY:
    return "The address family was not recognized";
  case EAI_MEMORY:
    return "Out of memory";
  case EAI_NONAME:
    return "The name does not resolve for the supplied parameters";
  case EAI_SERVICE:
    return "The service passed was not recognized for the "
      "specified socket type"
  case EAI_SOCKTYPE:
    return "The intended socket type was not recognized"
  case EAI_SYSTEM:
    return "A system error occurred";
  case EAI_OVERFLOW:
    return "An argument buffer overflowed";
  default:
    return "Unknown error";

/* define this now as this is a private implementation of said function */
#define HAVE_GAI_STRERROR
}
#endif


/*
 * resolver_error() calls failf() with the appropriate message after a resolve
 * error