update from main archive 960906
[kopensolaris-gnu/glibc.git] / sysdeps / posix / sysconf.c
1 /* Copyright (C) 1991, 1993, 1995, 1996 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
16 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17 Cambridge, MA 02139, USA.  */
18
19 #include <errno.h>
20 #include <limits.h>
21 #include <grp.h>
22 #include <pwd.h>
23 #include <stddef.h>
24 #include <stdio.h>
25 #include <time.h>
26 #include <unistd.h>
27
28 extern int __getdtablesize __P ((void));
29 extern size_t __getpagesize __P ((void));
30
31 /* Get the value of the system variable NAME.  */
32 long int
33 __sysconf (name)
34      int name;
35 {
36   switch (name)
37     {
38     default:
39       errno = EINVAL;
40       return -1;
41
42     case _SC_ARG_MAX:
43 #ifdef  ARG_MAX
44       return ARG_MAX;
45 #else
46       return -1;
47 #endif
48
49     case _SC_CHILD_MAX:
50 #ifdef  CHILD_MAX
51       return CHILD_MAX;
52 #else
53       return -1;
54 #endif
55
56     case _SC_CLK_TCK:
57 #ifdef  CLK_TCK
58       return CLK_TCK;
59 #else
60       return 60;
61 #endif
62
63     case _SC_NGROUPS_MAX:
64 #ifdef  NGROUPS_MAX
65       return NGROUPS_MAX;
66 #else
67       return -1;
68 #endif
69
70     case _SC_OPEN_MAX:
71       return __getdtablesize ();
72
73     case _SC_STREAM_MAX:
74 #ifdef  STREAM_MAX
75       return STREAM_MAX;
76 #else
77       return FOPEN_MAX;
78 #endif
79
80     case _SC_TZNAME_MAX:
81       return __tzname_max ();
82
83     case _SC_JOB_CONTROL:
84 #ifdef  _POSIX_JOB_CONTROL
85       return 1;
86 #else
87       return -1;
88 #endif
89
90     case _SC_SAVED_IDS:
91 #ifdef  _POSIX_SAVED_IDS
92       return 1;
93 #else
94       return -1;
95 #endif
96
97     case _SC_REALTIME_SIGNALS:
98 #ifdef  _POSIX_REALTIME_SIGNALS
99       return 1;
100 #else
101       return -1;
102 #endif
103
104     case _SC_PRIORITY_SCHEDULING:
105 #ifdef  _POSIX_PRIORITY_SCHEDULING
106       return 1;
107 #else
108       return -1;
109 #endif
110
111     case _SC_TIMERS:
112 #ifdef  _POSIX_TIMERS
113       return 1;
114 #else
115       return -1;
116 #endif
117
118     case _SC_ASYNCHRONOUS_IO:
119 #ifdef  _POSIX_ASYNCHRONOUS_IO
120       return 1;
121 #else
122       return -1;
123 #endif
124
125     case _SC_PRIORITIZED_IO:
126 #ifdef  _POSIX_PRIORITIZED_IO
127       return 1;
128 #else
129       return -1;
130 #endif
131
132     case _SC_SYNCHRONIZED_IO:
133 #ifdef  _POSIX_SYNCHRONIZED_IO
134       return 1;
135 #else
136       return -1;
137 #endif
138
139     case _SC_FSYNC:
140 #ifdef  _POSIX_FSYNC
141       return 1;
142 #else
143       return -1;
144 #endif
145
146     case _SC_MAPPED_FILES:
147 #ifdef  _POSIX_MAPPED_FILES
148       return 1;
149 #else
150       return -1;
151 #endif
152
153     case _SC_MEMLOCK:
154 #ifdef  _POSIX_MEMLOCK
155       return 1;
156 #else
157       return -1;
158 #endif
159
160     case _SC_MEMLOCK_RANGE:
161 #ifdef  _POSIX_MEMLOCK_RANGE
162       return 1;
163 #else
164       return -1;
165 #endif
166
167     case _SC_MEMORY_PROTECTION:
168 #ifdef  _POSIX_MEMORY_PROTECTION
169       return 1;
170 #else
171       return -1;
172 #endif
173
174     case _SC_MESSAGE_PASSING:
175 #ifdef  _POSIX_MESSAGE_PASSING
176       return 1;
177 #else
178       return -1;
179 #endif
180
181     case _SC_SEMAPHORES:
182 #ifdef  _POSIX_SEMAPHORES
183       return 1;
184 #else
185       return -1;
186 #endif
187
188     case _SC_SHARED_MEMORY_OBJECTS:
189 #ifdef  _POSIX_SHARED_MEMORY_OBJECTS
190       return 1;
191 #else
192       return -1;
193 #endif
194
195     case _SC_VERSION:
196       return _POSIX_VERSION;
197
198     case _SC_PAGESIZE:
199       return __getpagesize ();
200
201     case _SC_AIO_LISTIO_MAX:
202 #ifdef  AIO_LISTIO_MAX
203       return AIO_LISTIO_MAX;
204 #else
205       return -1;
206 #endif
207
208     case _SC_AIO_MAX:
209 #ifdef  AIO_MAX
210       return AIO_MAX;
211 #else
212       return -1;
213 #endif
214
215     case _SC_AIO_PRIO_DELTA_MAX:
216 #ifdef  AIO_PRIO_DELTA_MAX
217       return AIO_PRIO_DELTA_MAX;
218 #else
219       return -1;
220 #endif
221
222     case _SC_DELAYTIMER_MAX:
223 #ifdef  DELAYTIMER_MAX
224       return DELAYTIMER_MAX;
225 #else
226       return -1;
227 #endif
228
229     case _SC_MQ_OPEN_MAX:
230 #ifdef  MQ_OPEN_MAX
231       return MQ_OPEN_MAX;
232 #else
233       return -1;
234 #endif
235
236     case _SC_MQ_PRIO_MAX:
237 #ifdef  MQ_PRIO_MAX
238       return MQ_PRIO_MAX;
239 #else
240       return -1;
241 #endif
242
243     case _SC_RTSIG_MAX:
244 #ifdef  RTSIG_MAX
245       return RTSIG_MAX;
246 #else
247       return -1;
248 #endif
249
250     case _SC_SEM_NSEMS_MAX:
251 #ifdef  SEM_NSEMS_MAX
252       return SEM_NSEMS_MAX;
253 #else
254       return -1;
255 #endif
256
257     case _SC_SEM_VALUE_MAX:
258 #ifdef  SEM_VALUE_MAX
259       return SEM_VALUE_MAX;
260 #else
261       return -1;
262 #endif
263
264     case _SC_SIGQUEUE_MAX:
265 #ifdef  SIGQUEUE_MAX
266       return SIGQUEUE_MAX;
267 #else
268       return -1;
269 #endif
270
271     case _SC_TIMER_MAX:
272 #ifdef  TIMER_MAX
273       return TIMER_MAX;
274 #else
275       return -1;
276 #endif
277
278     case _SC_BC_BASE_MAX:
279 #ifdef  BC_BASE_MAX
280       return BC_BASE_MAX;
281 #else
282       return -1;
283 #endif
284
285     case _SC_BC_DIM_MAX:
286 #ifdef  BC_DIM_MAX
287       return BC_DIM_MAX;
288 #else
289       return -1;
290 #endif
291
292     case _SC_BC_SCALE_MAX:
293 #ifdef  BC_SCALE_MAX
294       return BC_SCALE_MAX;
295 #else
296       return -1;
297 #endif
298
299     case _SC_BC_STRING_MAX:
300 #ifdef  BC_STRING_MAX
301       return BC_STRING_MAX;
302 #else
303       return -1;
304 #endif
305
306     case _SC_COLL_WEIGHTS_MAX:
307 #ifdef  COLL_WEIGHTS_MAX
308       return COLL_WEIGHTS_MAX;
309 #else
310       return -1;
311 #endif
312
313     case _SC_EQUIV_CLASS_MAX:
314 #ifdef  EQUIV_CLASS_MAX
315       return EQUIV_CLASS_MAX;
316 #else
317       return -1;
318 #endif
319
320     case _SC_EXPR_NEST_MAX:
321 #ifdef  EXPR_NEST_MAX
322       return EXPR_NEST_MAX;
323 #else
324       return -1;
325 #endif
326
327     case _SC_LINE_MAX:
328 #ifdef  LINE_MAX
329       return LINE_MAX;
330 #else
331       return -1;
332 #endif
333
334     case _SC_RE_DUP_MAX:
335 #ifdef  RE_DUP_MAX
336       return RE_DUP_MAX;
337 #else
338       return -1;
339 #endif
340
341     case _SC_CHARCLASS_NAME_MAX:
342 #ifdef  CHARCLASS_NAME_MAX
343       return CHARCLASS_NAME_MAX;
344 #else
345       return -1;
346 #endif
347
348     case _SC_PII:
349 #ifdef  _POSIX_PII
350       return 1;
351 #else
352       return -1;
353 #endif
354
355     case _SC_PII_XTI:
356 #ifdef  _POSIX_PII_XTI
357       return 1;
358 #else
359       return -1;
360 #endif
361
362     case _SC_PII_SOCKET:
363 #ifdef  _POSIX_PII_SOCKET
364       return 1;
365 #else
366       return -1;
367 #endif
368
369     case _SC_PII_INTERNET:
370 #ifdef  _POSIX_PII_INTERNET
371       return 1;
372 #else
373       return -1;
374 #endif
375
376     case _SC_PII_OSI:
377 #ifdef  _POSIX_PII_OSI
378       return 1;
379 #else
380       return -1;
381 #endif
382
383     case _SC_POLL:
384 #ifdef  _POSIX_POLL
385       return 1;
386 #else
387       return -1;
388 #endif
389
390     case _SC_SELECT:
391 #ifdef  _POSIX_SELECT
392       return 1;
393 #else
394       return -1;
395 #endif
396
397     case _SC_UIO_MAXIOV:
398 #ifdef  UIO_MAXIOV
399       return UIO_MAXIOV;
400 #else
401       return -1;
402 #endif
403
404     case _SC_PII_INTERNET_STREAM:
405 #ifdef  _POSIX_PII_INTERNET_STREAM
406       return 1;
407 #else
408       return -1;
409 #endif
410
411     case _SC_PII_INTERNET_DGRAM:
412 #ifdef  _POSIX_PII_INTERNET_DGRAM
413       return 1;
414 #else
415       return -1;
416 #endif
417
418     case _SC_PII_OSI_COTS:
419 #ifdef  _POSIX_PII_OSI_COTS
420       return 1;
421 #else
422       return -1;
423 #endif
424
425     case _SC_PII_OSI_CLTS:
426 #ifdef  _POSIX_PII_OSI_CLTS
427       return 1;
428 #else
429       return -1;
430 #endif
431
432     case _SC_PII_OSI_M:
433 #ifdef  _POSIX_PII_OSI_M
434       return 1;
435 #else
436       return -1;
437 #endif
438
439     case _SC_T_IOV_MAX:
440 #ifdef  _T_IOV_MAX
441       return _T_IOV_MAX;
442 #else
443       return -1;
444 #endif
445
446     case _SC_2_VERSION:
447       /* This is actually supposed to return the version
448          of the 1003.2 utilities on the system {POSIX2_VERSION}.  */
449       return _POSIX2_C_VERSION;
450
451     case _SC_2_C_BIND:
452 #ifdef  _POSIX2_C_BIND
453       return _POSIX2_C_BIND;
454 #else
455       return -1;
456 #endif
457
458     case _SC_2_C_DEV:
459 #ifdef  _POSIX2_C_DEV
460       return _POSIX2_C_DEV;
461 #else
462       return -1;
463 #endif
464
465     case _SC_2_FORT_DEV:
466 #ifdef  _POSIX2_FORT_DEV
467       return _POSIX2_FORT_DEV;
468 #else
469       return -1;
470 #endif
471
472     case _SC_2_LOCALEDEF:
473 #ifdef  _POSIX2_LOCALEDEF
474       return _POSIX2_LOCALEDEF;
475 #else
476       return -1;
477 #endif
478
479     case _SC_2_SW_DEV:
480 #ifdef  _POSIX2_SW_DEV
481       return _POSIX2_SW_DEV;
482 #else
483       return -1;
484 #endif
485
486       /* POSIX 1003.1c (POSIX Threads).  */
487     case _SC_THREADS:
488 #ifdef  _POSIX_THREADS
489       return 1;
490 #else
491       return -1;
492 #endif
493
494     case _SC_THREAD_SAFE_FUNCTIONS:
495 #ifdef  _POSIX_THREAD_SAFE_FUNCTIONS
496       return 1;
497 #else
498       return -1;
499 #endif
500
501     case _SC_GETGR_R_SIZE_MAX:
502 #ifdef  NSS_BUFLEN_GROUP
503       return NSS_BUFLEN_GROUP;
504 #else
505       return -1;
506 #endif
507
508     case _SC_GETPW_R_SIZE_MAX:
509 #ifdef  NSS_BUFLEN_PASSWD
510       return NSS_BUFLEN_PASSWD;
511 #else
512       return -1;
513 #endif
514
515     case _SC_LOGIN_NAME_MAX:
516 #ifdef  _POSIX_LOGIN_NAME_MAX
517       return _POSIX_LOGIN_NAME_MAX;
518 #else
519       return -1;
520 #endif
521
522     case _SC_TTY_NAME_MAX:
523 #ifdef  _POSIX_TTY_NAME_MAX
524       return _POSIX_TTY_NAME_MAX;
525 #else
526       return -1;
527 #endif
528
529     case _SC_THREAD_DESTRUCTOR_ITERATIONS:
530 #ifdef  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
531       return _POSIX_THREAD_DESTRUCTOR_ITERATIONS;
532 #else
533       return -1;
534 #endif
535
536     case _SC_THREAD_KEYS_MAX:
537 #ifdef  PTHREAD_KEYS_MAX
538       return PTHREAD_KEYS_MAX;
539 #else
540       return -1;
541 #endif
542
543     case _SC_THREAD_STACK_MIN:
544 #ifdef  PTHREAD_STACK_MIN
545       return PTHREAD_STACK_MIN;
546 #else
547       return -1;
548 #endif
549
550     case _SC_THREAD_THREADS_MAX:
551 #ifdef  PTHREAD_THREADS_MAX
552       return PTHREAD_THREADS_MAX;
553 #else
554       return -1;
555 #endif
556
557     case _SC_THREAD_ATTR_STACKADDR:
558 #ifdef  _POSIX_THREAD_ATTR_STACKADDR
559       return 1;
560 #else
561       return -1;
562 #endif
563
564     case _SC_THREAD_ATTR_STACKSIZE:
565 #ifdef  _POSIX_THREAD_ATTR_STACKSIZE
566       return 1;
567 #else
568       return -1;
569 #endif
570
571     case _SC_THREAD_PRIORITY_SCHEDULING:
572 #ifdef  _POSIX_THREAD_PRIORITY_SCHEDULING
573       return 1;
574 #else
575       return -1;
576 #endif
577
578     case _SC_THREAD_PRIO_INHERIT:
579 #ifdef  _POSIX_THREAD_PRIO_INHERIT
580       return 1;
581 #else
582       return -1;
583 #endif
584
585     case _SC_THREAD_PRIO_PROTECT:
586 #ifdef  _POSIX_THREAD_PRIO_PROTECT
587       return 1;
588 #else
589       return -1;
590 #endif
591
592     case _SC_THREAD_PROCESS_SHARED:
593 #ifdef  _POSIX_THREAD_PROCESS_SHARED
594       return 1;
595 #else
596       return -1;
597 #endif
598     }
599 }
600
601 weak_alias (__sysconf, sysconf)