diff --git a/acinclude.m4 b/acinclude.m4 index b76f8d6f73..65380560df 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1419,6 +1419,10 @@ else AC_MSG_RESULT(no) fi +AC_CHECK_SIZEOF(void *) +AC_CHECK_SIZEOF(unsigned long long) +AC_CHECK_SIZEOF(unsigned long) +AC_CHECK_SIZEOF(unsigned int) AC_CHECK_TYPE(ssize_t, int) AC_SIZEOF_TYPE(long) diff --git a/src/afs/afs_call.c b/src/afs/afs_call.c index 3b2b4a0315..5e0058cab1 100644 --- a/src/afs/afs_call.c +++ b/src/afs/afs_call.c @@ -1396,13 +1396,22 @@ struct iparam32 { #if defined(AFS_HPUX_64BIT_ENV) || defined(AFS_SUN57_64BIT_ENV) || (defined(AFS_LINUX_64BIT_KERNEL) && !defined(AFS_ALPHA_LINUX20_ENV) && !defined(AFS_IA64_LINUX20_ENV)) || defined(NEED_IOCTL32) +#if SIZEOF_VOID_P == SIZEOF_UNSIGNED_INT +# define uintptrsz unsigned int +#elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG +# define uintptrsz unsigned long +#elif SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG_LONG +# define uintptrsz unsigned long long +#else +# error "Unable to determine casting for pointers" +#endif static void iparam32_to_iparam(const struct iparam32 *src, struct iparam *dst) { - dst->param1 = (iparmtype)(uintptr_t)src->param1; - dst->param2 = (iparmtype)(uintptr_t)src->param2; - dst->param3 = (iparmtype)(uintptr_t)src->param3; - dst->param4 = (iparmtype)(uintptr_t)src->param4; + dst->param1 = (iparmtype)(uintptrsz)src->param1; + dst->param2 = (iparmtype)(uintptrsz)src->param2; + dst->param3 = (iparmtype)(uintptrsz)src->param3; + dst->param4 = (iparmtype)(uintptrsz)src->param4; } #endif