OSDN Git Service

hidden_def/hidden_proto: convert all users (I hope) termios split, add some missing...
[uclinux-h8/uClibc.git] / libc / unistd / sysconf.c
1 /* Copyright (C) 1991, 93, 95, 96, 97, 2000 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 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.
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    Library General Public License for more details.
13
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.  */
18
19 #define _XOPEN_SOURCE  500
20 #include <features.h>
21 #include <errno.h>
22 #include <limits.h>
23 #include <grp.h>
24 #include <pwd.h>
25 #include <stddef.h>
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <time.h>
29 #include <unistd.h>
30 #include <sys/sysinfo.h>
31 #include <sys/types.h>
32 #ifdef __UCLIBC_HAS_REGEX__
33 #include <regex.h>
34 #endif
35
36 libc_hidden_proto(getpagesize)
37 libc_hidden_proto(getdtablesize)
38
39 #ifndef __UCLIBC_CLK_TCK_CONST
40 #error __UCLIBC_CLK_TCK_CONST not defined!
41 #endif
42
43 /***********************************************************************/
44 /*
45  * Manuel Novoa III        Jan 2001
46  *
47  * On i386, the switch-based implementation generates 796 bytes of code.
48  * However, many of the return values are repeats.  By collecting these
49  * repeats and moving to a table-based implementation, we generate 283
50  * bytes on i386 (-Os -fomit-frame-pointer).
51  */
52
53 #ifdef _UCLIBC_GENERATE_SYSCONF_ARCH
54 /*
55  * Set some errno's so the auto-gen code knows what it is dealing with.
56  *    1) ENOSYS signifies that we're returning a default value.
57  *       This is just extra info for development.
58  *    2) EISNAM signifies that the value returned varies at runtime.
59  *
60  * Option: GETPAGESIZE_IS_DYNAMIC
61  *    The current implementation of getpagesize in uClibc returns
62  *    a constant.  The pagesize on the target arch should not vary,
63  *    so it should be safe to set this as 0.
64  */
65 #define RETURN_NEG_1 __set_errno(ENOSYS); return -1
66 #define RETURN_FUNCTION(f) __set_errno(EISNAM); return (long int) #f
67 #define GETPAGESIZE_IS_DYNAMIC 0
68 #else
69 #define RETURN_NEG_1 return -1
70 #define RETURN_FUNCTION(f) return f;
71 #endif /* _UCLIBC_GENERATE_SYSCONF_ARCH */
72
73 /* Get the value of the system variable NAME.  */
74 long int sysconf(int name)
75 {
76   switch (name)
77     {
78     default:
79       __set_errno(EINVAL);
80       return -1;
81
82     case _SC_ARG_MAX:
83 #ifdef  ARG_MAX
84       return ARG_MAX;
85 #else
86       RETURN_NEG_1;
87 #endif
88
89     case _SC_CHILD_MAX:
90 #ifdef  CHILD_MAX
91       return CHILD_MAX;
92 #else
93       RETURN_NEG_1;
94 #endif
95
96     case _SC_CLK_TCK:
97       /* Can't use CLK_TCK here since that calls __sysconf(_SC_CLK_TCK) */
98       return __UCLIBC_CLK_TCK_CONST;
99
100     case _SC_NGROUPS_MAX:
101 #ifdef  NGROUPS_MAX
102       return NGROUPS_MAX;
103 #else
104       RETURN_NEG_1;
105 #endif
106
107     case _SC_OPEN_MAX:
108       RETURN_FUNCTION(getdtablesize());
109
110     case _SC_STREAM_MAX:
111 #ifdef  STREAM_MAX
112       return STREAM_MAX;
113 #else
114       return FOPEN_MAX;
115 #endif
116
117     case _SC_TZNAME_MAX:
118       return _POSIX_TZNAME_MAX;
119
120     case _SC_JOB_CONTROL:
121 #ifdef  _POSIX_JOB_CONTROL
122       return 1;
123 #else
124       RETURN_NEG_1;
125 #endif
126
127     case _SC_SAVED_IDS:
128 #ifdef  _POSIX_SAVED_IDS
129       return 1;
130 #else
131       RETURN_NEG_1;
132 #endif
133
134     case _SC_REALTIME_SIGNALS:
135 #ifdef  _POSIX_REALTIME_SIGNALS
136       return 1;
137 #else
138       RETURN_NEG_1;
139 #endif
140
141     case _SC_PRIORITY_SCHEDULING:
142 #ifdef  _POSIX_PRIORITY_SCHEDULING
143       return 1;
144 #else
145       RETURN_NEG_1;
146 #endif
147
148     case _SC_TIMERS:
149 #ifdef  _POSIX_TIMERS
150       return 1;
151 #else
152       RETURN_NEG_1;
153 #endif
154
155     case _SC_ASYNCHRONOUS_IO:
156 #ifdef  _POSIX_ASYNCHRONOUS_IO
157       return 1;
158 #else
159       RETURN_NEG_1;
160 #endif
161
162     case _SC_PRIORITIZED_IO:
163 #ifdef  _POSIX_PRIORITIZED_IO
164       return 1;
165 #else
166       RETURN_NEG_1;
167 #endif
168
169     case _SC_SYNCHRONIZED_IO:
170 #ifdef  _POSIX_SYNCHRONIZED_IO
171       return 1;
172 #else
173       RETURN_NEG_1;
174 #endif
175
176     case _SC_FSYNC:
177 #ifdef  _POSIX_FSYNC
178       return 1;
179 #else
180       RETURN_NEG_1;
181 #endif
182
183     case _SC_MAPPED_FILES:
184 #ifdef  _POSIX_MAPPED_FILES
185       return 1;
186 #else
187       RETURN_NEG_1;
188 #endif
189
190     case _SC_MEMLOCK:
191 #ifdef  _POSIX_MEMLOCK
192       return 1;
193 #else
194       RETURN_NEG_1;
195 #endif
196
197     case _SC_MEMLOCK_RANGE:
198 #ifdef  _POSIX_MEMLOCK_RANGE
199       return 1;
200 #else
201       RETURN_NEG_1;
202 #endif
203
204     case _SC_MEMORY_PROTECTION:
205 #ifdef  _POSIX_MEMORY_PROTECTION
206       return 1;
207 #else
208       RETURN_NEG_1;
209 #endif
210
211     case _SC_MESSAGE_PASSING:
212 #ifdef  _POSIX_MESSAGE_PASSING
213       return 1;
214 #else
215       RETURN_NEG_1;
216 #endif
217
218     case _SC_SEMAPHORES:
219 #ifdef  _POSIX_SEMAPHORES
220       return 1;
221 #else
222       RETURN_NEG_1;
223 #endif
224
225     case _SC_SHARED_MEMORY_OBJECTS:
226 #ifdef  _POSIX_SHARED_MEMORY_OBJECTS
227       return 1;
228 #else
229       RETURN_NEG_1;
230 #endif
231
232     case _SC_VERSION:
233       return _POSIX_VERSION;
234
235     case _SC_PAGESIZE:
236 #if defined(GETPAGESIZE_IS_DYNAMIC) && (GETPAGESIZE_IS_DYNAMIC == 1)
237       RETURN_FUNCTION(getpagesize());
238 #else
239       return getpagesize();             /* note: currently this is not dynamic */
240 #endif
241
242     case _SC_AIO_LISTIO_MAX:
243 #ifdef  AIO_LISTIO_MAX
244       return AIO_LISTIO_MAX;
245 #else
246       RETURN_NEG_1;
247 #endif
248
249     case _SC_AIO_MAX:
250 #ifdef  AIO_MAX
251       return AIO_MAX;
252 #else
253       RETURN_NEG_1;
254 #endif
255
256     case _SC_AIO_PRIO_DELTA_MAX:
257 #ifdef  AIO_PRIO_DELTA_MAX
258       return AIO_PRIO_DELTA_MAX;
259 #else
260       RETURN_NEG_1;
261 #endif
262
263     case _SC_DELAYTIMER_MAX:
264 #ifdef  DELAYTIMER_MAX
265       return DELAYTIMER_MAX;
266 #else
267       RETURN_NEG_1;
268 #endif
269
270     case _SC_MQ_OPEN_MAX:
271 #ifdef  MQ_OPEN_MAX
272       return MQ_OPEN_MAX;
273 #else
274       RETURN_NEG_1;
275 #endif
276
277     case _SC_MQ_PRIO_MAX:
278 #ifdef  MQ_PRIO_MAX
279       return MQ_PRIO_MAX;
280 #else
281       RETURN_NEG_1;
282 #endif
283
284     case _SC_RTSIG_MAX:
285 #ifdef  RTSIG_MAX
286       return RTSIG_MAX;
287 #else
288       RETURN_NEG_1;
289 #endif
290
291     case _SC_SEM_NSEMS_MAX:
292 #ifdef  SEM_NSEMS_MAX
293       return SEM_NSEMS_MAX;
294 #else
295       RETURN_NEG_1;
296 #endif
297
298     case _SC_SEM_VALUE_MAX:
299 #ifdef  SEM_VALUE_MAX
300       return SEM_VALUE_MAX;
301 #else
302       RETURN_NEG_1;
303 #endif
304
305     case _SC_SIGQUEUE_MAX:
306 #ifdef  SIGQUEUE_MAX
307       return SIGQUEUE_MAX;
308 #else
309       RETURN_NEG_1;
310 #endif
311
312     case _SC_TIMER_MAX:
313 #ifdef  TIMER_MAX
314       return TIMER_MAX;
315 #else
316       RETURN_NEG_1;
317 #endif
318
319     case _SC_BC_BASE_MAX:
320 #ifdef  BC_BASE_MAX
321       return BC_BASE_MAX;
322 #else
323       RETURN_NEG_1;
324 #endif
325
326     case _SC_BC_DIM_MAX:
327 #ifdef  BC_DIM_MAX
328       return BC_DIM_MAX;
329 #else
330       RETURN_NEG_1;
331 #endif
332
333     case _SC_BC_SCALE_MAX:
334 #ifdef  BC_SCALE_MAX
335       return BC_SCALE_MAX;
336 #else
337       RETURN_NEG_1;
338 #endif
339
340     case _SC_BC_STRING_MAX:
341 #ifdef  BC_STRING_MAX
342       return BC_STRING_MAX;
343 #else
344       RETURN_NEG_1;
345 #endif
346
347     case _SC_COLL_WEIGHTS_MAX:
348 #ifdef  COLL_WEIGHTS_MAX
349       return COLL_WEIGHTS_MAX;
350 #else
351       RETURN_NEG_1;
352 #endif
353
354     case _SC_EQUIV_CLASS_MAX:
355 #ifdef  EQUIV_CLASS_MAX
356       return EQUIV_CLASS_MAX;
357 #else
358       RETURN_NEG_1;
359 #endif
360
361     case _SC_EXPR_NEST_MAX:
362 #ifdef  EXPR_NEST_MAX
363       return EXPR_NEST_MAX;
364 #else
365       RETURN_NEG_1;
366 #endif
367
368     case _SC_LINE_MAX:
369 #ifdef  LINE_MAX
370       return LINE_MAX;
371 #else
372       RETURN_NEG_1;
373 #endif
374
375     case _SC_RE_DUP_MAX:
376 #ifdef  RE_DUP_MAX
377       return RE_DUP_MAX;
378 #else
379       RETURN_NEG_1;
380 #endif
381
382     case _SC_CHARCLASS_NAME_MAX:
383 #ifdef  CHARCLASS_NAME_MAX
384       return CHARCLASS_NAME_MAX;
385 #else
386       RETURN_NEG_1;
387 #endif
388
389     case _SC_PII:
390 #ifdef  _POSIX_PII
391       return 1;
392 #else
393       RETURN_NEG_1;
394 #endif
395
396     case _SC_PII_XTI:
397 #ifdef  _POSIX_PII_XTI
398       return 1;
399 #else
400       RETURN_NEG_1;
401 #endif
402
403     case _SC_PII_SOCKET:
404 #ifdef  _POSIX_PII_SOCKET
405       return 1;
406 #else
407       RETURN_NEG_1;
408 #endif
409
410     case _SC_PII_INTERNET:
411 #ifdef  _POSIX_PII_INTERNET
412       return 1;
413 #else
414       RETURN_NEG_1;
415 #endif
416
417     case _SC_PII_OSI:
418 #ifdef  _POSIX_PII_OSI
419       return 1;
420 #else
421       RETURN_NEG_1;
422 #endif
423
424     case _SC_POLL:
425 #ifdef  _POSIX_POLL
426       return 1;
427 #else
428       RETURN_NEG_1;
429 #endif
430
431     case _SC_SELECT:
432 #ifdef  _POSIX_SELECT
433       return 1;
434 #else
435       RETURN_NEG_1;
436 #endif
437
438     case _SC_UIO_MAXIOV:
439 #ifdef  UIO_MAXIOV
440       return UIO_MAXIOV;
441 #else
442       RETURN_NEG_1;
443 #endif
444
445     case _SC_PII_INTERNET_STREAM:
446 #ifdef  _POSIX_PII_INTERNET_STREAM
447       return 1;
448 #else
449       RETURN_NEG_1;
450 #endif
451
452     case _SC_PII_INTERNET_DGRAM:
453 #ifdef  _POSIX_PII_INTERNET_DGRAM
454       return 1;
455 #else
456       RETURN_NEG_1;
457 #endif
458
459     case _SC_PII_OSI_COTS:
460 #ifdef  _POSIX_PII_OSI_COTS
461       return 1;
462 #else
463       RETURN_NEG_1;
464 #endif
465
466     case _SC_PII_OSI_CLTS:
467 #ifdef  _POSIX_PII_OSI_CLTS
468       return 1;
469 #else
470       RETURN_NEG_1;
471 #endif
472
473     case _SC_PII_OSI_M:
474 #ifdef  _POSIX_PII_OSI_M
475       return 1;
476 #else
477       RETURN_NEG_1;
478 #endif
479
480     case _SC_T_IOV_MAX:
481 #ifdef  _T_IOV_MAX
482       return _T_IOV_MAX;
483 #else
484       RETURN_NEG_1;
485 #endif
486
487     case _SC_2_VERSION:
488       return _POSIX2_VERSION;
489
490     case _SC_2_C_BIND:
491 #ifdef  _POSIX2_C_BIND
492       return _POSIX2_C_BIND;
493 #else
494       RETURN_NEG_1;
495 #endif
496
497     case _SC_2_C_DEV:
498 #ifdef  _POSIX2_C_DEV
499       return _POSIX2_C_DEV;
500 #else
501       RETURN_NEG_1;
502 #endif
503
504     case _SC_2_C_VERSION:
505 #ifdef  _POSIX2_C_VERSION
506       return _POSIX2_C_VERSION;
507 #else
508       RETURN_NEG_1;
509 #endif
510
511     case _SC_2_FORT_DEV:
512 #ifdef  _POSIX2_FORT_DEV
513       return _POSIX2_FORT_DEV;
514 #else
515       RETURN_NEG_1;
516 #endif
517
518     case _SC_2_FORT_RUN:
519 #ifdef  _POSIX2_FORT_RUN
520       return _POSIX2_FORT_RUN;
521 #else
522       RETURN_NEG_1;
523 #endif
524
525     case _SC_2_LOCALEDEF:
526 #ifdef  _POSIX2_LOCALEDEF
527       return _POSIX2_LOCALEDEF;
528 #else
529       RETURN_NEG_1;
530 #endif
531
532     case _SC_2_SW_DEV:
533 #ifdef  _POSIX2_SW_DEV
534       return _POSIX2_SW_DEV;
535 #else
536       RETURN_NEG_1;
537 #endif
538
539     case _SC_2_CHAR_TERM:
540 #ifdef  _POSIX2_CHAR_TERM
541       return _POSIX2_CHAR_TERM;
542 #else
543       RETURN_NEG_1;
544 #endif
545
546     case _SC_2_UPE:
547 #ifdef  _POSIX2_UPE
548       return _POSIX2_UPE;
549 #else
550       RETURN_NEG_1;
551 #endif
552
553       /* POSIX 1003.1c (POSIX Threads).  */
554     case _SC_THREADS:
555 #ifdef __UCLIBC_HAS_THREADS__
556       return 1;
557 #else
558       RETURN_NEG_1;
559 #endif
560
561     case _SC_THREAD_SAFE_FUNCTIONS:
562 #ifdef __UCLIBC_HAS_THREADS__
563       return 1;
564 #else
565       RETURN_NEG_1;
566 #endif
567
568 /* If you change these, also change libc/pwd_grp/pwd_grp.c to match */
569 #define PWD_BUFFER_SIZE 256
570 #define GRP_BUFFER_SIZE 256
571     case _SC_GETGR_R_SIZE_MAX:
572       return GRP_BUFFER_SIZE;
573
574     case _SC_GETPW_R_SIZE_MAX:
575       return PWD_BUFFER_SIZE;
576
577 /* getlogin() is a worthless interface.  In uClibc we let the user specify
578  * whatever they want via the LOGNAME environment variable, or we return NULL
579  * if getenv() fails to find anything.  So this is merely how large a env
580  * variable can be.  Lets use 256 */
581     case _SC_LOGIN_NAME_MAX:
582       return 256;
583
584 /* If you change this, also change _SC_TTY_NAME_MAX in libc/unistd/sysconf.c */
585 #define TTYNAME_BUFLEN          32
586     case _SC_TTY_NAME_MAX:
587       return TTYNAME_BUFLEN;
588
589     case _SC_THREAD_DESTRUCTOR_ITERATIONS:
590 #ifdef  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
591       return _POSIX_THREAD_DESTRUCTOR_ITERATIONS;
592 #else
593       RETURN_NEG_1;
594 #endif
595
596     case _SC_THREAD_KEYS_MAX:
597 #ifdef  PTHREAD_KEYS_MAX
598       return PTHREAD_KEYS_MAX;
599 #else
600       RETURN_NEG_1;
601 #endif
602
603     case _SC_THREAD_STACK_MIN:
604 #ifdef  PTHREAD_STACK_MIN
605       return PTHREAD_STACK_MIN;
606 #else
607       RETURN_NEG_1;
608 #endif
609
610     case _SC_THREAD_THREADS_MAX:
611 #ifdef  PTHREAD_THREADS_MAX
612       return PTHREAD_THREADS_MAX;
613 #else
614       RETURN_NEG_1;
615 #endif
616
617     case _SC_THREAD_ATTR_STACKADDR:
618 #ifdef  _POSIX_THREAD_ATTR_STACKADDR
619       return 1;
620 #else
621       RETURN_NEG_1;
622 #endif
623
624     case _SC_THREAD_ATTR_STACKSIZE:
625 #ifdef  _POSIX_THREAD_ATTR_STACKSIZE
626       return 1;
627 #else
628       RETURN_NEG_1;
629 #endif
630
631     case _SC_THREAD_PRIORITY_SCHEDULING:
632 #ifdef  _POSIX_THREAD_PRIORITY_SCHEDULING
633       return 1;
634 #else
635       RETURN_NEG_1;
636 #endif
637
638     case _SC_THREAD_PRIO_INHERIT:
639 #ifdef  _POSIX_THREAD_PRIO_INHERIT
640       return 1;
641 #else
642       RETURN_NEG_1;
643 #endif
644
645     case _SC_THREAD_PRIO_PROTECT:
646 #ifdef  _POSIX_THREAD_PRIO_PROTECT
647       return 1;
648 #else
649       RETURN_NEG_1;
650 #endif
651
652     case _SC_THREAD_PROCESS_SHARED:
653 #ifdef  _POSIX_THREAD_PROCESS_SHARED
654       return 1;
655 #else
656       RETURN_NEG_1;
657 #endif
658
659     case _SC_NPROCESSORS_CONF:
660 #if 0
661       RETURN_FUNCTION(get_nprocs_conf());
662 #else
663       /* this is a hack.  for now always claim we have exactly one cpu */
664       return 1;
665 #endif
666
667     case _SC_NPROCESSORS_ONLN:
668 #if 0
669       RETURN_FUNCTION(get_nprocs());
670 #else
671       /* this is a hack.  for now always claim we have exactly one cpu */
672       return 1;
673 #endif
674
675     case _SC_PHYS_PAGES:
676 #if 0
677       RETURN_FUNCTION(get_phys_pages());
678 #else
679       RETURN_NEG_1;
680 #endif
681
682     case _SC_AVPHYS_PAGES:
683 #if 0
684       RETURN_FUNCTION(get_avphys_pages());
685 #else
686       RETURN_NEG_1;
687 #endif
688
689     case _SC_ATEXIT_MAX:
690       return __UCLIBC_MAX_ATEXIT;
691
692     case _SC_PASS_MAX:
693       /* We have no limit but since the return value might be used to
694          allocate a buffer we restrict the value.  */
695       return BUFSIZ;
696
697     case _SC_XOPEN_VERSION:
698       return _XOPEN_VERSION;
699
700     case _SC_XOPEN_XCU_VERSION:
701       return _XOPEN_XCU_VERSION;
702
703     case _SC_XOPEN_UNIX:
704       return _XOPEN_UNIX;
705
706     case _SC_XOPEN_CRYPT:
707 #ifdef  _XOPEN_CRYPT
708       return _XOPEN_CRYPT;
709 #else
710       RETURN_NEG_1;
711 #endif
712
713     case _SC_XOPEN_ENH_I18N:
714 #ifdef  _XOPEN_ENH_I18N
715       return _XOPEN_ENH_I18N;
716 #else
717       RETURN_NEG_1;
718 #endif
719
720     case _SC_XOPEN_SHM:
721 #ifdef  _XOPEN_SHM
722       return _XOPEN_SHM;
723 #else
724       RETURN_NEG_1;
725 #endif
726
727     case _SC_XOPEN_XPG2:
728 #ifdef  _XOPEN_XPG2
729       return _XOPEN_XPG2;
730 #else
731       RETURN_NEG_1;
732 #endif
733
734     case _SC_XOPEN_XPG3:
735 #ifdef  _XOPEN_XPG3
736       return _XOPEN_XPG3;
737 #else
738       RETURN_NEG_1;
739 #endif
740
741     case _SC_XOPEN_XPG4:
742 #ifdef  _XOPEN_XPG4
743       return _XOPEN_XPG4;
744 #else
745       RETURN_NEG_1;
746 #endif
747
748     case _SC_CHAR_BIT:
749       return CHAR_BIT;
750
751     case _SC_CHAR_MAX:
752       return CHAR_MAX;
753
754     case _SC_CHAR_MIN:
755       return CHAR_MIN;
756
757     case _SC_INT_MAX:
758       return INT_MAX;
759
760     case _SC_INT_MIN:
761       return INT_MIN;
762
763     case _SC_LONG_BIT:
764       return sizeof (long int) * CHAR_BIT;
765
766     case _SC_WORD_BIT:
767       return sizeof (int) * CHAR_BIT;
768
769     case _SC_MB_LEN_MAX:
770       return MB_LEN_MAX;
771
772     case _SC_NZERO:
773       return NZERO;
774
775     case _SC_SSIZE_MAX:
776       return _POSIX_SSIZE_MAX;
777
778     case _SC_SCHAR_MAX:
779       return SCHAR_MAX;
780
781     case _SC_SCHAR_MIN:
782       return SCHAR_MIN;
783
784     case _SC_SHRT_MAX:
785       return SHRT_MAX;
786
787     case _SC_SHRT_MIN:
788       return SHRT_MIN;
789
790     case _SC_UCHAR_MAX:
791       return UCHAR_MAX;
792
793     case _SC_UINT_MAX:
794       return UINT_MAX;
795
796     case _SC_ULONG_MAX:
797       return ULONG_MAX;
798
799     case _SC_USHRT_MAX:
800       return USHRT_MAX;
801
802     case _SC_NL_ARGMAX:
803 #ifdef  NL_ARGMAX
804       return NL_ARGMAX;
805 #else
806       RETURN_NEG_1;
807 #endif
808
809     case _SC_NL_LANGMAX:
810 #ifdef  NL_LANGMAX
811       return NL_LANGMAX;
812 #else
813       RETURN_NEG_1;
814 #endif
815
816     case _SC_NL_MSGMAX:
817 #ifdef  NL_MSGMAX
818       return NL_MSGMAX;
819 #else
820       RETURN_NEG_1;
821 #endif
822
823     case _SC_NL_NMAX:
824 #ifdef  NL_NMAX
825       return NL_NMAX;
826 #else
827       RETURN_NEG_1;
828 #endif
829
830     case _SC_NL_SETMAX:
831 #ifdef  NL_SETMAX
832       return NL_SETMAX;
833 #else
834       RETURN_NEG_1;
835 #endif
836
837     case _SC_NL_TEXTMAX:
838 #ifdef  NL_TEXTMAX
839       return NL_TEXTMAX;
840 #else
841       RETURN_NEG_1;
842 #endif
843
844     case _SC_XBS5_ILP32_OFF32:
845 #ifdef _XBS5_ILP32_OFF32
846       return _XBS5_ILP32_OFF32;
847 #else
848       RETURN_NEG_1;
849 #endif
850     case _SC_XBS5_ILP32_OFFBIG:
851 #ifdef _XBS5_ILP32_OFFBIG
852       return _XBS5_ILP32_OFFBIG;
853 #else
854       RETURN_NEG_1;
855 #endif
856     case _SC_XBS5_LP64_OFF64:
857 #ifdef _XBS5_LP64_OFF64
858       return _XBS5_LP64_OFF64;
859 #else
860       RETURN_NEG_1;
861 #endif
862     case _SC_XBS5_LPBIG_OFFBIG:
863 #ifdef _XBS5_LPBIG_OFFBIG
864       return _XBS5_LPBIG_OFFBIG;
865 #else
866       RETURN_NEG_1;
867 #endif
868
869     case _SC_XOPEN_LEGACY:
870       return _XOPEN_LEGACY;
871
872     case _SC_XOPEN_REALTIME:
873 #ifdef _XOPEN_REALTIME
874       return _XOPEN_REALTIME;
875 #else
876       RETURN_NEG_1;
877 #endif
878     case _SC_XOPEN_REALTIME_THREADS:
879 #ifdef _XOPEN_REALTIME_THREADS
880       return _XOPEN_REALTIME_THREADS;
881 #else
882       RETURN_NEG_1;
883 #endif
884     }
885 }
886 libc_hidden_proto(sysconf)
887 libc_hidden_def(sysconf)