git: ab420c44bc7c - main - libc: Add PRIb*, PRIB*, and SCNb* macros as per C23

From: Faraz Vahedi <kfv_at_FreeBSD.org>
Date: Wed, 02 Sep 2026 15:00:26 UTC
The branch main has been updated by kfv:

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

commit ab420c44bc7c45bf344cb03b289e60109f57aaee
Author:     Faraz Vahedi <kfv@FreeBSD.org>
AuthorDate: 2026-09-02 14:56:58 +0000
Commit:     Faraz Vahedi <kfv@FreeBSD.org>
CommitDate: 2026-09-02 14:56:58 +0000

    libc: Add PRIb*, PRIB*, and SCNb* macros as per C23
    
    Reviewed by:    fuz
    Approved by:    fuz (mentor)
    MFC after:      1 month
    Differential Revision:  https://reviews.freebsd.org/D59293
---
 sys/arm/include/_inttypes.h     | 45 +++++++++++++++++++++++++++++++++++++++++
 sys/arm64/include/_inttypes.h   | 45 +++++++++++++++++++++++++++++++++++++++++
 sys/powerpc/include/_inttypes.h | 45 +++++++++++++++++++++++++++++++++++++++++
 sys/riscv/include/_inttypes.h   | 45 +++++++++++++++++++++++++++++++++++++++++
 sys/x86/include/_inttypes.h     | 45 +++++++++++++++++++++++++++++++++++++++++
 5 files changed, 225 insertions(+)

diff --git a/sys/arm/include/_inttypes.h b/sys/arm/include/_inttypes.h
index ab51edc73ab6..8ccc9dd2893d 100644
--- a/sys/arm/include/_inttypes.h
+++ b/sys/arm/include/_inttypes.h
@@ -132,6 +132,36 @@
 #define	PRIXMAX		"jX"	/* uintmax_t */
 #define	PRIXPTR		"X"	/* uintptr_t */
 
+#define	PRIb8		"b"	/* uint8_t */
+#define	PRIb16		"b"	/* uint16_t */
+#define	PRIb32		"b"	/* uint32_t */
+#define	PRIb64		"llb"	/* uint64_t */
+#define	PRIbLEAST8	"b"	/* uint_least8_t */
+#define	PRIbLEAST16	"b"	/* uint_least16_t */
+#define	PRIbLEAST32	"b"	/* uint_least32_t */
+#define	PRIbLEAST64	"llb"	/* uint_least64_t */
+#define	PRIbFAST8	"b"	/* uint_fast8_t */
+#define	PRIbFAST16	"b"	/* uint_fast16_t */
+#define	PRIbFAST32	"b"	/* uint_fast32_t */
+#define	PRIbFAST64	"llb"	/* uint_fast64_t */
+#define	PRIbMAX		"jb"	/* uintmax_t */
+#define	PRIbPTR		"b"	/* uintptr_t */
+
+#define	PRIB8		"B"	/* uint8_t */
+#define	PRIB16		"B"	/* uint16_t */
+#define	PRIB32		"B"	/* uint32_t */
+#define	PRIB64		"llB"	/* uint64_t */
+#define	PRIBLEAST8	"B"	/* uint_least8_t */
+#define	PRIBLEAST16	"B"	/* uint_least16_t */
+#define	PRIBLEAST32	"B"	/* uint_least32_t */
+#define	PRIBLEAST64	"llB"	/* uint_least64_t */
+#define	PRIBFAST8	"B"	/* uint_fast8_t */
+#define	PRIBFAST16	"B"	/* uint_fast16_t */
+#define	PRIBFAST32	"B"	/* uint_fast32_t */
+#define	PRIBFAST64	"llB"	/* uint_fast64_t */
+#define	PRIBMAX		"jB"	/* uintmax_t */
+#define	PRIBPTR		"B"	/* uintptr_t */
+
 /* fscanf(3) macros for signed integers. */
 
 #define	SCNd8		"hhd"	/* int8_t */
@@ -211,4 +241,19 @@
 #define	SCNxMAX		"jx"	/* uintmax_t */
 #define	SCNxPTR		"x"	/* uintptr_t */
 
