xref: /csrg-svn/lib/libc/gen/sysctl.c (revision 65404)
160021Sbostic /*-
261111Sbostic  * Copyright (c) 1993
361111Sbostic  *	The Regents of the University of California.  All rights reserved.
460021Sbostic  *
560021Sbostic  * %sccs.include.redist.c%
660021Sbostic  */
760021Sbostic 
860021Sbostic #if defined(LIBC_SCCS) && !defined(lint)
9*65404Sbostic static char sccsid[] = "@(#)sysctl.c	8.2 (Berkeley) 01/04/94";
1060021Sbostic #endif /* LIBC_SCCS and not lint */
1160021Sbostic 
1260021Sbostic #include <sys/param.h>
1360021Sbostic #include <sys/sysctl.h>
1460021Sbostic 
1560021Sbostic #include <errno.h>
1660021Sbostic #include <limits.h>
1760021Sbostic #include <paths.h>
1860272Sbostic #include <stdio.h>
1960021Sbostic #include <unistd.h>
2060021Sbostic 
2160021Sbostic int
sysctl(name,namelen,oldp,oldlenp,newp,newlen)2260021Sbostic sysctl(name, namelen, oldp, oldlenp, newp, newlen)
2360021Sbostic 	int *name;
2460021Sbostic 	u_int namelen;
2560021Sbostic 	void *oldp, *newp;
2660021Sbostic 	size_t *oldlenp, newlen;
2760021Sbostic {
2860021Sbostic 	if (name[0] != CTL_USER)
2960021Sbostic 		return (__sysctl(name, namelen, oldp, oldlenp, newp, newlen));
3060021Sbostic 
3160021Sbostic 	if (newp != NULL) {
3260021Sbostic 		errno = EPERM;
3360021Sbostic 		return (-1);
3460021Sbostic 	}
3560021Sbostic 	if (namelen != 2) {
3660021Sbostic 		errno = EINVAL;
3760021Sbostic 		return (-1);
3860021Sbostic 	}
3960021Sbostic 
4060021Sbostic 	switch (name[1]) {
4160021Sbostic 	case USER_CS_PATH:
4260021Sbostic 		if (oldp && *oldlenp < sizeof(_PATH_STDPATH))
4360021Sbostic 			return (ENOMEM);
4460021Sbostic 		*oldlenp = sizeof(_PATH_STDPATH);
4560021Sbostic 		if (oldp != NULL)
4660021Sbostic 			memmove(oldp, _PATH_STDPATH, sizeof(_PATH_STDPATH));
4760021Sbostic 		return (0);
4860021Sbostic 	}
4960021Sbostic 
5060021Sbostic 	if (oldp && *oldlenp < sizeof(int))
5160021Sbostic 		return (ENOMEM);
5260021Sbostic 	*oldlenp = sizeof(int);
5360021Sbostic 	if (oldp == NULL)
5460021Sbostic 		return (0);
5560021Sbostic 
5660021Sbostic 	switch (name[1]) {
5760021Sbostic 	case USER_BC_BASE_MAX:
5860021Sbostic 		*(int *)oldp = BC_BASE_MAX;
5960021Sbostic 		return (0);
6060021Sbostic 	case USER_BC_DIM_MAX:
6160021Sbostic 		*(int *)oldp = BC_DIM_MAX;
6260021Sbostic 		return (0);
6360021Sbostic 	case USER_BC_SCALE_MAX:
6460021Sbostic 		*(int *)oldp = BC_SCALE_MAX;
6560021Sbostic 		return (0);
6660021Sbostic 	case USER_BC_STRING_MAX:
6760021Sbostic 		*(int *)oldp = BC_STRING_MAX;
6860021Sbostic 		return (0);
6960021Sbostic 	case USER_COLL_WEIGHTS_MAX:
7060021Sbostic 		*(int *)oldp = COLL_WEIGHTS_MAX;
7160021Sbostic 		return (0);
7260021Sbostic 	case USER_EXPR_NEST_MAX:
7360021Sbostic 		*(int *)oldp = EXPR_NEST_MAX;
7460021Sbostic 		return (0);
7560021Sbostic 	case USER_LINE_MAX:
7660021Sbostic 		*(int *)oldp = LINE_MAX;
7760021Sbostic 		return (0);
7860021Sbostic 	case USER_RE_DUP_MAX:
7960021Sbostic 		*(int *)oldp = RE_DUP_MAX;
8060021Sbostic 		return (0);
8160021Sbostic 	case USER_POSIX2_VERSION:
8260021Sbostic 		*(int *)oldp = _POSIX2_VERSION;
8360021Sbostic 		return (0);
8460021Sbostic 	case USER_POSIX2_C_BIND:
8560021Sbostic #ifdef POSIX2_C_BIND
8660021Sbostic 		*(int *)oldp = 1;
8760021Sbostic #else
8860021Sbostic 		*(int *)oldp = 0;
8960021Sbostic #endif
9060021Sbostic 		return (0);
9160021Sbostic 	case USER_POSIX2_C_DEV:
9260021Sbostic #ifdef	POSIX2_C_DEV
9360021Sbostic 		*(int *)oldp = 1;
9460021Sbostic #else
9560021Sbostic 		*(int *)oldp = 0;
9660021Sbostic #endif
9760021Sbostic 		return (0);
9860021Sbostic 	case USER_POSIX2_CHAR_TERM:
9960021Sbostic #ifdef	POSIX2_CHAR_TERM
10060021Sbostic 		*(int *)oldp = 1;
10160021Sbostic #else
10260021Sbostic 		*(int *)oldp = 0;
10360021Sbostic #endif
10460021Sbostic 		return (0);
10560021Sbostic 	case USER_POSIX2_FORT_DEV:
10660021Sbostic #ifdef	POSIX2_FORT_DEV
10760021Sbostic 		*(int *)oldp = 1;
10860021Sbostic #else
10960021Sbostic 		*(int *)oldp = 0;
11060021Sbostic #endif
11160021Sbostic 		return (0);
11260021Sbostic 	case USER_POSIX2_FORT_RUN:
11360021Sbostic #ifdef	POSIX2_FORT_RUN
11460021Sbostic 		*(int *)oldp = 1;
11560021Sbostic #else
11660021Sbostic 		*(int *)oldp = 0;
11760021Sbostic #endif
11860021Sbostic 		return (0);
11960021Sbostic 	case USER_POSIX2_LOCALEDEF:
12060021Sbostic #ifdef	POSIX2_LOCALEDEF
12160021Sbostic 		*(int *)oldp = 1;
12260021Sbostic #else
12360021Sbostic 		*(int *)oldp = 0;
12460021Sbostic #endif
12560021Sbostic 		return (0);
12660021Sbostic 	case USER_POSIX2_SW_DEV:
12760021Sbostic #ifdef	POSIX2_SW_DEV
12860021Sbostic 		*(int *)oldp = 1;
12960021Sbostic #else
13060021Sbostic 		*(int *)oldp = 0;
13160021Sbostic #endif
13260021Sbostic 		return (0);
13360021Sbostic 	case USER_POSIX2_UPE:
13460021Sbostic #ifdef	POSIX2_UPE
13560021Sbostic 		*(int *)oldp = 1;
13660021Sbostic #else
13760021Sbostic 		*(int *)oldp = 0;
13860021Sbostic #endif
13960021Sbostic 		return (0);
14060272Sbostic 	case USER_STREAM_MAX:
14160272Sbostic 		*(int *)oldp = FOPEN_MAX;
14260272Sbostic 		return (0);
14360272Sbostic 	case USER_TZNAME_MAX:
144*65404Sbostic 		*(int *)oldp = NAME_MAX;
14560272Sbostic 		return (0);
14660021Sbostic 	default:
14760021Sbostic 		errno = EINVAL;
14860021Sbostic 		return (-1);
14960021Sbostic 	}
15060021Sbostic 	/* NOTREACHED */
15160021Sbostic }
152