From 4ec02bea7bbe534ef4b610bc63d1694bf0823174 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Thu, 6 Jan 2011 18:22:46 +0100 Subject: [PATCH] implement the 'path' option for cpu temperature --- i3status.c | 3 ++- include/i3status.h | 2 +- src/print_cpu_temperature.c | 13 ++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/i3status.c b/i3status.c index eff6da4..e4a3e4c 100644 --- a/i3status.c +++ b/i3status.c @@ -229,6 +229,7 @@ int main(int argc, char *argv[]) { cfg_opt_t temp_opts[] = { CFG_STR("format", "%degrees C", CFGF_NONE), + CFG_STR("path", NULL, CFGF_NONE), CFG_END() }; @@ -361,7 +362,7 @@ int main(int argc, char *argv[]) { cfg_getint(sec, "mixer_idx")); CASE_SEC_TITLE("cpu_temperature") - print_cpu_temperature_info(atoi(title), cfg_getstr(sec, "format")); + print_cpu_temperature_info(atoi(title), cfg_getstr(sec, "path"), cfg_getstr(sec, "format")); } printf("\n"); fflush(stdout); diff --git a/include/i3status.h b/include/i3status.h index 0ed0d1f..1bcf86a 100644 --- a/include/i3status.h +++ b/include/i3status.h @@ -66,7 +66,7 @@ void print_ddate(const char *format); const char *get_ip_addr(); void print_wireless_info(const char *interface, const char *format_up, const char *format_down); void print_run_watch(const char *title, const char *pidfile, const char *format); -void print_cpu_temperature_info(int zone, const char *format); +void print_cpu_temperature_info(int zone, const char *path, const char *format); void print_eth_info(const char *interface, const char *format_up, const char *format_down); void print_load(); void print_volume(const char *fmt, const char *device, const char *mixer, int mixer_idx); diff --git a/src/print_cpu_temperature.c b/src/print_cpu_temperature.c index d524f0b..84f78e0 100644 --- a/src/print_cpu_temperature.c +++ b/src/print_cpu_temperature.c @@ -21,11 +21,14 @@ static char *thermal_zone; * returns the temperature in degree celcius. * */ -void print_cpu_temperature_info(int zone, const char *format) { +void print_cpu_temperature_info(int zone, const char *path, const char *format) { const char *walk; static char buf[16]; - asprintf(&thermal_zone, THERMAL_ZONE, zone); + if (path == NULL) { + asprintf(&thermal_zone, THERMAL_ZONE, zone); + path = thermal_zone; + } for (walk = format; *walk != '\0'; walk++) { if (*walk != '%') { @@ -36,8 +39,8 @@ void print_cpu_temperature_info(int zone, const char *format) { if (BEGINS_WITH(walk+1, "degrees")) { #if defined(LINUX) long int temp; - if (!slurp(thermal_zone, buf, sizeof(buf))) - die("Could not open \"%s\"\n", thermal_zone); + if (!slurp(path, buf, sizeof(buf))) + die("Could not open \"%s\"\n", path); temp = strtol(buf, NULL, 10); if (temp == LONG_MIN || temp == LONG_MAX || temp <= 0) (void)printf("?"); @@ -46,7 +49,7 @@ void print_cpu_temperature_info(int zone, const char *format) { #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) int sysctl_rslt; size_t sysctl_size = sizeof(sysctl_rslt); - if (sysctlbyname(thermal_zone, &sysctl_rslt, &sysctl_size, NULL, 0)) { + if (sysctlbyname(path, &sysctl_rslt, &sysctl_size, NULL, 0)) { (void)printf("No thermal zone found"); return; }