[BACK]Return to sysctl.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gen

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>