Fix sysctl() usage.

This fixes build on *BSDs and Darwin.

Thanks to Jukka Salmi for the patches.
Richard Koch reported the problem too.
This commit is contained in:
Lasse Collin 2009-08-29 13:39:21 +03:00
parent 43f44160b1
commit 27414daadf
4 changed files with 4 additions and 4 deletions

View File

@ -43,7 +43,7 @@ main(void)
int name[2] = { CTL_HW, HW_NCPU };
int cpus;
size_t cpus_size = sizeof(cpus);
sysctl(name, 2, &cpus, &cpus_size, NULL, NULL);
sysctl(name, 2, &cpus, &cpus_size, NULL, 0);
return 0;
}
]])], [

View File

@ -45,7 +45,7 @@ main(void)
int name[2] = { CTL_HW, HW_PHYSMEM };
unsigned long mem;
size_t mem_ptr_size = sizeof(mem);
sysctl(name, 2, &mem, &mem_ptr_size, NULL, NULL);
sysctl(name, 2, &mem, &mem_ptr_size, NULL, 0);
return 0;
}
]])], [

View File

@ -40,7 +40,7 @@ cpucores(void)
int name[2] = { CTL_HW, HW_NCPU };
int cpus;
size_t cpus_size = sizeof(cpus);
if (!sysctl(name, &cpus, &cpus_size, NULL, NULL)
if (!sysctl(name, 2, &cpus, &cpus_size, NULL, 0)
&& cpus_size == sizeof(cpus) && cpus > 0)
ret = (uint32_t)(cpus);
#endif

View File

@ -104,7 +104,7 @@ physmem(void)
uint64_t u64;
} mem;
size_t mem_ptr_size = sizeof(mem.u64);
if (!sysctl(name, 2, &mem.u64, &mem_ptr_size, NULL, NULL)) {
if (!sysctl(name, 2, &mem.u64, &mem_ptr_size, NULL, 0)) {
// IIRC, 64-bit "return value" is possible on some 64-bit
// BSD systems even with HW_PHYSMEM (instead of HW_PHYSMEM64),
// so support both.