We were blindly defining ssize_t to int. On mingw64, this is the correct size, but the wrong rank, which leads gcc to issue warnings for %zd printf directives.
* m4/ssize_t.m4 (gt_TYPE_SSIZE_T): Match rank of size_t. Signed-off-by: Eric Blake <ebl...@redhat.com> --- Bruno, is this okay to apply? ChangeLog | 5 +++++ m4/ssize_t.m4 | 20 +++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d74544a..768ab46 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-03-29 Eric Blake <ebl...@redhat.com> + + ssize_t: fix definition on mingw + * m4/ssize_t.m4 (gt_TYPE_SSIZE_T): Match rank of size_t. + 2012-03-25 Bruno Haible <br...@clisp.org> Tests for module 'localeconv'. diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4 index 209d64c..5ea72a1 100644 --- a/m4/ssize_t.m4 +++ b/m4/ssize_t.m4 @@ -1,4 +1,4 @@ -# ssize_t.m4 serial 5 (gettext-0.18.2) +# ssize_t.m4 serial 6 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2012 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,21 @@ AC_DEFUN([gt_TYPE_SSIZE_T], return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then - AC_DEFINE([ssize_t], [int], - [Define as a signed type of the same size as size_t.]) + AC_CACHE_CHECK([for rank of size_t], [gt_cv_size_t_rank], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + #ifdef __cplusplus + extern "C" { + #endif + int foo(unsigned long bar); + int foo(size_t bar); + #ifdef __cplusplus + } + #endif + ]])], + [gt_cv_size_t_rank=long], [gt_cv_size_t_rank=int])]) + AC_DEFINE_UNQUOTED([ssize_t], [$gt_cv_size_t_rank], + [Define as a signed type of the same size and rank as size_t.]) fi ]) -- 1.7.7.6