Date: Thu, 24 Jan 2002 02:27:42 -0800 From: "Crist J. Clark" <cjc@FreeBSD.ORG> To: Ruslan Ermilov <ru@FreeBSD.ORG> Cc: hackers@FreeBSD.ORG Subject: Re: sysctl(3) errnos wrong? Message-ID: <20020124022742.F87663@blossom.cjclark.org> In-Reply-To: <20020124115209.B16972@sunbay.com>; from ru@FreeBSD.ORG on Thu, Jan 24, 2002 at 11:52:09AM %2B0200 References: <20020123025135.E83184@blossom.cjclark.org> <20020124115209.B16972@sunbay.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jan 24, 2002 at 11:52:09AM +0200, Ruslan Ermilov wrote:
> Sounds like that, but changing it now would be too backwards incompatible.
Then shouldn't we fix the documentation to reflect reality?
> On Wed, Jan 23, 2002 at 02:51:35AM -0800, Crist J . Clark wrote:
> > Here is a quick, broken, program,
> >
> > #include <sys/types.h>
> > #include <sys/sysctl.h>
> > #include <sys/time.h>
> > #include <sys/socket.h>
> > #include <net/if.h>
> > #include <net/route.h>
> >
> > #include <sysexits.h>
> >
> > /* #define MIB_LEN 6 */
> > #define MIB_LEN 5
> >
> > int main(int argc, char *argv[])
> > {
> > int mib[MIB_LEN];
> > size_t rttsize;
> >
> > mib[0] = CTL_NET;
> > mib[1] = PF_ROUTE;
> > mib[2] = 0;
> > mib[3] = AF_INET;
> > mib[4] = NET_RT_DUMP;
> > /* mib[5] = 0; */
> >
> > if (sysctl(mib, MIB_LEN, NULL, &rttsize, NULL, 0) != 0)
> > err(EX_OSERR, "sysctl(3) for table size failed");
> >
> > return 0;
> > }
> >
> > This broken version will return,
> >
> > $ ./sysctlerr
> > sysctlerr: sysctl(3) for table size failed: Invalid argument
> >
> > However, if we look at the errno descriptions in the sysctl(3)
> > manpage, an EINVAL is returned when,
> >
> > [EINVAL] The name array is less than two or greater than
> > CTL_MAXNAME.
> >
> > [EINVAL] A non-null newp is given and its specified length in
> > newlen is too large or too small.
> >
> > Neither of which is the case here. I think it should be returning one
> > of these,
> >
> > [ENOTDIR] The name array specifies an intermediate rather than
> > terminal name.
> >
> > [EISDIR] The name array specifies a terminal name, but the
> > actual name is not terminal.
> >
> > But "terminal" or "intermediate" names are not defined anywhere else
> > in the manpage.
--
Crist J. Clark | cjclark@alum.mit.edu
| cjclark@jhu.edu
http://people.freebsd.org/~cjc/ | cjc@freebsd.org
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020124022742.F87663>
