diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-11-26 08:16:33 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-11-26 08:16:33 +0000 |
commit | 28f367c4e3da4bd7515d11390514dbf2b751eda9 (patch) | |
tree | 9b7d054c4707f0528f80eaf7d46e26c84e9f0b67 /posix/confstr.c | |
parent | 90692538658ce0c42abacb0c053c7e88bc5d649d (diff) | |
download | glibc-28f367c4e3da4bd7515d11390514dbf2b751eda9.tar.gz glibc-28f367c4e3da4bd7515d11390514dbf2b751eda9.tar.xz glibc-28f367c4e3da4bd7515d11390514dbf2b751eda9.zip |
Update.
* posix/Makefile (install-others): Add $(inst_libexecdir)/getconf. (CFLAGS-sysconf.c): Add -D_GETCONF_DIR. (CFLAGS-getconf.c): New. ($(inst_libexecdir)/getconf): New. * posix/confstr.c (confstr): Use __sysconf to query specifications that don't have _POSIX_V6_* macros defined. Use __*_{C,LD}FLAGS macros defined in bits/environments.h. * sysdeps/posix/sysconf.c: Include stdlib.h, string.h and sys/stat.h. (__sysconf_check_spec): New routine. (__sysconf): Use it. * posix/getconf.c (specs): Change into structure array. (main): If -v is not given, try to get default from $(libexecdir)/getconf/default. If specification is not supported by this getconf, try to execute $(libexecdir)/getconf/$(specification). * sysdeps/unix/bsd/bsd4.4/freebsd/bits/environments.h: New file. * sysdeps/unix/sysv/linux/s390/bits/environments.h: New file. * sysdeps/unix/sysv/linux/powerpc/bits/environments.h: New file. * sysdeps/unix/sysv/linux/sparc/bits/environments.h: New file. * sysdeps/unix/sysv/linux/i386/bits/environments.h: New file. * sysdeps/unix/sysv/linux/x86_64/bits/environments.h: New file. * sysdeps/generic/bits/environments.h (__ILP32_OFFBIG_CFLAGS): Define. 2004-11-26 Jakub Jelinek <jakub@redhat.com>
Diffstat (limited to 'posix/confstr.c')
-rw-r--r-- | posix/confstr.c | 185 |
1 files changed, 138 insertions, 47 deletions
diff --git a/posix/confstr.c b/posix/confstr.c index ace60fd273..6b0dcf0c20 100644 --- a/posix/confstr.c +++ b/posix/confstr.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,96,97,2000-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1996, 1997, 2000-2002, 2003, 2004 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -54,50 +55,153 @@ confstr (name, buf, len) Currently this means all environment which the system allows. */ { - static const char restenvs[] = -#if _POSIX_V6_ILP32_OFF32 > 0 - "_POSIX_V6_ILP32_OFF32" + char restenvs[4 * sizeof "_POSIX_V6_LPBIG_OFFBIG"]; + + string_len = 0; +#ifndef _POSIX_V6_ILP32_OFF32 + if (__sysconf (_SC_V6_ILP32_OFF32) > 0) #endif -#if _POSIX_V6_ILP32_OFFBIG > 0 -# if _POSIX_V6_ILP32_OFF32 > 0 - "\n" -# endif - "_POSIX_V6_ILP32_OFFBIG" +#if !defined _POSIX_V6_ILP32_OFF32 || _POSIX_V6_ILP32_OFF32 > 0 + { + memcpy (restenvs + string_len, "_POSIX_V6_ILP32_OFF32", + sizeof "_POSIX_V6_ILP32_OFF32" - 1); + string_len += sizeof "_POSIX_V6_ILP32_OFF32" - 1; + } #endif -#if _POSIX_V6_LP64_OFF64 > 0 -# if _POSIX_V6_ILP32_OFF32 > 0 || _POSIX_V6_ILP32_OFFBIG > 0 - "\n" -# endif - "_POSIX_V6_LP64_OFF64" +#ifndef _POSIX_V6_ILP32_OFFBIG + if (__sysconf (_SC_V6_ILP32_OFFBIG) > 0) #endif -#if _POSIX_V6_LPBIG_OFFBIG > 0 -# if _POSIX_V6_ILP32_OFF32 > 0 || _POSIX_V6_ILP32_OFFBIG > 0 \ - || _POSIX_V6_LP64_OFF64 > 0 - "\n" -# endif - "_POSIX_V6_LPBIG_OFFBIG" +#if !defined _POSIX_V6_ILP32_OFFBIG || _POSIX_V6_ILP32_OFFBIG > 0 + { + if (string_len) + restenvs[string_len++] = '\n'; + memcpy (restenvs + string_len, "_POSIX_V6_ILP32_OFFBIG", + sizeof "_POSIX_V6_ILP32_OFFBIG" - 1); + string_len += sizeof "_POSIX_V6_ILP32_OFFBIG" - 1; + } +#endif +#ifndef _POSIX_V6_LP64_OFF64 + if (__sysconf (_SC_V6_LP64_OFF64) > 0) +#endif +#if !defined _POSIX_V6_LP64_OFF64 || _POSIX_V6_LP64_OFF64 > 0 + { + if (string_len) + restenvs[string_len++] = '\n'; + memcpy (restenvs + string_len, "_POSIX_V6_LP64_OFF64", + sizeof "_POSIX_V6_LP64_OFF64" - 1); + string_len += sizeof "_POSIX_V6_LP64_OFF64" - 1; + } +#endif +#ifndef _POSIX_V6_LPBIG_OFFBIG + if (__sysconf (_SC_V6_LPBIG_OFFBIG) > 0) +#endif +#if !defined _POSIX_V6_LPBIG_OFFBIG || _POSIX_V6_LPBIG_OFFBIG > 0 + { + if (string_len) + restenvs[string_len++] = '\n'; + memcpy (restenvs + string_len, "_POSIX_V6_LPBIG_OFFBIG", + sizeof "_POSIX_V6_LPBIG_OFFBIG" - 1); + string_len += sizeof "_POSIX_V6_LPBIG_OFFBIG" - 1; + } #endif - ; + restenvs[string_len++] = '\0'; string = restenvs; - string_len = sizeof (restenvs); } break; + case _CS_XBS5_ILP32_OFF32_CFLAGS: + case _CS_POSIX_V6_ILP32_OFF32_CFLAGS: +#ifdef __ILP32_OFF32_CFLAGS +# if _POSIX_V6_ILP32_OFF32 == -1 +# error __ILP32_OFF32_CFLAGS shouldn't be defined +# elif !defined _POSIX_V6_ILP32_OFF32 + if (__sysconf (_SC_V6_ILP32_OFF32) < 0) + break; +# endif + string = __ILP32_OFF32_CFLAGS; + string_len = sizeof (__ILP32_OFF32_CFLAGS); +#endif + break; + case _CS_XBS5_ILP32_OFFBIG_CFLAGS: case _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS: +#ifdef __ILP32_OFFBIG_CFLAGS +# if _POSIX_V6_ILP32_OFFBIG == -1 +# error __ILP32_OFFBIG_CFLAGS shouldn't be defined +# elif !defined _POSIX_V6_ILP32_OFFBIG + if (__sysconf (_SC_V6_ILP32_OFFBIG) < 0) + break; +# endif + string = __ILP32_OFFBIG_CFLAGS; + string_len = sizeof (__ILP32_OFFBIG_CFLAGS); +#endif + break; + + case _CS_XBS5_LP64_OFF64_CFLAGS: + case _CS_POSIX_V6_LP64_OFF64_CFLAGS: +#ifdef __LP64_OFF64_CFLAGS +# if _POSIX_V6_LP64_OFF64 == -1 +# error __LP64_OFF64_CFLAGS shouldn't be defined +# elif !defined _POSIX_V6_LP64_OFF64 + if (__sysconf (_SC_V6_LP64_OFF64) < 0) + break; +# endif + string = __LP64_OFF64_CFLAGS; + string_len = sizeof (__LP64_OFF64_CFLAGS); +#endif + break; + + case _CS_XBS5_ILP32_OFF32_LDFLAGS: + case _CS_POSIX_V6_ILP32_OFF32_LDFLAGS: +#ifdef __ILP32_OFF32_LDFLAGS +# if _POSIX_V6_ILP32_OFF32 == -1 +# error __ILP32_OFF32_LDFLAGS shouldn't be defined +# elif !defined _POSIX_V6_ILP32_OFF32 + if (__sysconf (_SC_V6_ILP32_OFF32) < 0) + break; +# endif + string = __ILP32_OFF32_LDFLAGS; + string_len = sizeof (__ILP32_OFF32_LDFLAGS); +#endif + break; + + case _CS_XBS5_ILP32_OFFBIG_LDFLAGS: + case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS: +#ifdef __ILP32_OFFBIG_LDFLAGS +# if _POSIX_V6_ILP32_OFFBIG == -1 +# error __ILP32_OFFBIG_LDFLAGS shouldn't be defined +# elif !defined _POSIX_V6_ILP32_OFFBIG + if (__sysconf (_SC_V6_ILP32_OFFBIG) < 0) + break; +# endif + string = __ILP32_OFFBIG_LDFLAGS; + string_len = sizeof (__ILP32_OFFBIG_LDFLAGS); +#endif + break; + + case _CS_XBS5_LP64_OFF64_LDFLAGS: + case _CS_POSIX_V6_LP64_OFF64_LDFLAGS: +#ifdef __LP64_OFF64_LDFLAGS +# if _POSIX_V6_LP64_OFF64 == -1 +# error __LP64_OFF64_LDFLAGS shouldn't be defined +# elif !defined _POSIX_V6_LP64_OFF64 + if (__sysconf (_SC_V6_LP64_OFF64) < 0) + break; +# endif + string = __LP64_OFF64_LDFLAGS; + string_len = sizeof (__LP64_OFF64_LDFLAGS); +#endif + break; + case _CS_LFS_CFLAGS: case _CS_LFS_LINTFLAGS: -#if _XBS5_LP64_OFF64 == -1 && _XBS5_LPBIG_OFFBIG == -1 && _XBS5_ILP32_OFFBIG == 1 +#if _POSIX_V6_ILP32_OFF32 == 1 && _POSIX_V6_ILP32_OFFBIG == 1 +# define __LFS_CFLAGS "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" /* Signal that we want the new ABI. */ - { - static const char file_offset[] - = "-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"; - string = file_offset; - string_len = sizeof (file_offset); - } - break; + string = __LFS_CFLAGS; + string_len = sizeof (__LFS_CFLAGS); #endif - /* FALLTHROUGH */ + break; case _CS_LFS_LDFLAGS: case _CS_LFS_LIBS: @@ -106,12 +210,9 @@ confstr (name, buf, len) case _CS_LFS64_CFLAGS: case _CS_LFS64_LINTFLAGS: - if (sizeof (off_t) != sizeof (off64_t)) - { - static const char lf64_source[] = "-D_LARGEFILE64_SOURCE"; - string = lf64_source; - string_len = sizeof (lf64_source); - } +#define __LFS64_CFLAGS "-D_LARGEFILE64_SOURCE" + string = __LFS64_CFLAGS; + string_len = sizeof (__LFS64_CFLAGS); break; case _CS_LFS64_LDFLAGS: @@ -119,15 +220,10 @@ confstr (name, buf, len) /* No special libraries or linker flags needed. */ break; - case _CS_XBS5_ILP32_OFF32_CFLAGS: - case _CS_XBS5_ILP32_OFF32_LDFLAGS: case _CS_XBS5_ILP32_OFF32_LIBS: case _CS_XBS5_ILP32_OFF32_LINTFLAGS: - case _CS_XBS5_ILP32_OFFBIG_LDFLAGS: case _CS_XBS5_ILP32_OFFBIG_LIBS: case _CS_XBS5_ILP32_OFFBIG_LINTFLAGS: - case _CS_XBS5_LP64_OFF64_CFLAGS: - case _CS_XBS5_LP64_OFF64_LDFLAGS: case _CS_XBS5_LP64_OFF64_LIBS: case _CS_XBS5_LP64_OFF64_LINTFLAGS: case _CS_XBS5_LPBIG_OFFBIG_CFLAGS: @@ -135,15 +231,10 @@ confstr (name, buf, len) case _CS_XBS5_LPBIG_OFFBIG_LIBS: case _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS: - case _CS_POSIX_V6_ILP32_OFF32_CFLAGS: - case _CS_POSIX_V6_ILP32_OFF32_LDFLAGS: case _CS_POSIX_V6_ILP32_OFF32_LIBS: case _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS: - case _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS: case _CS_POSIX_V6_ILP32_OFFBIG_LIBS: case _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS: - case _CS_POSIX_V6_LP64_OFF64_CFLAGS: - case _CS_POSIX_V6_LP64_OFF64_LDFLAGS: case _CS_POSIX_V6_LP64_OFF64_LIBS: case _CS_POSIX_V6_LP64_OFF64_LINTFLAGS: case _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS: |