xref: /freebsd/lib/libc/gen/uexterr_format.c (revision 72c848089f3b03ee31208ca18f652a16d8fb8352)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2025 The FreeBSD Foundation
5  * All rights reserved.
6  *
7  * This software were developed by Konstantin Belousov <kib@FreeBSD.org>
8  * under sponsorship from the FreeBSD Foundation.
9  */
10 
11 #include <sys/types.h>
12 #include <sys/exterrvar.h>
13 #include <exterr.h>
14 #include <stdio.h>
15 #include <string.h>
16 
17 int
__uexterr_format(const struct uexterror * ue,char * buf,size_t bufsz)18 __uexterr_format(const struct uexterror *ue, char *buf, size_t bufsz)
19 {
20 	if (bufsz > UEXTERROR_MAXLEN)
21 		bufsz = UEXTERROR_MAXLEN;
22 	if (ue->error == 0) {
23 		strlcpy(buf, "", bufsz);
24 		return (0);
25 	}
26 	if (ue->msg[0] == '\0') {
27 		snprintf(buf, bufsz,
28 		    "errno %d category %u (src line %u) p1 %#jx p2 %#jx",
29 		    ue->error, ue->cat, ue->src_line,
30 		    (uintmax_t)ue->p1, (uintmax_t)ue->p2);
31 	} else {
32 		strlcpy(buf, ue->msg, bufsz);
33 	}
34 	return (0);
35 }
36