xref: /freebsd/lib/libc/gen/uexterr_gettext.c (revision a5b0b2a7d4219ae86f152433b6fcecd9e8c767d6)
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 #define	_WANT_P_OSREL
12 #include <sys/param.h>
13 #include <sys/exterrvar.h>
14 #include <exterr.h>
15 #include <string.h>
16 #include "libc_private.h"
17 
18 static struct uexterror uexterr = {
19 	.ver = UEXTERROR_VER,
20 };
21 
22 int __getosreldate(void);
23 
24 static void uexterr_ctr(void) __attribute__((constructor));
25 static void
uexterr_ctr(void)26 uexterr_ctr(void)
27 {
28 	if (__getosreldate() >= P_OSREL_EXTERRCTL)
29 		exterrctl(EXTERRCTL_ENABLE, 0, &uexterr);
30 }
31 
32 int
__libc_uexterr_gettext(char * buf,size_t bufsz)33 __libc_uexterr_gettext(char *buf, size_t bufsz)
34 {
35 	return (__uexterr_format(&uexterr, buf, bufsz));
36 }
37 
38 int
uexterr_gettext(char * buf,size_t bufsz)39 uexterr_gettext(char *buf, size_t bufsz)
40 {
41 	return (((int (*)(char *, size_t))
42 	    __libc_interposing[INTERPOS_uexterr_gettext])(buf, bufsz));
43 }
44