mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-25 02:38:59 +00:00
LibC: Make getpwent_r() behave more like glibc
Two things: - We now fail with ENOENT when we reach the end of the database. - Errors are returned directly instead of via errno.
This commit is contained in:
parent
7c4f5b58be
commit
cc189ce0f3
Notes:
sideshowbarker
2024-07-17 08:27:05 +09:00
Author: https://github.com/awesomekling
Commit: cc189ce0f3
Pull-request: https://github.com/SerenityOS/serenity/pull/16102
Reviewed-by: https://github.com/skyrising
Reviewed-by: https://github.com/thislooksfun
Reviewed-by: https://github.com/xZise
Reviewed-by: https://github.com/yyny
1 changed files with 7 additions and 10 deletions
|
@ -134,35 +134,32 @@ int getpwent_r(struct passwd* passwd_buf, char* buffer, size_t buffer_size, stru
|
|||
|
||||
while (true) {
|
||||
if (!s_stream || feof(s_stream)) {
|
||||
errno = EIO;
|
||||
return -1;
|
||||
*passwd_entry_ptr = nullptr;
|
||||
return ENOENT;
|
||||
}
|
||||
|
||||
if (ferror(s_stream)) {
|
||||
dbgln("getpwent(): Read error: {}", strerror(ferror(s_stream)));
|
||||
errno = EIO;
|
||||
return -1;
|
||||
*passwd_entry_ptr = nullptr;
|
||||
return ferror(s_stream);
|
||||
}
|
||||
|
||||
++s_line_number;
|
||||
char* s = fgets(buffer, buffer_size, s_stream);
|
||||
|
||||
// Silently tolerate an empty line at the end.
|
||||
if ((!s || !s[0]) && feof(s_stream)) {
|
||||
*passwd_entry_ptr = nullptr;
|
||||
return 0;
|
||||
return ENOENT;
|
||||
}
|
||||
|
||||
if (strlen(s) == buffer_size - 1) {
|
||||
errno = ERANGE;
|
||||
return -1;
|
||||
*passwd_entry_ptr = nullptr;
|
||||
return ERANGE;
|
||||
}
|
||||
|
||||
if (parse_pwddb_entry(buffer, *passwd_buf)) {
|
||||
*passwd_entry_ptr = passwd_buf;
|
||||
return 0;
|
||||
}
|
||||
// Otherwise, proceed to the next line.
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue