On Fri, 7 Dec 2012, Andrew Borodin wrote:
> On Fri, 7 Dec 2012 02:10:39 +0100 (CET) Mikulas Patocka wrote: > > Fix build on HP-UX 11.11 > > > > HP-UX 11.11 doesn't have strtoll, but it has strtoimax. strtoimax is > > defined as a preprocessor macro, not as a function. > > > > This patch fixes build: it adds checks for two function strtoll and > > strtoimax and uses them if detected. > > Thanks for the patch! mc is being developed under Linux only, so patches to > improve mc portability are welcome! Hi Unfortunatelly, I found out that my previous patch was wrong - it compiles on HP-UX, but it doesn't use the 64-bit strtoimax instruction. There were these problems: * strtoimax is defined in inttypes.h, not stdlib.h, so we must include inttypes.h * strtoimax is a macro that expands to __strtoll function. __strtoll only exists in 32-bit libc. When building in 64-bit mode, strtoimax still expands to __strtoll, but __strtoll doesn't exist (I think this is a bug in HP-UX). So we must test for __strtoll in configure and use strtoimax macro only if __strtoll is present in the libc. On 64-bit build we can use strtol instead of strtoll, because strtol is already 64-bit. * on HP-UX inttypes.h includes ctype.h through other dependencies, ctype.h defines macros for various functions and these macros clash with entries of "struct str_class" - so we must undefine the macros before defining str_class. So please, apply this on the top of my previous patch. Mikulas Index: mc-4.8.6/configure.ac =================================================================== --- mc-4.8.6.orig/configure.ac +++ mc-4.8.6/configure.ac @@ -192,6 +192,7 @@ dnl #################################### AC_CHECK_FUNCS([\ strtoll \ strtoimax \ + __strtoll \ atoll \ isascii \ statfs sysconf \ Index: mc-4.8.6/lib/global.h =================================================================== --- mc-4.8.6.orig/lib/global.h +++ mc-4.8.6/lib/global.h @@ -56,9 +56,11 @@ #endif /* HP-UX 11.11 doesn't have strtoll. But it has strtoimax defined as a macro */ -#include <stdlib.h> +#ifdef HAVE_INTTYPES_H +#include <inttypes.h> +#endif #ifndef HAVE_STRTOLL -#if defined(HAVE_STRTOIMAX) || defined(strtoimax) +#if defined(HAVE_STRTOIMAX) || (defined(strtoimax) && defined(HAVE___STRTOLL)) #define strtoll strtoimax #else #define strtoll strtol Index: mc-4.8.6/lib/strutil.h =================================================================== --- mc-4.8.6.orig/lib/strutil.h +++ mc-4.8.6/lib/strutil.h @@ -88,6 +88,28 @@ typedef enum /*** structures declarations (and typedefs of structures)*****************************************/ +#ifdef isspace +#undef isspace +#endif +#ifdef ispunct +#undef ispunct +#endif +#ifdef isalnum +#undef isalnum +#endif +#ifdef isdigit +#undef isdigit +#endif +#ifdef isprint +#undef isprint +#endif +#ifdef toupper +#undef toupper +#endif +#ifdef tolower +#undef tolower +#endif + /* all functions in str_class must be defined for every encoding */ struct str_class { _______________________________________________ mc-devel mailing list https://mail.gnome.org/mailman/listinfo/mc-devel