Browse Source

components/swap.c | move duplicated code to separate function

Laslo Hunhold 7 years ago
parent
commit
19343ff343
1 changed files with 26 additions and 56 deletions
  1. 26 56
      components/swap.c

+ 26 - 56
components/swap.c

@@ -6,30 +6,40 @@
 
 	#include "../util.h"
 
-	const char *
-	swap_free(void)
+	static size_t
+	pread(const char *path, char *buf, size_t bufsiz)
 	{
-		long total, free;
 		FILE *fp;
 		size_t bytes_read;
-		char *match;
 
-		fp = fopen("/proc/meminfo", "r");
-		if (fp == NULL) {
-			fprintf(stderr, "fopen '/proc/meminfo': %s\n",
+		if (!(fp = fopen(path, "r"))) {
+			fprintf(stderr, "fopen '%s': %s\n", path,
 			        strerror(errno));
-			return NULL;
+			return 0;
 		}
-
-		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
-		                        fp)) == 0) {
-			fprintf(stderr, "fread '/proc/meminfo': %s\n",
+		if ((bytes_read = fread(buf, sizeof(char), bufsiz, fp)) == 0) {
+			fprintf(stderr, "fread '%s': %s\n", path,
 			        strerror(errno));
 			fclose(fp);
-			return NULL;
+			return 0;
 		}
 		fclose(fp);
 
+		buf[bytes_read] = '\0';
+
+		return bytes_read;
+	}
+
+	const char *
+	swap_free(void)
+	{
+		long total, free;
+		char *match;
+
+		if (!pread("/proc/meminfo", buf, sizeof(buf) - 1)) {
+			return NULL;
+		}
+
 		if ((match = strstr(buf, "SwapTotal")) == NULL)
 			return NULL;
 		sscanf(match, "SwapTotal: %ld kB\n", &total);
@@ -45,25 +55,11 @@
 	swap_perc(void)
 	{
 		long total, free, cached;
-		FILE *fp;
-		size_t bytes_read;
 		char *match;
 
-		fp = fopen("/proc/meminfo", "r");
-		if (fp == NULL) {
-			fprintf(stderr, "fopen '/proc/meminfo': %s\n",
-			        strerror(errno));
-			return NULL;
-		}
-
-		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
-		                        fp)) == 0) {
-			fprintf(stderr, "fread '/proc/meminfo': %s\n",
-			        strerror(errno));
-			fclose(fp);
+		if (!pread("/proc/meminfo", buf, sizeof(buf) - 1)) {
 			return NULL;
 		}
-		fclose(fp);
 
 		if ((match = strstr(buf, "SwapTotal")) == NULL)
 			return NULL;
@@ -84,24 +80,11 @@
 	swap_total(void)
 	{
 		long total;
-		FILE *fp;
-		size_t bytes_read;
 		char *match;
 
-		fp = fopen("/proc/meminfo", "r");
-		if (fp == NULL) {
-			fprintf(stderr, "fopen '/proc/meminfo': %s\n",
-			        strerror(errno));
-			return NULL;
-		}
-		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
-		                        fp)) == 0) {
-			fprintf(stderr, "fread '/proc/meminfo': %s\n",
-			        strerror(errno));
-			fclose(fp);
+		if (!pread("/proc/meminfo", buf, sizeof(buf) - 1)) {
 			return NULL;
 		}
-		fclose(fp);
 
 		if ((match = strstr(buf, "SwapTotal")) == NULL)
 			return NULL;
@@ -114,24 +97,11 @@
 	swap_used(void)
 	{
 		long total, free, cached;
-		FILE *fp;
-		size_t bytes_read;
 		char *match;
 
-		fp = fopen("/proc/meminfo", "r");
-		if (fp == NULL) {
-			fprintf(stderr, "fopen '/proc/meminfo': %s\n",
-			        strerror(errno));
+		if (!pread("/proc/meminfo", buf, sizeof(buf) - 1)) {
 			return NULL;
 		}
-		if ((bytes_read = fread(buf, sizeof(char), sizeof(buf) - 1,
-		                        fp)) == 0) {
-			fprintf(stderr, "fread '/proc/meminfo': %s\n",
-			        strerror(errno));
-			fclose(fp);
-			return NULL;
-		}
-		fclose(fp);
 
 		if ((match = strstr(buf, "SwapTotal")) == NULL)
 			return NULL;