+#define	SCNb8		"hhb"	/* uint8_t */
+#define	SCNb16		"hb"	/* uint16_t */
+#define	SCNb32		"b"	/* uint32_t */
+#define	SCNb64		"llb"	/* uint64_t */
+#define	SCNbLEAST8	"hhb"	/* uint_least8_t */
+#define	SCNbLEAST16	"hb"	/* uint_least16_t */
+#define	SCNbLEAST32	"b"	/* uint_least32_t */
+#define	SCNbLEAST64	"llb"	/* uint_least64_t */
+#define	SCNbFAST8	"b"	/* uint_fast8_t */
+#define	SCNbFAST16	"b"	/* uint_fast16_t */
+#define	SCNbFAST32	"b"	/* uint_fast32_t */
+#define	SCNbFAST64	"llb"	/* uint_fast64_t */
+#define	SCNbMAX		"jb"	/* uintmax_t */
+#define	SCNbPTR		"b"	/* uintptr_t */
+
 #endif /* !_MACHINE_INTTYPES_H_ */
diff --git a/sys/arm64/include/_inttypes.h b/sys/arm64/include/_inttypes.h
index 67ae82fbf031..1df86d833793 100644
--- a/sys/arm64/include/_inttypes.h
+++ b/sys/arm64/include/_inttypes.h
@@ -134,6 +134,36 @@
 #define	PRIXMAX		"jX"	/* uintmax_t */
 #define	PRIXPTR		"lX"	/* uintptr_t */
 
+#define	PRIb8		"b"	/* uint8_t */
+#define	PRIb16		"b"	/* uint16_t */
+#define	PRIb32		"b"	/* uint32_t */
+#define	PRIb64		"lb"	/* uint64_t */
+#define	PRIbLEAST8	"b"	/* uint_least8_t */
+#define	PRIbLEAST16	"b"	/* uint_least16_t */
+#define	PRIbLEAST32	"b"	/* uint_least32_t */
+#define	PRIbLEAST64	"lb"	/* uint_least64_t */
+#define	PRIbFAST8	"b"	/* uint_fast8_t */
+#define	PRIbFAST16	"b"	/* uint_fast16_t */
+#define	PRIbFAST32	"b"	/* uint_fast32_t */
+#define	PRIbFAST64	"lb"	/* uint_fast64_t */
+#define	PRIbMAX		"jb"	/* uintmax_t */
+#define	PRIbPTR		"lb"	/* uintptr_t */
+
+#define	PRIB8		"B"	/* uint8_t */
+#define	PRIB16		"B"	/* uint16_t */
+#define	PRIB32		"B"	/* uint32_t */
+#define	PRIB64		"lB"	/* uint64_t */
+#define	PRIBLEAST8	"B"	/* uint_least8_t */
+#define	PRIBLEAST16	"B"	/* uint_least16_t */
+#define	PRIBLEAST32	"B"	/* uint_least32_t */
+#define	PRIBLEAST64	"lB"	/* uint_least64_t */
+#define	PRIBFAST8	"B"	/* uint_fast8_t */
+#define	PRIBFAST16	"B"	/* uint_fast16_t */
+#define	PRIBFAST32	"B"	/* uint_fast32_t */
+#define	PRIBFAST64	"lB"	/* uint_fast64_t */
+#define	PRIBMAX		"jB"	/* uintmax_t */
+#define	PRIBPTR		"lB"	/* uintptr_t */
+
 /* fscanf(3) macros for signed integers. */
 
 #define	SCNd8		"hhd"	/* int8_t */
@@ -213,6 +243,21 @@
 #define	SCNxMAX		"jx"	/* uintmax_t */
 #define	SCNxPTR		"lx"	/* uintptr_t */
 
+#define	SCNb8		"hhb"	/* uint8_t */
+#define	SCNb16		"hb"	/* uint16_t */
+#define	SCNb32		"b"	/* uint32_t */
+#define	SCNb64		"lb"	/* uint64_t */
+#define	SCNbLEAST8	"hhb"	/* uint_least8_t */
+#define	SCNbLEAST16	"hb"	/* uint_least16_t */
+#define	SCNbLEAST32	"b"	/* uint_least32_t */
+#define	SCNbLEAST64	"lb"	/* uint_least64_t */
+#define	SCNbFAST8	"b"	/* uint_fast8_t */
+#define	SCNbFAST16	"b"	/* uint_fast16_t */
+#define	SCNbFAST32	"b"	/* uint_fast32_t */
+#define	SCNbFAST64	"lb"	/* uint_fast64_t */
+#define	SCNbMAX		"jb"	/* uintmax_t */
+#define	SCNbPTR		"lb"	/* uintptr_t */
+
 #endif /* !_MACHINE__INTTYPES_H_ */
 
 #endif /* !__arm__ */
diff --git a/sys/powerpc/include/_inttypes.h b/sys/powerpc/include/_inttypes.h
index 4d1b52da6cea..f07f20033c2c 100644
--- a/sys/powerpc/include/_inttypes.h
+++ b/sys/powerpc/include/_inttypes.h
@@ -140,6 +140,36 @@
 #define	PRIXMAX		"jX"		/* uintmax_t */
 #define	PRIXPTR		__PRIptr"X"	/* uintptr_t */
 
+#define	PRIb8		"b"		/* uint8_t */
+#define	PRIb16		"b"		/* uint16_t */
+#define	PRIb32		"b"		/* uint32_t */
+#define	PRIb64		__PRI64"b"	/* uint64_t */
+#define	PRIbLEAST8	"b"		/* uint_least8_t */
+#define	PRIbLEAST16	"b"		/* uint_least16_t */
+#define	PRIbLEAST32	"b"		/* uint_least32_t */
+#define	PRIbLEAST64	__PRI64"b"	/* uint_least64_t */
+#define	PRIbFAST8	"b"		/* uint_fast8_t */
+#define	PRIbFAST16	"b"		/* uint_fast16_t */
+#define	PRIbFAST32	"b"		/* uint_fast32_t */
+#define	PRIbFAST64	__PRI64"b"	/* uint_fast64_t */
+#define	PRIbMAX		"jb"		/* uintmax_t */
+#define	PRIbPTR		__PRIptr"b"	/* uintptr_t */
+
+#define	PRIB8		"B"		/* uint8_t */
+#define	PRIB16		"B"		/* uint16_t */
+#define	PRIB32		"B"		/* uint32_t */
+#define	PRIB64		__PRI64"B"	/* uint64_t */
+#define	PRIBLEAST8	"B"		/* uint_least8_t */
+#define	PRIBLEAST16	"B"		/* uint_least16_t */
+#define	PRIBLEAST32	"B"		/* uint_least32_t */
+#define	PRIBLEAST64	__PRI64"B"	/* uint_least64_t */
+#define	PRIBFAST8	"B"		/* uint_fast8_t */
+#define	PRIBFAST16	"B"		/* uint_fast16_t */
+#define	PRIBFAST32	"B"		/* uint_fast32_t */
+#define	PRIBFAST64	__PRI64"B"	/* uint_fast64_t */
+#define	PRIBMAX		"jB"		/* uintmax_t */
+#define	PRIBPTR		__PRIptr"B"	/* uintptr_t */
+
 /* fscanf(3) macros for signed integers. */
 
 #define	SCNd8		"hhd"		/* int8_t */
@@ -219,4 +249,19 @@
 #define	SCNxMAX		"jx"		/* uintmax_t */
 #define	SCNxPTR		__PRIptr"x"	/* uintptr_t */
 
