• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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