System.Posix.User: make get{Group,User}EntryFor* more portable

Simon Marlow marlowsd at gmail.com
Fri Apr 3 06:30:42 EDT 2009


Matthias Kilian wrote:
> Hi,
> 
> some oddities let the user001 test of the unix package fail on
> getGroupEntryFor*. One reason is that sysconf(_SC_GETGR_R_SIZE_MAX)
> returns 1024 on OpenBSD, while getgr*_r(3) actually need a buffer
> of 1024 + 200 * sizeof(char*) bytes.
> 
> Note that the grBufSize = 2048 workaround in User.hsc did not work
> on 64 bit machines with OpenBSD, even before the _SC_GETGR_R_SIZE_MAX
> sysconf had been introduced.
> 
> Instead of fiddling with stupid numbers again, I just implemented the
> try / enlarge / try harder scheme mentioned for example at
> 
> http://www.opengroup.org/onlinepubs/9699919799/functions/getgrgid.html
> 
> And I did so for all four functions, just in case there are existing
> problems with other unices (OpenBSD only needs the getGroupEntryFor*
> fixes).
> 
> My Haskell sucks badly, so if someone has a cleaner solution: feel
> free use it instead of my patch ;-)

Looks ok to me.  I'll validate and commit.  Thanks for the patch!

Cheers,
	Simon


More information about the Libraries mailing list