From 5edb850fbe389e91cc694bc5ea44fb5843a2dad9 Mon Sep 17 00:00:00 2001 From: Tim Kientzle Date: Mon, 17 May 2004 18:27:05 +0000 Subject: [PATCH] POSIX prohibits any library function from setting errno to 0. Correct my previous commit and add a comment to the manpage indicating that the user must set errno to 0 if they wish to distinguish "no such user" from "error". Pointed out by: Jacques Vidrine (nectar@) --- lib/libc/gen/getpwent.3 | 6 +++++- lib/libc/gen/getpwent.c | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/libc/gen/getpwent.3 b/lib/libc/gen/getpwent.3 index da1988cfbb8e..8cb51a3e0b63 100644 --- a/lib/libc/gen/getpwent.3 +++ b/lib/libc/gen/getpwent.3 @@ -185,9 +185,13 @@ return a valid pointer to a passwd structure on success or .Dv NULL if the entry is not found or if an error occurs. -In the latter case, +If an error does occur, .Va errno will be set. +Note that programs must explicitly set +.Va errno +to zero before calling any of these functions if they need to +distinguish between a non-existent entry and an error. The functions .Fn getpwent_r , .Fn getpwnam_r , diff --git a/lib/libc/gen/getpwent.c b/lib/libc/gen/getpwent.c index 1753a83c8373..a0867ddf8e1c 100644 --- a/lib/libc/gen/getpwent.c +++ b/lib/libc/gen/getpwent.c @@ -388,7 +388,7 @@ getpw(int (*fn)(union key, struct passwd *, char *, size_t, struct passwd **), return (NULL); } } while (res == NULL && rv == ERANGE); - if (res == NULL) + if (rv != 0) errno = rv; return (res); }