@@ 557,11 557,16 @@ w_scaninfo(Ether* ether, Ctlr *ctlr, int len)
Netfile **ep, *f, **fp;
Block *bp;
WScan *wsp;
+ ushort *scanbuf;
+ scanbuf = malloc(len*2);
+ if(scanbuf == nil)
+ return;
+
for (i = 0; i < len ; i++)
- ctlr->scanbuf[i] = csr_ins(ctlr, WR_Data1);
+ scanbuf[i] = csr_ins(ctlr, WR_Data1);
- len *= 2;
+ len /= 25;
i = ether->scan;
ep = ðer->f[Ntypes];
for(fp = ether->f; fp < ep && i > 0; fp++){
@@ 569,14 574,14 @@ w_scaninfo(Ether* ether, Ctlr *ctlr, int len)
if(f == nil || f->scan == 0)
continue;
- bp = iallocb(2048);
+ bp = iallocb(100*len);
if(bp == nil)
break;
- for(j = 0; j < len/(2*25); j++){
- wsp = (WScan*)(&ctlr->scanbuf[j*25]);
+ for(j = 0; j < len; j++){
+ wsp = (WScan*)(&scanbuf[j*25]);
if(wsp->ssid_len > 32)
wsp->ssid_len = 32;
- bp->wp += snprint((char*)bp->wp, 2048,
+ bp->wp = (uchar*)seprint((char*)bp->wp, (char*)bp->lim,
"ssid=%.*s;bssid=%E;signal=%d;noise=%d;chan=%d%s\n",
wsp->ssid_len, wsp->ssid, wsp->bssid, wsp->signal,
wsp->noise, wsp->chan, (wsp->capinfo&(1<<4))?";wep":"");
@@ 584,6 589,7 @@ w_scaninfo(Ether* ether, Ctlr *ctlr, int len)
qpass(f->in, bp);
i--;
}
+ free(scanbuf);
}
static int