[PATCH] linedit, deluser: use POSIX getpwent instead of getpwent_r
Rich Felker
dalias at libc.org
Thu Feb 5 20:52:24 UTC 2015
On Thu, Feb 05, 2015 at 09:42:08PM +0100, Denys Vlasenko wrote:
> struct passwd *getpwent()
> {
> static char *line;
> static struct passwd pw;
> size_t size=0;
> if (!f) f = fopen("/etc/passwd", "rbe");
> if (!f) return 0;
> return __getpwent_a(f, &pw, &line, &size);
> }
>
> I would prefer that even "struct passwd" is malloced...
I don't think it would make much practical difference. It could be
changed though.
> But more importantly, bbox can't optimize only for musl.
> Other libc'es may have static line buffers there.
>
> And musl will eventually be forced to implement getpwent_r()
> if it wants to be usable for more packages... so...
getpwent_r makes no sense; the _r functions are for thread-safe
versions of their corresponding legacy functions, but getpwent_r has
inherent global state -- the iterator. Whoever made it just wasn't
thinking. To make a correct interface like this the caller would need
to have an iterator object to pass to the function, but I can't see
much merit in inventing a new interface for this.
Rich
More information about the busybox
mailing list