summaryrefslogtreecommitdiffstats
path: root/otherlibs/win32unix/unixsupport.c
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1996-09-05 13:32:25 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1996-09-05 13:32:25 +0000
commit6ded697b42a2f40a96c774975e36e99897195aec (patch)
tree101febfe5774275c5392863fd93a004465e58bc0 /otherlibs/win32unix/unixsupport.c
parentb973b44d9fa9e63d5504cc59e5078411b30efe03 (diff)
Premiere compilation.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@956 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs/win32unix/unixsupport.c')
-rw-r--r--otherlibs/win32unix/unixsupport.c129
1 files changed, 129 insertions, 0 deletions
diff --git a/otherlibs/win32unix/unixsupport.c b/otherlibs/win32unix/unixsupport.c
new file mode 100644
index 000000000..4ec1be343
--- /dev/null
+++ b/otherlibs/win32unix/unixsupport.c
@@ -0,0 +1,129 @@
+/***********************************************************************/
+/* */
+/* Objective Caml */
+/* */
+/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
+/* */
+/* Copyright 1996 Institut National de Recherche en Informatique et */
+/* Automatique. Distributed only by permission. */
+/* */
+/***********************************************************************/
+
+/* $Id$ */
+
+#include <mlvalues.h>
+#include <alloc.h>
+#include <memory.h>
+#include <fail.h>
+#include "unixsupport.h"
+#include "cst2constr.h"
+#include <errno.h>
+#include <winsock.h>
+
+/* Windows socket errors */
+
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define EINPROGRESS WSAEINPROGRESS
+#define EALREADY WSAEALREADY
+#define ENOTSOCK WSAENOTSOCK
+#define EDESTADDRREQ WSAEDESTADDRREQ
+#define EMSGSIZE WSAEMSGSIZE
+#define EPROTOTYPE WSAEPROTOTYPE
+#define ENOPROTOOPT WSAENOPROTOOPT
+#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#define EOPNOTSUPP WSAEOPNOTSUPP
+#define EPFNOSUPPORT WSAEPFNOSUPPORT
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#define EADDRINUSE WSAEADDRINUSE
+#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#define ENETDOWN WSAENETDOWN
+#define ENETUNREACH WSAENETUNREACH
+#define ENETRESET WSAENETRESET
+#define ECONNABORTED WSAECONNABORTED
+#define ECONNRESET WSAECONNRESET
+#define ENOBUFS WSAENOBUFS
+#define EISCONN WSAEISCONN
+#define ENOTCONN WSAENOTCONN
+#define ESHUTDOWN WSAESHUTDOWN
+#define ETOOMANYREFS WSAETOOMANYREFS
+#define ETIMEDOUT WSAETIMEDOUT
+#define ECONNREFUSED WSAECONNREFUSED
+#define ELOOP WSAELOOP
+#define EHOSTDOWN WSAEHOSTDOWN
+#define EHOSTUNREACH WSAEHOSTUNREACH
+#define EPROCLIM WSAEPROCLIM
+#define EUSERS WSAEUSERS
+#define EDQUOT WSAEDQUOT
+#define ESTALE WSAESTALE
+#define EREMOTE WSAEREMOTE
+
+/* Errors not available under Win32 */
+
+#define EACCESS (-1)
+
+int error_table[] = {
+ E2BIG, EACCESS, EAGAIN, EBADF, EBUSY, ECHILD, EDEADLK, EDOM,
+ EEXIST, EFAULT, EFBIG, EINTR, EINVAL, EIO, EISDIR, EMFILE, EMLINK,
+ ENAMETOOLONG, ENFILE, ENODEV, ENOENT, ENOEXEC, ENOLCK, ENOMEM, ENOSPC,
+ ENOSYS, ENOTDIR, ENOTEMPTY, ENOTTY, ENXIO, EPERM, EPIPE, ERANGE,
+ EROFS, ESPIPE, ESRCH, EXDEV, EWOULDBLOCK, EINPROGRESS, EALREADY,
+ ENOTSOCK, EDESTADDRREQ, EMSGSIZE, EPROTOTYPE, ENOPROTOOPT,
+ EPROTONOSUPPORT, ESOCKTNOSUPPORT, EOPNOTSUPP, EPFNOSUPPORT,
+ EAFNOSUPPORT, EADDRINUSE, EADDRNOTAVAIL, ENETDOWN, ENETUNREACH,
+ ENETRESET, ECONNABORTED, ECONNRESET, ENOBUFS, EISCONN, ENOTCONN,
+ ESHUTDOWN, ETOOMANYREFS, ETIMEDOUT, ECONNREFUSED, EHOSTDOWN,
+ EHOSTUNREACH, ELOOP /*, EUNKNOWNERR */
+};
+
+static value unix_error_exn;
+
+value unix_register_error(exnval)
+ value exnval;
+{
+ unix_error_exn = Field(exnval, 0);
+ register_global_root(&unix_error_exn);
+ return Val_unit;
+}
+
+void unix_error(errcode, cmdname, cmdarg)
+ int errcode;
+ char * cmdname;
+ value cmdarg;
+{
+ value res;
+ Push_roots(r, 2);
+#define name r[0]
+#define arg r[1]
+ arg = cmdarg == Nothing ? copy_string("") : cmdarg;
+ name = copy_string(cmdname);
+ res = alloc(4, 0);
+ Field(res, 0) = unix_error_exn;
+ Field(res, 1) =
+ cst_to_constr(errcode, error_table, sizeof(error_table)/sizeof(int),
+ sizeof(error_table)/sizeof(int));
+ Field(res, 2) = name;
+ Field(res, 3) = arg;
+ Pop_roots();
+ mlraise(res);
+}
+
+void uerror(cmdname, cmdarg)
+ char * cmdname;
+ value cmdarg;
+{
+ unix_error(errno, cmdname, cmdarg);
+}
+
+value unix_freeze_buffer(buf)
+ value buf;
+{
+ if (Is_young(buf)) {
+ Push_roots(r, 1);
+ r[0] = buf;
+ minor_collection();
+ buf = r[0];
+ Pop_roots();
+ }
+ return buf;
+}