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