X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fturbostat.c;h=7b813c9f1ce8922f29dcaf8374df28d8f3e02364;hb=4d370741101aeb037ae52f3529a4a0869e0dc08a;hp=913511f72e612c12d58ad01bec101ceea5df4875;hpb=2761915bed8c6caea41018be3e675aa712cc0b0a;p=collectd.git diff --git a/src/turbostat.c b/src/turbostat.c index 913511f7..7b813c9f 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -1018,8 +1018,7 @@ parse_int_file(const char *fmt, ...) { va_list args; char path[PATH_MAX]; - FILE *filep; - int len, value; + int len; va_start(args, fmt); len = vsnprintf(path, sizeof(path), fmt, args); @@ -1029,18 +1028,13 @@ parse_int_file(const char *fmt, ...) return -1; } - filep = fopen(path, "r"); - if (!filep) { - ERROR("turbostat plugin: Failed to open '%s'", path); - return -1; - } - if (fscanf(filep, "%d", &value) != 1) { - ERROR("turbostat plugin: Failed to parse number from '%s'", path); - fclose(filep); + value_t v; + if (parse_value_file (path, &v, DS_TYPE_DERIVE) != 0) { + ERROR ("turbostat plugin: Parsing \"%s\" failed.", path); return -1; } - fclose(filep); - return value; + + return (int) v.derive; } static int @@ -1474,35 +1468,22 @@ out: static int check_permissions(void) { -#ifdef HAVE_SYS_CAPABILITY_H - struct __user_cap_header_struct cap_header_data; - cap_user_header_t cap_header = &cap_header_data; - struct __user_cap_data_struct cap_data_data; - cap_user_data_t cap_data = &cap_data_data; - int ret = 0; -#endif /* HAVE_SYS_CAPABILITY_H */ if (getuid() == 0) { /* We have everything we need */ return 0; -#ifndef HAVE_SYS_CAPABILITY_H +#if !defined(HAVE_SYS_CAPABILITY_H) && !defined(CAP_SYS_RAWIO) } else { ERROR("turbostat plugin: Initialization failed: this plugin " "requires collectd to run as root"); return -1; } -#else /* HAVE_SYS_CAPABILITY_H */ +#else /* HAVE_SYS_CAPABILITY_H && CAP_SYS_RAWIO */ } - /* check for CAP_SYS_RAWIO */ - cap_header->pid = getpid(); - cap_header->version = _LINUX_CAPABILITY_VERSION; - if (capget(cap_header, cap_data) < 0) { - ERROR("turbostat plugin: capget failed"); - return -1; - } + int ret = 0; - if ((cap_data->effective & (1 << CAP_SYS_RAWIO)) == 0) { + if (check_capability(CAP_SYS_RAWIO) != 0) { WARNING("turbostat plugin: Collectd doesn't have the " "CAP_SYS_RAWIO capability. If you don't want to run " "collectd as root, try running \"setcap " @@ -1524,7 +1505,7 @@ check_permissions(void) "collectd a special capability (CAP_SYS_RAWIO) and read " "access to /dev/cpu/*/msr (see previous warnings)"); return ret; -#endif /* HAVE_SYS_CAPABILITY_H */ +#endif /* HAVE_SYS_CAPABILITY_H && CAP_SYS_RAWIO */ } static int