diff options
author | simonmar <unknown> | 2002-02-12 15:17:36 +0000 |
---|---|---|
committer | simonmar <unknown> | 2002-02-12 15:17:36 +0000 |
commit | 2cc5b907318f97e19b28b2ad8ed9ff8c1f401dcc (patch) | |
tree | 2fefe09bc63464ac3a28ea37b61eefc5e506685a /ghc/lib/std/cbits/lockFile.c | |
parent | 239e9471e104fd88ec93bf42623c3a68a496657a (diff) | |
download | haskell-2cc5b907318f97e19b28b2ad8ed9ff8c1f401dcc.tar.gz |
[project @ 2002-02-12 15:17:13 by simonmar]
Switch over to the new hierarchical libraries
---------------------------------------------
This commit reorganises our libraries to use the new hierarchical
module namespace extension.
The basic story is this:
- fptools/libraries contains the new hierarchical libraries.
Everything in here is "clean", i.e. most deprecated stuff has
been removed.
- fptools/libraries/base is the new base package
(replacing "std") and contains roughly what was previously
in std, lang, and concurrent, minus deprecated stuff.
Things that are *not allowed* in libraries/base include:
Addr, ForeignObj, ByteArray, MutableByteArray,
_casm_, _ccall_, ``'', PrimIO
For ByteArrays and MutableByteArrays we use UArray and
STUArray/IOUArray respectively now.
Modules previously called PrelFoo are now under
fptools/libraries/GHC. eg. PrelBase is now GHC.Base.
- fptools/libraries/haskell98 provides the Haskell 98 std.
libraries (Char, IO, Numeric etc.) as a package. This
package is enabled by default.
- fptools/libraries/network is a rearranged version of
the existing net package (the old package net is still
available; see below).
- Other packages will migrate to fptools/libraries in
due course.
NB. you need to checkout fptools/libraries as well as
fptools/hslibs now. The nightly build scripts will need to be
tweaked.
- fptools/hslibs still contains (almost) the same stuff as before.
Where libraries have moved into the new hierarchy, the hslibs
version contains a "stub" that just re-exports the new version.
The idea is that code will gradually migrate from fptools/hslibs
into fptools/libraries as it gets cleaned up, and in a version or
two we can remove the old packages altogether.
- I've taken the opportunity to make some changes to the build
system, ripping out the old hslibs Makefile stuff from
mk/target.mk; the new package building Makefile code is in
mk/package.mk (auto-included from mk/target.mk).
The main improvement is that packages now register themselves at
make boot time using ghc-pkg, and the monolithic package.conf
in ghc/driver is gone.
I've updated the standard packages but haven't tested win32,
graphics, xlib, object-io, or OpenGL yet. The Makefiles in
these packages may need some further tweaks, and they'll need
pkg.conf.in files added.
- Unfortunately all this rearrangement meant I had to bump the
interface-file version and create a bunch of .hi-boot-6 files :-(
Diffstat (limited to 'ghc/lib/std/cbits/lockFile.c')
-rw-r--r-- | ghc/lib/std/cbits/lockFile.c | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/ghc/lib/std/cbits/lockFile.c b/ghc/lib/std/cbits/lockFile.c deleted file mode 100644 index f6a9aea4ad..0000000000 --- a/ghc/lib/std/cbits/lockFile.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998 - * - * $Id: lockFile.c,v 1.2 2001/05/21 11:02:15 simonmar Exp $ - * - * stdin/stout/stderr Runtime Support - */ - -#include "HsStd.h" - -#ifndef FD_SETSIZE -#define FD_SETSIZE 256 -#endif - -typedef struct { - dev_t device; - ino_t inode; - int fd; -} Lock; - -static Lock readLock[FD_SETSIZE]; -static Lock writeLock[FD_SETSIZE]; - -static int readLocks = 0; -static int writeLocks = 0; - -int -lockFile(int fd, int for_writing, int exclusive) -{ - struct stat sb; - int i; - - while (fstat(fd, &sb) < 0) { - if (errno != EINTR) { -#ifndef _WIN32 - return -1; -#else - /* fstat()ing socket fd's seems to fail with CRT's fstat(), - so let's just silently return and hope for the best.. - */ - return 0; -#endif - } - } - - if (for_writing) { - /* opening a file for writing, check to see whether - we don't have any read locks on it already.. */ - for (i = 0; i < readLocks; i++) { - if (readLock[i].inode == sb.st_ino && readLock[i].device == sb.st_dev) { -#ifndef __MINGW32__ - return -1; -#else - break; -#endif - } - } - /* If we're determined that there is only a single - writer to the file, check to see whether the file - hasn't already been opened for writing.. - */ - if (exclusive) { - for (i = 0; i < writeLocks; i++) { - if (writeLock[i].inode == sb.st_ino && writeLock[i].device == sb.st_dev) { -#ifndef __MINGW32__ - return -1; -#else - break; -#endif - } - } - } - /* OK, everything is cool lock-wise, record it and leave. */ - i = writeLocks++; - writeLock[i].device = sb.st_dev; - writeLock[i].inode = sb.st_ino; - writeLock[i].fd = fd; - return 0; - } else { - /* For reading, it's simpler - just check to see - that there's no-one writing to the underlying file. */ - for (i = 0; i < writeLocks; i++) { - if (writeLock[i].inode == sb.st_ino && writeLock[i].device == sb.st_dev) { -#ifndef __MINGW32__ - return -1; -#else - break; -#endif - } - } - /* Fit in new entry, reusing an existing table entry, if possible. */ - for (i = 0; i < readLocks; i++) { - if (readLock[i].inode == sb.st_ino && readLock[i].device == sb.st_dev) { - return 0; - } - } - i = readLocks++; - readLock[i].device = sb.st_dev; - readLock[i].inode = sb.st_ino; - readLock[i].fd = fd; - return 0; - } - -} - -int -unlockFile(int fd) -{ - int i; - - for (i = 0; i < readLocks; i++) - if (readLock[i].fd == fd) { - while (++i < readLocks) - readLock[i - 1] = readLock[i]; - readLocks--; - return 0; - } - - for (i = 0; i < writeLocks; i++) - if (writeLock[i].fd == fd) { - while (++i < writeLocks) - writeLock[i - 1] = writeLock[i]; - writeLocks--; - return 0; - } - /* Signal that we did not find an entry */ - return 1; -} |