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) 12 static char sccsid[] = "@(#)sysconf.c 5.1 (Berkeley) 05/04/93"; 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 21 long 22 sysconf(name) 23 int name; 24 { 25 struct clockinfo clk; 26 size_t len; 27 int mib[2], value; 28 29 switch (name) { 30 case _SC_ARG_MAX: 31 mib[0] = CTL_KERN; 32 mib[1] = KERN_ARGMAX; 33 break; 34 case _SC_CHILD_MAX: 35 mib[0] = CTL_KERN; 36 mib[1] = KERN_MAXPROC; 37 break; 38 case _SC_CLK_TCK: 39 mib[0] = CTL_KERN; 40 mib[1] = KERN_CLOCKRATE; 41 len = sizeof(struct clockinfo); 42 return (sysctl(mib, 2, 43 &clk, &len, NULL, 0) == -1 ? -1 : clk.hz); 44 case _SC_NGROUPS_MAX: 45 mib[0] = CTL_KERN; 46 mib[1] = KERN_NGROUPS; 47 break; 48 case _SC_OPEN_MAX: 49 mib[0] = CTL_KERN; 50 mib[1] = KERN_MAXFILES; 51 break; 52 case _SC_JOB_CONTROL: 53 mib[0] = CTL_KERN; 54 mib[1] = KERN_JOB_CONTROL; 55 break; 56 case _SC_SAVED_IDS: 57 mib[0] = CTL_KERN; 58 mib[1] = KERN_SAVED_IDS; 59 break; 60 case _SC_VERSION: 61 mib[0] = CTL_KERN; 62 mib[1] = KERN_POSIX1; 63 break; 64 case _SC_BC_BASE_MAX: 65 mib[0] = CTL_USER; 66 mib[1] = USER_BC_BASE_MAX; 67 break; 68 case _SC_BC_DIM_MAX: 69 mib[0] = CTL_USER; 70 mib[1] = USER_BC_DIM_MAX; 71 break; 72 case _SC_BC_SCALE_MAX: 73 mib[0] = CTL_USER; 74 mib[1] = USER_BC_SCALE_MAX; 75 break; 76 case _SC_BC_STRING_MAX: 77 mib[0] = CTL_USER; 78 mib[1] = USER_BC_STRING_MAX; 79 break; 80 case _SC_COLL_WEIGHTS_MAX: 81 mib[0] = CTL_USER; 82 mib[1] = USER_COLL_WEIGHTS_MAX; 83 break; 84 case _SC_EXPR_NEST_MAX: 85 mib[0] = CTL_USER; 86 mib[1] = USER_EXPR_NEST_MAX; 87 break; 88 case _SC_LINE_MAX: 89 mib[0] = CTL_USER; 90 mib[1] = USER_LINE_MAX; 91 break; 92 case _SC_RE_DUP_MAX: 93 mib[0] = CTL_USER; 94 mib[1] = USER_RE_DUP_MAX; 95 break; 96 case _SC_2_VERSION: 97 mib[0] = CTL_USER; 98 mib[1] = USER_POSIX2_VERSION; 99 break; 100 case _SC_2_C_BIND: 101 mib[0] = CTL_USER; 102 mib[1] = USER_POSIX2_C_BIND; 103 break; 104 case _SC_2_C_DEV: 105 mib[0] = CTL_USER; 106 mib[1] = USER_POSIX2_C_DEV; 107 break; 108 case _SC_2_FORT_DEV: 109 mib[0] = CTL_USER; 110 mib[1] = USER_POSIX2_FORT_DEV; 111 break; 112 case _SC_2_FORT_RUN: 113 mib[0] = CTL_USER; 114 mib[1] = USER_POSIX2_FORT_RUN; 115 break; 116 case _SC_2_LOCALEDEF: 117 mib[0] = CTL_USER; 118 mib[1] = USER_POSIX2_LOCALEDEF; 119 break; 120 case _SC_2_SW_DEV: 121 mib[0] = CTL_USER; 122 mib[1] = USER_POSIX2_SW_DEV; 123 break; 124 default: 125 errno = EINVAL; 126 return (-1); 127 } 128 len = sizeof(value); 129 return (sysctl(mib, 2, &value, &len, NULL, 0) == -1 ? -1 : value); 130 } 131