Re: [RFC] Support for HP NonStop
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:54:34
"Joachim Schmitz" [off-list ref] writes:
quoted hunk
Hi folks On top of the patches I’ve submitted so far, which were needed for HP NonStop, but possibly useful for other platforms too, here is one that is at least in parts NonStop specificdiff --git a/git-compat-util.h b/git-compat-util.h index a047221..d6a142a 100644 --- a/git-compat-util.h +++ b/git-compat-util.h@@ -74,7 +74,8 @@# define _XOPEN_SOURCE 500 # endif #elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__USLC__) && \ - !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__) + !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__) && \ + !defined(__TANDEM) #define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 fo #define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */ #endif +#ifdef __TANDEM /* or HAVE_STRINGS_H ? */ +#include <strings.h> /* for strcasecmp() */ +#endif #include <errno.h> #include <limits.h> #include <sys/param.h>
Yeah, it appears that glibc headers have strcasecmp() and friends in the <string.h> and that was why majority of us were fine without including <strings.h>. A cursory look of /usr/include/strings.h on a GNU system suggests that it is safe to include <strings.h> after we incude <string.h> on that platform. I think it is OK to leave it "__TANDEM /* or HAVE_STRINGS_H? */" for now and let the next person who wants to port us to a platform that needs this inclusion turn it to HAVE_STRINGS_H. Alternatively, we bite the bullet now and include <strings.h> on any platform that has the header file and see if anybody complains (that reminds me; I at least should get one flavor of BSD build environment for this kind of thing myself).
quoted hunk
@@ -141,6 +145,10 @@#else #include <stdint.h> #endif +#ifdef __TANDEM /* or NO_INTPTR_T resp. NO_UINTPTR_T? */ +typedef int intptr_t; +typedef unsigned int uintptr_t; +#endif
A bit wider context for this hunk is
#ifndef NO_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
So we have been assuming that <stdint.h> has intptr_t but __TANDEM
apparently doesn't. POSIX requires intptr_t and uintptr_t to be
declared for systems conforming to XSI, but otherwise these are
optional (in other words, some XSI non-conforming platforms may have
them in <stdint.h>), so it would not help to check _XOPEN_UNIX to
see if the system is XSI X-<. We would need NO_INTPTR_T as you
hinted above, perhaps like this.
#ifndef NO_INTTYPES_H
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#ifdef NO_INTPTR_T
typedef int intptr_t;
typedef unsigned int uintptr_t;
#endif
By the way, is "int" wide enough, or should they be "long"?