Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Jan 2002 02:51:35 -0800
From:      "Crist J . Clark" <cristjc@earthlink.net>
To:        hackers@freebsd.org
Subject:   sysctl(3) errnos wrong?
Message-ID:  <20020123025135.E83184@blossom.cjclark.org>

next in thread | raw e-mail | index | archive | help
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?20020123025135.E83184>