Commit 91b82383 authored by Herbert Valerio Riedel's avatar Herbert Valerio Riedel 🕺
Browse files

Replace `__hsunix_getpw{nam,uid_r}` wrappers with CApiFFI

parent 3e32e391
......@@ -53,7 +53,6 @@ import Foreign.C
import Foreign.Ptr
import Foreign.Marshal
import Foreign.Storable
import System.Posix.Internals ( CGroup, CPasswd )
#if !defined(HAVE_GETPWNAM_R) || !defined(HAVE_GETPWUID_R) || defined(HAVE_GETPWENT) || defined(HAVE_GETGRENT)
import Control.Concurrent.MVar ( MVar, newMVar, withMVar )
......@@ -64,6 +63,10 @@ import Control.Exception
import Control.Monad
import System.IO.Error
-- internal types
data {-# CTYPE "struct passwd" #-} CPasswd
data {-# CTYPE "struct group" #-} CGroup
-- -----------------------------------------------------------------------------
-- user environemnt
......@@ -318,7 +321,7 @@ getUserEntryForID uid =
doubleAllocWhileERANGE "getUserEntryForID" "user" pwBufSize unpackUserEntry $
c_getpwuid_r uid ppw
foreign import ccall unsafe "__hsunix_getpwuid_r"
foreign import capi unsafe "HsUnix.h getpwuid_r"
c_getpwuid_r :: CUid -> Ptr CPasswd ->
CString -> CSize -> Ptr (Ptr CPasswd) -> IO CInt
#elif HAVE_GETPWUID
......@@ -345,7 +348,7 @@ getUserEntryForName name =
doubleAllocWhileERANGE "getUserEntryForName" "user" pwBufSize unpackUserEntry $
c_getpwnam_r pstr ppw
foreign import ccall unsafe "__hsunix_getpwnam_r"
foreign import capi unsafe "HsUnix.h getpwnam_r"
c_getpwnam_r :: CString -> Ptr CPasswd
-> CString -> CSize -> Ptr (Ptr CPasswd) -> IO CInt
#elif HAVE_GETPWNAM
......
......@@ -16,24 +16,6 @@ void *__hsunix_rtldNext (void) {return RTLD_NEXT;}
void *__hsunix_rtldDefault (void) {return RTLD_DEFAULT;}
#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_PTSNAME
// On Linux (and others), <stdlib.h> needs to be included while
// `_XOPEN_SOURCE` is already defined. However, GHCs before GHC 8.0
......
......@@ -113,18 +113,6 @@ fall back to O_FSYNC, which should be the same */
# define WCOREDUMP(s) 0
#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_PTSNAME
char *__hsunix_ptsname(int fd);
int __hsunix_grantpt(int fd);
......
Supports Markdown
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