+#define	SCNb8		"hhb"		/* uint8_t */
+#define	SCNb16		"hb"		/* uint16_t */
+#define	SCNb32		"b"		/* uint32_t */
+#define	SCNb64		__PRI64"b"	/* uint64_t */
+#define	SCNbLEAST8	"hhb"		/* uint_least8_t */
+#define	SCNbLEAST16	"hb"		/* uint_least16_t */
+#define	SCNbLEAST32	"b"		/* uint_least32_t */
+#define	SCNbLEAST64	__PRI64"b"	/* uint_least64_t */
+#define	SCNbFAST8	"b"		/* uint_fast8_t */
+#define	SCNbFAST16	"b"		/* uint_fast16_t */
+#define	SCNbFAST32	"b"		/* uint_fast32_t */
+#define	SCNbFAST64	__PRI64"b"	/* uint_fast64_t */
+#define	SCNbMAX		"jb"		/* uintmax_t */
+#define	SCNbPTR		__PRIptr"b"	/* uintptr_t */
+
 #endif /* !_MACHINE_INTTYPES_H_ */
diff --git a/sys/riscv/include/_inttypes.h b/sys/riscv/include/_inttypes.h
index fb2bb14e33a3..d001261ba550 100644
--- a/sys/riscv/include/_inttypes.h
+++ b/sys/riscv/include/_inttypes.h
@@ -130,6 +130,36 @@
 #define	PRIXMAX		"jX"	/* uintmax_t */
 #define	PRIXPTR		"lX"	/* uintptr_t */
 
+#define	PRIb8		"b"	/* uint8_t */
+#define	PRIb16		"b"	/* uint16_t */
+#define	PRIb32		"b"	/* uint32_t */
+#define	PRIb64		"lb"	/* uint64_t */
+#define	PRIbLEAST8	"b"	/* uint_least8_t */
+#define	PRIbLEAST16	"b"	/* uint_least16_t */
+#define	PRIbLEAST32	"b"	/* uint_least32_t */
+#define	PRIbLEAST64	"lb"	/* uint_least64_t */
+#define	PRIbFAST8	"b"	/* uint_fast8_t */
+#define	PRIbFAST16	"b"	/* uint_fast16_t */
+#define	PRIbFAST32	"b"	/* uint_fast32_t */
+#define	PRIbFAST64	"lb"	/* uint_fast64_t */
+#define	PRIbMAX		"jb"	/* uintmax_t */
+#define	PRIbPTR		"lb"	/* uintptr_t */
+
+#define	PRIB8		"B"	/* uint8_t */
+#define	PRIB16		"B"	/* uint16_t */
+#define	PRIB32		"B"	/* uint32_t */
+#define	PRIB64		"lB"	/* uint64_t */
+#define	PRIBLEAST8	"B"	/* uint_least8_t */
+#define	PRIBLEAST16	"B"	/* uint_least16_t */
+#define	PRIBLEAST32	"B"	/* uint_least32_t */
+#define	PRIBLEAST64	"lB"	/* uint_least64_t */
+#define	PRIBFAST8	"B"	/* uint_fast8_t */
+#define	PRIBFAST16	"B"	/* uint_fast16_t */
+#define	PRIBFAST32	"B"	/* uint_fast32_t */
+#define	PRIBFAST64	"lB"	/* uint_fast64_t */
+#define	PRIBMAX		"jB"	/* uintmax_t */
+#define	PRIBPTR		"lB"	/* uintptr_t */
+
 /* fscanf(3) macros for signed integers. */
 
 #define	SCNd8		"hhd"	/* int8_t */
@@ -209,4 +239,19 @@
 #define	SCNxMAX		"jx"	/* uintmax_t */
 #define	SCNxPTR		"lx"	/* uintptr_t */
 
+#define	SCNb8		"hhb"	/* uint8_t */
+#define	SCNb16		"hb"	/* uint16_t */
+#define	SCNb32		"b"	/* uint32_t */
+#define	SCNb64		"lb"	/* uint64_t */
+#define	SCNbLEAST8	"hhb"	/* uint_least8_t */
+#define	SCNbLEAST16	"hb"	/* uint_least16_t */
+#define	SCNbLEAST32	"b"	/* uint_least32_t */
+#define	SCNbLEAST64	"lb"	/* uint_least64_t */
+#define	SCNbFAST8	"b"	/* uint_fast8_t */
+#define	SCNbFAST16	"b"	/* uint_fast16_t */
+#define	SCNbFAST32	"b"	/* uint_fast32_t */
+#define	SCNbFAST64	"lb"	/* uint_fast64_t */
+#define	SCNbMAX		"jb"	/* uintmax_t */
+#define	SCNbPTR		"lb"	/* uintptr_t */
+
 #endif /* !_MACHINE__INTTYPES_H_ */
