1 /*- 2 * Copyright (c) 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #if defined(LIBC_SCCS) && !defined(lint) 9 static char sccsid[] = "@(#)sysctl.c 8.2 (Berkeley) 01/04/94"; 10 #endif /* LIBC_SCCS and not lint */ 11 12 #include <sys/param.h> 13 #include <sys/sysctl.h> 14 15 #include <errno.h> 16 #include <limits.h> 17 #include <paths.h> 18 #include <stdio.h> 19 #include <unistd.h> 20 21 int 22 sysctl(name, namelen, oldp, oldlenp, newp, newlen) 23 int *name; 24 u_int namelen; 25 void *oldp, *newp; 26 size_t *oldlenp, newlen; 27 { 28 if (name[0] != CTL_USER) 29 return (__sysctl(name, namelen, oldp, oldlenp, newp, newlen)); 30 31 if (newp != NULL) { 32 errno = EPERM; 33 return (-1); 34 } 35 if (namelen != 2) { 36 errno = EINVAL; 37 return (-1); 38 } 39 40 switch (name[1]) { 41 case USER_CS_PATH: 42 if (oldp && *oldlenp < sizeof(_PATH_STDPATH)) 43 return (ENOMEM); 44 *oldlenp = sizeof(_PATH_STDPATH); 45 if (oldp != NULL) 46 memmove(oldp, _PATH_STDPATH, sizeof(_PATH_STDPATH)); 47 return (0); 48 } 49 50 if (oldp && *oldlenp < sizeof(int)) 51 return (ENOMEM); 52 *oldlenp = sizeof(int); 53 if (oldp == NULL) 54 return (0); 55 56 switch (name[1]) { 57 case USER_BC_BASE_MAX: 58 *(int *)oldp = BC_BASE_MAX; 59 return (0); 60 case USER_BC_DIM_MAX: 61 *(int *)oldp = BC_DIM_MAX; 62 return (0); 63 case USER_BC_SCALE_MAX: 64 *(int *)oldp = BC_SCALE_MAX; 65 return (0); 66 case USER_BC_STRING_MAX: 67 *(int *)oldp = BC_STRING_MAX; 68 return (0); 69 case USER_COLL_WEIGHTS_MAX: 70 *(int *)oldp = COLL_WEIGHTS_MAX; 71 return (0); 72 case USER_EXPR_NEST_MAX: 73 *(int *)oldp = EXPR_NEST_MAX; 74 return (0); 75 case USER_LINE_MAX: 76 *(int *)oldp = LINE_MAX; 77 return (0); 78 case USER_RE_DUP_MAX: 79 *(int *)oldp = RE_DUP_MAX; 80 return (0); 81 case USER_POSIX2_VERSION: 82 *(int *)oldp = _POSIX2_VERSION; 83 return (0); 84 case USER_POSIX2_C_BIND: 85 #ifdef POSIX2_C_BIND 86 *(int *)oldp = 1; 87 #else 88 *(int *)oldp = 0; 89 #endif 90 return (0); 91 case USER_POSIX2_C_DEV: 92 #ifdef POSIX2_C_DEV 93 *(int *)oldp = 1; 94 #else 95 *(int *)oldp = 0; 96 #endif 97 return (0); 98 case USER_POSIX2_CHAR_TERM: 99 #ifdef POSIX2_CHAR_TERM 100 *(int *)oldp = 1; 101 #else 102 *(int *)oldp = 0; 103 #endif 104 return (0); 105 case USER_POSIX2_FORT_DEV: 106 #ifdef POSIX2_FORT_DEV 107 *(int *)oldp = 1; 108 #else 109 *(int *)oldp = 0; 110 #endif 111 return (0); 112 case USER_POSIX2_FORT_RUN: 113 #ifdef POSIX2_FORT_RUN 114 *(int *)oldp = 1; 115 #else 116 *(int *)oldp = 0; 117 #endif 118 return (0); 119 case USER_POSIX2_LOCALEDEF: 120 #ifdef POSIX2_LOCALEDEF 121 *(int *)oldp = 1; 122 #else 123 *(int *)oldp = 0; 124 #endif 125 return (0); 126 case USER_POSIX2_SW_DEV: 127 #ifdef POSIX2_SW_DEV 128 *(int *)oldp = 1; 129 #else 130 *(int *)oldp = 0; 131 #endif 132 return (0); 133 case USER_POSIX2_UPE: 134 #ifdef POSIX2_UPE 135 *(int *)oldp = 1; 136 #else 137 *(int *)oldp = 0; 138 #endif 139 return (0); 140 case USER_STREAM_MAX: 141 *(int *)oldp = FOPEN_MAX; 142 return (0); 143 case USER_TZNAME_MAX: 144 *(int *)oldp = NAME_MAX; 145 return (0); 146 default: 147 errno = EINVAL; 148 return (-1); 149 } 150 /* NOTREACHED */ 151 } 152