Annotation of src/lib/libc/gen/sysctl.c, Revision 1.7
1.7 ! christos 1: /* $NetBSD: sysctl.c,v 1.6 1997/07/21 14:07:36 jtc Exp $ */
1.2 cgd 2:
1.1 cgd 3: /*-
4: * Copyright (c) 1993
5: * The Regents of the University of California. All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: * 3. All advertising materials mentioning features or use of this software
16: * must display the following acknowledgement:
17: * This product includes software developed by the University of
18: * California, Berkeley and its contributors.
19: * 4. Neither the name of the University nor the names of its contributors
20: * may be used to endorse or promote products derived from this software
21: * without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33: * SUCH DAMAGE.
34: */
35:
1.5 christos 36: #include <sys/cdefs.h>
1.1 cgd 37: #if defined(LIBC_SCCS) && !defined(lint)
1.2 cgd 38: #if 0
1.1 cgd 39: static char sccsid[] = "@(#)sysctl.c 8.2 (Berkeley) 1/4/94";
1.2 cgd 40: #else
1.7 ! christos 41: __RCSID("$NetBSD: sysctl.c,v 1.6 1997/07/21 14:07:36 jtc Exp $");
1.2 cgd 42: #endif
1.1 cgd 43: #endif /* LIBC_SCCS and not lint */
44:
1.6 jtc 45: #include "namespace.h"
1.1 cgd 46: #include <sys/param.h>
47: #include <sys/sysctl.h>
48:
49: #include <errno.h>
50: #include <limits.h>
51: #include <paths.h>
52: #include <stdio.h>
1.4 jtc 53: #include <string.h>
1.1 cgd 54: #include <unistd.h>
1.5 christos 55: #include "extern.h"
1.6 jtc 56:
57: #ifdef __weak_alias
58: __weak_alias(sysctl,_sysctl);
59: #endif
1.1 cgd 60:
61: int
62: sysctl(name, namelen, oldp, oldlenp, newp, newlen)
63: int *name;
1.7 ! christos 64: size_t namelen;
! 65: void *oldp;
! 66: const void *newp;
1.1 cgd 67: size_t *oldlenp, newlen;
68: {
69: if (name[0] != CTL_USER)
1.7 ! christos 70: /* LINTED will fix when sysctl interface gets corrected */
! 71: return (__sysctl(name, namelen, oldp, oldlenp, (void *)newp, newlen));
1.1 cgd 72:
73: if (newp != NULL) {
74: errno = EPERM;
75: return (-1);
76: }
77: if (namelen != 2) {
78: errno = EINVAL;
79: return (-1);
80: }
81:
82: switch (name[1]) {
83: case USER_CS_PATH:
84: if (oldp && *oldlenp < sizeof(_PATH_STDPATH))
85: return (ENOMEM);
86: *oldlenp = sizeof(_PATH_STDPATH);
87: if (oldp != NULL)
88: memmove(oldp, _PATH_STDPATH, sizeof(_PATH_STDPATH));
89: return (0);
90: }
91:
92: if (oldp && *oldlenp < sizeof(int))
93: return (ENOMEM);
94: *oldlenp = sizeof(int);
95: if (oldp == NULL)
96: return (0);
97:
98: switch (name[1]) {
99: case USER_BC_BASE_MAX:
100: *(int *)oldp = BC_BASE_MAX;
101: return (0);
102: case USER_BC_DIM_MAX:
103: *(int *)oldp = BC_DIM_MAX;
104: return (0);
105: case USER_BC_SCALE_MAX:
106: *(int *)oldp = BC_SCALE_MAX;
107: return (0);
108: case USER_BC_STRING_MAX:
109: *(int *)oldp = BC_STRING_MAX;
110: return (0);
111: case USER_COLL_WEIGHTS_MAX:
112: *(int *)oldp = COLL_WEIGHTS_MAX;
113: return (0);
114: case USER_EXPR_NEST_MAX:
115: *(int *)oldp = EXPR_NEST_MAX;
116: return (0);
117: case USER_LINE_MAX:
118: *(int *)oldp = LINE_MAX;
119: return (0);
120: case USER_RE_DUP_MAX:
121: *(int *)oldp = RE_DUP_MAX;
122: return (0);
123: case USER_POSIX2_VERSION:
124: *(int *)oldp = _POSIX2_VERSION;
125: return (0);
126: case USER_POSIX2_C_BIND:
127: #ifdef POSIX2_C_BIND
128: *(int *)oldp = 1;
129: #else
130: *(int *)oldp = 0;
131: #endif
132: return (0);
133: case USER_POSIX2_C_DEV:
134: #ifdef POSIX2_C_DEV
135: *(int *)oldp = 1;
136: #else
137: *(int *)oldp = 0;
138: #endif
139: return (0);
140: case USER_POSIX2_CHAR_TERM:
141: #ifdef POSIX2_CHAR_TERM
142: *(int *)oldp = 1;
143: #else
144: *(int *)oldp = 0;
145: #endif
146: return (0);
147: case USER_POSIX2_FORT_DEV:
148: #ifdef POSIX2_FORT_DEV
149: *(int *)oldp = 1;
150: #else
151: *(int *)oldp = 0;
152: #endif
153: return (0);
154: case USER_POSIX2_FORT_RUN:
155: #ifdef POSIX2_FORT_RUN
156: *(int *)oldp = 1;
157: #else
158: *(int *)oldp = 0;
159: #endif
160: return (0);
161: case USER_POSIX2_LOCALEDEF:
162: #ifdef POSIX2_LOCALEDEF
163: *(int *)oldp = 1;
164: #else
165: *(int *)oldp = 0;
166: #endif
167: return (0);
168: case USER_POSIX2_SW_DEV:
169: #ifdef POSIX2_SW_DEV
170: *(int *)oldp = 1;
171: #else
172: *(int *)oldp = 0;
173: #endif
174: return (0);
175: case USER_POSIX2_UPE:
176: #ifdef POSIX2_UPE
177: *(int *)oldp = 1;
178: #else
179: *(int *)oldp = 0;
180: #endif
181: return (0);
182: case USER_STREAM_MAX:
183: *(int *)oldp = FOPEN_MAX;
184: return (0);
185: case USER_TZNAME_MAX:
186: *(int *)oldp = NAME_MAX;
187: return (0);
188: default:
189: errno = EINVAL;
190: return (-1);
191: }
192: /* NOTREACHED */
193: }
CVSweb <webmaster@jp.NetBSD.org>