MCPcopy Index your code
hub / github.com/F-Stack/f-stack / kinfo_getvmobject

Function kinfo_getvmobject

tools/libutil/kinfo_getvmobject.c:39–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37#include "libutil.h"
38
39struct kinfo_vmobject *
40kinfo_getvmobject(int *cntp)
41{
42 char *buf, *bp, *ep;
43 struct kinfo_vmobject *kvo, *list, *kp;
44 size_t len;
45 int cnt, i;
46
47 buf = NULL;
48 for (i = 0; i < 3; i++) {
49 if (sysctlbyname("vm.objects", NULL, &len, NULL, 0) < 0) {
50 free(buf);
51 return (NULL);
52 }
53 buf = reallocf(buf, len);
54 if (buf == NULL)
55 return (NULL);
56 if (sysctlbyname("vm.objects", buf, &len, NULL, 0) == 0)
57 goto unpack;
58 if (errno != ENOMEM) {
59 free(buf);
60 return (NULL);
61 }
62 }
63 free(buf);
64 return (NULL);
65
66unpack:
67 /* Count items */
68 cnt = 0;
69 bp = buf;
70 ep = buf + len;
71 while (bp < ep) {
72 kvo = (struct kinfo_vmobject *)(uintptr_t)bp;
73 bp += kvo->kvo_structsize;
74 cnt++;
75 }
76
77 list = calloc(cnt, sizeof(*list));
78 if (list == NULL) {
79 free(buf);
80 return (NULL);
81 }
82
83 /* Unpack */
84 bp = buf;
85 kp = list;
86 while (bp < ep) {
87 kvo = (struct kinfo_vmobject *)(uintptr_t)bp;
88 memcpy(kp, kvo, kvo->kvo_structsize);
89 bp += kvo->kvo_structsize;
90 kp->kvo_structsize = sizeof(*kp);
91 kp++;
92 }
93 free(buf);
94 *cntp = cnt;
95 return (list);
96}

Callers

nothing calls this directly

Calls 5

sysctlbynameFunction · 0.85
callocFunction · 0.85
freeFunction · 0.50
reallocfFunction · 0.50
memcpyFunction · 0.50

Tested by

no test coverage detected