diff --git a/sys/x86/include/_inttypes.h b/sys/x86/include/_inttypes.h
index 4d1b52da6cea..f07f20033c2c 100644
--- a/sys/x86/include/_inttypes.h
+++ b/sys/x86/include/_inttypes.h
@@ -140,6 +140,36 @@
 #define	PRIXMAX		"jX"		/* uintmax_t */
 #define	PRIXPTR		__PRIptr"X"	/* uintptr_t */
 
+#define	PRIb8		"b"		/* uint8_t */
+#define	PRIb16		"b"		/* uint16_t */
+#define	PRIb32		"b"		/* uint32_t */
+#define	PRIb64		__PRI64"b"	/* uint64_t */
+#define	PRIbLEAST8	"b"		/* uint_least8_t */
+#define	PRIbLEAST16	"b"		/* uint_least16_t */
+#define	PRIbLEAST32	"b"		/* uint_least32_t */
+#define	PRIbLEAST64	__PRI64"b"	/* uint_least64_t */
+#define	PRIbFAST8	"b"		/* uint_fast8_t */
+#define	PRIbFAST16	"b"		/* uint_fast16_t */
+#define	PRIbFAST32	"b"		/* uint_fast32_t */
+#define	PRIbFAST64	__PRI64"b"	/* uint_fast64_t */
+#define	PRIbMAX		"jb"		/* uintmax_t */
+#define	PRIbPTR		__PRIptr"b"	/* uintptr_t */
+
+#define	PRIB8		"B"		/* uint8_t */
+#define	PRIB16		"B"		/* uint16_t */
+#define	PRIB32		"B"		/* uint32_t */
+#define	PRIB64		__PRI64"B"	/* uint64_t */
+#define	PRIBLEAST8	"B"		/* uint_least8_t */
+#define	PRIBLEAST16	"B"		/* uint_least16_t */
+#define	PRIBLEAST32	"B"		/* uint_least32_t */
+#define	PRIBLEAST64	__PRI64"B"	/* uint_least64_t */
+#define	PRIBFAST8	"B"		/* uint_fast8_t */
+#define	PRIBFAST16	"B"		/* uint_fast16_t */
+#define	PRIBFAST32	"B"		/* uint_fast32_t */
+#define	PRIBFAST64	__PRI64"B"	/* uint_fast64_t */
+#define	PRIBMAX		"jB"		/* uintmax_t */
+#define	PRIBPTR		__PRIptr"B"	/* uintptr_t */
+
 /* fscanf(3) macros for signed integers. */
 
 #define	SCNd8		"hhd"		/* int8_t */
@@ -219,4 +249,19 @@
 #define	SCNxMAX		"jx"		/* uintmax_t */
 #define	SCNxPTR		__PRIptr"x"	/* uintptr_t */
 
+#define	SCNb8		"hhb"		/* uint8_t */
+#define	SCNb16		"hb"		/* uint16_t */
+#define	SCNb32		"b"		/* uint32_t */
+#define	SCNb64		__PRI64"b"	/* uint64_t */
+#define	SCNbLEAST8	"hhb"		/* uint_least8_t */
+#define	SCNbLEAST16	"hb"		/* uint_least16_t */
+#define	SCNbLEAST32	"b"		/* uint_least32_t */
+#define	SCNbLEAST64	__PRI64"b"	/* uint_least64_t */
+#define	SCNbFAST8	"b"		/* uint_fast8_t */
+#define	SCNbFAST16	"b"		/* uint_fast16_t */
+#define	SCNbFAST32	"b"		/* uint_fast32_t */
+#define	SCNbFAST64	__PRI64"b"	/* uint_fast64_t */
+#define	SCNbMAX		"jb"		/* uintmax_t */
+#define	SCNbPTR		__PRIptr"b"	/* uintptr_t */
+
 #endif /* !_MACHINE_INTTYPES_H_ */