Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libc/tests/sys/mlock_helper.c
Show All 33 Lines | |||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||
#include <atf-c.h> | #include <atf-c.h> | ||||
#include <errno.h> | #include <errno.h> | ||||
#include <limits.h> | #include <limits.h> | ||||
#include <stdio.h> | #include <stdio.h> | ||||
#define VM_MAX_WIRED "vm.max_wired" | #define VM_MAX_WIRED "vm.max_user_wired" | ||||
static void | static void | ||||
vm_max_wired_sysctl(int *old_value, int *new_value) | vm_max_wired_sysctl(u_long *old_value, u_long *new_value) | ||||
{ | { | ||||
size_t old_len; | size_t old_len; | ||||
size_t new_len = (new_value == NULL ? 0 : sizeof(int)); | size_t new_len = (new_value == NULL ? 0 : sizeof(*new_value)); | ||||
if (old_value == NULL) | if (old_value == NULL) | ||||
printf("Setting the new value to %d\n", *new_value); | printf("Setting the new value to %lu\n", *new_value); | ||||
else { | else { | ||||
ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, NULL, &old_len, | ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, NULL, &old_len, | ||||
new_value, new_len) == 0, | new_value, new_len) == 0, | ||||
"sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno)); | "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno)); | ||||
} | } | ||||
ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, old_value, &old_len, | ATF_REQUIRE_MSG(sysctlbyname(VM_MAX_WIRED, old_value, &old_len, | ||||
new_value, new_len) == 0, | new_value, new_len) == 0, | ||||
"sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno)); | "sysctlbyname(%s) failed: %s", VM_MAX_WIRED, strerror(errno)); | ||||
if (old_value != NULL) | if (old_value != NULL) | ||||
printf("Saved the old value (%d)\n", *old_value); | printf("Saved the old value (%lu)\n", *old_value); | ||||
} | } | ||||
void | void | ||||
set_vm_max_wired(int new_value) | set_vm_max_wired(u_long new_value) | ||||
{ | { | ||||
FILE *fp; | FILE *fp; | ||||
int old_value; | u_long old_value; | ||||
fp = fopen(VM_MAX_WIRED, "w"); | fp = fopen(VM_MAX_WIRED, "w"); | ||||
if (fp == NULL) { | if (fp == NULL) { | ||||
atf_tc_skip("could not open %s for writing: %s", | atf_tc_skip("could not open %s for writing: %s", | ||||
VM_MAX_WIRED, strerror(errno)); | VM_MAX_WIRED, strerror(errno)); | ||||
return; | return; | ||||
} | } | ||||
vm_max_wired_sysctl(&old_value, NULL); | vm_max_wired_sysctl(&old_value, NULL); | ||||
ATF_REQUIRE_MSG(fprintf(fp, "%d", old_value) > 0, | ATF_REQUIRE_MSG(fprintf(fp, "%lu", old_value) > 0, | ||||
"saving %s failed", VM_MAX_WIRED); | "saving %s failed", VM_MAX_WIRED); | ||||
fclose(fp); | fclose(fp); | ||||
vm_max_wired_sysctl(NULL, &new_value); | vm_max_wired_sysctl(NULL, &new_value); | ||||
} | } | ||||
void | void | ||||
restore_vm_max_wired(void) | restore_vm_max_wired(void) | ||||
{ | { | ||||
FILE *fp; | FILE *fp; | ||||
int saved_max_wired; | u_long saved_max_wired; | ||||
fp = fopen(VM_MAX_WIRED, "r"); | fp = fopen(VM_MAX_WIRED, "r"); | ||||
if (fp == NULL) { | if (fp == NULL) { | ||||
perror("fopen failed\n"); | perror("fopen failed\n"); | ||||
return; | return; | ||||
} | } | ||||
if (fscanf(fp, "%d", &saved_max_wired) != 1) { | if (fscanf(fp, "%lu", &saved_max_wired) != 1) { | ||||
perror("fscanf failed\n"); | perror("fscanf failed\n"); | ||||
fclose(fp); | fclose(fp); | ||||
return; | return; | ||||
} | } | ||||
fclose(fp); | fclose(fp); | ||||
printf("old value in %s: %d\n", VM_MAX_WIRED, saved_max_wired); | printf("old value in %s: %lu\n", VM_MAX_WIRED, saved_max_wired); | ||||
if (saved_max_wired == 0) /* This will cripple the test host */ | if (saved_max_wired == 0) /* This will cripple the test host */ | ||||
return; | return; | ||||
vm_max_wired_sysctl(NULL, &saved_max_wired); | vm_max_wired_sysctl(NULL, &saved_max_wired); | ||||
} | } |