Date: Wed, 11 Sep 2002 14:07:57 -0400 (EDT) From: Mike Heffner <mheffner@vt.edu> To: Mike Barcroft <mike@FreeBSD.org> Cc: standards@FreeBSD.org, Garrett Wollman <wollman@FreeBSD.org> Subject: Re: glob(3) in -STABLE: PR bin/42275 Message-ID: <XFMail.20020911140757.mheffner@vt.edu> In-Reply-To: <20020906202133.E47192@espresso.q9media.com>
next in thread | previous in thread | raw e-mail | index | archive | help
This message is in MIME format --_=XFMail.1.5.3.FreeBSD:20020911140757:307=_ Content-Type: text/plain; charset=us-ascii On 07-Sep-2002 Mike Barcroft wrote: | Mike Heffner <mheffner@vt.edu> writes: |> I would like to go with this option, as I'm sure the problem will come |> up |> again with different programs. However, the lack of the POSIX |> preprocessor |> conditionals in STABLE was currently preventing me. I would like to |> know |> the opinion of those more involved with POSIX conformance. Will the |> preprocessor conditionals be MFC'd anytime soon? Or should I MFC the |> changes but strip out the conditionals from glob.h? | | All the C99 and POSIX changes to <sys/cdefs.h> as safe to MFC. Please | feel free to MFC them. | Ok, I've put together the following patch for MFC, can someone confirm whether this is complete and doesn't contain anything that shouldn't be in there? Revisions MFC'd: 1.44-1.47, 1.50, 1.58-1.59 Thanks, Mike P.S. I'm currently putting it through a buildworld to test. -- Mike Heffner <mheffner@[acm.]vt.edu> <mikeh@FreeBSD.org> --_=XFMail.1.5.3.FreeBSD:20020911140757:307=_ Content-Disposition: attachment; filename="cdefs.diff" Content-Transfer-Encoding: 7bit Content-Description: cdefs.diff Content-Type: text/plain; charset=us-ascii; name=cdefs.diff; SizeOnDisk=5486 Index: cdefs.h =================================================================== RCS file: /home/ncvs/src/sys/sys/cdefs.h,v retrieving revision 1.28.2.7 diff -u -r1.28.2.7 cdefs.h --- cdefs.h 5 Dec 2001 20:49:17 -0000 1.28.2.7 +++ cdefs.h 11 Sep 2002 18:01:49 -0000 @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)cdefs.h 8.8 (Berkeley) 1/9/95 - * $FreeBSD: src/sys/sys/cdefs.h,v 1.28.2.7 2001/12/05 20:49:17 obrien Exp $ + * $FreeBSD: src/sys/sys/cdefs.h,v 1.59 2002/07/15 16:44:07 wollman Exp $ */ #ifndef _SYS_CDEFS_H_ @@ -128,6 +128,30 @@ #define __unused __attribute__((__unused__)) #endif +/* XXX: should use `#if __STDC_VERSION__ < 199901'. */ +#if !(__GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ >= 3) +#define __func__ NULL +#endif + +/* XXX: should use `#if __STDC_VERSION__ >= 199901'. */ +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +#define __LONG_LONG_SUPPORTED +#endif + +/* + * GCC 2.95 provides `__restrict' as an extention to C90 to support the + * C99-specific `restrict' type qualifier. We happen to use `__restrict' as a + * way to define the `restrict' type qualifier without disturbing older softwar e + * that is unaware of C99 keywords. + */ +#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95) +#if __STDC_VERSION__ < 199901 +#define __restrict +#else +#define __restrict restrict +#endif +#endif + /* * Compiler-dependent macros to declare that functions take printf-like * or scanf-like arguments. They are null except for versions of gcc @@ -206,7 +230,7 @@ * Embed the rcs id of a source file in the resulting library. Note that in * more recent ELF binutils, we use .ident allowing the ID to be stripped. * Usage: - * __FBSDID("$FreeBSD: src/sys/sys/cdefs.h,v 1.28.2.7 2001/12/05 20:49:17 obrie n Exp $"); + * __FBSDID("$FreeBSD: src/sys/sys/cdefs.h,v 1.59 2002/07/15 16:44:07 wollman E xp $"); */ #ifndef __FBSDID #if !defined(lint) && !defined(STRIP_FBSDID) @@ -222,6 +246,106 @@ #ifndef __COPYRIGHT #define __COPYRIGHT(s) __IDSTRING(copyright,s) +#endif + +/*- + * The following definitions are an extension of the behavior originally + * implemented in <sys/_posix.h>, but with a different level of granularity. + * POSIX.1 requires that the macros we test be defined before any standard + * header file is included. + * + * Here's a quick run-down of the versions: + * defined(_POSIX_SOURCE) 1003.1-1988 + * _POSIX_C_SOURCE == 1 1003.1-1990 + * _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option + * _POSIX_C_SOURCE == 199309 1003.1b-1993 + * _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995, + * and the omnibus ISO/IEC 9945-1: 1996 + * _POSIX_C_SOURCE == 200112 1003.1-2001 + * + * In addition, the X/Open Portability Guide, which is now the Single UNIX + * Specification, defines a feature-test macro which indicates the version of + * that specification, and which subsumes _POSIX_C_SOURCE. + * + * Our macros begin with two underscores to avoid namespace screwage. + */ + +/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */ +#if _POSIX_C_SOURCE == 1 +#undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */ +#define _POSIX_C_SOURCE 199009 +#endif + +/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */ +#if _POSIX_C_SOURCE == 2 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 199209 +#endif + +/* Deal with various X/Open Portability Guides and Single UNIX Spec. */ +#ifdef _XOPEN_SOURCE +#if _XOPEN_SOURCE >= 600 +#define __XSI_VISIBLE 600 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200112 +#elif _XOPEN_SOURCE >= 500 +#define __XSI_VISIBLE 500 +#undef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 199506 +#endif +#endif + +/* + * Deal with all versions of POSIX. The ordering relative to the tests above i s + * important. + */ +#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) +#define _POSIX_C_SOURCE 198808 +#endif +#ifdef _POSIX_C_SOURCE +#if _POSIX_C_SOURCE >= 200112 +#define __POSIX_VISIBLE 200112 +#define __ISO_C_VISIBLE 1999 +#elif _POSIX_C_SOURCE >= 199506 +#define __POSIX_VISIBLE 199506 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199309 +#define __POSIX_VISIBLE 199309 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199209 +#define __POSIX_VISIBLE 199209 +#define __ISO_C_VISIBLE 1990 +#elif _POSIX_C_SOURCE >= 199009 +#define __POSIX_VISIBLE 199009 +#define __ISO_C_VISIBLE 1990 +#else +#define __POSIX_VISIBLE 198808 +#define __ISO_C_VISIBLE 0 +#endif /* _POSIX_C_SOURCE */ +#else +/*- + * Deal with _ANSI_SOURCE: + * If it is defined, and no other compilation environment is explicitly + * requested, then define our internal feature-test macros to zero. This + * makes no difference to the preprocessor (undefined symbols in preprocessing + * expressions are defined to have value zero), but makes it more convenient fo r + * a test program to print out the values. + * + * If a program mistakenly defines _ANSI_SOURCE and some other macro such as + * _POSIX_C_SOURCE, we will assume that it wants the broader compilation + * environment (and in fact we will never get here). + */ +#ifdef _ANSI_SOURCE /* Hide almost everything. */ +#define __POSIX_VISIBLE 0 +#define __XSI_VISIBLE 0 +#define __BSD_VISIBLE 0 +#define __ISO_C_VISIBLE 1990 +#else /* Default environment: show everything. */ +#define __POSIX_VISIBLE 200112 +#define __XSI_VISIBLE 600 +#define __BSD_VISIBLE 1 +#define __ISO_C_VISIBLE 1999 +#endif #endif #endif /* !_SYS_CDEFS_H_ */ --_=XFMail.1.5.3.FreeBSD:20020911140757:307=_-- End of MIME message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-standards" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.20020911140757.mheffner>