Date: Tue, 3 Jun 2025 04:07:34 GMT From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: b3a93154db74 - main - Extract exterr_to_ue() Message-ID: <202506030407.55347YiF071025@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=b3a93154db74e44d44d0210c728e12c713393a50 commit b3a93154db74e44d44d0210c728e12c713393a50 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2025-05-31 21:08:57 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2025-06-03 02:43:58 +0000 Extract exterr_to_ue() Reviewed by: brooks Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D50633 --- sys/kern/sys_generic.c | 28 +++++++++++++++++++--------- sys/sys/exterrvar.h | 2 ++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c index 91bf3e93fa7c..ec61d0bdc541 100644 --- a/sys/kern/sys_generic.c +++ b/sys/kern/sys_generic.c @@ -2202,6 +2202,23 @@ file_kcmp_generic(struct file *fp1, struct file *fp2, struct thread *td) return (kcmp_cmp((uintptr_t)fp1->f_data, (uintptr_t)fp2->f_data)); } +int +exterr_to_ue(struct thread *td, struct uexterror *ue) +{ + if ((td->td_pflags2 & TDP2_EXTERR) == 0) + return (ENOENT); + + memset(ue, 0, sizeof(*ue)); + ue->error = td->td_kexterr.error; + ue->cat = td->td_kexterr.cat; + ue->src_line = td->td_kexterr.src_line; + ue->p1 = td->td_kexterr.p1; + ue->p2 = td->td_kexterr.p2; + if (td->td_kexterr.msg != NULL) + strlcpy(ue->msg, td->td_kexterr.msg, sizeof(ue->msg)); + return (0); +} + void exterr_copyout(struct thread *td) { @@ -2215,18 +2232,11 @@ exterr_copyout(struct thread *td) uloc = (char *)td->td_exterr_ptr + __offsetof(struct uexterror, error); - if ((td->td_pflags2 & TDP2_EXTERR) == 0) { + error = exterr_to_ue(td, &ue); + if (error != 0) { ue.error = 0; sz = sizeof(ue.error); } else { - memset(&ue, 0, sizeof(ue)); - ue.error = td->td_kexterr.error; - ue.cat = td->td_kexterr.cat; - ue.src_line = td->td_kexterr.src_line; - ue.p1 = td->td_kexterr.p1; - ue.p2 = td->td_kexterr.p2; - if (td->td_kexterr.msg != NULL) - strlcpy(ue.msg, td->td_kexterr.msg, sizeof(ue.msg)); sz = sizeof(ue) - __offsetof(struct uexterror, error); } error = copyout(&ue.error, uloc, sz); diff --git a/sys/sys/exterrvar.h b/sys/sys/exterrvar.h index 5f55e377239a..3fe2c7446ed1 100644 --- a/sys/sys/exterrvar.h +++ b/sys/sys/exterrvar.h @@ -62,6 +62,8 @@ struct uexterror { #define SET_ERROR0(eerror, mmsg) SET_ERROR2(eerror, mmsg, 0, 0) #define SET_ERROR1(eerror, mmsg, pp1) SET_ERROR2(eerror, mmsg, pp1, 0) +int exterr_to_ue(struct thread *td, struct uexterror *ue); + #else /* _KERNEL */ __BEGIN_DECLS
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506030407.55347YiF071025>