From df82ff50ed4d9796c4e6b2dae16c3e0e82bfa1fa Mon Sep 17 00:00:00 2001 From: David Malone Date: Mon, 4 Jun 2007 18:14:28 +0000 Subject: [PATCH] Add a function for exporting 64 bit types. --- sys/kern/kern_sysctl.c | 25 +++++++++++++++++++++++++ sys/sys/sysctl.h | 1 + 2 files changed, 26 insertions(+) diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 666a54154cc..6100f418cfe 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -891,6 +891,31 @@ sysctl_handle_long(SYSCTL_HANDLER_ARGS) return (error); } +/* + * Handle a 64 bit int, signed or unsigned. arg1 points to it. + */ + +int +sysctl_handle_quad(SYSCTL_HANDLER_ARGS) +{ + int error = 0; + uint64_t tmpout; + + /* + * Attempt to get a coherent snapshot by making a copy of the data. + */ + if (!arg1) + return (EINVAL); + tmpout = *(uint64_t *)arg1; + error = SYSCTL_OUT(req, &tmpout, sizeof(uint64_t)); + + if (error || !req->newptr) + return (error); + + error = SYSCTL_IN(req, arg1, sizeof(uint64_t)); + return (error); +} + /* * Handle our generic '\0' terminated 'C' string. * Two cases: diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 87dad4e9f2b..5d07d6b40f5 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -170,6 +170,7 @@ struct sysctl_oid { int sysctl_handle_int(SYSCTL_HANDLER_ARGS); int sysctl_msec_to_ticks(SYSCTL_HANDLER_ARGS); int sysctl_handle_long(SYSCTL_HANDLER_ARGS); +int sysctl_handle_quad(SYSCTL_HANDLER_ARGS); int sysctl_handle_intptr(SYSCTL_HANDLER_ARGS); int sysctl_handle_string(SYSCTL_HANDLER_ARGS); int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS);