git: ddf6065122e8 - main - exterr(9): add a few tests of new message formats

Brooks Davis <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.src
Message-ID <6a86d9f4.3fb5c.7cc9082f__48904.4978212164$1787222548$gmane$org@gitrepo.freebsd.org>
The branch main has been updated by brooks:

URL: https://cgit.FreeBSD.org/src/commit/?id=ddf6065122e8990eafe31d21adaf719a25924a73

commit ddf6065122e8990eafe31d21adaf719a25924a73
Author:     Brooks Davis <[email protected]>
AuthorDate: 2026-08-20 10:39:46 +0000
Commit:     Brooks Davis <[email protected]>
CommitDate: 2026-08-20 10:40:31 +0000

    exterr(9): add a few tests of new message formats
    
    This is enough to show that the idea works (and to exercise
    uexterr_set()), but isn't complete by any means.
    
    Reviewed by:    kib
    Effort:         CHERI upstreaming
    Sponsored by:   Innovate UK
    Differential Revision:  https://reviews.freebsd.org/D58060
---
 tests/sys/kern/exterr_test.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/tests/sys/kern/exterr_test.c b/tests/sys/kern/exterr_test.c
index fad002767163..75de58d27206 100644
--- a/tests/sys/kern/exterr_test.c
+++ b/tests/sys/kern/exterr_test.c
@@ -23,6 +23,8 @@
  * SUCH DAMAGE.
  */
 
+#define UEXTERR_CATEGORY "tests/sys/kern/exterr_test.c"
+
 #include <sys/param.h>
 #include <sys/exterrvar.h>
 #include <sys/mman.h>
@@ -31,9 +33,11 @@
 #include <atf-c.h>
 #include <errno.h>
 #include <exterr.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <uexterror.h>
 #include <unistd.h>
 
 #include "freebsd_test_suite/macros.h"
@@ -75,6 +79,35 @@ ATF_TC_BODY(gettext_extended, tc)
 	ATF_CHECK(strstr(exterr, " is not subset of ") != NULL);
 }
 
+ATF_TC(uexterr_set);
+ATF_TC_HEAD(uexterr_set, tc)
+{
+	atf_tc_set_md_var(tc, "descr",
+	    "Set extended error message from userspace");
+}
+ATF_TC_BODY(uexterr_set, tc)
+{
+	char exterr[UEXTERROR_MAXLEN];
+	int r;
+
+	errno = 0;
+	UEXTERROR(EINVAL, "pointer %p int %d", (uintptr_t)&r, UINTMAX_MAX);
+	ATF_CHECK_EQ(errno, EINVAL);
+	r = uexterr_gettext(exterr, sizeof(exterr));
+	ATF_CHECK_EQ(0, r);
+	printf("Extended error: %s\n", exterr);
+	/* The pointer's value will change, but the rest should be stable. */
+	ATF_CHECK(strncmp("pointer 0x", exterr, strlen("pointer 0x")) == 0);
+	ATF_CHECK(strstr(exterr, " int -1") != 0);
+
+	errno = 0;
+	UEXTERROR(EINVAL, "long 0x%lx int %u", UINTMAX_MAX, UINTMAX_MAX);
+	ATF_CHECK_EQ(errno, EINVAL);
+	r = uexterr_gettext(exterr, sizeof(exterr));
+	ATF_CHECK_EQ(0, r);
+	ATF_CHECK_STREQ("long 0xffffffffffffffff int 4294967295", exterr);
+}
+
 ATF_TC(gettext_noextended);
 ATF_TC_HEAD(gettext_noextended, tc)
 {
@@ -150,6 +183,7 @@ ATF_TC_BODY(exterr_dynamic_categories, tc)
 ATF_TP_ADD_TCS(tp)
 {
 	ATF_TP_ADD_TC(tp, gettext_extended);
+	ATF_TP_ADD_TC(tp, uexterr_set);
 	ATF_TP_ADD_TC(tp, gettext_noextended);
 	ATF_TP_ADD_TC(tp, gettext_noextended_after_extended);
 	ATF_TP_ADD_TC(tp, exterr_dynamic_categories);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.