Locale files from IBM.
[glibc.git] / posix / confstr.c
blob6ab76e8bed9bb6e14c26c73017f18c5a8e2dd2bb
1 /* Copyright (C) 1991, 1996, 1997, 2000 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
19 #include <stddef.h>
20 #include <errno.h>
21 #include <unistd.h>
22 #include <string.h>
23 #include <confstr.h>
25 /* If BUF is not NULL and LEN > 0, fill in at most LEN - 1 bytes
26 of BUF with the value corresponding to NAME and zero-terminate BUF.
27 Return the number of bytes required to hold NAME's entire value. */
28 size_t
29 confstr (name, buf, len)
30 int name;
31 char *buf;
32 size_t len;
34 const char *string;
35 size_t string_len;
37 switch (name)
39 case _CS_PATH:
41 static const char cs_path[] = CS_PATH;
42 string = cs_path;
43 string_len = sizeof (cs_path);
45 break;
47 case _CS_XBS5_ILP32_OFFBIG_CFLAGS:
48 case _CS_LFS_CFLAGS:
49 #if defined _XBS5_ILP32_OFF32 && !defined _XBS5_ILP32_OFFBIG
50 /* Signal that we want the new ABI. */
52 static const char file_offset[] = "-D_FILE_OFFSET_BITS=64";
53 string = file_offset;
54 string_len = sizeof (file_offset);
56 break;
57 #endif
59 case _CS_LFS_LINTFLAGS:
60 case _CS_LFS_LDFLAGS:
61 case _CS_LFS_LIBS:
62 case _CS_LFS64_CFLAGS:
63 case _CS_LFS64_LINTFLAGS:
64 case _CS_LFS64_LDFLAGS:
65 case _CS_LFS64_LIBS:
67 case _CS_XBS5_ILP32_OFF32_CFLAGS:
68 case _CS_XBS5_ILP32_OFF32_LDFLAGS:
69 case _CS_XBS5_ILP32_OFF32_LIBS:
70 case _CS_XBS5_ILP32_OFF32_LINTFLAGS:
71 case _CS_XBS5_ILP32_OFFBIG_LDFLAGS:
72 case _CS_XBS5_ILP32_OFFBIG_LIBS:
73 case _CS_XBS5_ILP32_OFFBIG_LINTFLAGS:
74 case _CS_XBS5_LP64_OFF64_CFLAGS:
75 case _CS_XBS5_LP64_OFF64_LDFLAGS:
76 case _CS_XBS5_LP64_OFF64_LIBS:
77 case _CS_XBS5_LP64_OFF64_LINTFLAGS:
78 case _CS_XBS5_LPBIG_OFFBIG_CFLAGS:
79 case _CS_XBS5_LPBIG_OFFBIG_LDFLAGS:
80 case _CS_XBS5_LPBIG_OFFBIG_LIBS:
81 case _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS:
82 /* GNU libc does not require special actions to use LFS functions. */
83 string = "";
84 string_len = 1;
85 break;
87 default:
88 __set_errno (EINVAL);
89 return 0;
92 if (len > 0 && buf != NULL)
94 if (string_len <= len)
95 memcpy (buf, string, string_len);
96 else
98 memcpy (buf, string, len - 1);
99 buf[len - 1] = '\0';
102 return string_len;