From 7f91ce265ea456b3096ccba7fdbb890bcf00e225 Mon Sep 17 00:00:00 2001
From: Laslo Hunhold <dev@frign.de>
Date: Mon, 21 May 2018 23:03:34 +0200
Subject: swap.c: Refactor getstats() and its usage

Add a return value so we are able to check any errors and actually fail
when there has been a critical error instead of carrying on uselessly.
---
 components/swap.c | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/components/swap.c b/components/swap.c
index c9bb920..37ee85c 100644
--- a/components/swap.c
+++ b/components/swap.c
@@ -135,29 +135,27 @@
 	#include <sys/types.h>
 	#include <unistd.h>
 
-	static void
+	static int
 	getstats(int *total, int *used)
 	{
 		struct swapent *sep, *fsep;
 		int rnswap, nswap, i;
 
-		nswap = swapctl(SWAP_NSWAP, 0, 0);
-		if (nswap < 1) {
+		if ((nswap = swapctl(SWAP_NSWAP, 0, 0)) < 1) {
 			warn("swaptctl 'SWAP_NSWAP':");
+			return 1;
 		}
-
-		fsep = sep = calloc(nswap, sizeof(*sep));
-		if (!sep) {
+		if (!(fsep = sep = calloc(nswap, sizeof(*sep)))) {
 			warn("calloc 'nswap':");
+			return 1;
 		}
-
-		rnswap = swapctl(SWAP_STATS, (void *)sep, nswap);
-		if (rnswap < 0) {
+		if ((rnswap = swapctl(SWAP_STATS, (void *)sep, nswap)) < 0) {
 			warn("swapctl 'SWAP_STATA':");
+			return 1;
 		}
-
 		if (nswap != rnswap) {
 			warn("getstats: SWAP_STATS != SWAP_NSWAP");
+			return 1;
 		}
 
 		*total = 0;
@@ -169,6 +167,8 @@
 		}
 
 		free(fsep);
+
+		return 0;
 	}
 
 	const char *
@@ -176,7 +176,9 @@
 	{
 		int total, used;
 
-		getstats(&total, &used);
+		if (getstats(&total, &used)) {
+			return NULL;
+		}
 
 		return fmt_human((total - used) * 1024, 1024);
 	}
@@ -186,7 +188,9 @@
 	{
 		int total, used;
 
-		getstats(&total, &used);
+		if (getstats(&total, &used)) {
+			return NULL;
+		}
 
 		if (total == 0) {
 			return NULL;
@@ -200,7 +204,9 @@
 	{
 		int total, used;
 
-		getstats(&total, &used);
+		if (getstats(&total, &used)) {
+			return NULL;
+		}
 
 		return fmt_human(total * 1024, 1024);
 	}
@@ -210,7 +216,9 @@
 	{
 		int total, used;
 
-		getstats(&total, &used);
+		if (getstats(&total, &used)) {
+			return NULL;
+		}
 
 		return fmt_human(used * 1024, 1024);
 	}
-- 
cgit v1.2.3