From 9878b306f6c673d3d6cd9db487f67eb426cc03df Mon Sep 17 00:00:00 2001 From: Akira TAGOH Date: Thu, 23 Feb 2017 21:39:10 +0900 Subject: [PATCH] Fix the build issue with gperf 3.1 To support the one of changes in gperf 3.1: * The 'len' parameter of the hash function and of the lookup function is now of type 'size_t' instead of 'unsigned int'. This makes it safe to call these functions with strings of length > 4 GB, on 64-bit machines. --- configure.ac | 20 ++++++++++++++++++++ src/fcobjs.c | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 4948816..8fbf3d3 100644 --- a/configure.ac +++ b/configure.ac @@ -193,6 +193,26 @@ fi AC_CHECK_MEMBERS([struct dirent.d_type],,, [#include ]) +# Check the argument type of the gperf hash/lookup function +AC_MSG_CHECKING([The type of len parameter of gperf hash/lookup function]) +fc_gperf_test="$(echo 'foo' | gperf -L ANSI-C)" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + + const char *in_word_set(register const char *, register size_t); + $fc_gperf_test + ]])], [FC_GPERF_SIZE_T=size_t], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + + const char *in_word_set(register const char *, register unsigned int); + $fc_gperf_test + ]])], [FC_GPERF_SIZE_T="unsigned int"], + [AC_MSG_ERROR([Unable to determine the type of the len parameter of the gperf hash/lookup function])] +)]) +AC_DEFINE_UNQUOTED(FC_GPERF_SIZE_T, $FC_GPERF_SIZE_T, [The type of len parameter of the gperf hash/lookup function]) +AC_MSG_RESULT($FC_GPERF_SIZE_T) + # # Checks for iconv # diff --git a/src/fcobjs.c b/src/fcobjs.c index 16ff31c..33bba8d 100644 --- a/src/fcobjs.c +++ b/src/fcobjs.c @@ -25,10 +25,10 @@ #include "fcint.h" static unsigned int -FcObjectTypeHash (register const char *str, register unsigned int len); +FcObjectTypeHash (register const char *str, register FC_GPERF_SIZE_T len); static const struct FcObjectTypeInfo * -FcObjectTypeLookup (register const char *str, register unsigned int len); +FcObjectTypeLookup (register const char *str, register FC_GPERF_SIZE_T len); #include "fcobjshash.h"