diff options
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | Setup.hs | 2 | ||||
-rw-r--r-- | System/Posix/Directory/Common.hsc | 8 | ||||
-rw-r--r-- | System/Posix/Files.hsc | 4 | ||||
-rw-r--r-- | System/Posix/Files/ByteString.hsc | 4 | ||||
-rw-r--r-- | System/Posix/SharedMem.hsc | 4 | ||||
-rw-r--r-- | changelog.md | 4 | ||||
-rw-r--r-- | configure.ac | 3 | ||||
-rw-r--r-- | tests/user001.hs | 4 | ||||
-rw-r--r-- | tests/user001.stdout | 2 |
10 files changed, 23 insertions, 14 deletions
@@ -1,4 +1,4 @@ -The `unix` Package [![Build Status](https://travis-ci.org/haskell/unix.svg)](https://travis-ci.org/haskell/unix) +The `unix` Package [![Hackage](https://img.shields.io/hackage/v/unix.svg)](https://hackage.haskell.org/package/unix) [![Build Status](https://travis-ci.org/haskell/unix.svg)](https://travis-ci.org/haskell/unix) ================== See [`unix` on Hackage](http://hackage.haskell.org/package/unix) for @@ -3,4 +3,4 @@ module Main (main) where import Distribution.Simple main :: IO () -main = defaultMainWithHooks defaultUserHooks +main = defaultMainWithHooks autoconfUserHooks diff --git a/System/Posix/Directory/Common.hsc b/System/Posix/Directory/Common.hsc index 86d87ca..7cc61af 100644 --- a/System/Posix/Directory/Common.hsc +++ b/System/Posix/Directory/Common.hsc @@ -62,20 +62,20 @@ newtype DirStreamOffset = DirStreamOffset COff #ifdef HAVE_SEEKDIR seekDirStream :: DirStream -> DirStreamOffset -> IO () seekDirStream (DirStream dirp) (DirStreamOffset off) = - c_seekdir dirp off + c_seekdir dirp (fromIntegral off) -- TODO: check for CLong/COff overflow foreign import ccall unsafe "seekdir" - c_seekdir :: Ptr CDir -> COff -> IO () + c_seekdir :: Ptr CDir -> CLong -> IO () #endif #ifdef HAVE_TELLDIR tellDirStream :: DirStream -> IO DirStreamOffset tellDirStream (DirStream dirp) = do off <- c_telldir dirp - return (DirStreamOffset off) + return (DirStreamOffset (fromIntegral off)) -- TODO: check for overflow foreign import ccall unsafe "telldir" - c_telldir :: Ptr CDir -> IO COff + c_telldir :: Ptr CDir -> IO CLong #endif changeWorkingDirectoryFd :: Fd -> IO () diff --git a/System/Posix/Files.hsc b/System/Posix/Files.hsc index 7c20987..6aea6a9 100644 --- a/System/Posix/Files.hsc +++ b/System/Posix/Files.hsc @@ -1,6 +1,8 @@ #ifdef __GLASGOW_HASKELL__ {-# LANGUAGE Trustworthy #-} #endif +{-# LANGUAGE CApiFFI #-} + ----------------------------------------------------------------------------- -- | -- Module : System.Posix.Files @@ -421,7 +423,7 @@ setFileSize file off = withFilePath file $ \s -> throwErrnoPathIfMinus1_ "setFileSize" file (c_truncate s off) -foreign import ccall unsafe "truncate" +foreign import capi unsafe "HsUnix.h truncate" c_truncate :: CString -> COff -> IO CInt -- ----------------------------------------------------------------------------- diff --git a/System/Posix/Files/ByteString.hsc b/System/Posix/Files/ByteString.hsc index dc1a3f8..ec58cb1 100644 --- a/System/Posix/Files/ByteString.hsc +++ b/System/Posix/Files/ByteString.hsc @@ -1,6 +1,8 @@ #ifdef __GLASGOW_HASKELL__ {-# LANGUAGE Trustworthy #-} #endif +{-# LANGUAGE CApiFFI #-} + ----------------------------------------------------------------------------- -- | -- Module : System.Posix.Files.ByteString @@ -421,7 +423,7 @@ setFileSize file off = withFilePath file $ \s -> throwErrnoPathIfMinus1_ "setFileSize" file (c_truncate s off) -foreign import ccall unsafe "truncate" +foreign import capi unsafe "HsUnix.h truncate" c_truncate :: CString -> COff -> IO CInt -- ----------------------------------------------------------------------------- diff --git a/System/Posix/SharedMem.hsc b/System/Posix/SharedMem.hsc index 1d7a80a..c85e4b7 100644 --- a/System/Posix/SharedMem.hsc +++ b/System/Posix/SharedMem.hsc @@ -19,12 +19,12 @@ module System.Posix.SharedMem (ShmOpenFlags(..), shmOpen, shmUnlink) where +#include "HsUnix.h" + #include <sys/types.h> #include <sys/mman.h> #include <fcntl.h> -#include "HsUnix.h" - import System.Posix.Types #if defined(HAVE_SHM_OPEN) || defined(HAVE_SHM_UNLINK) import Foreign.C diff --git a/changelog.md b/changelog.md index ae5b726..66caaeb 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD # Changelog for [`unix` package](http://hackage.haskell.org/package/unix) ## 2.7.0.2 *TBA* @@ -9,6 +10,9 @@ CPP macros for required getgrgid_r and getgrnam_r functions definition so the fix is to change from C ABI calling convention to C API calling convention + * Fix potential type-mismatch in `telldir`/`seekdir` FFI imports + + * Use CAPI FFI import for `truncate` to make sure the LFS-version is used. ## 2.7.0.1 *Mar 2014* diff --git a/configure.ac b/configure.ac index 41274dc..c10bf89 100644 --- a/configure.ac +++ b/configure.ac @@ -18,6 +18,9 @@ AC_C_CONST dnl ** Enable large file support. NB. do this before testing the type of dnl off_t, because it will affect the result of that test. +dnl +dnl WARNING: It's essential this check agrees with HsBaseConfig.h as otherwise +dnl the definitions of COff/coff_t don't line up AC_SYS_LARGEFILE AC_CHECK_HEADERS([dirent.h fcntl.h grp.h limits.h pwd.h signal.h string.h]) diff --git a/tests/user001.hs b/tests/user001.hs index f4c44fc..4b4dd8b 100644 --- a/tests/user001.hs +++ b/tests/user001.hs @@ -17,11 +17,11 @@ main = do p "getRealUserID" $ getRealUserID p "getEffectiveUserID" $ getEffectiveUserID p "getEffectiveGroupID" $ getEffectiveGroupID p "getGroups" $ getGroups - p "getLoginName" $ getLoginName + --p "getLoginName" $ getLoginName p "getEffectiveUserName" $ getEffectiveUserName p "getGroupEntryForID" $ getRealGroupID >>= getGroupEntryForID p "getGroupEntryForName" $ getRealGroupID >>= getGroupEntryForID >>= getGroupEntryForName . groupName p "getAllGroupEntries" $ getAllGroupEntries p "getUserEntryForID" $ getRealUserID >>= getUserEntryForID - p "getUserEntryForName" $ getLoginName >>= getUserEntryForName + --p "getUserEntryForName" $ getLoginName >>= getUserEntryForName p "getAllUserEntries" $ getAllUserEntries diff --git a/tests/user001.stdout b/tests/user001.stdout index 48c0cfd..e2e03df 100644 --- a/tests/user001.stdout +++ b/tests/user001.stdout @@ -3,11 +3,9 @@ getRealGroupID: OK getEffectiveUserID: OK getEffectiveGroupID: OK getGroups: OK -getLoginName: OK getEffectiveUserName: OK getGroupEntryForID: OK getGroupEntryForName: OK getAllGroupEntries: OK getUserEntryForID: OK -getUserEntryForName: OK getAllUserEntries: OK |