X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/f62d626d9b7958362fcf3605bcd2280295c0a30c..7db4f5cf67df1f2cab3a69a6efe8ae8b37bc70f6:/slstatus.c diff --git a/slstatus.c b/slstatus.c index 21cda51..ac09c9f 100644 --- a/slstatus.c +++ b/slstatus.c @@ -75,7 +75,7 @@ static void usage(void); char *argv0; char concat[]; -static unsigned short int delay; +static unsigned short int delay = 0; static unsigned short int done; static unsigned short int dflag, oflag; static Display *dpy; @@ -164,7 +164,7 @@ cpu_perc(void) fscanf(fp, "%*s %Lf %Lf %Lf %Lf", &a[0], &a[1], &a[2], &a[3]); fclose(fp); - delay = (UPDATE_INTERVAL - (UPDATE_INTERVAL - 1)); + delay++; sleep(delay); fp = fopen("/proc/stat", "r"); @@ -405,19 +405,22 @@ ram_used(void) static char * run_command(const char *cmd) { + char *nlptr; FILE *fp; - char buf[1024] = "n/a"; + char buf[1024] = UNKNOWN_STR; fp = popen(cmd, "r"); if (fp == NULL) { warn("Failed to get command output for %s", cmd); return smprintf(UNKNOWN_STR); } - fgets(buf, sizeof(buf)-1, fp); + fgets(buf, sizeof(buf), fp); pclose(fp); - buf[strlen(buf)] = '\0'; - strtok(buf, "\n"); + + if ((nlptr = strstr(buf, "\n")) != NULL) { + nlptr[0] = '\0'; + } return smprintf("%s", buf); } @@ -436,21 +439,24 @@ swap_free(void) warn("Failed to open file /proc/meminfo"); return smprintf(UNKNOWN_STR); } - bytes_read = fread(buf, sizeof(char), sizeof(buf), fp); + + if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) { + warn("swap_free: read error"); + fclose(fp); + return smprintf("%s", UNKNOWN_STR); + } + buf[bytes_read] = '\0'; fclose(fp); - if (bytes_read == 0 || bytes_read == sizeof(buf)) { - warn("Failed to read /proc/meminfo\n"); - return smprintf(UNKNOWN_STR); - } - match = strstr(buf, "SwapTotal"); - sscanf(match, "SwapTotal: %ld kB\n", &total); - if (total == 0) { - return smprintf(UNKNOWN_STR); + if ((match = strstr(buf, "SwapTotal")) == NULL) { + return smprintf("%s", UNKNOWN_STR); } + sscanf(match, "SwapTotal: %ld kB\n", &total); - match = strstr(buf, "SwapFree"); + if ((match = strstr(buf, "SwapFree")) == NULL) { + return smprintf("%s", UNKNOWN_STR); + } sscanf(match, "SwapFree: %ld kB\n", &free); return smprintf("%f", (float)free / 1024 / 1024); @@ -470,24 +476,29 @@ swap_perc(void) warn("Failed to open file /proc/meminfo"); return smprintf(UNKNOWN_STR); } - bytes_read = fread(buf, sizeof(char), sizeof(buf), fp); + + if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) { + warn("swap_perc: read error"); + fclose(fp); + return smprintf("%s", UNKNOWN_STR); + } + buf[bytes_read] = '\0'; fclose(fp); - if (bytes_read == 0 || bytes_read == sizeof(buf)) { - warn("Failed to read /proc/meminfo\n"); - return smprintf(UNKNOWN_STR); - } - match = strstr(buf, "SwapTotal"); - sscanf(match, "SwapTotal: %ld kB\n", &total); - if (total == 0) { - return smprintf(UNKNOWN_STR); + if ((match = strstr(buf, "SwapTotal")) == NULL) { + return smprintf("%s", UNKNOWN_STR); } + sscanf(match, "SwapTotal: %ld kB\n", &total); - match = strstr(buf, "SwapCached"); + if ((match = strstr(buf, "SwapCached")) == NULL) { + return smprintf("%s", UNKNOWN_STR); + } sscanf(match, "SwapCached: %ld kB\n", &cached); - match = strstr(buf, "SwapFree"); + if ((match = strstr(buf, "SwapFree")) == NULL) { + return smprintf("%s", UNKNOWN_STR); + } sscanf(match, "SwapFree: %ld kB\n", &free); return smprintf("%d%%", 100 * (total - free - cached) / total); @@ -507,19 +518,19 @@ swap_total(void) warn("Failed to open file /proc/meminfo"); return smprintf(UNKNOWN_STR); } - bytes_read = fread(buf, sizeof(char), sizeof(buf), fp); + if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) { + warn("swap_total: read error"); + fclose(fp); + return smprintf("%s", UNKNOWN_STR); + } + buf[bytes_read] = '\0'; fclose(fp); - if (bytes_read == 0 || bytes_read == sizeof(buf)) { - warn("Failed to read /proc/meminfo\n"); - return smprintf(UNKNOWN_STR); - } - match = strstr(buf, "SwapTotal"); - sscanf(match, "SwapTotal: %ld kB\n", &total); - if (total == 0) { - return smprintf(UNKNOWN_STR); + if ((match = strstr(buf, "SwapTotal")) == NULL) { + return smprintf("%s", UNKNOWN_STR); } + sscanf(match, "SwapTotal: %ld kB\n", &total); return smprintf("%f", (float)total / 1024 / 1024); } @@ -538,24 +549,28 @@ swap_used(void) warn("Failed to open file /proc/meminfo"); return smprintf(UNKNOWN_STR); } - bytes_read = fread(buf, sizeof(char), sizeof(buf), fp); + if ((bytes_read = fread(buf, sizeof(char), sizeof(buf), fp)) == 0) { + warn("swap_used: read error"); + fclose(fp); + return smprintf("%s", UNKNOWN_STR); + } + buf[bytes_read] = '\0'; fclose(fp); - if (bytes_read == 0 || bytes_read == sizeof(buf)) { - warn("Failed to read /proc/meminfo\n"); - return smprintf(UNKNOWN_STR); - } - match = strstr(buf, "SwapTotal"); - sscanf(match, "SwapTotal: %ld kB\n", &total); - if (total == 0) { - return smprintf(UNKNOWN_STR); + if ((match = strstr(buf, "SwapTotal")) == NULL) { + return smprintf("%s", UNKNOWN_STR); } + sscanf(match, "SwapTotal: %ld kB\n", &total); - match = strstr(buf, "SwapCached"); + if ((match = strstr(buf, "SwapCached")) == NULL) { + return smprintf("%s", UNKNOWN_STR); + } sscanf(match, "SwapCached: %ld kB\n", &cached); - match = strstr(buf, "SwapFree"); + if ((match = strstr(buf, "SwapFree")) == NULL) { + return smprintf("%s", UNKNOWN_STR); + } sscanf(match, "SwapFree: %ld kB\n", &free); return smprintf("%f", (float)(total - free - cached) / 1024 / 1024); @@ -826,8 +841,13 @@ main(int argc, char *argv[]) * subtract delay time spend in function * calls from the actual global delay time */ - sleep(UPDATE_INTERVAL - delay); - delay = 0; + if ((UPDATE_INTERVAL - delay) <= 0) { + delay = 0; + continue; + } else { + sleep(UPDATE_INTERVAL - delay); + delay = 0; + } } if (!oflag) {