xstd: add convenience function xstrerror_save()

This commit is contained in:
CismonX 2025-03-01 07:40:13 +08:00
parent 6f11f51171
commit 03da5fea5c
No known key found for this signature in database
GPG key ID: 3094873E29A482FB
3 changed files with 25 additions and 4 deletions

View file

@ -93,8 +93,8 @@ write_iov (
while (1) {
ssize_t nbytes = writev(fd, bufv, bufcnt);
if (unlikely(nbytes < 0)) {
int err = errno;
log_printf("writev(): %s", xstrerror(err));
int err;
log_printf("writev(): %s", xstrerror_save(&err));
switch (err) {
case EIO:

View file

@ -66,8 +66,8 @@ xfsync (
int fd
) {
while (unlikely(0 != fsync(fd))) {
int err = errno;
log_printf("fsync(): %s", xstrerror(err));
int err;
log_printf("fsync(): %s", xstrerror_save(&err));
switch (err) {
case EIO:
@ -170,3 +170,13 @@ xstrerror (
}
return err_str;
}
char const *
xstrerror_save (
int *errnum_ptr
) {
int err = errno;
*errnum_ptr = err;
return xstrerror(err);
}

View file

@ -169,4 +169,15 @@ xstrerror (
int errnum
);
/**
* Like xstrerror(), but takes `errno` as error number,
* and saves its value to `err_ptr`.
*/
BOOKMARKFS_INTERNAL
FUNCATTR_RETURNS_NONNULL
char const *
xstrerror_save (
int *errnum_ptr
);
#endif /* !defined(BOOKMARKFS_XSTD_H_) */