From 4040ea7a5eda976098131794e8df3b162cafa8f4 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Fri, 9 Oct 2015 05:10:47 +0200 Subject: wifi: quote value of parsed ether options introduce wificfg() function to convert ether->opt[] strings to wifictl messages, which needs quoting for the value. so etherX=type=iwl essid='something with spaces' works. --- sys/src/9/pc/etheriwl.c | 19 ++----------------- sys/src/9/pc/etherrt2860.c | 12 ++---------- sys/src/9/pc/etherwpi.c | 19 ++----------------- sys/src/9/pc/wifi.c | 19 +++++++++++++++++++ sys/src/9/pc/wifi.h | 1 + 5 files changed, 26 insertions(+), 44 deletions(-) (limited to 'sys/src') diff --git a/sys/src/9/pc/etheriwl.c b/sys/src/9/pc/etheriwl.c index 0077061be..aba316f0f 100644 --- a/sys/src/9/pc/etheriwl.c +++ b/sys/src/9/pc/etheriwl.c @@ -2101,27 +2101,12 @@ iwlifstat(Ether *edev, void *buf, long n, ulong off) static void setoptions(Ether *edev) { - char buf[64], *p; Ctlr *ctlr; int i; ctlr = edev->ctlr; - for(i = 0; i < edev->nopt; i++){ - snprint(buf, sizeof(buf), "%s", edev->opt[i]); - p = strchr(buf, '='); - if(p != nil) - *p = 0; - if(strcmp(buf, "debug") == 0 - || strcmp(buf, "essid") == 0 - || strcmp(buf, "bssid") == 0){ - if(p != nil) - *p = ' '; - if(!waserror()){ - wifictl(ctlr->wifi, buf, strlen(buf)); - poperror(); - } - } - } + for(i = 0; i < edev->nopt; i++) + wificfg(ctlr->wifi, edev->opt[i]); } static void diff --git a/sys/src/9/pc/etherrt2860.c b/sys/src/9/pc/etherrt2860.c index 79e4ef68b..6544a80a7 100644 --- a/sys/src/9/pc/etherrt2860.c +++ b/sys/src/9/pc/etherrt2860.c @@ -1306,19 +1306,11 @@ static void setoptions(Ether *edev) { Ctlr *ctlr; - char buf[64]; int i; ctlr = edev->ctlr; - for(i = 0; i < edev->nopt; i++){ - if(strncmp(edev->opt[i], "essid=", 6) == 0){ - snprint(buf, sizeof(buf), "essid %s", edev->opt[i]+6); - if(!waserror()){ - wifictl(ctlr->wifi, buf, strlen(buf)); - poperror(); - } - } - } + for(i = 0; i < edev->nopt; i++) + wificfg(ctlr->wifi, edev->opt[i]); } static void diff --git a/sys/src/9/pc/etherwpi.c b/sys/src/9/pc/etherwpi.c index 00e1e4847..4dbc65e6d 100644 --- a/sys/src/9/pc/etherwpi.c +++ b/sys/src/9/pc/etherwpi.c @@ -1491,27 +1491,12 @@ wpiifstat(Ether *edev, void *buf, long n, ulong off) static void setoptions(Ether *edev) { - char buf[64], *p; Ctlr *ctlr; int i; ctlr = edev->ctlr; - for(i = 0; i < edev->nopt; i++){ - snprint(buf, sizeof(buf), "%s", edev->opt[i]); - p = strchr(buf, '='); - if(p != nil) - *p = 0; - if(strcmp(buf, "debug") == 0 - || strcmp(buf, "essid") == 0 - || strcmp(buf, "bssid") == 0){ - if(p != nil) - *p = ' '; - if(!waserror()){ - wifictl(ctlr->wifi, buf, strlen(buf)); - poperror(); - } - } - } + for(i = 0; i < edev->nopt; i++) + wificfg(ctlr->wifi, edev->opt[i]); } static void diff --git a/sys/src/9/pc/wifi.c b/sys/src/9/pc/wifi.c index a594df78b..55b9ce326 100644 --- a/sys/src/9/pc/wifi.c +++ b/sys/src/9/pc/wifi.c @@ -814,6 +814,25 @@ parsekey(Wkey *k, char *s) return 0; } +void +wificfg(Wifi *wifi, char *opt) +{ + char *p, buf[64]; + int n; + + if(strncmp(opt, "debug=", 6)) + if(strncmp(opt, "essid=", 6)) + if(strncmp(opt, "bssid=", 6)) + return; + if((p = strchr(opt, '=')) == nil) + return; + if(waserror()) + return; + n = snprint(buf, sizeof(buf), "%.*s %q", (int)(p - opt), opt, p+1); + wifictl(wifi, buf, n); + poperror(); +} + enum { CMdebug, CMessid, diff --git a/sys/src/9/pc/wifi.h b/sys/src/9/pc/wifi.h index d9a8514a6..bca2e07e9 100644 --- a/sys/src/9/pc/wifi.h +++ b/sys/src/9/pc/wifi.h @@ -95,3 +95,4 @@ void wifitxfail(Wifi*, Block*); long wifistat(Wifi*, void*, long, ulong); long wifictl(Wifi*, void*, long); +void wificfg(Wifi*, char*); -- cgit v1.2.3