@@ -2673,6 +2673,91 @@ static inline int winsock_return(int ret)
26732673
26742674#define WINSOCK_RETURN (x ) do { return winsock_return(x); } while (0)
26752675
2676+ #undef strerror
2677+ char * mingw_strerror (int errnum )
2678+ {
2679+ static char buf [41 ] = "" ;
2680+ switch (errnum ) {
2681+ case EWOULDBLOCK :
2682+ xsnprintf (buf , 41 , "%s" , "Operation would block" );
2683+ break ;
2684+ case EINPROGRESS :
2685+ xsnprintf (buf , 41 , "%s" , "Operation now in progress" );
2686+ break ;
2687+ case EALREADY :
2688+ xsnprintf (buf , 41 , "%s" , "Operation already in progress" );
2689+ break ;
2690+ case ENOTSOCK :
2691+ xsnprintf (buf , 41 , "%s" , "Socket operation on non-socket" );
2692+ break ;
2693+ case EDESTADDRREQ :
2694+ xsnprintf (buf , 41 , "%s" , "Destination address required" );
2695+ break ;
2696+ case EMSGSIZE :
2697+ xsnprintf (buf , 41 , "%s" , "Message too long" );
2698+ break ;
2699+ case EPROTOTYPE :
2700+ xsnprintf (buf , 41 , "%s" , "Protocol wrong type for socket" );
2701+ break ;
2702+ case ENOPROTOOPT :
2703+ xsnprintf (buf , 41 , "%s" , "Protocol not available" );
2704+ break ;
2705+ case EPROTONOSUPPORT :
2706+ xsnprintf (buf , 41 , "%s" , "Protocol not supported" );
2707+ break ;
2708+ case EOPNOTSUPP :
2709+ xsnprintf (buf , 41 , "%s" , "Operation not supported" );
2710+ break ;
2711+ case EAFNOSUPPORT :
2712+ xsnprintf (buf , 41 , "%s" , "Address family not supported by protocol" );
2713+ break ;
2714+ case EADDRINUSE :
2715+ xsnprintf (buf , 41 , "%s" , "Address already in use" );
2716+ break ;
2717+ case EADDRNOTAVAIL :
2718+ xsnprintf (buf , 41 , "%s" , "Cannot assign requested address" );
2719+ break ;
2720+ case ENETDOWN :
2721+ xsnprintf (buf , 41 , "%s" , "Network is down" );
2722+ break ;
2723+ case ENETUNREACH :
2724+ xsnprintf (buf , 41 , "%s" , "Network is unreachable" );
2725+ break ;
2726+ case ENETRESET :
2727+ xsnprintf (buf , 41 , "%s" , "Network dropped connection on reset" );
2728+ break ;
2729+ case ECONNABORTED :
2730+ xsnprintf (buf , 41 , "%s" , "Software caused connection abort" );
2731+ break ;
2732+ case ECONNRESET :
2733+ xsnprintf (buf , 41 , "%s" , "Connection reset by peer" );
2734+ break ;
2735+ case ENOBUFS :
2736+ xsnprintf (buf , 41 , "%s" , "No buffer space available" );
2737+ break ;
2738+ case EISCONN :
2739+ xsnprintf (buf , 41 , "%s" , "Transport endpoint is already connected" );
2740+ break ;
2741+ case ENOTCONN :
2742+ xsnprintf (buf , 41 , "%s" , "Transport endpoint is not connected" );
2743+ break ;
2744+ case ETIMEDOUT :
2745+ xsnprintf (buf , 41 , "%s" , "Connection timed out" );
2746+ break ;
2747+ case ECONNREFUSED :
2748+ xsnprintf (buf , 41 , "%s" , "Connection refused" );
2749+ break ;
2750+ case ELOOP :
2751+ xsnprintf (buf , 41 , "%s" , "Too many levels of symbolic links" );
2752+ break ;
2753+ case EHOSTUNREACH :
2754+ xsnprintf (buf , 41 , "%s" , "No route to host" );
2755+ break ;
2756+ default : return strerror (errnum );
2757+ }
2758+ return buf ;
2759+ }
2760+
26762761#undef gethostname
26772762int mingw_gethostname (char * name , int namelen )
26782763{
@@ -2710,15 +2795,6 @@ int mingw_socket(int domain, int type, int protocol)
27102795 ensure_socket_initialization ();
27112796 s = WSASocket (domain , type , protocol , NULL , 0 , 0 );
27122797 if (s == INVALID_SOCKET ) {
2713- /*
2714- * WSAGetLastError() values are regular BSD error codes
2715- * biased by WSABASEERR.
2716- * However, strerror() does not know about networking
2717- * specific errors, which are values beginning at 38 or so.
2718- * Therefore, we choose to leave the biased error code
2719- * in errno so that _if_ someone looks up the code somewhere,
2720- * then it is at least the number that are usually listed.
2721- */
27222798 set_wsa_errno ();
27232799 return -1 ;
27242800 }
0 commit comments