Subject: kern/1999: sendctl(3) man page and implementation differ
To: None <gnats-bugs@NetBSD.ORG>
From: Kevin M. Lahey <kml@nas.nasa.gov>
List: netbsd-bugs
Date: 01/30/1996 12:53:39
>Number:         1999
>Category:       kern
>Synopsis:       man page and implementation of sysctl(3) differ
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    kern-bug-people (Kernel Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jan 30 15:35:03 1996
>Last-Modified:
>Originator:     Kevin M. Lahey
>Organization:
NASA/Ames
>Release:        1.1A, i386
>Environment:
	
System: NetBSD antie 1.1A NetBSD 1.1A (ANTIE) #411: Mon Jan 29 14:06:52 PST 1996 thorpej@antie:/work/netbsd/src/sys/arch/i386/compile/ANTIE i386

>Description:
	The man page for sysctl(3) claims that the function returns 0 on
	success, -1 on failure.  For at least some set of arguments, it
	instead returns the size of the data retrieved.

	As an aside, the man page lists <sys/sysctl.h> as the only include
	required.  This didn't quite work for me;  I found that including
	<sys/param.h> made it work.  There may be some other include file
	that would work better;  beats me.

>How-To-Repeat:

According to the man page, the following program should retrieve the
size of physical memory, with a return value of 0.  Instead, the
return value is 4.

#include <stdio.h>
#include <sys/param.h>
#include <sys/sysctl.h>

main()
{
	int mib[2];
	size_t len;
	int result;

	int physmem;

	len = sizeof(int);
	mib[0] = CTL_HW;
	mib[1] = HW_PHYSMEM;

	result = sysctl(mib, 2, &physmem, &len, NULL, 0);

	printf("physmem = %d, return value = %d\n", physmem, result);
}


>Fix:
	Change the documentation to mention additional required include 
	files.

	I'm not sure whether the code or the man page needs to change.
	I did notice, though that when the programmer has allocated 
	insufficient room for the retrieved data, the function returns
	an error code, but tries to fill up the space provided.
	In that case, checking the return code to determine how much
	data was retrieved would fail.  I guess I think that the code
	should change.
>Audit-Trail:
>Unformatted: