netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=2d021e921e284d10153c8a137b0e167b97c163d7

commit 2d021e921e284d10153c8a137b0e167b97c163d7
Author: Alastair Poole <nets...@gmail.com>
Date:   Sun Mar 14 14:34:34 2021 +0000

    sensors: not thread safe...fix.
---
 src/bin/system/machine.h             |  2 ++
 src/bin/system/machine/machine.bogox | 14 --------------
 src/bin/system/machine/sensors.bogox | 37 +++++++++++++++++++++++++-----------
 src/bin/ui/ui_sensors.c              |  4 +++-
 4 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/src/bin/system/machine.h b/src/bin/system/machine.h
index 32f015b..aae6045 100644
--- a/src/bin/system/machine.h
+++ b/src/bin/system/machine.h
@@ -58,6 +58,8 @@ typedef struct
 typedef struct
 {
    char   *name;
+   char   *vendor;
+   char   *model;
    double  charge_full;
    double  charge_current;
    uint8_t percent;
diff --git a/src/bin/system/machine/machine.bogox 
b/src/bin/system/machine/machine.bogox
index 4a2e9d2..a68acf4 100644
--- a/src/bin/system/machine/machine.bogox
+++ b/src/bin/system/machine/machine.bogox
@@ -50,20 +50,6 @@ file_contents(const char *path)
    return buf;
 }
 
-char *
-strsli_printf(const char *fmt, ...)
-{
-   static char buf[4096];
-   va_list ap;
-
-   buf[0] = 0x00;
-   va_start(ap, fmt);
-   vsnprintf(buf, sizeof(buf), fmt, ap);
-   va_end(ap);
-
-   return buf;
-}
-
 void
 strimmer(char *s)
 {
diff --git a/src/bin/system/machine/sensors.bogox 
b/src/bin/system/machine/sensors.bogox
index 7f8cbc1..c80afeb 100644
--- a/src/bin/system/machine/sensors.bogox
+++ b/src/bin/system/machine/sensors.bogox
@@ -123,6 +123,7 @@ system_sensors_thermal_get(int *sensor_count)
 #elif defined(__FreeBSD__) || defined(__DragonFly__)
    sensor_t *sensor;
    int value;
+   char buf[256];
    size_t len = sizeof(value);
 
    if ((sysctlbyname("hw.acpi.thermal.tz0.temperature", &value, &len, NULL, 
0)) != -1)
@@ -139,13 +140,13 @@ system_sensors_thermal_get(int *sensor_count)
    for (int i = 0; i < n; i++)
      {
         len = sizeof(value);
-        const char *mibname = strsli_printf("dev.cpu.%d.temperature", i);
-        if ((sysctlbyname(mibname, &value, &len, NULL, 0)) != -1)
+        snprintf(buf, sizeof(buf), "dev.cpu.%i.temperature", i);
+        if ((sysctlbyname(buf, &value, &len, NULL, 0)) != -1)
           {
              void *t = realloc(sensors, (1 + *sensor_count) * sizeof(sensor_t 
*));
              sensors = t;
              sensors[(*sensor_count)++] = sensor = calloc(1, sizeof(sensor_t));
-             sensor->name = strdup(mibname);
+             sensor->name = strdup(buf);
              sensor->value = (float) (value - 2732) / 10;
           }
      }
@@ -277,6 +278,7 @@ _power_battery_count_get(power_t *power)
      }
 #elif defined(__FreeBSD__) || defined(__DragonFly__)
    int n_units, fd;
+   char name[256];
 
    fd = open("/dev/acpi", O_RDONLY);
    if (fd != -1)
@@ -289,18 +291,22 @@ _power_battery_count_get(power_t *power)
    power->batteries = malloc(power->battery_count * sizeof(bat_t **));
    for (int i = 0; i < power->battery_count; i++) {
         power->batteries[i] = calloc(1, sizeof(bat_t));
+        snprintf(name, sizeof(name), "hw.acpi.battery.%i", i);
+        power->batteries[i]->name = strdup(name);
         power->batteries[i]->present = true;
      }
 #elif defined(__linux__)
    char *type;
    struct dirent **names;
+   char path[PATH_MAX];
    int i, n, id;
 
    n = scandir("/sys/class/power_supply", &names, 0, alphasort);
    if (n < 0) return power->battery_count;
 
    for (i = 0; i < n; i++) {
-        type = file_contents(strsli_printf("/sys/class/power_supply/%s/type", 
names[i]->d_name));
+        snprintf(path, sizeof(path), "/sys/class/power_supply/%s/type", 
names[i]->d_name);
+        type = file_contents(path);
         if (type)
           {
              if (!strncmp(type, "Battery", 7))
@@ -311,6 +317,10 @@ _power_battery_count_get(power_t *power)
                   power->batteries = t;
                   power->batteries[id] = calloc(1, sizeof(bat_t));
                   power->batteries[id]->name = strdup(names[i]->d_name);
+                  snprintf(path, sizeof(path), 
"/sys/class/power_supply/%s/manufacturer", names[i]->d_name);
+                  power->batteries[id]->vendor = file_contents(path);
+                  snprintf(path, sizeof(path), 
"/sys/class/power_supply/%s/model_name", names[i]->d_name);
+                  power->batteries[id]->model = file_contents(path);
                   power->batteries[id]->present = true;
                   power->battery_count++;
                }
@@ -372,7 +382,6 @@ _battery_state_get(power_t *power)
 #elif defined(__FreeBSD__) || defined(__DragonFly__)
    int fd, i;
    union acpi_battery_ioctl_arg battio;
-   char name[256];
 
    if ((fd = open("/dev/acpi", O_RDONLY)) == -1) return;
 
@@ -385,8 +394,8 @@ _battery_state_get(power_t *power)
              else
                power->batteries[i]->charge_full = battio.bif.lfcap;
           }
-        snprintf(name, sizeof(name), "%s %s", battio.bif.oeminfo, 
battio.bif.model);
-        power->batteries[i]->name = strdup(name);
+        power->batteries[i]->vendor = strdup(battio.bix.oeminfo);
+        power->batteries[i]->model = strdup(battio.bix.model);
         battio.unit = i;
         if (ioctl(fd, ACPIIO_BATT_GET_BST, &battio) != -1)
           power->batteries[i]->charge_current = battio.bst.cap;
@@ -397,7 +406,7 @@ _battery_state_get(power_t *power)
    close(fd);
 
 #elif defined(__linux__)
-   const char *path;
+   char path[PATH_MAX];
    struct dirent *dh;
    struct stat st;
    DIR *dir;
@@ -407,7 +416,7 @@ _battery_state_get(power_t *power)
    for (int i = 0; i < power->battery_count; i++) {
         naming = NULL;
 
-        path = strsli_printf("/sys/class/power_supply/%s", 
power->batteries[i]->name);
+        snprintf(path, sizeof(path), "/sys/class/power_supply/%s", 
power->batteries[i]->name);
 
         if ((stat(path, &st) < 0) || (!S_ISDIR(st.st_mode)))
           continue;
@@ -435,13 +444,15 @@ _battery_state_get(power_t *power)
         if (!naming)
           continue;
 
-        buf = file_contents(strsli_printf("%s/%s_full", link, naming));
+        snprintf(path, sizeof(path), "%s/%s_full", link, naming);
+        buf = file_contents(path);
         if (buf)
           {
              power->batteries[i]->charge_full = atol(buf);
              free(buf);
           }
-        buf = file_contents(strsli_printf("%s/%s_now", link, naming));
+        snprintf(path, sizeof(path), "%s/%s_now", link, naming);
+        buf = file_contents(path);
         if (buf)
           {
              power->batteries[i]->charge_current = atol(buf);
@@ -508,6 +519,10 @@ system_power_state_free(power_t *power)
      {
         if (power->batteries[i]->name)
           free(power->batteries[i]->name);
+        if (power->batteries[i]->model)
+          free(power->batteries[i]->model);
+        if (power->batteries[i]->vendor)
+          free(power->batteries[i]->vendor);
         free(power->batteries[i]);
      }
    if (power->batteries)
diff --git a/src/bin/ui/ui_sensors.c b/src/bin/ui/ui_sensors.c
index c342a26..9d82358 100644
--- a/src/bin/ui/ui_sensors.c
+++ b/src/bin/ui/ui_sensors.c
@@ -140,7 +140,9 @@ _sensors_update_feedback_cb(void *data, Ecore_Thread 
*thread, void *msgdata)
           {
               Bat *bat = eina_list_data_get(l);
               elm_object_tooltip_text_set(bat->pb,
-                                          msg->power.batteries[i]->name);
+                                          eina_slstr_printf("%s (%s)",
+                                          msg->power.batteries[i]->vendor,
+                                          msg->power.batteries[i]->model));
               double perc = (double) msg->power.batteries[i]->percent / 100;
               elm_progressbar_value_set(bat->pb, perc);
           }

-- 


Reply via email to