per-process limits are resources, not sysctl(3) variables
[unix-history] / usr / src / lib / libc / gen / sysconf.c
CommitLineData
2704d6f3
KB
1/*-
2 * Copyright (c) 1993 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Sean Eric Fagan of Cygnus Support.
7 *
8 * %sccs.include.redist.c%
9 */
10
11#if defined(LIBC_SCCS) && !defined(lint)
67f52e00 12static char sccsid[] = "@(#)sysconf.c 5.2 (Berkeley) %G%";
2704d6f3
KB
13#endif /* LIBC_SCCS and not lint */
14
15#include <sys/param.h>
16#include <sys/sysctl.h>
17
18#include <errno.h>
19#include <unistd.h>
20
67f52e00
KB
21/*
22 * sysconf --
23 * get configurable system variables.
24 *
25 * XXX
26 * POSIX 1003.1 (ISO/IEC 9945-1, 4.8.1.3) states that the variable values
27 * not change during the lifetime of the calling process. This would seem
28 * to require that any change to system limits kill all running processes.
29 * A workaround might be to cache the values when they are first retrieved
30 * and then simply return the cached value on subsequent calls. This is
31 * less useful than returning up-to-date values, however.
32 */
2704d6f3
KB
33long
34sysconf(name)
35 int name;
36{
37 struct clockinfo clk;
38 size_t len;
39 int mib[2], value;
40
67f52e00
KB
41 len = sizeof(value);
42
2704d6f3 43 switch (name) {
67f52e00 44/* 1003.1 */
2704d6f3
KB
45 case _SC_ARG_MAX:
46 mib[0] = CTL_KERN;
47 mib[1] = KERN_ARGMAX;
48 break;
49 case _SC_CHILD_MAX:
50 mib[0] = CTL_KERN;
67f52e00 51 mib[1] = KERN_MAXUPROC;
2704d6f3
KB
52 break;
53 case _SC_CLK_TCK:
67f52e00
KB
54 return (CLK_TCK);
55 case _SC_JOB_CONTROL:
2704d6f3 56 mib[0] = CTL_KERN;
67f52e00
KB
57 mib[1] = KERN_JOB_CONTROL;
58 goto yesno;
2704d6f3
KB
59 case _SC_NGROUPS_MAX:
60 mib[0] = CTL_KERN;
61 mib[1] = KERN_NGROUPS;
62 break;
63 case _SC_OPEN_MAX:
64 mib[0] = CTL_KERN;
67f52e00 65 mib[1] = KERN_MAXUFILES;
2704d6f3 66 break;
67f52e00
KB
67 case _SC_STREAM_MAX:
68 mib[0] = CTL_USER;
69 mib[1] = USER_STREAM_MAX;
70 break;
71 case _SC_TZNAME_MAX:
72 mib[0] = CTL_USER;
73 mib[1] = USER_TZNAME_MAX;
2704d6f3
KB
74 break;
75 case _SC_SAVED_IDS:
76 mib[0] = CTL_KERN;
77 mib[1] = KERN_SAVED_IDS;
67f52e00 78 goto yesno;
2704d6f3
KB
79 case _SC_VERSION:
80 mib[0] = CTL_KERN;
81 mib[1] = KERN_POSIX1;
82 break;
67f52e00
KB
83
84/* 1003.2 */
2704d6f3
KB
85 case _SC_BC_BASE_MAX:
86 mib[0] = CTL_USER;
87 mib[1] = USER_BC_BASE_MAX;
88 break;
89 case _SC_BC_DIM_MAX:
90 mib[0] = CTL_USER;
91 mib[1] = USER_BC_DIM_MAX;
92 break;
93 case _SC_BC_SCALE_MAX:
94 mib[0] = CTL_USER;
95 mib[1] = USER_BC_SCALE_MAX;
96 break;
97 case _SC_BC_STRING_MAX:
98 mib[0] = CTL_USER;
99 mib[1] = USER_BC_STRING_MAX;
100 break;
101 case _SC_COLL_WEIGHTS_MAX:
102 mib[0] = CTL_USER;
103 mib[1] = USER_COLL_WEIGHTS_MAX;
104 break;
105 case _SC_EXPR_NEST_MAX:
106 mib[0] = CTL_USER;
107 mib[1] = USER_EXPR_NEST_MAX;
108 break;
109 case _SC_LINE_MAX:
110 mib[0] = CTL_USER;
111 mib[1] = USER_LINE_MAX;
112 break;
113 case _SC_RE_DUP_MAX:
114 mib[0] = CTL_USER;
115 mib[1] = USER_RE_DUP_MAX;
116 break;
117 case _SC_2_VERSION:
118 mib[0] = CTL_USER;
119 mib[1] = USER_POSIX2_VERSION;
120 break;
121 case _SC_2_C_BIND:
122 mib[0] = CTL_USER;
123 mib[1] = USER_POSIX2_C_BIND;
67f52e00 124 goto yesno;
2704d6f3
KB
125 case _SC_2_C_DEV:
126 mib[0] = CTL_USER;
127 mib[1] = USER_POSIX2_C_DEV;
67f52e00
KB
128 goto yesno;
129 case _SC_2_CHAR_TERM:
130 mib[0] = CTL_USER;
131 mib[1] = USER_POSIX2_CHAR_TERM;
132 goto yesno;
2704d6f3
KB
133 case _SC_2_FORT_DEV:
134 mib[0] = CTL_USER;
135 mib[1] = USER_POSIX2_FORT_DEV;
67f52e00 136 goto yesno;
2704d6f3
KB
137 case _SC_2_FORT_RUN:
138 mib[0] = CTL_USER;
139 mib[1] = USER_POSIX2_FORT_RUN;
67f52e00 140 goto yesno;
2704d6f3
KB
141 case _SC_2_LOCALEDEF:
142 mib[0] = CTL_USER;
143 mib[1] = USER_POSIX2_LOCALEDEF;
67f52e00 144 goto yesno;
2704d6f3
KB
145 case _SC_2_SW_DEV:
146 mib[0] = CTL_USER;
147 mib[1] = USER_POSIX2_SW_DEV;
67f52e00
KB
148 goto yesno;
149 case _SC_2_UPE:
150 mib[0] = CTL_USER;
151 mib[1] = USER_POSIX2_UPE;
152yesno: if (sysctl(mib, 2, &value, &len, NULL, 0) == -1)
153 return (-1);
154 if (value == 0)
155 return (-1);
156 return (value);
2704d6f3
KB
157 break;
158 default:
159 errno = EINVAL;
160 return (-1);
161 }
2704d6f3
KB
162 return (sysctl(mib, 2, &value, &len, NULL, 0) == -1 ? -1 : value);
163}