@@ -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