2007-09-25 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / io-layer / error.c
index b7fd03c821d3873724fdba03df500e0fe31b8f20..7dea6633bbec7ba1daa3b2909d2b5ae466b1286e 100644 (file)
@@ -26,6 +26,14 @@ static void error_init(void)
        g_assert (ret == 0);
 }
 
+void _wapi_error_cleanup (void)
+{
+       int ret;
+
+       ret = pthread_key_delete (error_key);
+       g_assert (ret == 0);
+}
+
 /**
  * GetLastError:
  *
@@ -70,6 +78,7 @@ errno_to_WSA (guint32 code, const gchar *function_name)
        gchar *msg;
 
        switch (code) {
+       case 0: result = ERROR_SUCCESS; break;
        case EACCES: result = WSAEACCES; break;
        case EADDRINUSE: result = WSAEADDRINUSE; break;
        case EAFNOSUPPORT: result = WSAEAFNOSUPPORT; break;
@@ -113,9 +122,12 @@ errno_to_WSA (guint32 code, const gchar *function_name)
 #endif
        /*FIXME: case EROFS: result = WSAE????; break; */
        case ESOCKTNOSUPPORT: result = WSAESOCKTNOSUPPORT; break;
-       case ETIMEDOUT: result = WSAENETDOWN; break;
+       case ETIMEDOUT: result = WSAETIMEDOUT; break;
        case EWOULDBLOCK: result = WSAEWOULDBLOCK; break;
        case EADDRNOTAVAIL: result = WSAEADDRNOTAVAIL; break;
+       /* This might happen with unix sockets */
+       case ENOENT: result = WSAECONNREFUSED; break;
+       case EDESTADDRREQ: result = WSAEDESTADDRREQ; break;
        default:
                sys_error = strerror (code);
                msg = g_locale_to_utf8 (sys_error, strlen (sys_error), NULL, NULL, NULL);
@@ -203,8 +215,16 @@ _wapi_get_win32_file_error (gint err)
                ret = ERROR_INVALID_HANDLE;
                break;
                
+       case EINTR:
+               ret = ERROR_IO_PENDING;         /* best match I could find */
+               break;
+               
+       case EPIPE:
+               ret = ERROR_WRITE_FAULT;
+               break;
+               
        default:
-               g_message ("Unknown errno: %s\n", strerror (err));
+               g_message ("Unknown errno: %s\n", g_strerror (err));
                ret = ERROR_GEN_FAILURE;
                break;
        }