ocaml/otherlibs/win32unix
Damien Doligez 03ec746bf1 deTABisation
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1563 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
1997-05-19 15:42:21 +00:00
..
.depend Premiere compilation. 1996-09-05 13:32:25 +00:00
Makefile.nt Renommage make clean -> make partialclean et make realclean -> make clean. Non teste sur Mac et Win32. 1997-02-16 13:36:42 +00:00
README Typo. 1996-09-26 15:08:13 +00:00
accept.c deTABisation 1997-05-19 15:42:21 +00:00
bind.c Premiere compilation. 1996-09-05 13:32:25 +00:00
close_on.c deTABisation 1997-05-19 15:42:21 +00:00
connect.c deTABisation 1997-05-19 15:42:21 +00:00
createprocess.c deTABisation 1997-05-19 15:42:21 +00:00
getpeername.c Merge du stage de Pascal Cuoq 1996-09-04 14:17:43 +00:00
getpid.c Merge du stage de Pascal Cuoq 1996-09-04 14:17:43 +00:00
getsockname.c Merge du stage de Pascal Cuoq 1996-09-04 14:17:43 +00:00
listen.c Marquage des primitives ML (pour le toplevel Windows). 1997-03-11 10:38:06 +00:00
mkdir.c Premiere compilation. 1996-09-05 13:32:25 +00:00
open.c Premiere compilation. 1996-09-05 13:32:25 +00:00
pipe.c Merge du stage de Pascal Cuoq 1996-09-04 14:17:43 +00:00
sendrecv.c Premiere compilation. 1996-09-05 13:32:25 +00:00
shutdown.c Premiere compilation. 1996-09-05 13:32:25 +00:00
sleep.c Premiere compilation. 1996-09-05 13:32:25 +00:00
socket.c Premiere compilation. 1996-09-05 13:32:25 +00:00
socketaddr.h Merge du stage de Pascal Cuoq 1996-09-04 14:17:43 +00:00
sockopt.c deTABisation 1997-05-19 15:42:21 +00:00
startup.c Marquage des primitives ML (pour le toplevel Windows). 1997-03-11 10:38:06 +00:00
system.c Marquage des primitives ML (pour le toplevel Windows). 1997-03-11 10:38:06 +00:00
unix.ml deTABisation 1997-05-19 15:42:21 +00:00
unix.mli Suite du portage 1996-09-06 16:52:29 +00:00
unixsupport.c Mise a jour pour Win32 1996-12-10 14:45:58 +00:00
unixsupport.h Premiere compilation. 1996-09-05 13:32:25 +00:00
windir.c deTABisation 1997-05-19 15:42:21 +00:00
winwait.c deTABisation 1997-05-19 15:42:21 +00:00

README

This is a partial port of the Unix system interface to Win32.
It was done as a summer project by Pascal Cuoq (ENS Lyon),
supervised by Xavier Leroy and Francois Rouaix (INRIA).

See the interface file unix.mli in this directory for more
documentation on the functions implemented.

Recompiling this library requires Microsoft Visual C++ 4.0.

We've had to modify and recompile the Visual C++ standard C library to
work around the following problems:

- There's a bug in the library function _pipe() that can result in a
  deadlock (the library function attempts to lock the wrong file descriptor).

- Windows 95 classifies socket handles as "unknown", while Windows NT
  classifies them as "pipes". Thus, opening a file descriptor on a
  socket handle fails under Windows 95. We've just removed the check
  on the handle type in the library.

The diffs are included at the end of this file. They must be applied
against a local copy of the libc sources found on the Visual C++ CD-ROM
(in \msdev\crt\src). Then, rebuild the libraries and install them.

-----------------------------------------------------------------------
diff -c -r d:/msdev/crt/src/osfinfo.c crt/src/osfinfo.c
*** d:/msdev/crt/src/osfinfo.c	Fri Jul 21 17:05:06 1995
--- crt/src/osfinfo.c	Mon Jul 22 15:56:40 1996
***************
*** 23,28 ****
--- 23,29 ----
  #include <stdlib.h>
  #include <dbgint.h>
  
+ #include <winsock.h>
  
  /***
  *int _alloc_osfhnd() - get free _ioinfo struct
***************
*** 141,150 ****
                       * The first element of the newly allocated array of ioinfo
                       * structs, *(__pioinfo[i]), is our first free entry.
                       */
  #if defined (_MT) && !defined (DLL_FOR_WIN32S)
!                     _lock_fhandle( i );
  #endif  /* defined (_MT) && !defined (DLL_FOR_WIN32S) */
-                     fh = i * IOINFO_ARRAY_ELTS;
                  }
  
                  break;
--- 142,151 ----
                       * The first element of the newly allocated array of ioinfo
                       * structs, *(__pioinfo[i]), is our first free entry.
                       */
+                     fh = i * IOINFO_ARRAY_ELTS;
  #if defined (_MT) && !defined (DLL_FOR_WIN32S)
!                     _lock_fhandle( fh );
  #endif  /* defined (_MT) && !defined (DLL_FOR_WIN32S) */
                  }
  
                  break;
***************
*** 335,346 ****
          /* find out what type of file (file/device/pipe) */
  
          isdev = GetFileType((HANDLE)osfhandle);
          if (isdev == FILE_TYPE_UNKNOWN) {
!                 /* OS error */
!                 _dosmaperr( GetLastError() );   /* map error */
!                 return -1;
          }
  
          /* is isdev value to set flags */
          if (isdev == FILE_TYPE_CHAR)
                  fileflags |= FDEV;
--- 336,352 ----
          /* find out what type of file (file/device/pipe) */
  
          isdev = GetFileType((HANDLE)osfhandle);
+ #if 0
          if (isdev == FILE_TYPE_UNKNOWN) {
! 				/* OS error */
! 				_dosmaperr( GetLastError() );   /* map error */
! 				return -1;
          }
+ #else
+ 		/* Windows 95 lossage */
+         if (isdev == FILE_TYPE_UNKNOWN) isdev = FILE_TYPE_PIPE;
  
+ #endif
          /* is isdev value to set flags */
          if (isdev == FILE_TYPE_CHAR)
                  fileflags |= FDEV;