]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/posix/sysconf.c
Rename __secure_getenv to secure_getenv
[thirdparty/glibc.git] / sysdeps / posix / sysconf.c
1 /* Copyright (C) 1991-2012 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
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 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
17
18 #include <errno.h>
19 #include <limits.h>
20 #include <grp.h>
21 #include <pwd.h>
22 #include <stddef.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <time.h>
27 #include <unistd.h>
28 #include <sys/param.h>
29 #include <sys/stat.h>
30 #include <sys/sysinfo.h>
31 #include <sys/types.h>
32 #include <regex.h>
33
34
35 #define NEED_CHECK_SPEC \
36 (!defined _XBS5_ILP32_OFF32 || !defined _XBS5_ILP32_OFFBIG \
37 || !defined _XBS5_LP64_OFF64 || !defined _XBS5_LPBIG_OFFBIG \
38 || !defined _POSIX_V6_ILP32_OFF32 || !defined _POSIX_V6_ILP32_OFFBIG \
39 || !defined _POSIX_V6_LP64_OFF64 || !defined _POSIX_V6_LPBIG_OFFBIG \
40 || !defined _POSIX_V7_ILP32_OFF32 || !defined _POSIX_V7_ILP32_OFFBIG \
41 || !defined _POSIX_V7_LP64_OFF64 || !defined _POSIX_V7_LPBIG_OFFBIG)
42 #if NEED_CHECK_SPEC
43 static long int __sysconf_check_spec (const char *spec);
44 #endif
45
46
47 /* Get the value of the system variable NAME. */
48 long int
49 __sysconf (name)
50 int name;
51 {
52 switch (name)
53 {
54 /* Also add obsolete or unnecessarily added constants here. */
55 case _SC_EQUIV_CLASS_MAX:
56 default:
57 __set_errno (EINVAL);
58 return -1;
59
60 case _SC_ARG_MAX:
61 #ifdef ARG_MAX
62 return ARG_MAX;
63 #else
64 return -1;
65 #endif
66
67 case _SC_CHILD_MAX:
68 #ifdef CHILD_MAX
69 return CHILD_MAX;
70 #else
71 return __get_child_max ();
72 #endif
73
74 case _SC_CLK_TCK:
75 return __getclktck ();
76
77 case _SC_NGROUPS_MAX:
78 #ifdef NGROUPS_MAX
79 return NGROUPS_MAX;
80 #else
81 return -1;
82 #endif
83
84 case _SC_OPEN_MAX:
85 return __getdtablesize ();
86
87 case _SC_STREAM_MAX:
88 #ifdef STREAM_MAX
89 return STREAM_MAX;
90 #else
91 return FOPEN_MAX;
92 #endif
93
94 case _SC_TZNAME_MAX:
95 return MAX (__tzname_max (), _POSIX_TZNAME_MAX);
96
97 case _SC_JOB_CONTROL:
98 #if _POSIX_JOB_CONTROL > 0
99 return _POSIX_JOB_CONTROL;
100 #else
101 return -1;
102 #endif
103
104 case _SC_SAVED_IDS:
105 #if _POSIX_SAVED_IDS > 0
106 return 1;
107 #else
108 return -1;
109 #endif
110
111 case _SC_REALTIME_SIGNALS:
112 #if _POSIX_REALTIME_SIGNALS > 0
113 return _POSIX_REALTIME_SIGNALS;
114 #else
115 return -1;
116 #endif
117
118 case _SC_PRIORITY_SCHEDULING:
119 #if _POSIX_PRIORITY_SCHEDULING > 0
120 return _POSIX_PRIORITY_SCHEDULING;
121 #else
122 return -1;
123 #endif
124
125 case _SC_TIMERS:
126 #if _POSIX_TIMERS > 0
127 return _POSIX_TIMERS;
128 #else
129 return -1;
130 #endif
131
132 case _SC_ASYNCHRONOUS_IO:
133 #if _POSIX_ASYNCHRONOUS_IO > 0
134 return _POSIX_ASYNCHRONOUS_IO;
135 #else
136 return -1;
137 #endif
138
139 case _SC_PRIORITIZED_IO:
140 #if _POSIX_PRIORITIZED_IO > 0
141 return _POSIX_PRIORITIZED_IO;
142 #else
143 return -1;
144 #endif
145
146 case _SC_SYNCHRONIZED_IO:
147 #if _POSIX_SYNCHRONIZED_IO > 0
148 return _POSIX_SYNCHRONIZED_IO;
149 #else
150 return -1;
151 #endif
152
153 case _SC_FSYNC:
154 #if _POSIX_FSYNC > 0
155 return _POSIX_FSYNC;
156 #else
157 return -1;
158 #endif
159
160 case _SC_MAPPED_FILES:
161 #if _POSIX_MAPPED_FILES > 0
162 return _POSIX_MAPPED_FILES;
163 #else
164 return -1;
165 #endif
166
167 case _SC_MEMLOCK:
168 #if _POSIX_MEMLOCK > 0
169 return _POSIX_MEMLOCK;
170 #else
171 return -1;
172 #endif
173
174 case _SC_MEMLOCK_RANGE:
175 #if _POSIX_MEMLOCK_RANGE > 0
176 return _POSIX_MEMLOCK_RANGE;
177 #else
178 return -1;
179 #endif
180
181 case _SC_MEMORY_PROTECTION:
182 #if _POSIX_MEMORY_PROTECTION > 0
183 return _POSIX_MEMORY_PROTECTION;
184 #else
185 return -1;
186 #endif
187
188 case _SC_MESSAGE_PASSING:
189 #if _POSIX_MESSAGE_PASSING > 0
190 return _POSIX_MESSAGE_PASSING;
191 #else
192 return -1;
193 #endif
194
195 case _SC_SEMAPHORES:
196 #if _POSIX_SEMAPHORES > 0
197 return _POSIX_SEMAPHORES;
198 #else
199 return -1;
200 #endif
201
202 case _SC_SHARED_MEMORY_OBJECTS:
203 #if _POSIX_SHARED_MEMORY_OBJECTS > 0
204 return _POSIX_SHARED_MEMORY_OBJECTS;
205 #else
206 return -1;
207 #endif
208
209 case _SC_VERSION:
210 return _POSIX_VERSION;
211
212 case _SC_PAGESIZE:
213 return __getpagesize ();
214
215 case _SC_AIO_LISTIO_MAX:
216 #ifdef AIO_LISTIO_MAX
217 return AIO_LISTIO_MAX;
218 #else
219 return -1;
220 #endif
221
222 case _SC_AIO_MAX:
223 #ifdef AIO_MAX
224 return AIO_MAX;
225 #else
226 return -1;
227 #endif
228
229 case _SC_AIO_PRIO_DELTA_MAX:
230 #ifdef AIO_PRIO_DELTA_MAX
231 return AIO_PRIO_DELTA_MAX;
232 #else
233 return -1;
234 #endif
235
236 case _SC_DELAYTIMER_MAX:
237 #ifdef DELAYTIMER_MAX
238 return DELAYTIMER_MAX;
239 #else
240 return -1;
241 #endif
242
243 case _SC_MQ_OPEN_MAX:
244 #ifdef MQ_OPEN_MAX
245 return MQ_OPEN_MAX;
246 #else
247 return -1;
248 #endif
249
250 case _SC_MQ_PRIO_MAX:
251 #ifdef MQ_PRIO_MAX
252 return MQ_PRIO_MAX;
253 #else
254 return -1;
255 #endif
256
257 case _SC_RTSIG_MAX:
258 #ifdef RTSIG_MAX
259 return RTSIG_MAX;
260 #else
261 return -1;
262 #endif
263
264 case _SC_SEM_NSEMS_MAX:
265 #ifdef SEM_NSEMS_MAX
266 return SEM_NSEMS_MAX;
267 #else
268 return -1;
269 #endif
270
271 case _SC_SEM_VALUE_MAX:
272 #ifdef SEM_VALUE_MAX
273 return SEM_VALUE_MAX;
274 #else
275 return -1;
276 #endif
277
278 case _SC_SIGQUEUE_MAX:
279 #ifdef SIGQUEUE_MAX
280 return SIGQUEUE_MAX;
281 #else
282 return -1;
283 #endif
284
285 case _SC_TIMER_MAX:
286 #ifdef TIMER_MAX
287 return TIMER_MAX;
288 #else
289 return -1;
290 #endif
291
292 case _SC_BC_BASE_MAX:
293 #ifdef BC_BASE_MAX
294 return BC_BASE_MAX;
295 #else
296 return -1;
297 #endif
298
299 case _SC_BC_DIM_MAX:
300 #ifdef BC_DIM_MAX
301 return BC_DIM_MAX;
302 #else
303 return -1;
304 #endif
305
306 case _SC_BC_SCALE_MAX:
307 #ifdef BC_SCALE_MAX
308 return BC_SCALE_MAX;
309 #else
310 return -1;
311 #endif
312
313 case _SC_BC_STRING_MAX:
314 #ifdef BC_STRING_MAX
315 return BC_STRING_MAX;
316 #else
317 return -1;
318 #endif
319
320 case _SC_COLL_WEIGHTS_MAX:
321 #ifdef COLL_WEIGHTS_MAX
322 return COLL_WEIGHTS_MAX;
323 #else
324 return -1;
325 #endif
326
327 case _SC_EXPR_NEST_MAX:
328 #ifdef EXPR_NEST_MAX
329 return EXPR_NEST_MAX;
330 #else
331 return -1;
332 #endif
333
334 case _SC_LINE_MAX:
335 #ifdef LINE_MAX
336 return LINE_MAX;
337 #else
338 return -1;
339 #endif
340
341 case _SC_RE_DUP_MAX:
342 #ifdef RE_DUP_MAX
343 return RE_DUP_MAX;
344 #else
345 return -1;
346 #endif
347
348 case _SC_CHARCLASS_NAME_MAX:
349 #ifdef CHARCLASS_NAME_MAX
350 return CHARCLASS_NAME_MAX;
351 #else
352 return -1;
353 #endif
354
355 case _SC_PII:
356 #if _POSIX_PII > 0
357 return 1;
358 #else
359 return -1;
360 #endif
361
362 case _SC_PII_XTI:
363 #if _POSIX_PII_XTI > 0
364 return 1;
365 #else
366 return -1;
367 #endif
368
369 case _SC_PII_SOCKET:
370 #if _POSIX_PII_SOCKET > 0
371 return 1;
372 #else
373 return -1;
374 #endif
375
376 case _SC_PII_INTERNET:
377 #if _POSIX_PII_INTERNET > 0
378 return 1;
379 #else
380 return -1;
381 #endif
382
383 case _SC_PII_OSI:
384 #if _POSIX_PII_OSI > 0
385 return 1;
386 #else
387 return -1;
388 #endif
389
390 case _SC_POLL:
391 #if _POSIX_POLL > 0
392 return 1;
393 #else
394 return -1;
395 #endif
396
397 case _SC_SELECT:
398 #if _POSIX_SELECT > 0
399 return 1;
400 #else
401 return -1;
402 #endif
403
404 /* The same as _SC_IOV_MAX. */
405 case _SC_UIO_MAXIOV:
406 #ifdef UIO_MAXIOV
407 return UIO_MAXIOV;
408 #else
409 return -1;
410 #endif
411
412 case _SC_PII_INTERNET_STREAM:
413 #if _POSIX_PII_INTERNET_STREAM > 0
414 return 1;
415 #else
416 return -1;
417 #endif
418
419 case _SC_PII_INTERNET_DGRAM:
420 #if _POSIX_PII_INTERNET_DGRAM > 0
421 return 1;
422 #else
423 return -1;
424 #endif
425
426 case _SC_PII_OSI_COTS:
427 #if _POSIX_PII_OSI_COTS > 0
428 return 1;
429 #else
430 return -1;
431 #endif
432
433 case _SC_PII_OSI_CLTS:
434 #if _POSIX_PII_OSI_CLTS > 0
435 return 1;
436 #else
437 return -1;
438 #endif
439
440 case _SC_PII_OSI_M:
441 #if _POSIX_PII_OSI_M > 0
442 return 1;
443 #else
444 return -1;
445 #endif
446
447 case _SC_T_IOV_MAX:
448 #ifdef _T_IOV_MAX
449 return _T_IOV_MAX;
450 #else
451 return -1;
452 #endif
453
454 case _SC_2_VERSION:
455 return _POSIX2_VERSION;
456
457 case _SC_2_C_BIND:
458 #ifdef _POSIX2_C_BIND
459 return _POSIX2_C_BIND;
460 #else
461 return -1;
462 #endif
463
464 case _SC_2_C_DEV:
465 #ifdef _POSIX2_C_DEV
466 return _POSIX2_C_DEV;
467 #else
468 return -1;
469 #endif
470
471 case _SC_2_C_VERSION:
472 #ifdef _POSIX2_C_VERSION
473 return _POSIX2_C_VERSION;
474 #else
475 return -1;
476 #endif
477
478 case _SC_2_FORT_DEV:
479 #ifdef _POSIX2_FORT_DEV
480 return _POSIX2_FORT_DEV;
481 #else
482 return -1;
483 #endif
484
485 case _SC_2_FORT_RUN:
486 #ifdef _POSIX2_FORT_RUN
487 return _POSIX2_FORT_RUN;
488 #else
489 return -1;
490 #endif
491
492 case _SC_2_LOCALEDEF:
493 #ifdef _POSIX2_LOCALEDEF
494 return _POSIX2_LOCALEDEF;
495 #else
496 return -1;
497 #endif
498
499 case _SC_2_SW_DEV:
500 #ifdef _POSIX2_SW_DEV
501 return _POSIX2_SW_DEV;
502 #else
503 return -1;
504 #endif
505
506 case _SC_2_CHAR_TERM:
507 #ifdef _POSIX2_CHAR_TERM
508 return _POSIX2_CHAR_TERM;
509 #else
510 return -1;
511 #endif
512
513 case _SC_2_UPE:
514 #ifdef _POSIX2_UPE
515 return _POSIX2_UPE;
516 #else
517 return -1;
518 #endif
519
520 /* POSIX 1003.1c (POSIX Threads). */
521 case _SC_THREADS:
522 #if _POSIX_THREADS > 0
523 return _POSIX_THREADS;
524 #else
525 return -1;
526 #endif
527
528 case _SC_THREAD_SAFE_FUNCTIONS:
529 #if _POSIX_THREAD_SAFE_FUNCTIONS > 0
530 return _POSIX_THREAD_SAFE_FUNCTIONS;
531 #else
532 return -1;
533 #endif
534
535 case _SC_GETGR_R_SIZE_MAX:
536 return NSS_BUFLEN_GROUP;
537
538 case _SC_GETPW_R_SIZE_MAX:
539 return NSS_BUFLEN_PASSWD;
540
541 case _SC_LOGIN_NAME_MAX:
542 #ifdef LOGIN_NAME_MAX
543 return LOGIN_NAME_MAX;
544 #else
545 return -1;
546 #endif
547
548 case _SC_TTY_NAME_MAX:
549 #ifdef TTY_NAME_MAX
550 return TTY_NAME_MAX;
551 #else
552 return -1;
553 #endif
554
555 case _SC_THREAD_DESTRUCTOR_ITERATIONS:
556 #if _POSIX_THREAD_DESTRUCTOR_ITERATIONS > 0
557 return _POSIX_THREAD_DESTRUCTOR_ITERATIONS;
558 #else
559 return -1;
560 #endif
561
562 case _SC_THREAD_KEYS_MAX:
563 #ifdef PTHREAD_KEYS_MAX
564 return PTHREAD_KEYS_MAX;
565 #else
566 return -1;
567 #endif
568
569 case _SC_THREAD_STACK_MIN:
570 #ifdef PTHREAD_STACK_MIN
571 return PTHREAD_STACK_MIN;
572 #else
573 return -1;
574 #endif
575
576 case _SC_THREAD_THREADS_MAX:
577 #ifdef PTHREAD_THREADS_MAX
578 return PTHREAD_THREADS_MAX;
579 #else
580 return -1;
581 #endif
582
583 case _SC_THREAD_ATTR_STACKADDR:
584 #if _POSIX_THREAD_ATTR_STACKADDR > 0
585 return _POSIX_THREAD_ATTR_STACKADDR;
586 #else
587 return -1;
588 #endif
589
590 case _SC_THREAD_ATTR_STACKSIZE:
591 #if _POSIX_THREAD_ATTR_STACKSIZE > 0
592 return _POSIX_THREAD_ATTR_STACKSIZE;
593 #else
594 return -1;
595 #endif
596
597 case _SC_THREAD_PRIORITY_SCHEDULING:
598 #if _POSIX_THREAD_PRIORITY_SCHEDULING > 0
599 return _POSIX_THREAD_PRIORITY_SCHEDULING;
600 #else
601 return -1;
602 #endif
603
604 case _SC_THREAD_PRIO_INHERIT:
605 #if _POSIX_THREAD_PRIO_INHERIT > 0
606 return _POSIX_THREAD_PRIO_INHERIT;
607 #else
608 return -1;
609 #endif
610
611 case _SC_THREAD_PRIO_PROTECT:
612 #if _POSIX_THREAD_PRIO_PROTECT > 0
613 return _POSIX_THREAD_PRIO_PROTECT;
614 #else
615 return -1;
616 #endif
617
618 case _SC_THREAD_PROCESS_SHARED:
619 #if _POSIX_THREAD_PROCESS_SHARED > 0
620 return _POSIX_THREAD_PROCESS_SHARED;
621 #else
622 return -1;
623 #endif
624
625 case _SC_NPROCESSORS_CONF:
626 return __get_nprocs_conf ();
627
628 case _SC_NPROCESSORS_ONLN:
629 return __get_nprocs ();
630
631 case _SC_PHYS_PAGES:
632 return __get_phys_pages ();
633
634 case _SC_AVPHYS_PAGES:
635 return __get_avphys_pages ();
636
637 case _SC_ATEXIT_MAX:
638 /* We have no limit since we use lists. */
639 return INT_MAX;
640
641 case _SC_PASS_MAX:
642 /* We have no limit but since the return value might be used to
643 allocate a buffer we restrict the value. */
644 return BUFSIZ;
645
646 case _SC_XOPEN_VERSION:
647 return _XOPEN_VERSION;
648
649 case _SC_XOPEN_XCU_VERSION:
650 return _XOPEN_XCU_VERSION;
651
652 case _SC_XOPEN_UNIX:
653 return _XOPEN_UNIX;
654
655 case _SC_XOPEN_CRYPT:
656 #ifdef _XOPEN_CRYPT
657 return _XOPEN_CRYPT;
658 #else
659 return -1;
660 #endif
661
662 case _SC_XOPEN_ENH_I18N:
663 #ifdef _XOPEN_ENH_I18N
664 return _XOPEN_ENH_I18N;
665 #else
666 return -1;
667 #endif
668
669 case _SC_XOPEN_SHM:
670 #ifdef _XOPEN_SHM
671 return _XOPEN_SHM;
672 #else
673 return -1;
674 #endif
675
676 case _SC_XOPEN_XPG2:
677 #ifdef _XOPEN_XPG2
678 return _XOPEN_XPG2;
679 #else
680 return -1;
681 #endif
682
683 case _SC_XOPEN_XPG3:
684 #ifdef _XOPEN_XPG3
685 return _XOPEN_XPG3;
686 #else
687 return -1;
688 #endif
689
690 case _SC_XOPEN_XPG4:
691 #ifdef _XOPEN_XPG4
692 return _XOPEN_XPG4;
693 #else
694 return -1;
695 #endif
696
697 case _SC_CHAR_BIT:
698 return CHAR_BIT;
699
700 case _SC_CHAR_MAX:
701 return CHAR_MAX;
702
703 case _SC_CHAR_MIN:
704 return CHAR_MIN;
705
706 case _SC_INT_MAX:
707 return INT_MAX;
708
709 case _SC_INT_MIN:
710 return INT_MIN;
711
712 case _SC_LONG_BIT:
713 return sizeof (long int) * CHAR_BIT;
714
715 case _SC_WORD_BIT:
716 return sizeof (int) * CHAR_BIT;
717
718 case _SC_MB_LEN_MAX:
719 return MB_LEN_MAX;
720
721 case _SC_NZERO:
722 return NZERO;
723
724 case _SC_SSIZE_MAX:
725 return _POSIX_SSIZE_MAX;
726
727 case _SC_SCHAR_MAX:
728 return SCHAR_MAX;
729
730 case _SC_SCHAR_MIN:
731 return SCHAR_MIN;
732
733 case _SC_SHRT_MAX:
734 return SHRT_MAX;
735
736 case _SC_SHRT_MIN:
737 return SHRT_MIN;
738
739 case _SC_UCHAR_MAX:
740 return UCHAR_MAX;
741
742 case _SC_UINT_MAX:
743 return UINT_MAX;
744
745 case _SC_ULONG_MAX:
746 return ULONG_MAX;
747
748 case _SC_USHRT_MAX:
749 return USHRT_MAX;
750
751 case _SC_NL_ARGMAX:
752 #ifdef NL_ARGMAX
753 return NL_ARGMAX;
754 #else
755 return -1;
756 #endif
757
758 case _SC_NL_LANGMAX:
759 #ifdef NL_LANGMAX
760 return NL_LANGMAX;
761 #else
762 return -1;
763 #endif
764
765 case _SC_NL_MSGMAX:
766 #ifdef NL_MSGMAX
767 return NL_MSGMAX;
768 #else
769 return -1;
770 #endif
771
772 case _SC_NL_NMAX:
773 #ifdef NL_NMAX
774 return NL_NMAX;
775 #else
776 return -1;
777 #endif
778
779 case _SC_NL_SETMAX:
780 #ifdef NL_SETMAX
781 return NL_SETMAX;
782 #else
783 return -1;
784 #endif
785
786 case _SC_NL_TEXTMAX:
787 #ifdef NL_TEXTMAX
788 return NL_TEXTMAX;
789 #else
790 return -1;
791 #endif
792
793 case _SC_XBS5_ILP32_OFF32:
794 #ifdef _XBS5_ILP32_OFF32
795 return _XBS5_ILP32_OFF32;
796 #else
797 return __sysconf_check_spec ("ILP32_OFF32");
798 #endif
799 case _SC_XBS5_ILP32_OFFBIG:
800 #ifdef _XBS5_ILP32_OFFBIG
801 return _XBS5_ILP32_OFFBIG;
802 #else
803 return __sysconf_check_spec ("ILP32_OFFBIG");
804 #endif
805 case _SC_XBS5_LP64_OFF64:
806 #ifdef _XBS5_LP64_OFF64
807 return _XBS5_LP64_OFF64;
808 #else
809 return __sysconf_check_spec ("LP64_OFF64");
810 #endif
811 case _SC_XBS5_LPBIG_OFFBIG:
812 #ifdef _XBS5_LPBIG_OFFBIG
813 return _XBS5_LPBIG_OFFBIG;
814 #else
815 return __sysconf_check_spec ("LPBIG_OFFBIG");
816 #endif
817
818 case _SC_V6_ILP32_OFF32:
819 #ifdef _POSIX_V6_ILP32_OFF32
820 return _POSIX_V6_ILP32_OFF32;
821 #else
822 return __sysconf_check_spec ("ILP32_OFF32");
823 #endif
824 case _SC_V6_ILP32_OFFBIG:
825 #ifdef _POSIX_V6_ILP32_OFFBIG
826 return _POSIX_V6_ILP32_OFFBIG;
827 #else
828 return __sysconf_check_spec ("ILP32_OFFBIG");
829 #endif
830 case _SC_V6_LP64_OFF64:
831 #ifdef _POSIX_V6_LP64_OFF64
832 return _POSIX_V6_LP64_OFF64;
833 #else
834 return __sysconf_check_spec ("LP64_OFF64");
835 #endif
836 case _SC_V6_LPBIG_OFFBIG:
837 #ifdef _POSIX_V6_LPBIG_OFFBIG
838 return _POSIX_V6_LPBIG_OFFBIG;
839 #else
840 return __sysconf_check_spec ("LPBIG_OFFBIG");
841 #endif
842
843 case _SC_V7_ILP32_OFF32:
844 #ifdef _POSIX_V7_ILP32_OFF32
845 return _POSIX_V7_ILP32_OFF32;
846 #else
847 return __sysconf_check_spec ("ILP32_OFF32");
848 #endif
849 case _SC_V7_ILP32_OFFBIG:
850 #ifdef _POSIX_V7_ILP32_OFFBIG
851 return _POSIX_V7_ILP32_OFFBIG;
852 #else
853 return __sysconf_check_spec ("ILP32_OFFBIG");
854 #endif
855 case _SC_V7_LP64_OFF64:
856 #ifdef _POSIX_V7_LP64_OFF64
857 return _POSIX_V7_LP64_OFF64;
858 #else
859 return __sysconf_check_spec ("LP64_OFF64");
860 #endif
861 case _SC_V7_LPBIG_OFFBIG:
862 #ifdef _POSIX_V7_LPBIG_OFFBIG
863 return _POSIX_V7_LPBIG_OFFBIG;
864 #else
865 return __sysconf_check_spec ("LPBIG_OFFBIG");
866 #endif
867
868 case _SC_XOPEN_LEGACY:
869 return _XOPEN_LEGACY;
870
871 case _SC_XOPEN_REALTIME:
872 #ifdef _XOPEN_REALTIME
873 return _XOPEN_REALTIME;
874 #else
875 return -1;
876 #endif
877 case _SC_XOPEN_REALTIME_THREADS:
878 #ifdef _XOPEN_REALTIME_THREADS
879 return _XOPEN_REALTIME_THREADS;
880 #else
881 return -1;
882 #endif
883
884 case _SC_ADVISORY_INFO:
885 #if _POSIX_ADVISORY_INFO > 0
886 return _POSIX_ADVISORY_INFO;
887 #else
888 return -1;
889 #endif
890
891 case _SC_BARRIERS:
892 #if _POSIX_BARRIERS > 0
893 return _POSIX_BARRIERS;
894 #else
895 return -1;
896 #endif
897
898 case _SC_BASE:
899 #if _POSIX_BASE > 0
900 return _POSIX_BASE;
901 #else
902 return -1;
903 #endif
904 case _SC_C_LANG_SUPPORT:
905 #if _POSIX_C_LANG_SUPPORT > 0
906 return _POSIX_C_LANG_SUPPORT;
907 #else
908 return -1;
909 #endif
910 case _SC_C_LANG_SUPPORT_R:
911 #if _POSIX_C_LANG_SUPPORT_R > 0
912 return _POSIX_C_LANG_SUPPORT_R;
913 #else
914 return -1;
915 #endif
916
917 case _SC_CLOCK_SELECTION:
918 #if _POSIX_CLOCK_SELECTION > 0
919 return _POSIX_CLOCK_SELECTION;
920 #else
921 return -1;
922 #endif
923
924 case _SC_CPUTIME:
925 #if _POSIX_CPUTIME > 0
926 return _POSIX_CPUTIME;
927 #else
928 return -1;
929 #endif
930
931 case _SC_DEVICE_IO:
932 #if _POSIX_DEVICE_IO > 0
933 return _POSIX_DEVICE_IO;
934 #else
935 return -1;
936 #endif
937 case _SC_DEVICE_SPECIFIC:
938 #if _POSIX_DEVICE_SPCIFIC > 0
939 return _POSIX_DEVICE_SPECIFIC;
940 #else
941 return -1;
942 #endif
943 case _SC_DEVICE_SPECIFIC_R:
944 #if _POSIX_DEVICE_SPCIFIC_R > 0
945 return _POSIX_DEVICE_SPECIFIC_R;
946 #else
947 return -1;
948 #endif
949
950 case _SC_FD_MGMT:
951 #if _POSIX_FD_MGMT > 0
952 return _POSIX_FD_MGMT;
953 #else
954 return -1;
955 #endif
956
957 case _SC_FIFO:
958 #if _POSIX_FIFO > 0
959 return _POSIX_FIFO;
960 #else
961 return -1;
962 #endif
963 case _SC_PIPE:
964 #if _POSIX_PIPE > 0
965 return _POSIX_PIPE;
966 #else
967 return -1;
968 #endif
969
970 case _SC_FILE_ATTRIBUTES:
971 #if _POSIX_FILE_ATTRIBUTES > 0
972 return _POSIX_FILE_ATTRIBUTES;
973 #else
974 return -1;
975 #endif
976 case _SC_FILE_LOCKING:
977 #if _POSIX_FILE_LOCKING > 0
978 return _POSIX_FILE_LOCKING;
979 #else
980 return -1;
981 #endif
982 case _SC_FILE_SYSTEM:
983 #if _POSIX_FILE_SYSTEM > 0
984 return _POSIX_FILE_SYSTEM;
985 #else
986 return -1;
987 #endif
988
989 case _SC_MONOTONIC_CLOCK:
990 #if _POSIX_MONOTONIC_CLOCK
991 return _POSIX_MONOTONIC_CLOCK;
992 #else
993 return -1;
994 #endif
995
996 case _SC_MULTI_PROCESS:
997 #if _POSIX_MULTI_PROCESS > 0
998 return _POSIX_MULTI_PROCESS;
999 #else
1000 return -1;
1001 #endif
1002 case _SC_SINGLE_PROCESS:
1003 #if _POSIX_SINGLE_PROCESS > 0
1004 return _POSIX_SINGLE_PROCESS;
1005 #else
1006 return -1;
1007 #endif
1008
1009 case _SC_NETWORKING:
1010 #if _POSIX_NETWORKING > 0
1011 return _POSIX_NETWORKING;
1012 #else
1013 return -1;
1014 #endif
1015
1016 case _SC_READER_WRITER_LOCKS:
1017 #if _POSIX_READER_WRITER_LOCKS > 0
1018 return _POSIX_READER_WRITER_LOCKS;
1019 #else
1020 return -1;
1021 #endif
1022 case _SC_SPIN_LOCKS:
1023 #if _POSIX_SPIN_LOCKS > 0
1024 return _POSIX_SPIN_LOCKS;
1025 #else
1026 return -1;
1027 #endif
1028
1029 case _SC_REGEXP:
1030 #if _POSIX_REGEXP > 0
1031 return _POSIX_REGEXP;
1032 #else
1033 return -1;
1034 #endif
1035 case _SC_REGEX_VERSION:
1036 #if _POSIX_REGEX_VERSION > 0
1037 return _POSIX_REGEX_VERSION;
1038 #else
1039 return -1;
1040 #endif
1041
1042 case _SC_SHELL:
1043 #if _POSIX_SHELL > 0
1044 return _POSIX_SHELL;
1045 #else
1046 return -1;
1047 #endif
1048
1049 case _SC_SIGNALS:
1050 #ifdef _POSUX_SIGNALS
1051 return _POSIX_SIGNALS;
1052 #else
1053 return -1;
1054 #endif
1055
1056 case _SC_SPAWN:
1057 #if _POSIX_SPAWN > 0
1058 return _POSIX_SPAWN;
1059 #else
1060 return -1;
1061 #endif
1062
1063 case _SC_SPORADIC_SERVER:
1064 #if _POSIX_SPORADIC_SERVER > 0
1065 return _POSIX_SPORADIC_SERVER;
1066 #else
1067 return -1;
1068 #endif
1069 case _SC_THREAD_SPORADIC_SERVER:
1070 #if _POSIX_THREAD_SPORADIC_SERVER > 0
1071 return _POSIX_THREAD_SPORADIC_SERVER;
1072 #else
1073 return -1;
1074 #endif
1075
1076 case _SC_SYSTEM_DATABASE:
1077 #if _POSIX_SYSTEM_DATABASE > 0
1078 return _POSIX_SYSTEM_DATABASE;
1079 #else
1080 return -1;
1081 #endif
1082 case _SC_SYSTEM_DATABASE_R:
1083 #if _POSIX_SYSTEM_DATABASE_R > 0
1084 return _POSIX_SYSTEM_DATABASE_R;
1085 #else
1086 return -1;
1087 #endif
1088
1089 case _SC_THREAD_CPUTIME:
1090 #if _POSIX_THREAD_CPUTIME > 0
1091 return _POSIX_THREAD_CPUTIME;
1092 #else
1093 return -1;
1094 #endif
1095
1096 case _SC_TIMEOUTS:
1097 #if _POSIX_TIMEOUTS > 0
1098 return _POSIX_TIMEOUTS;
1099 #else
1100 return -1;
1101 #endif
1102
1103 case _SC_TYPED_MEMORY_OBJECTS:
1104 #if _POSIX_TYPED_MEMORY_OBJECTS > 0
1105 return _POSIX_TYPED_MEMORY_OBJECTS;
1106 #else
1107 return -1;
1108 #endif
1109
1110 case _SC_USER_GROUPS:
1111 #if _POSIX_USER_GROUPS > 0
1112 return _POSIX_USER_GROUPS;
1113 #else
1114 return -1;
1115 #endif
1116 case _SC_USER_GROUPS_R:
1117 #if _POSIX_USER_GROUPS_R > 0
1118 return _POSIX_USER_GROUPS_R;
1119 #else
1120 return -1;
1121 #endif
1122
1123 case _SC_2_PBS:
1124 #ifdef _POSIX2_PBS
1125 return _POSIX2_PBS;
1126 #else
1127 return -1;
1128 #endif
1129 case _SC_2_PBS_ACCOUNTING:
1130 #ifdef _POSIX2_PBS_ACCOUNTING
1131 return _POSIX2_PBS_ACCOUNTING;
1132 #else
1133 return -1;
1134 #endif
1135 case _SC_2_PBS_CHECKPOINT:
1136 #ifdef _POSIX2_PBS_CHECKPOINT
1137 return _POSIX2_PBS_CHECKPOINT;
1138 #else
1139 return -1;
1140 #endif
1141 case _SC_2_PBS_LOCATE:
1142 #ifdef _POSIX2_PBS_LOCATE
1143 return _POSIX2_PBS_LOCATE;
1144 #else
1145 return -1;
1146 #endif
1147 case _SC_2_PBS_MESSAGE:
1148 #ifdef _POSIX2_PBS_MESSAGE
1149 return _POSIX2_PBS_MESSAGE;
1150 #else
1151 return -1;
1152 #endif
1153 case _SC_2_PBS_TRACK:
1154 #ifdef _POSIX2_PBS_TRACK
1155 return _POSIX2_PBS_TRACK;
1156 #else
1157 return -1;
1158 #endif
1159
1160 case _SC_SYMLOOP_MAX:
1161 #ifdef SYMLOOP_MAX
1162 return SYMLOOP_MAX;
1163 #else
1164 return -1;
1165 #endif
1166
1167 case _SC_STREAMS:
1168 #ifdef _XOPEN_STREAMS
1169 return _XOPEN_STREAMS;
1170 #else
1171 return -1;
1172 #endif
1173
1174 case _SC_HOST_NAME_MAX:
1175 #ifdef HOST_NAME_MAX
1176 return HOST_NAME_MAX;
1177 #else
1178 return -1;
1179 #endif
1180
1181 case _SC_TRACE:
1182 #if _POSIX_TRACE > 0
1183 return _POSIX_TRACE;
1184 #else
1185 return -1;
1186 #endif
1187 case _SC_TRACE_EVENT_FILTER:
1188 #if _POSIX_TRACE_EVENT_FILTER > 0
1189 return _POSIX_TRACE_EVENT_FILTER;
1190 #else
1191 return -1;
1192 #endif
1193 case _SC_TRACE_INHERIT:
1194 #if _POSIX_TRACE_INHERIT > 0
1195 return _POSIX_TRACE_INHERIT;
1196 #else
1197 return -1;
1198 #endif
1199 case _SC_TRACE_LOG:
1200 #if _POSIX_TRACE_LOG > 0
1201 return _POSIX_TRACE_LOG;
1202 #else
1203 return -1;
1204 #endif
1205
1206 case _SC_TRACE_EVENT_NAME_MAX:
1207 case _SC_TRACE_NAME_MAX:
1208 case _SC_TRACE_SYS_MAX:
1209 case _SC_TRACE_USER_EVENT_MAX:
1210 /* No support for tracing. */
1211
1212 case _SC_XOPEN_STREAMS:
1213 /* No support for STREAMS. */
1214 return -1;
1215
1216 case _SC_LEVEL1_ICACHE_SIZE:
1217 case _SC_LEVEL1_ICACHE_ASSOC:
1218 case _SC_LEVEL1_ICACHE_LINESIZE:
1219 case _SC_LEVEL1_DCACHE_SIZE:
1220 case _SC_LEVEL1_DCACHE_ASSOC:
1221 case _SC_LEVEL1_DCACHE_LINESIZE:
1222 case _SC_LEVEL2_CACHE_SIZE:
1223 case _SC_LEVEL2_CACHE_ASSOC:
1224 case _SC_LEVEL2_CACHE_LINESIZE:
1225 case _SC_LEVEL3_CACHE_SIZE:
1226 case _SC_LEVEL3_CACHE_ASSOC:
1227 case _SC_LEVEL3_CACHE_LINESIZE:
1228 case _SC_LEVEL4_CACHE_SIZE:
1229 case _SC_LEVEL4_CACHE_ASSOC:
1230 /* In general we cannot determine these values. Therefore we
1231 return zero which indicates that no information is
1232 available. */
1233 return 0;
1234
1235 case _SC_IPV6:
1236 #if _POSIX_IPV6 > 0
1237 return _POSIX_IPV6;
1238 #else
1239 return -1;
1240 #endif
1241
1242 case _SC_RAW_SOCKETS:
1243 #if _POSIX_RAW_SOCKETS > 0
1244 return _POSIX_RAW_SOCKETS;
1245 #else
1246 return -1;
1247 #endif
1248 }
1249 }
1250
1251 #undef __sysconf
1252 weak_alias (__sysconf, sysconf)
1253 libc_hidden_def (__sysconf)
1254
1255 #if NEED_CHECK_SPEC
1256 static long int
1257 __sysconf_check_spec (const char *spec)
1258 {
1259 int save_errno = errno;
1260
1261 const char *getconf_dir = __libc_secure_getenv ("GETCONF_DIR") ?: GETCONF_DIR;
1262 size_t getconf_dirlen = strlen (getconf_dir);
1263 size_t speclen = strlen (spec);
1264
1265 char name[getconf_dirlen + sizeof ("/POSIX_V6_") + speclen];
1266 memcpy (mempcpy (mempcpy (name, getconf_dir, getconf_dirlen),
1267 "/POSIX_V6_", sizeof ("/POSIX_V6_") - 1),
1268 spec, speclen + 1);
1269
1270 struct stat64 st;
1271 long int ret = __xstat64 (_STAT_VER, name, &st) >= 0 ? 1 : -1;
1272
1273 __set_errno (save_errno);
1274 return ret;
1275 }
1276 #endif