Bulat Ziganshin wrote:
Hello Simon,

Tuesday, November 14, 2006, 4:02:09 PM, you wrote:


#ifdef mingw32_HOST_OS
       if ((how & O_WRONLY) || (how & O_RDWR) || (how &
         O_APPEND)) return _sopen(file,how,_SH_DENYRW,mode);
       else
         return _sopen(file,how,_SH_DENYWR,mode);
#else
       return open(file,how,mode);
#endif


i.e. no sopen at all? in this case, other parts of library should
make proper locking for unix.


Yes, we do.  See
http://darcs.haskell.org/packages/base/cbits/lockFile.c.


after some thought, i still want to complain. locking files while it's
open on Windows and using special procedure on Unix is internal trick
of Handle-based I/O library. it's bad that this trick was exposed as
non-consistent behavior of c_open call which, by its name, is
proposed for general use by other libs

i think that proper design was either to make such function internal
to GHC.Handle module, or incorporate all necessary locking logic into
the c_open/c_close and make exhaustive doc-comment to warn users
thinking that c_open should be the same as raw C open() call

in current situation when some code besides of GHC.* may rely on this
strange inconsistent behavior i think at least commenting it will be a
good idea

Well, c_open isn't a visible API: the module System.Posix.Internals is hidden in the Haddock documentation. It isn't hidden in the package spec, but that's because the unix package requires it. Maybe in your reorganisation of the base package you could clean this up.

Bottom line: it's not intended for user consumption, so I don't buy your argument. In fact I'd rather use the proper Win32 API instead of CRT functions in the IO library.

Cheers,
        Simon

_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to