From 9667ad3aba3f1e9dad597d3644c9701f9e8d834a Mon Sep 17 00:00:00 2001
From: Anjan Chanda <anjan.chanda@iopsys.eu>
Date: Mon, 29 Apr 2019 12:08:34 +0200
Subject: [PATCH] fix stamon rssi as it is char type

---
 wifimngr.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/wifimngr.c b/wifimngr.c
index df84cb9..c30091f 100644
--- a/wifimngr.c
+++ b/wifimngr.c
@@ -80,16 +80,21 @@ static char * etostr2(uint32_t e, char *out, int elen, const char **arr, char *s
 
 static int uci_get_wifi_devices(char iflist[][16])
 {
-	static struct uci_context *ctx;
-	static struct uci_package *pkg;
+	struct uci_context *ctx;
+	struct uci_package *pkg;
 	struct uci_element *e;
 	const char *device;
 	int ret = 0;
 	int n = 0;
 
 	ctx = uci_alloc_context();
-	if (uci_load(ctx, "wireless", &pkg))
+	if (!ctx)
+		return -1;
+
+	if (uci_load(ctx, "wireless", &pkg)) {
+		uci_free_context(ctx);
 		return -1;
+	}
 
 	uci_foreach_element(&pkg->sections, e) {
 		struct uci_section *s = uci_to_section(e);
@@ -1081,6 +1086,8 @@ static int sta_monitor(struct ubus_context *ctx, struct ubus_object *obj,
 		return UBUS_STATUS_UNKNOWN_ERROR;
 
 	if (stamon) {
+		int i, tmp = 0;
+
 		memset(&bb, 0, sizeof(bb));
 		blob_buf_init(&bb, 0);
 		sprintf(sta_str, "%02x:%02x:%02x:%02x:%02x:%02x",
@@ -1090,10 +1097,11 @@ static int sta_monitor(struct ubus_context *ctx, struct ubus_object *obj,
 		t = blobmsg_open_table(&bb, sta_str);
 		blobmsg_add_u32(&bb, "seen", stamon->last_seen);
 		a = blobmsg_open_array(&bb, "rssi");
-		blobmsg_add_u32(&bb, "", stamon->rssi[0]);
-		blobmsg_add_u32(&bb, "", stamon->rssi[1]);
-		blobmsg_add_u32(&bb, "", stamon->rssi[2]);
-		blobmsg_add_u32(&bb, "", stamon->rssi[3]);
+		for (i = 0; i < 4; i++) {
+			tmp = (stamon->rssi[i] > 0) ?
+				stamon->rssi[i] - 256 : stamon->rssi[i];
+			blobmsg_add_u32(&bb, "", tmp);
+		}
 		blobmsg_close_array(&bb, a);
 		blobmsg_close_table(&bb, t);
 
-- 
GitLab