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.
This commit is contained in:
cinap_lenrek 2015-10-09 05:10:47 +02:00
parent b29e414bc6
commit 4040ea7a5e
5 changed files with 26 additions and 44 deletions

View file

@ -2101,27 +2101,12 @@ iwlifstat(Ether *edev, void *buf, long n, ulong off)
static void static void
setoptions(Ether *edev) setoptions(Ether *edev)
{ {
char buf[64], *p;
Ctlr *ctlr; Ctlr *ctlr;
int i; int i;
ctlr = edev->ctlr; ctlr = edev->ctlr;
for(i = 0; i < edev->nopt; i++){ for(i = 0; i < edev->nopt; i++)
snprint(buf, sizeof(buf), "%s", edev->opt[i]); wificfg(ctlr->wifi, 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();
}
}
}
} }
static void static void

View file

@ -1306,19 +1306,11 @@ static void
setoptions(Ether *edev) setoptions(Ether *edev)
{ {
Ctlr *ctlr; Ctlr *ctlr;
char buf[64];
int i; int i;
ctlr = edev->ctlr; ctlr = edev->ctlr;
for(i = 0; i < edev->nopt; i++){ for(i = 0; i < edev->nopt; i++)
if(strncmp(edev->opt[i], "essid=", 6) == 0){ wificfg(ctlr->wifi, edev->opt[i]);
snprint(buf, sizeof(buf), "essid %s", edev->opt[i]+6);
if(!waserror()){
wifictl(ctlr->wifi, buf, strlen(buf));
poperror();
}
}
}
} }
static void static void

View file

@ -1491,27 +1491,12 @@ wpiifstat(Ether *edev, void *buf, long n, ulong off)
static void static void
setoptions(Ether *edev) setoptions(Ether *edev)
{ {
char buf[64], *p;
Ctlr *ctlr; Ctlr *ctlr;
int i; int i;
ctlr = edev->ctlr; ctlr = edev->ctlr;
for(i = 0; i < edev->nopt; i++){ for(i = 0; i < edev->nopt; i++)
snprint(buf, sizeof(buf), "%s", edev->opt[i]); wificfg(ctlr->wifi, 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();
}
}
}
} }
static void static void

View file

@ -814,6 +814,25 @@ parsekey(Wkey *k, char *s)
return 0; 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 { enum {
CMdebug, CMdebug,
CMessid, CMessid,

View file

@ -95,3 +95,4 @@ void wifitxfail(Wifi*, Block*);
long wifistat(Wifi*, void*, long, ulong); long wifistat(Wifi*, void*, long, ulong);
long wifictl(Wifi*, void*, long); long wifictl(Wifi*, void*, long);
void wificfg(Wifi*, char*);