Fix getgrnam_r error handling.

Closes #884.
This commit is contained in:
Alex Shinn 2024-05-31 19:05:43 +09:00
parent 7885db95cf
commit 0bbb60060a
2 changed files with 32 additions and 11 deletions

View file

@ -24,5 +24,5 @@
(getpwuid_r user (make-string 1024)))))
(define (group-information group)
(safe-car (if (string? group)
(getgrnam_r group (make-string 1024))
(getgrgid_r group (make-string 1024)))))))))
(getgrnam-safe group (make-string 1024))
(getgrgid-safe group (make-string 1024)))))))))

View file

@ -83,15 +83,36 @@
(cond-expand
(emscripten)
(else
(define-c errno getgrgid_r
(gid_t (result group)
(c-declare "
int getgrnam_safe(const char* name, struct group* grp,
char* buf, size_t buflen,
struct group** result) {
int res = getgrnam_r(name, grp, buf, buflen, result);
if (res == 0 && result == NULL) {
res = errno ? errno : ENOENT;
}
return res;
}
int getgrgid_safe(gid_t gid, struct group* grp,
char* buf, size_t buflen,
struct group** result) {
int res = getgrgid_r(gid, grp, buf, buflen, result);
if (res == 0 && result == NULL) {
res = errno ? errno : ENOENT;
}
return res;
}
")
(define-c errno getgrgid-safe
(gid_t (result group)
(link string)
(value (string-size arg2) int)
(result pointer group)))
(define-c errno getgrnam-safe
(string (result group)
(link string)
(value (string-size arg2) int)
(result pointer group)))
(define-c errno getgrnam_r
(string (result group)
(link string)
(value (string-size arg2) int)
(result pointer group)))))
(result pointer group)))))