Subject: Re: getpwent_r()
To: None <current-users@netbsd.org>
From: Christos Zoulas <christos@tac.gw.com>
List: current-users
Date: 04/01/2005 07:59:46
In article <200504010736.j317aYao005885@vtn1.victoria.tc.ca>,
John Nemeth <jnemeth@victoria.tc.ca> wrote:
>     libedit uses getpwent() to enumerate all users starting with a
>particular string.  I think this means that we are going to need a
>getpwent_r() function.  Solaris 8 has one that looks like this:
>
>     struct passwd *getpwent_r(struct passwd *pwd, char  *buffer,
>     int buflen);
>
>     For enumeration in multithreaded applications, the  position
>     within  the enumeration is a process-wide property shared by
>     all threads. The setpwent() function may be used in  a  mul-
>     tithreaded  application  but resets the enumeration position
>     for all threads.  If multiple threads  interleave  calls  to
>     getpwent_r(), the threads will enumerate disjoint subsets of
>     the password database.
>
>libedit also uses setpwent() and endpwent() which presents another
>problem.  I don't see any simple solutions to the enumeration position
>problem, so we'll probably just have to document that it does this.

Look at PR/298{49,50}.

christos