bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

inttypes: Fix PRI*PTR and SCN*PTR on 64-bit native Windows


From: Bruno Haible
Subject: inttypes: Fix PRI*PTR and SCN*PTR on 64-bit native Windows
Date: Tue, 21 Jul 2020 09:56:13 +0200
User-agent: KMail/5.1.3 (Linux/4.4.0-179-generic; KDE/5.18.0; x86_64; ; )

On 64-bit native Windows, PRIPTR_PREFIX comes out as "l", which produces
wrong output of intptr_t values through *printf. It should be "ll" instead.


2020-07-21  Bruno Haible  <bruno@clisp.org>

        inttypes: Fix PRI*PTR and SCN*PTR on 64-bit native Windows.
        * m4/inttypes.m4 (gl_INTTYPES_PRI_SCN): On 64-bit native Windows, make
        sure PRIPTR_PREFIX is defined to "ll", not "l".

diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
index 224d0cd..f9f5f86 100644
--- a/m4/inttypes.m4
+++ b/m4/inttypes.m4
@@ -1,4 +1,4 @@
-# inttypes.m4 serial 29
+# inttypes.m4 serial 30
 dnl Copyright (C) 2006-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -39,8 +39,17 @@ AC_DEFUN([gl_INTTYPES_PRI_SCN],
 
   PRIPTR_PREFIX=
   if test -n "$STDINT_H"; then
-    dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
-    PRIPTR_PREFIX='"l"'
+    dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or
+    dnl 'long long', depending on _WIN64.
+    AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM([[
+         #ifdef _WIN64
+         LLP64
+         #endif
+         ]]),
+      ],
+      [PRIPTR_PREFIX='"l"'],
+      [PRIPTR_PREFIX='"ll"'])
   else
     dnl Using the system's <stdint.h>.
     for glpfx in '' l ll I64; do




reply via email to

[Prev in Thread] Current Thread [Next in Thread]