]> git.sur5r.net Git - i3/i3status/blobdiff - src/print_cpu_temperature.c
implement the 'path' option for cpu temperature
[i3/i3status] / src / print_cpu_temperature.c
index d524f0b6bd8003d4f30f12561c5aef98c28bac64..84f78e0269cf481ba76350bf67987094e0ede2e9 100644 (file)
@@ -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;
                         }