Subject: Re: getpw*_r standards
To: None <>
From: Christos Zoulas <>
List: current-users
Date: 04/10/2005 22:35:01
In article <>,
Luke Mewburn  <> wrote:
>On Sun, Apr 10, 2005 at 10:49:48PM +0200, Klaus Klein wrote:
>  | > Should NetBSD code follow the Solaris way for maximum
>  | > portability?
>  | 
>  | The issue here is that the standard does distinguish between
>  | "successfully no entry found" and "an error caused no entry to be
>  | found", viz. "A NULL pointer shall be returned at the location pointed
>  | to by result on error _or_ if the requested entry is not found"
>  | (getpwnam_r, emphasis added by me).  Its wording is less concise
>  | for getpwnam, but comparing -current against 2.0 shows a regression
>  | in now setting errno to ENOENT in the former case.
>Please be more explicit, as it's unclear to me the context of
>"in the former case".
>2.0 doesn't have getpwnam_r().
>3 and -current do.
>AFAICT, Klaus & Nathan are recommending that getpwnam_r():
>    *	return 0 and set result to NULL for "notfound", and
>    *	return errno (!0) and set result to NULL for "error".
>If I have understood that correctly, we can change get{pw,gr}*_r()
>to do this.
>2.0's getpwnam() returns NULL in both the "not found" and "error"
>case, and in both cases errno is indeterminately set depending
>on what the back-end modules (files, nis, dns, ...) do.
>-current's getpwnam() has the same behaviour.
>  | So yes, we should change the implementation, including the result
>  | pointer location being set to NULL in the error (non-zero return)
>  | case.
>Once I understand exactly what you're asking to change,
>I'll change it ;-)

And I will fix userland... :-)