Commit ae2fa137 authored by rrt's avatar rrt
Browse files

[project @ 2001-03-01 12:25:32 by rrt]

Apply stat fix for mingw. It's ugly, it's implausible, but it seems to work.
Unlike Cygwin...(missing no. 3).
parent f0c9e560
......@@ -113,7 +113,7 @@ package_details installing =
hs_libraries = [ "HSstd" ],
extra_libraries = [ "HSstd_cbits" ] ++
# ifdef mingw32_TARGET_OS
["wsock32"]
["wsock32", "msvcrt"]
# else
["m"] -- libm, that is
# endif
......
/* -----------------------------------------------------------------------------
* $Id: Stg.h,v 1.35 2001/02/09 13:09:17 simonmar Exp $
* $Id: Stg.h,v 1.36 2001/03/01 12:25:32 rrt Exp $
*
* (c) The GHC Team, 1998-1999
*
......@@ -41,6 +41,11 @@
/* Some macros to handle DLLing (Win32 only at the moment). */
#include "StgDLL.h"
/* Fix for mingw stat problem (done here so it's early enough) */
#ifdef mingw32_TARGET_OS
#define __MSVCRT__ 1
#endif
/* Turn lazy blackholing and eager blackholing on/off.
*
* Using eager blackholing makes things easier to debug because
......
-- -----------------------------------------------------------------------------
-- $Id: Directory.hsc,v 1.7 2001/02/14 12:37:10 rrt Exp $
-- $Id: Directory.hsc,v 1.8 2001/03/01 12:25:33 rrt Exp $
--
-- (c) The University of Glasgow, 1994-2000
--
......@@ -65,6 +65,8 @@ import PrelPtr
import PrelIOBase
import PrelBase
-- Fix mingw stat problem
#include "../includes/Stg.h"
#include <sys/stat.h>
#include <dirent.h>
#include <limits.h>
......@@ -498,24 +500,40 @@ setPermissions name (Permissions r w e s) = do
withFileStatus :: FilePath -> (Ptr CStat -> IO a) -> IO a
withFileStatus name f = do
#ifndef mingw32_TARGET_OS
allocaBytes (#const sizeof(struct stat)) $ \p ->
#else
allocaBytes (#const sizeof(struct _stati64)) $ \p ->
#endif
withUnsafeCString name $ \s -> do
throwErrnoIfMinus1Retry_ "withFileStatus" (stat s p)
f p
modificationTime :: Ptr CStat -> IO ClockTime
modificationTime stat = do
#ifndef mingw32_TARGET_OS
mtime <- (#peek struct stat, st_mtime) stat
#else
mtime <- (#peek struct _stati64, st_mtime) stat
#endif
return (TOD (toInteger (mtime :: CTime)) 0)
isDirectory :: Ptr CStat -> IO Bool
isDirectory stat = do
#ifndef mingw32_TARGET_OS
mode <- (#peek struct stat, st_mode) stat
#else
mode <- (#peek struct _stati64, st_mode) stat
#endif
return (s_ISDIR mode /= 0)
isRegularFile :: Ptr CStat -> IO Bool
isRegularFile stat = do
#ifndef mingw32_TARGET_OS
mode <- (#peek struct stat, st_mode) stat
#else
mode <- (#peek struct _stati64, st_mode) stat
#endif
return (s_ISREG mode /= 0)
foreign import ccall unsafe s_ISDIR :: CMode -> Int
......
# $Id: Makefile,v 1.24 2000/11/07 10:42:57 simonmar Exp $
# $Id: Makefile,v 1.25 2001/03/01 12:25:33 rrt Exp $
TOP = ../../..
include $(TOP)/mk/boilerplate.mk
......@@ -13,8 +13,8 @@ C_SRCS= $(wildcard *.c)
C_OBJS = $(C_SRCS:.c=.$(way_)o)
LIBOBJS = $(C_OBJS)
SRC_CC_OPTS += -O $(GhcLibCcOpts) -Wall -optc-DCOMPILING_STDLIB
ifneq "$(DLLized)" "YES"
SRC_CC_OPTS += -static
ifeq "$(DLLized)" "YES"
SRC_CC_OPTS += -dynamic
endif
#
......
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
* $Id: fileSize.c,v 1.5 2001/01/16 11:27:45 simonmar Exp $
* $Id: fileSize.c,v 1.6 2001/03/01 12:25:33 rrt Exp $
*
* hClose Runtime Support
*/
......@@ -21,14 +21,14 @@ StgInt
fileSize(StgForeignPtr ptr, StgByteArray result)
{
IOFileObject* fo = (IOFileObject*)ptr;
struct stat sb;
struct Stat sb;
int rc = 0;
/* Flush buffer in order to get as an accurate size as poss. */
rc = flushFile(ptr);
if (rc < 0) return rc;
while (fstat(fo->fd, &sb) < 0) {
while (Fstat(fo->fd, &sb) < 0) {
/* highly unlikely */
if (errno != EINTR) {
cvtErrno();
......@@ -55,14 +55,14 @@ StgInt
fileSize_int64(StgForeignPtr ptr, StgByteArray result)
{
IOFileObject* fo = (IOFileObject*)ptr;
struct stat sb;
struct Stat sb;
int rc = 0;
/* Flush buffer in order to get as an accurate size as poss. */
rc = flushFile(ptr);
if (rc < 0) return rc;
while (fstat(fo->fd, &sb) < 0) {
while (Fstat(fo->fd, &sb) < 0) {
/* highly unlikely */
if (errno != EINTR) {
cvtErrno();
......
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
* $Id: getBufferMode.c,v 1.3 1998/12/02 13:27:35 simonm Exp $
* $Id: getBufferMode.c,v 1.4 2001/03/01 12:25:33 rrt Exp $
*
* hIs...Buffered Runtime Support
*/
......@@ -32,11 +32,11 @@ getBufferMode(ptr)
StgForeignPtr ptr;
{
IOFileObject* fo = (IOFileObject*)ptr;
struct stat sb;
struct Stat sb;
int fd = fo->fd;
/* Try to find out the file type */
while (fstat(fd, &sb) < 0) {
while (Fstat(fd, &sb) < 0) {
/* highly unlikely */
if (errno != EINTR) {
cvtErrno();
......
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
* $Id: getLock.c,v 1.7 1999/12/08 15:47:07 simonmar Exp $
* $Id: getLock.c,v 1.8 2001/03/01 12:25:33 rrt Exp $
*
* stdin/stout/stderr Runtime Support
*/
......@@ -48,9 +48,9 @@ int for_writing;
int exclusive;
{
int i;
struct stat sb;
struct Stat sb;
while (fstat(fd, &sb) < 0) {
while (Fstat(fd, &sb) < 0) {
if (errno != EINTR) {
#ifndef _WIN32
return -1;
......
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
* $Id: openFile.c,v 1.18 2000/05/15 09:20:11 simonmar Exp $
* $Id: openFile.c,v 1.19 2001/03/01 12:25:33 rrt Exp $
*
* openFile Runtime Support
*/
......@@ -79,7 +79,7 @@ openFile(StgByteArray file, StgInt how, StgInt binary)
int oflags;
int for_writing;
int created = 0;
struct stat sb;
struct Stat sb;
IOFileObject* fo;
int flags = 0;
......@@ -136,7 +136,7 @@ openFile(StgByteArray file, StgInt how, StgInt binary)
} else {
/* If it is a dangling symlink, break off now, too. */
#ifndef mingw32_TARGET_OS
struct stat st;
struct Stat st;
if ( lstat(file,&st) == 0) {
ghc_errtype = ERR_NOSUCHTHING;
ghc_errstr = "dangling symlink";
......@@ -193,7 +193,7 @@ openFile(StgByteArray file, StgInt how, StgInt binary)
/* Make sure that we aren't looking at a directory */
while (fstat(fd, &sb) < 0) {
while (Fstat(fd, &sb) < 0) {
/* highly unlikely */
if (errno != EINTR) {
cvtErrno();
......
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
* $Id: seekFile.c,v 1.5 2000/01/17 12:30:07 simonmar Exp $
* $Id: seekFile.c,v 1.6 2001/03/01 12:25:33 rrt Exp $
*
* hSeek and hIsSeekable Runtime Support
*/
......@@ -22,7 +22,7 @@ StgInt
seekFile(StgForeignPtr ptr, StgInt whence, StgInt size, StgByteArray d)
{
IOFileObject* fo = (IOFileObject*)ptr;
struct stat sb;
struct Stat sb;
off_t offset;
int posn_delta =0;
int rc = 0;
......@@ -84,7 +84,7 @@ seekFile(StgForeignPtr ptr, StgInt whence, StgInt size, StgByteArray d)
if (rc < 0) return rc;
/* Try to find out the file type */
while (fstat(fo->fd, &sb) < 0) {
while (Fstat(fo->fd, &sb) < 0) {
/* highly unlikely */
if (errno != EINTR) {
cvtErrno();
......@@ -114,7 +114,7 @@ StgInt
seekFile_int64(StgForeignPtr ptr, StgInt whence, StgInt64 d)
{
IOFileObject* fo = (IOFileObject*)ptr;
struct stat sb;
struct Stat sb;
off_t offset = d;
int posn_delta =0;
int rc = 0;
......@@ -154,7 +154,7 @@ seekFile_int64(StgForeignPtr ptr, StgInt whence, StgInt64 d)
if (rc < 0) return rc;
/* Try to find out the file type & size for a physical file */
while (fstat(fo->fd, &sb) < 0) {
while (Fstat(fo->fd, &sb) < 0) {
/* highly unlikely */
if (errno != EINTR) {
cvtErrno();
......@@ -183,10 +183,10 @@ StgInt
seekFileP(StgForeignPtr ptr)
{
IOFileObject* fo = (IOFileObject*)ptr;
struct stat sb;
struct Stat sb;
/* Try to find out the file type */
while (fstat(fo->fd, &sb) < 0) {
while (Fstat(fo->fd, &sb) < 0) {
/* highly unlikely */
if (errno != EINTR) {
cvtErrno();
......
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
* $Id: setBuffering.c,v 1.10 2001/02/19 16:10:23 rrt Exp $
* $Id: setBuffering.c,v 1.11 2001/03/01 12:25:33 rrt Exp $
*
* hSetBuffering Runtime Support
*/
......@@ -38,7 +38,7 @@ setBuffering(StgForeignPtr ptr, StgInt size)
#ifndef mingw32_TARGET_OS
struct termios tio;
#endif
struct stat sb;
struct Stat sb;
/* First off, flush old buffer.. */
if ( (fo->flags & FILEOBJ_WRITE) ) {
......@@ -100,7 +100,7 @@ setBuffering(StgForeignPtr ptr, StgInt size)
case SB_BB:
#ifdef HAVE_ST_BLKSIZE
while (fstat(fo->fd, &sb) < 0) {
while (Fstat(fo->fd, &sb) < 0) {
/* not very likely.. */
if ( errno != EINTR ) {
cvtErrno();
......
/* -----------------------------------------------------------------------------
* $Id: stgio.h,v 1.26 2001/02/28 14:24:46 sewardj Exp $
* $Id: stgio.h,v 1.27 2001/03/01 12:25:33 rrt Exp $
*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1999
*
......@@ -15,6 +15,17 @@
#include "stgerror.h"
#include "fileObject.h"
/* Fix for mingwin stat */
#ifdef mingw32_TARGET_OS
/* Need to #define __MSVCRT__ to get these versions, but in order to do this
early enough it's done in Stg.h (included by Rts.h) */
#define Stat _stati64
#define Fstat _fstati64
#else
#define Stat stat
#define Fstat fstat
#endif
/* Function prototypes for the I/O subsytem...
*/
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment