1 // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s
2 //
3 // UNSUPPORTED: linux, solaris
4
5 #include <sys/param.h>
6 #include <sys/types.h>
7
8 #include <sys/sysctl.h>
9
10 #include <assert.h>
11 #include <stdio.h>
12 #include <stdlib.h>
13
14 #ifndef __arraycount
15 #define __arraycount(a) (sizeof(a) / sizeof(a[0]))
16 #endif
17
test_sysctl()18 void test_sysctl() {
19 char buf[100];
20 size_t len = sizeof(buf);
21 int mib[] = {CTL_KERN, KERN_OSTYPE};
22 int rv = sysctl(mib, __arraycount(mib), buf, &len, NULL, 0);
23 assert(!rv);
24
25 printf("sysctl: '%s' size: '%zu'\n", buf, len);
26 }
27
test_sysctlbyname()28 void test_sysctlbyname() {
29 char buf[100];
30 size_t len = sizeof(buf);
31 int rv = sysctlbyname("kern.ostype", buf, &len, NULL, 0);
32 assert(!rv);
33
34 printf("sysctlbyname: '%s' size: '%zu'\n", buf, len);
35 }
36
test_sysctlnametomib()37 void test_sysctlnametomib() {
38 int mib[CTL_MAXNAME];
39 size_t mib_len = __arraycount(mib);
40 int rv = sysctlnametomib("kern.ostype", &mib[0], &mib_len);
41 assert(!rv);
42
43 char buf[100];
44 size_t len = sizeof(buf);
45 rv = sysctl(mib, mib_len, buf, &len, NULL, 0);
46 assert(!rv);
47
48 printf("sysctlnametomib: '%s' size: '%zu'\n", buf, len);
49 }
50
main(void)51 int main(void) {
52 printf("sysctl\n");
53
54 test_sysctl();
55 test_sysctlbyname();
56 test_sysctlnametomib();
57
58 // CHECK: sysctl
59 // CHECK: sysctl: '{{.*}}' size: '{{.*}}'
60 // CHECK: sysctlbyname: '{{.*}}' size: '{{.*}}'
61 // CHECK: sysctlnametomib: '{{.*}}' size: '{{.*}}'
62
63 return 0;
64 }
65