From bf7aa5373cb298dbb11e9576a1371cdfaaab7d90 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 4 Jun 2013 08:35:09 +0200 Subject: [PATCH] zfs_arc plugin: Use a buffer with fixed size rather than allocating on the heap. The key length is very predicable, so buffer length is not a problem. --- src/zfs_arc.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/zfs_arc.c b/src/zfs_arc.c index cd0c8414..6bf7daef 100644 --- a/src/zfs_arc.c +++ b/src/zfs_arc.c @@ -49,23 +49,19 @@ const char zfs_arcstat[] = "kstat.zfs.misc.arcstats."; typedef void kstat_t; #endif -static long long get_zfs_value(void * dummy __unused, const char *kstat_value) +static long long get_zfs_value(kstat_t *dummy __attribute__((unused)), + char const *name) { + char buffer[256]; long long value; size_t valuelen = sizeof(value); int rv; - char *key; - - key = ssnprintf_alloc("%s%s", zfs_arcstat, kstat_value); - if (key != NULL) { - if (strlen(key) > 0) { - rv = sysctlbyname(key, (void *)&value, &valuelen, NULL, (size_t)0); - free(key); - if (rv == 0) - return (value); - } else - free(key); - } + + ssnprintf (buffer, sizeof (buffer), "%s%s", zfs_arcstat, name); + rv = sysctlbyname (buffer, (void *) &value, &valuelen, + /* new value = */ NULL, /* new length = */ (size_t) 0); + if (rv == 0) + return (value); return (-1); } -- 2.11.0