summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorLaslo Hunhold <dev@frign.de>2018-05-19 19:33:04 +0200
committerAaron Marcher <me@drkhsh.at>2018-05-19 19:44:02 +0200
commit9a07ac6f6d76e6a97429f5295df3b9c8e10b6b30 (patch)
treecf243529272e96e3d65b44afecd08cbb9f4e3005 /components
parentfc9345c4844c880f9e5b3d53c6514b2477687ee8 (diff)
Implement esnprintf() and make formatted calls more efficient
Within the components, snprintf() was unchecked and had inefficient calls in some places. We implement esnprintf() that does all the dirty laundry for us and use it exclusively now.
Diffstat (limited to 'components')
-rw-r--r--components/battery.c41
-rw-r--r--components/netspeeds.c14
-rw-r--r--components/wifi.c12
3 files changed, 49 insertions, 18 deletions
diff --git a/components/battery.c b/components/battery.c
index 90e8590..bcd42cd 100644
--- a/components/battery.c
+++ b/components/battery.c
@@ -14,9 +14,16 @@
int perc;
char path[PATH_MAX];
- snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
- bat, "/capacity");
- return (pscanf(path, "%d", &perc) == 1) ? bprintf("%d", perc) : NULL;
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/power_supply/%s/capacity",
+ bat) < 0) {
+ return NULL;
+ }
+ if (pscanf(path, "%d", &perc) != 1) {
+ return NULL;
+ }
+
+ return bprintf("%d", perc);
}
const char *
@@ -32,8 +39,11 @@
size_t i;
char path[PATH_MAX], state[12];
- snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
- bat, "/status");
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/power_supply/%s/status",
+ bat) < 0) {
+ return NULL;
+ }
if (pscanf(path, "%12s", state) != 1) {
return NULL;
}
@@ -53,20 +63,29 @@
float timeleft;
char path[PATH_MAX], state[12];
- snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
- bat, "/status");
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/power_supply/%s/status",
+ bat) < 0) {
+ return NULL;
+ }
if (pscanf(path, "%12s", state) != 1) {
return NULL;
}
if (!strcmp(state, "Discharging")) {
- snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
- bat, "/charge_now");
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/power_supply/%s/charge_now",
+ bat) < 0) {
+ return NULL;
+ }
if (pscanf(path, "%d", &charge_now) != 1) {
return NULL;
}
- snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/",
- bat, "/current_now");
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/power_supply/%s/current_now",
+ bat) < 0) {
+ return NULL;
+ }
if (pscanf(path, "%d", &current_now) != 1) {
return NULL;
}
diff --git a/components/netspeeds.c b/components/netspeeds.c
index b4e6972..6adc3ea 100644
--- a/components/netspeeds.c
+++ b/components/netspeeds.c
@@ -17,8 +17,11 @@
oldrxbytes = rxbytes;
- snprintf(path, sizeof(path),
- "/sys/class/net/%s/statistics/rx_bytes", interface);
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/net/%s/statistics/rx_bytes",
+ interface) < 0) {
+ return NULL;
+ }
if (pscanf(path, "%llu", &rxbytes) != 1) {
return NULL;
}
@@ -37,8 +40,11 @@
oldtxbytes = txbytes;
- snprintf(path, sizeof(path),
- "/sys/class/net/%s/statistics/tx_bytes", interface);
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/net/%s/statistics/tx_bytes",
+ interface) < 0) {
+ return NULL;
+ }
if (pscanf(path, "%llu", &txbytes) != 1) {
return NULL;
}
diff --git a/components/wifi.c b/components/wifi.c
index 591f6ad..b3e1723 100644
--- a/components/wifi.c
+++ b/components/wifi.c
@@ -23,8 +23,11 @@
char status[5];
FILE *fp;
- snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface,
- "/operstate");
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/net/%s/operstate",
+ iface) < 0) {
+ return NULL;
+ }
if (!(fp = fopen(path, "r"))) {
warn("fopen '%s':", path);
return NULL;
@@ -69,7 +72,10 @@
memset(&wreq, 0, sizeof(struct iwreq));
wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
- snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
+ if (esnprintf(wreq.ifr_name, sizeof(wreq.ifr_name),
+ "%s", iface) < 0) {
+ return NULL;
+ }
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
warn("socket 'AF_INET':");