diff options
Diffstat (limited to 'src/get_cpu_temperature.c')
-rw-r--r-- | src/get_cpu_temperature.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/get_cpu_temperature.c b/src/get_cpu_temperature.c index d000d2d..09fbd25 100644 --- a/src/get_cpu_temperature.c +++ b/src/get_cpu_temperature.c @@ -5,6 +5,15 @@ #include "i3status.h" +#if defined(__FreeBSD__) +#include <err.h> +#include <sys/types.h> +#include <sys/sysctl.h> +#define TZ_ZEROC 2732 +#define TZ_KELVTOC(x) (((x) - TZ_ZEROC) / 10), abs(((x) - TZ_ZEROC) % 10) +#endif + + /* * Reads the CPU temperature from /sys/class/thermal/thermal_zone0/temp and * returns the temperature in degree celcius. @@ -12,15 +21,23 @@ */ const char *get_cpu_temperature_info() { static char buf[16]; - long int temp; +#if defined(LINUX) + long int temp; slurp(thermal_zone, buf, sizeof(buf)); temp = strtol(buf, NULL, 10); - if (temp == LONG_MIN || temp == LONG_MAX || temp <= 0) (void)snprintf(buf, sizeof(buf), "T: ? C"); else (void)snprintf(buf, sizeof(buf), "T: %ld C", (temp/1000)); +#elif defined(__FreeBSD__) + int sysctl_rslt; + size_t sysctl_size = sizeof (sysctl_rslt); + if (sysctlbyname(thermal_zone,&sysctl_rslt,&sysctl_size,NULL,0)) + return "No Thermal"; + + snprintf(buf,sizeof(buf),"T: %d.%d C",TZ_KELVTOC(sysctl_rslt)); +#endif return buf; } |