Replace `__hsunix_unsetenv` wrapper with CApiFFI
authorHerbert Valerio Riedel <hvr@gnu.org>
Sun, 31 Jan 2016 11:57:23 +0000 (12:57 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sun, 31 Jan 2016 11:57:23 +0000 (12:57 +0100)
System/Posix/Env.hsc
System/Posix/Env/ByteString.hsc
cbits/HsUnix.c
include/HsUnix.h

index 999daec..6412bae 100644 (file)
@@ -1,3 +1,4 @@
+{-# LANGUAGE CApiFFI #-}
 #if __GLASGOW_HASKELL__ >= 709
 {-# LANGUAGE Safe #-}
 #else
@@ -116,13 +117,21 @@ setEnvironment env = do
 -- from the environment.
 
 unsetEnv :: String -> IO ()
-#ifdef HAVE_UNSETENV
-
+#if HAVE_UNSETENV
+# if !UNSETENV_RETURNS_VOID
 unsetEnv name = withFilePath name $ \ s ->
   throwErrnoIfMinus1_ "unsetenv" (c_unsetenv s)
 
-foreign import ccall unsafe "__hsunix_unsetenv"
+-- POSIX.1-2001 compliant unsetenv(3)
+foreign import capi unsafe "HsUnix.h unsetenv"
    c_unsetenv :: CString -> IO CInt
+# else
+unsetEnv name = withFilePath name c_unsetenv
+
+-- pre-POSIX unsetenv(3) returning @void@
+foreign import capi unsafe "HsUnix.h unsetenv"
+   c_unsetenv :: CString -> IO ()
+# endif
 #else
 unsetEnv name = putEnv (name ++ "=")
 #endif
index 0bbcfd8..57b03aa 100644 (file)
@@ -1,3 +1,4 @@
+{-# LANGUAGE CApiFFI #-}
 {-# LANGUAGE Trustworthy #-}
 #if __GLASGOW_HASKELL__ >= 709
 {-# OPTIONS_GHC -fno-warn-trustworthy-safe #-}
@@ -98,13 +99,21 @@ getEnvironment = do
 -- from the environment.
 
 unsetEnv :: ByteString -> IO ()
-#ifdef HAVE_UNSETENV
-
+#if HAVE_UNSETENV
+# if !UNSETENV_RETURNS_VOID
 unsetEnv name = B.useAsCString name $ \ s ->
   throwErrnoIfMinus1_ "unsetenv" (c_unsetenv s)
 
-foreign import ccall unsafe "__hsunix_unsetenv"
+-- POSIX.1-2001 compliant unsetenv(3)
+foreign import capi unsafe "HsUnix.h unsetenv"
    c_unsetenv :: CString -> IO CInt
+# else
+unsetEnv name = B.useAsCString name c_unsetenv
+
+-- pre-POSIX unsetenv(3) returning @void@
+foreign import capi unsafe "HsUnix.h unsetenv"
+   c_unsetenv :: CString -> IO ()
+# endif
 #else
 unsetEnv name = putEnv (name ++ "=")
 #endif
index 5742b49..8e16803 100644 (file)
@@ -36,18 +36,6 @@ int __hsunix_push_module(int fd, const char *module)
 #endif
 }
 
-#ifdef HAVE_UNSETENV
-int __hsunix_unsetenv(const char *name)
-{
-#ifdef UNSETENV_RETURNS_VOID
-    unsetenv(name);
-    return 0;
-#else
-    return unsetenv(name);
-#endif
-}
-#endif
-
 /* A size that will contain many path names, but not necessarily all
  * (PATH_MAX is not defined on systems with unlimited path length,
  * e.g. the Hurd).
index fb19f99..dcd0c4a 100644 (file)
@@ -116,8 +116,6 @@ fall back to O_FSYNC, which should be the same */
 // push a SVR4 STREAMS module; do nothing if STREAMS not available
 int __hsunix_push_module(int fd, const char *module);
 
-int __hsunix_unsetenv(const char *name);
-
 /* A size that will contain many path names, but not necessarily all
  * (PATH_MAX is not defined on systems with unlimited path length,
  * e.g. the Hurd).