On Thu, 22 Nov 2018, Andreas Kusalananda Kähäri wrote:
> >Description:
> When using scanf() to read a value into a uint_fast8_t or uint_fast16_t
> variable (or the signed equivalent), there is a mismatch between the
> type of the variable and the format specification that the corresponding
> SCN{u,d}FAST{8,16} macro expands to.
> 
> This seems to affect the {u,}int_fast{8,16}_t types and not the "least"
> variant or ordinary {u,}int{8,16}_t types.
> 
> This gives rise to warnings from clang, and also affects the values that
> are stored in the variables (see below).

Your code looks correct to me; <inttypes.h> seems incorrect.

oks for the diff below?


Philip Guenther


Index: inttypes.h
===================================================================
RCS file: /data/src/openbsd/src/include/inttypes.h,v
retrieving revision 1.11
diff -u -p -r1.11 inttypes.h
--- inttypes.h  11 Jun 2013 15:59:16 -0000      1.11
+++ inttypes.h  22 Nov 2018 17:53:05 -0000
@@ -162,8 +162,8 @@
 #define        SCNdLEAST32             "d"             /* int_least32_t */
 #define        SCNdLEAST64             "lld"           /* int_least64_t */
 
-#define        SCNdFAST8               "hhd"           /* int_fast8_t */
-#define        SCNdFAST16              "hd"            /* int_fast16_t */
+#define        SCNdFAST8               "d"             /* int_fast8_t */
+#define        SCNdFAST16              "d"             /* int_fast16_t */
 #define        SCNdFAST32              "d"             /* int_fast32_t */
 #define        SCNdFAST64              "lld"           /* int_fast64_t */
 
@@ -180,8 +180,8 @@
 #define        SCNiLEAST32             "i"             /* int_least32_t */
 #define        SCNiLEAST64             "lli"           /* int_least64_t */
 
-#define        SCNiFAST8               "hhi"           /* int_fast8_t */
-#define        SCNiFAST16              "hi"            /* int_fast16_t */
+#define        SCNiFAST8               "i"             /* int_fast8_t */
+#define        SCNiFAST16              "i"             /* int_fast16_t */
 #define        SCNiFAST32              "i"             /* int_fast32_t */
 #define        SCNiFAST64              "lli"           /* int_fast64_t */
 
@@ -199,8 +199,8 @@
 #define        SCNoLEAST32             "o"             /* uint_least32_t */
 #define        SCNoLEAST64             "llo"           /* uint_least64_t */
 
-#define        SCNoFAST8               "hho"           /* uint_fast8_t */
-#define        SCNoFAST16              "ho"            /* uint_fast16_t */
+#define        SCNoFAST8               "o"             /* uint_fast8_t */
+#define        SCNoFAST16              "o"             /* uint_fast16_t */
 #define        SCNoFAST32              "o"             /* uint_fast32_t */
 #define        SCNoFAST64              "llo"           /* uint_fast64_t */
 
@@ -217,8 +217,8 @@
 #define        SCNuLEAST32             "u"             /* uint_least32_t */
 #define        SCNuLEAST64             "llu"           /* uint_least64_t */
 
-#define        SCNuFAST8               "hhu"           /* uint_fast8_t */
-#define        SCNuFAST16              "hu"            /* uint_fast16_t */
+#define        SCNuFAST8               "u"             /* uint_fast8_t */
+#define        SCNuFAST16              "u"             /* uint_fast16_t */
 #define        SCNuFAST32              "u"             /* uint_fast32_t */
 #define        SCNuFAST64              "llu"           /* uint_fast64_t */
 
@@ -235,8 +235,8 @@
 #define        SCNxLEAST32             "x"             /* uint_least32_t */
 #define        SCNxLEAST64             "llx"           /* uint_least64_t */
 
-#define        SCNxFAST8               "hhx"           /* uint_fast8_t */
-#define        SCNxFAST16              "hx"            /* uint_fast16_t */
+#define        SCNxFAST8               "x"             /* uint_fast8_t */
+#define        SCNxFAST16              "x"             /* uint_fast16_t */
 #define        SCNxFAST32              "x"             /* uint_fast32_t */
 #define        SCNxFAST64              "llx"           /* uint_fast64_t */
 

Reply via email to