aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--System/Posix/Directory.hsc2
-rw-r--r--System/Posix/Process.hsc2
-rw-r--r--System/Posix/Time.hsc2
-rw-r--r--System/Posix/Unistd.hsc2
-rw-r--r--System/Posix/User.hsc6
-rw-r--r--cbits/HsUnix.c52
-rw-r--r--include/HsUnix.h31
7 files changed, 90 insertions, 7 deletions
diff --git a/System/Posix/Directory.hsc b/System/Posix/Directory.hsc
index 35fe291..3f676ce 100644
--- a/System/Posix/Directory.hsc
+++ b/System/Posix/Directory.hsc
@@ -61,7 +61,7 @@ openDirStream name =
dirp <- throwErrnoPathIfNull "openDirStream" name $ c_opendir s
return (DirStream dirp)
-foreign import ccall unsafe "opendir"
+foreign import ccall unsafe "__hsunix_opendir"
c_opendir :: CString -> IO (Ptr CDir)
-- | @readDirStream dp@ calls @readdir@ to obtain the
diff --git a/System/Posix/Process.hsc b/System/Posix/Process.hsc
index 147b508..cf60844 100644
--- a/System/Posix/Process.hsc
+++ b/System/Posix/Process.hsc
@@ -173,7 +173,7 @@ getProcessTimes = do
type CTms = ()
-foreign import ccall unsafe "times"
+foreign import ccall unsafe "__hsunix_times"
c_times :: Ptr CTms -> IO CClock
-- -----------------------------------------------------------------------------
diff --git a/System/Posix/Time.hsc b/System/Posix/Time.hsc
index 0fbce38..1d2e107 100644
--- a/System/Posix/Time.hsc
+++ b/System/Posix/Time.hsc
@@ -33,5 +33,5 @@ import Foreign.C
epochTime :: IO EpochTime
epochTime = throwErrnoIfMinus1 "epochTime" (c_time nullPtr)
-foreign import ccall unsafe "time"
+foreign import ccall unsafe "__hsunix_time"
c_time :: Ptr CTime -> IO CTime
diff --git a/System/Posix/Unistd.hsc b/System/Posix/Unistd.hsc
index f0cac21..4aefd60 100644
--- a/System/Posix/Unistd.hsc
+++ b/System/Posix/Unistd.hsc
@@ -158,7 +158,7 @@ nanosleep nsecs = do
data CTimeSpec
-foreign import ccall safe "nanosleep"
+foreign import ccall safe "__hsunix_nanosleep"
c_nanosleep :: Ptr CTimeSpec -> Ptr CTimeSpec -> IO CInt
#endif
diff --git a/System/Posix/User.hsc b/System/Posix/User.hsc
index 47a7a72..88150a0 100644
--- a/System/Posix/User.hsc
+++ b/System/Posix/User.hsc
@@ -292,7 +292,7 @@ getUserEntryForID uid = do
peekElemOff pppw 0
unpackUserEntry ppw
-foreign import ccall unsafe "getpwuid_r"
+foreign import ccall unsafe "__hsunix_getpwuid_r"
c_getpwuid_r :: CUid -> Ptr CPasswd ->
CString -> CSize -> Ptr (Ptr CPasswd) -> IO CInt
#elif HAVE_GETPWUID
@@ -328,7 +328,7 @@ getUserEntryForName name = do
(Just name)
unpackUserEntry ppw
-foreign import ccall unsafe "getpwnam_r"
+foreign import ccall unsafe "__hsunix_getpwnam_r"
c_getpwnam_r :: CString -> Ptr CPasswd
-> CString -> CSize -> Ptr (Ptr CPasswd) -> IO CInt
#elif HAVE_GETPWNAM
@@ -359,7 +359,7 @@ getAllUserEntries =
else do thisentry <- unpackUserEntry ppw
worker (thisentry : accum)
-foreign import ccall unsafe "getpwent"
+foreign import ccall unsafe "__hsunix_getpwent"
c_getpwent :: IO (Ptr CPasswd)
foreign import ccall unsafe "setpwent"
c_setpwent :: IO ()
diff --git a/cbits/HsUnix.c b/cbits/HsUnix.c
index c56b804..037eb59 100644
--- a/cbits/HsUnix.c
+++ b/cbits/HsUnix.c
@@ -42,6 +42,58 @@ int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev)
return mknod(pathname,mode,dev);
}
+#ifdef HAVE_GETPWENT
+// getpwent is a macro on some platforms, so we need a wrapper:
+struct passwd *__hsunix_getpwent(void)
+{
+ return getpwent();
+}
+#endif
+
+#if HAVE_GETPWNAM_R
+// getpwnam_r is a macro on some platforms, so we need a wrapper:
+int __hsunix_getpwnam_r(const char *name, struct passwd *pw, char *buffer,
+ size_t buflen, struct passwd **result)
+{
+ return getpwnam_r(name, pw, buffer, buflen, result);
+}
+#endif
+
+#ifdef HAVE_GETPWUID_R
+// getpwuid_r is a macro on some platforms, so we need a wrapper:
+int __hsunix_getpwuid_r(uid_t uid, struct passwd *pw, char *buffer,
+ size_t buflen, struct passwd **result)
+{
+ return getpwuid_r(uid, pw, buffer, buflen, result);
+}
+#endif
+
+#ifdef HAVE_NANOSLEEP
+// nanosleep is a macro on some platforms, so we need a wrapper:
+int __hsunix_nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
+{
+ return nanosleep(rqtp, rmtp);
+}
+#endif
+
+// opendir is a macro on some platforms, so we need a wrapper:
+DIR *__hsunix_opendir(const char *filename)
+{
+ return opendir(filename);
+}
+
+// time is a macro on some platforms, so we need a wrapper:
+time_t __hsunix_time(time_t *tloc)
+{
+ return time(tloc);
+}
+
+// times is a macro on some platforms, so we need a wrapper:
+clock_t __hsunix_times(struct tms *tp)
+{
+ return times(tp);
+}
+
#ifdef HAVE_PTSNAME
// I cannot figure out how to make the definitions of the following
// functions visible in <stdlib.h> on Linux. But these definitions
diff --git a/include/HsUnix.h b/include/HsUnix.h
index d460698..cb8d466 100644
--- a/include/HsUnix.h
+++ b/include/HsUnix.h
@@ -127,6 +127,37 @@ int __hsunix_lstat(const char *path, struct stat *buf);
// lstat is a macro on some platforms, so we need a wrapper:
int __hsunix_mknod(const char *pathname, mode_t mode, dev_t dev);
+#ifdef HAVE_GETPWENT
+// getpwent is a macro on some platforms, so we need a wrapper:
+struct passwd *__hsunix_getpwent(void);
+#endif
+
+#if HAVE_GETPWNAM_R
+// getpwnam_r is a macro on some platforms, so we need a wrapper:
+int __hsunix_getpwnam_r(const char *, struct passwd *, char *, size_t,
+ struct passwd **);
+#endif
+
+#ifdef HAVE_GETPWUID_R
+// getpwuid_r is a macro on some platforms, so we need a wrapper:
+int __hsunix_getpwuid_r(uid_t, struct passwd *, char *, size_t,
+ struct passwd **);
+#endif
+
+#ifdef HAVE_NANOSLEEP
+// nanosleep is a macro on some platforms, so we need a wrapper:
+int __hsunix_nanosleep(const struct timespec *, struct timespec *);
+#endif
+
+// opendir is a macro on some platforms, so we need a wrapper:
+DIR *__hsunix_opendir(const char *);
+
+// time is a macro on some platforms, so we need a wrapper:
+time_t __hsunix_time(time_t *);
+
+// times is a macro on some platforms, so we need a wrapper:
+clock_t __hsunix_times(struct tms *);
+
#ifdef HAVE_PTSNAME
// I cannot figure out how to make the definitions of the following
// functions visible in <stdlib.h> on Linux. But these definitions