Description of problem: While trying to compile libguestfs 1.34.3 and using gperf 3.1 I am getting this error: './'`guestfs_protocol.c errnostring-gperf.gperf:505:1: error: conflicting types for 'guestfs_int_string_to_errno_lookup' ENFILE, ENFILE ^~ In file included from errnostring-gperf.gperf:37:0: errnostring.h:47:40: note: previous declaration of 'guestfs_int_string_to_errno_lookup' was here extern const struct errnostring_entry *guestfs_int_string_to_errno_lookup (register const char *str, register unsigned int len); ^~ make[3]: *** [Makefile:2339: liberrnostring_la-errnostring-gperf.lo] Error 1 make[3]: *** Waiting for unfinished jobs.... Version-Release number of selected component (if applicable): 1.34.3 How reproducible: Steps to Reproduce: 1. 2. 3. Actual results: Expected results: Additional info: Also the generated function signature looks like this: const struct errnostring_entry * guestfs_int_string_to_errno_lookup (register const char *str, register size_t len) { static const struct errnostring_entry wordlist[] =
I had to update Fedora's gperf version: https://koji.fedoraproject.org/koji/taskinfo?taskID=17427423 and yes I can reproduce this: CC liberrnostring_la-errnostring.lo errnostring-gperf.gperf:505:1: error: conflicting types for 'guestfs_int_string_to_errno_lookup' ENFILE, ENFILE ^~~~~~~~~~~~~~ In file included from errnostring-gperf.gperf:37:0: errnostring.h:47:40: note: previous declaration of 'guestfs_int_string_to_errno_lookup' was here extern const struct errnostring_entry *guestfs_int_string_to_errno_lookup (register const char *str, register unsigned int len); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Makefile:1684: recipe for target 'liberrnostring_la-errnostring-gperf.lo' failed
The change is caused by: * 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.
Fixed in: https://github.com/libguestfs/libguestfs/commit/3a2b89a09ea12db7c55b07cb9e95cdf09b5b845b Will be available in libguestfs 1.34.4 & 1.35.20.
I made the fix somewhat simpler: https://github.com/libguestfs/libguestfs/commit/004de6cf45cfe66ca166cbdcb1c3125a2a81eb31