Use CAPI FFI imports for `truncate`
authorHerbert Valerio Riedel <hvr@gnu.org>
Thu, 7 Aug 2014 10:33:51 +0000 (12:33 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 18 Oct 2014 14:54:28 +0000 (16:54 +0200)
This makes sure we pick up the LFS version of `truncate` in case `off_t`
is affected by CPP defines such as `_FILE_OFFSET_BITS`.

System/Posix/Files.hsc
System/Posix/Files/ByteString.hsc
changelog.md
configure.ac

index c8b5ddf..1822294 100644 (file)
@@ -1,6 +1,8 @@
 #ifdef __GLASGOW_HASKELL__
 {-# LANGUAGE Trustworthy #-}
 #endif
+{-# LANGUAGE CApiFFI #-}
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  System.Posix.Files
@@ -420,7 +422,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
 
 -- -----------------------------------------------------------------------------
index 80f0bea..cb68668 100644 (file)
@@ -1,6 +1,8 @@
 #ifdef __GLASGOW_HASKELL__
 {-# LANGUAGE Trustworthy #-}
 #endif
+{-# LANGUAGE CApiFFI #-}
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  System.Posix.Files.ByteString
@@ -420,7 +422,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
 
 -- -----------------------------------------------------------------------------
index c481922..66caaeb 100644 (file)
@@ -12,6 +12,8 @@
     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*
 
   * Bundled with GHC 7.8.1
index 41274dc..c10bf89 100644 (file)
@@ -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])