--- /dev/null
+AC_DEFUN([OPENAFS_PRINTF_TAKES_Z_LEN],
+[
+AC_CACHE_CHECK([whether printf understands the %z length modifier],
+[openafs_cv_printf_takes_z], [
+ AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+
+int main(void) {
+ char buf[8];
+ memset(buf, 0, sizeof(buf));
+ snprintf(buf, 8, "%zu", sizeof(char));
+ if (buf[0] == '1' && buf[1] == '\0') {
+ return 0;
+ } else {
+ return 1;
+ }
+}],
+ [openafs_cv_printf_takes_z="yes"],
+ [openafs_cv_printf_takes_z="no"],
+ [openafs_cv_printf_takes_z="no"])
+])
+
+if test "x$openafs_cv_printf_takes_z" = "xyes"; then
+ AC_DEFINE([PRINTF_TAKES_Z_LEN], 1, [define if printf and friends understand the %z length modifier])
+fi
+])
* windows use a different format string
*/
#ifdef AFS_NT40_ENV
-#define AFS_INT64_FMT "I64d"
-#define AFS_UINT64_FMT "I64u"
-#define AFS_PTR_FMT "Ip"
-#define AFS_SIZET_FMT "Iu"
+# define AFS_INT64_FMT "I64d"
+# define AFS_UINT64_FMT "I64u"
+# define AFS_PTR_FMT "Ip"
+# define AFS_SIZET_FMT "Iu"
#else
-#define AFS_INT64_FMT "lld"
-#define AFS_UINT64_FMT "llu"
-#define AFS_PTR_FMT "p"
-#ifdef AFS_64BITPOINTER_ENV
-#define AFS_SIZET_FMT "lu"
-#else
-#define AFS_SIZET_FMT "u"
-#endif /* AFS_64BITPOINTER_ENV */
+# define AFS_INT64_FMT "lld"
+# define AFS_UINT64_FMT "llu"
+# define AFS_PTR_FMT "p"
+# ifdef PRINTF_TAKES_Z_LEN
+# define AFS_SIZET_FMT "zu"
+# else
+# define AFS_SIZET_FMT "lu"
+# endif /* PRINTF_TAKES_Z_LEN */
#endif /* AFS_NT40_ENV */
/* Functions to safely cast afs_int32 and afs_uint32 so they can be used in