darcs patch: Added support for getpwent/getgrent (and 1 more)
Simon Marlow
simonmarhaskell at gmail.com
Thu Aug 31 09:48:12 EDT 2006
applied, thanks.
Simon
John Goerzen wrote:
> Wed Aug 30 08:25:50 CDT 2006 John Goerzen <jgoerzen at complete.org>
> * Added support for getpwent/getgrent
>
> Wed Aug 30 08:45:17 CDT 2006 John Goerzen <jgoerzen at complete.org>
> * Fix compilation issues with new getgrent/getpwent code
>
>
> ------------------------------------------------------------------------
>
>
> New patches:
>
> [Added support for getpwent/getgrent
> John Goerzen <jgoerzen at complete.org>**20060830132550] {
> hunk ./System/Posix/User.hsc 31
> + getAllGroupEntries,
> hunk ./System/Posix/User.hsc 37
> + getAllUserEntries,
> hunk ./System/Posix/User.hsc 52
> -#if !defined(HAVE_GETPWNAM_R) || !defined(HAVE_GETPWUID_R)
> +#if !defined(HAVE_GETPWNAM_R) || !defined(HAVE_GETPWUID_R) || defined(HAVE_GETPWENT) || defined(HAVE_GETGRENT)
> hunk ./System/Posix/User.hsc 202
> +-- | @getAllGroupEntries@ returns all group entries on the system by
> +-- repeatedly calling @getgrent@
> +getAllGroupEntries :: IO [GroupEntry]
> +#ifdef HAVE_GETGRENT
> +getAllGroupEntries =
> + withMVar lock $ \_ -> worker []
> + where worker accum =
> + do ppw <- throwErrnoIfNullAndError "getAllGroupEntries" $ c_getgrent
> + if ppw == nullPtr
> + then return (reverse accum)
> + else do thisentry <- unpackGroupEntry ppw
> + worker (thisentry : accum)
> +
> +foreign import ccall unsafe "getgrent"
> + c_getgrent :: IO (Ptr CGroup)
> +#else
> +getAllGroupEntries = error "System.Posix.User.getAllGroupEntries: not supported"
> +#endif
> +
> hunk ./System/Posix/User.hsc 259
> -#if !defined(HAVE_GETPWNAM_R) || !defined(HAVE_GETPWUID_R)
> +-- Also, getpwent/setpwent require a global lock since they maintain
> +-- an internal file position pointer.
> +#if !defined(HAVE_GETPWNAM_R) || !defined(HAVE_GETPWUID_R) || defined(HAVE_GETPWENT) || defined(HAVE_GETGRENT)
> hunk ./System/Posix/User.hsc 327
> +
> +-- | @getAllUserEntries@ returns all user entries on the system by
> +-- repeatedly calling @getpwent@
> +getAllUserEntries :: IO [UserEntry]
> +#ifdef HAVE_GETPWENT
> +getAllUserEntries =
> + withMVar lock $ \_ -> worker []
> + where worker accum =
> + do ppw <- throwErrnoIfNullAndError "getAllUserEntries" $ c_getpwent
> + if ppw == nullPtr
> + then return (reverse accum)
> + else do thisentry <- unpackUserEntry ppw
> + worker (thisentry : accum)
> +
> +foreign import ccall unsafe "getpwent"
> + c_getpwent :: IO (Ptr CPasswd)
> +#else
> +getAllUserEntries = error "System.Posix.User.getAllUserEntries: not supported"
> +#endif
> hunk ./configure.ac 20
> +AC_CHECK_FUNCS([getpwent getgrent])
> }
>
> [Fix compilation issues with new getgrent/getpwent code
> John Goerzen <jgoerzen at complete.org>**20060830134517] {
> hunk ./System/Posix/User.hsc 209
> - do ppw <- throwErrnoIfNullAndError "getAllGroupEntries" $ c_getgrent
> - if ppw == nullPtr
> - then return (reverse accum)
> - else do thisentry <- unpackGroupEntry ppw
> - worker (thisentry : accum)
> + do resetErrno
> + ppw <- throwErrnoIfNullAndError "getAllGroupEntries" $
> + c_getgrent
> + if ppw == nullPtr
> + then return (reverse accum)
> + else do thisentry <- unpackGroupEntry ppw
> + worker (thisentry : accum)
> hunk ./System/Posix/User.hsc 337
> - do ppw <- throwErrnoIfNullAndError "getAllUserEntries" $ c_getpwent
> - if ppw == nullPtr
> - then return (reverse accum)
> - else do thisentry <- unpackUserEntry ppw
> - worker (thisentry : accum)
> + do resetErrno
> + ppw <- throwErrnoIfNullAndError "getAllUserEntries" $
> + c_getpwent
> + if ppw == nullPtr
> + then return (reverse accum)
> + else do thisentry <- unpackUserEntry ppw
> + worker (thisentry : accum)
> hunk ./System/Posix/User.hsc 386
> +-- Used when a function returns NULL to indicate either an error or
> +-- EOF, depending on whether the global errno is nonzero.
> +throwErrnoIfNullAndError :: String -> IO (Ptr a) -> IO (Ptr a)
> +throwErrnoIfNullAndError loc act = do
> + rc <- act
> + errno <- getErrno
> + if rc == nullPtr && errno /= eOK
> + then throwErrno loc
> + else return rc
> }
>
> Context:
>
> [includes -> install-includes
> Ross Paterson <ross at soi.city.ac.uk>**20060829123744]
> [Added some Haddock docs for UserEntry and GroupEntry
> John Goerzen <jgoerzen at complete.org>**20060829185932]
> [Add missing field gr_passwd to GroupEntry
> John Goerzen <jgoerzen at complete.org>**20060829185536]
> [Whitespace changes for better alignment in unpackUserEntry
> John Goerzen <jgoerzen at complete.org>**20060829185300]
> [Added pw_passwd and pw_gecos fields to UserEntry structure
> John Goerzen <jgoerzen at complete.org>**20060829185051
> System.Posix.User was missing pw_gecos and pw_passwd in UserEntry.
>
> I have added them, so now the full struct passwd is represented.
> ]
> [exclude Setup.hs from build
> Ross Paterson <ross at soi.city.ac.uk>**20060824183535]
> [add boilerplate Setup.hs
> Ross Paterson <ross at soi.city.ac.uk>**20060824115019]
> [Added more documentation to System.Posix.Files
> Johan Tibell <johan.tibell at gmail.com>**20060813102350]
> [fix markup (#854)
> Ross Paterson <ross at soi.city.ac.uk>**20060820002322]
> [change test for buildability
> Ross Paterson <ross at soi.city.ac.uk>**20060819144834
>
> Checking for dlfcn.h instead of creat() should make the Cabal build fail
> more gracefully under MinGW.
> ]
> [document args to executeFile
> Simon Marlow <simonmar at microsoft.com>**20060809104559]
> [fix bogosity in getEnvironmentPrim
> Simon Marlow <simonmar at microsoft.com>**20060531144640]
> [Track the GHC source tree reoganisation
> Simon Marlow <simonmar at microsoft.com>**20060407041758]
> [TAG Initial conversion from CVS complete
> John Goerzen <jgoerzen at complete.org>**20060112154138]
> Patch bundle hash:
> 63c2eb2b05cb291e8e47b65cbe87bf177738c4fe
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
More information about the Libraries
mailing list