From owner-freebsd-hackers Wed Jan 23 2:51:52 2002 Delivered-To: freebsd-hackers@freebsd.org Received: from hawk.prod.itd.earthlink.net (hawk.mail.pas.earthlink.net [207.217.120.22]) by hub.freebsd.org (Postfix) with ESMTP id EA27337B404 for ; Wed, 23 Jan 2002 02:51:46 -0800 (PST) Received: from dialup-209.245.141.241.dial1.sanjose1.level3.net ([209.245.141.241] helo=blossom.cjclark.org) by hawk.prod.itd.earthlink.net with esmtp (Exim 3.33 #1) id 16TL0L-0007O6-00 for hackers@freebsd.org; Wed, 23 Jan 2002 02:51:46 -0800 Received: (from cjc@localhost) by blossom.cjclark.org (8.11.6/8.11.3) id g0NApiv84847 for hackers@freebsd.org; Wed, 23 Jan 2002 02:51:44 -0800 (PST) (envelope-from cjc) Date: Wed, 23 Jan 2002 02:51:35 -0800 From: "Crist J . Clark" To: hackers@freebsd.org Subject: sysctl(3) errnos wrong? Message-ID: <20020123025135.E83184@blossom.cjclark.org> Reply-To: cjclark@alum.mit.edu Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i X-URL: http://people.freebsd.org/~cjc/ Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG Here is a quick, broken, program, #include #include #include #include #include #include #include /* #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