Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 7 Oct 2015 15:45:10 -0700
From:      Bryan Drewery <bdrewery@FreeBSD.org>
To:        NGie Cooper <yaneurabeya@gmail.com>, Baptiste Daroussin <bapt@freebsd.org>
Cc:        Conrad Meyer <cem@freebsd.org>, "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>, "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, "src-committers@freebsd.org" <src-committers@freebsd.org>
Subject:   Re: svn commit: r288984 - head/sbin/sysctl
Message-ID:  <5615A076.9010403@FreeBSD.org>
In-Reply-To: <CAGHfRMBV7%2BECQshL=F8XuASQDNr1FSwFix2aDd5cOa4ecF0yRQ@mail.gmail.com>
References:  <201510070928.t979SsMQ057994@repo.freebsd.org> <CAG6CVpVdOeUFg3cSffTKcn9T2SGvLMhERiesecwZ6aoeAjpLjA@mail.gmail.com> <20151007223533.GF91729@ivaldir.etoilebsd.net> <CAGHfRMBV7%2BECQshL=F8XuASQDNr1FSwFix2aDd5cOa4ecF0yRQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
On 10/7/2015 3:41 PM, NGie Cooper wrote:
> On Wed, Oct 7, 2015 at 3:35 PM, Baptiste Daroussin <bapt@freebsd.org> wrote:
> ...
>> I do not think it is, but I couldn't find a way to reproduce another case than
>> ENOENT, so I thought maybe the best would be to keep the current behaviour for
>> other cases :)
> 

Here's the relevant code:

sys/kern/kern_sysctl.c:SYSCTL_PROC(_sysctl, 3, name2oid
...

static SYSCTL_NODE(_sysctl, 2, next, CTLFLAG_RD | CTLFLAG_MPSAFE |
CTLFLAG_CAPRD,
    sysctl_sysctl_next, "");

static int
name2oid(char *name, int *oid, int *len, struct sysctl_oid **oidpp)
{
        struct sysctl_oid *oidp;
        struct sysctl_oid_list *lsp = &sysctl__children;
        char *p;

        SYSCTL_ASSERT_LOCKED();

        for (*len = 0; *len < CTL_MAXNAME;) {
                p = strsep(&name, ".");

                oidp = SLIST_FIRST(lsp);
                for (;; oidp = SLIST_NEXT(oidp, oid_link)) {
                        if (oidp == NULL)
                                return (ENOENT);
                        if (strcmp(p, oidp->oid_name) == 0)
                                break;
                }
                *oid++ = oidp->oid_number;
                (*len)++;

                if (name == NULL || *name == '\0') {
                        if (oidpp)
                                *oidpp = oidp;
                        return (0);
                }

                if ((oidp->oid_kind & CTLTYPE) != CTLTYPE_NODE)
                        break;

                if (oidp->oid_handler)
                        break;

                lsp = SYSCTL_CHILDREN(oidp);
        }
        return (ENOENT);
}



It can only return 0 or ENOENT.

-- 
Regards,
Bryan Drewery


[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBAgAGBQJWFaB2AAoJEDXXcbtuRpfP0cUIAJBG1opVCr9WWRp2kEbOecUa
vUj32Fm40Sq8N3L7M4T8k10z6jxGCjrXO+2C5Lilr963hxec8k4EGZwt0ek1udWf
Lv7gxigbvpL0SX9WGTCNUpj47cXR+B5s7AJm2R6Fa1v5UxCOI+Z1NPpQ+YSDqMtk
vnRjVlHf9Vwg11Z+jI9zgKn8Ylahot6xtXC4FL71MXNqz4BitEQc0TbKv0Itf4+r
QORs+9PdDccjBSKfe47b9WztCWxD3nu1G/HvWM+2k/oZeN3101zb1DlrlCRXueVi
JY2RuEve4dVknsC0JaL6DX8U0ICCkUD/fL10vWby5jpCRFHE66r8cuWN9bVxdsY=
=2FhS
-----END PGP SIGNATURE-----

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5615A076.9010403>