uci: fix memory leak in rpc_uci_replace_savedir()
[project/rpcd.git] / iwinfo.c
index 325c07a..1849196 100644 (file)
--- a/iwinfo.c
+++ b/iwinfo.c
@@ -227,6 +227,41 @@ rpc_iwinfo_call_encryption(const char *name)
 }
 
 static void
+rpc_iwinfo_call_htmodes(const char *name)
+{
+       int modes;
+       void *c;
+
+       if (!iw->htmodelist(ifname, &modes))
+       {
+               c = blobmsg_open_array(&buf, name);
+
+               if (modes & IWINFO_HTMODE_HT20)
+                       blobmsg_add_string(&buf, NULL, "HT20");
+
+               if (modes & IWINFO_HTMODE_HT40)
+                       blobmsg_add_string(&buf, NULL, "HT40");
+
+               if (modes & IWINFO_HTMODE_VHT20)
+                       blobmsg_add_string(&buf, NULL, "VHT20");
+
+               if (modes & IWINFO_HTMODE_VHT40)
+                       blobmsg_add_string(&buf, NULL, "VHT40");
+
+               if (modes & IWINFO_HTMODE_VHT80)
+                       blobmsg_add_string(&buf, NULL, "VHT80");
+
+               if (modes & IWINFO_HTMODE_VHT80_80)
+                       blobmsg_add_string(&buf, NULL, "VHT80+80");
+
+               if (modes & IWINFO_HTMODE_VHT160)
+                       blobmsg_add_string(&buf, NULL, "VHT160");
+
+               blobmsg_close_array(&buf, c);
+       }
+}
+
+static void
 rpc_iwinfo_call_hwmodes(const char *name)
 {
        int modes;
@@ -303,6 +338,7 @@ rpc_iwinfo_info(struct ubus_context *ctx, struct ubus_object *obj,
        rpc_iwinfo_call_int("bitrate", iw->bitrate, NULL);
 
        rpc_iwinfo_call_encryption("encryption");
+       rpc_iwinfo_call_htmodes("htmodes");
        rpc_iwinfo_call_hwmodes("hwmodes");
 
        c = blobmsg_open_table(&buf, "hardware");
@@ -588,7 +624,7 @@ rpc_iwinfo_countrylist(struct ubus_context *ctx, struct ubus_object *obj,
        int rv, len;
        char cur[3];
        char iso3166[3];
-       char res[IWINFO_BUFSIZE];
+       char res[IWINFO_BUFSIZE] = {0};
        const char *ccode;
        const struct iwinfo_iso3166_label *l;
        void *c, *d;