Re: [RFC] Support for HP NonStop
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 24, 2012, 20:12 UTC
- Message-ID
- <7v4nnsyrp7.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <005501cd822d$bf844bb0$3e8ce310$@schmitz-digital.de>
"Joachim Schmitz" <jojo@schmitz-digital.de> writes:
Show 25 quoted lines
> 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 specific > > diff --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).
Show 8 quoted lines
> @@ -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>
#endifSo 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;
#endifBy the way, is "int" wide enough, or should they be "long"?