Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F156884257
D37070.id112043.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D37070.id112043.diff
View Options
diff --git a/sbin/ifconfig/ifieee80211.c b/sbin/ifconfig/ifieee80211.c
--- a/sbin/ifconfig/ifieee80211.c
+++ b/sbin/ifconfig/ifieee80211.c
@@ -93,6 +93,8 @@
#include <stddef.h> /* NB: for offsetof */
#include <locale.h>
#include <langinfo.h>
+#include <wchar.h>
+#include <wctype.h>
#include "ifconfig.h"
@@ -3445,47 +3447,52 @@
* three characters with "...".
*/
static int
-copy_essid(char buf[], size_t bufsize, const u_int8_t *essid, size_t essid_len)
+copy_essid(wchar_t buf[], size_t buflen, const u_int8_t *essid, size_t essid_len)
{
- const u_int8_t *p;
- size_t maxlen;
+ wchar_t ssid[IEEE80211_NWID_LEN + 1];
+ size_t maxlen, wlen;
u_int i;
- if (essid_len > bufsize)
- maxlen = bufsize;
+ if (essid_len > buflen)
+ maxlen = buflen;
else
maxlen = essid_len;
- /* determine printable or not */
- for (i = 0, p = essid; i < maxlen; i++, p++) {
- if (*p < ' ' || *p > 0x7e)
+
+ /* convert SSID to UTF-32 */
+ swprintf(ssid, sizeof(wchar_t)*maxlen, L"%hs", essid);
+ wlen = wcslen(ssid);
+
+ for (i = 0; i < wlen; i++)
+ if (iswprint(ssid[i]) == 0)
break;
- }
- if (i != maxlen) { /* not printable, print as hex */
- if (bufsize < 3)
- return 0;
- strlcpy(buf, "0x", bufsize);
- bufsize -= 2;
- p = essid;
- for (i = 0; i < maxlen && bufsize >= 2; i++) {
- sprintf(&buf[2+2*i], "%02x", p[i]);
- bufsize -= 2;
+
+ if (i != wlen) { /* not printable, print as hex, truncate as needed */
+ wcslcpy(buf, L"0x", sizeof(wchar_t)*2);
+ buflen -= 2;
+ for (i = 0; i < essid_len && buflen >= 2; i++) {
+ swprintf(&buf[2+2*i], sizeof(wchar_t)*2, L"%02x", essid[i]);
+ buflen -= 2;
}
if (i != essid_len)
- memcpy(&buf[2+2*i-3], "...", 3);
+ wmemcpy(&buf[buflen-3], L"...", sizeof(wchar_t)*3);
+
+ return (2+2*i);
} else { /* printable, truncate as needed */
- memcpy(buf, essid, maxlen);
- if (maxlen != essid_len)
- memcpy(&buf[maxlen-3], "...", 3);
+ wmemcpy(buf, ssid, sizeof(wchar_t)*wlen);
+ if (wlen != essid_len)
+ wmemcpy(&buf[buflen-3], L"...", sizeof(wchar_t)*3);
+
+ return wlen;
}
- return maxlen;
}
+
static void
printssid(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
{
- char ssid[2*IEEE80211_NWID_LEN+1];
+ wchar_t ssid[IEEE80211_NWID_LEN+1];
- printf("%s<%.*s>", tag, copy_essid(ssid, maxlen, ie+2, ie[1]), ssid);
+ wprintf(L"%hs<%.*ls>", tag, copy_essid(ssid, maxlen, ie+2, ie[1]), ssid);
}
static void
@@ -3720,7 +3727,7 @@
list_scan(int s)
{
uint8_t buf[24*1024];
- char ssid[IEEE80211_NWID_LEN+1];
+ wchar_t ssid[IEEE80211_NWID_LEN+1];
const uint8_t *cp;
int len, idlen;
@@ -3754,10 +3761,15 @@
idp = vp;
idlen = sr->isr_ssid_len;
}
- printf("%-*.*s %s %3d %3dM %4d:%-4d %4d %-4.4s"
+
+ setlocale(LC_ALL, "");
+
+ wprintf(L"%-*.*ls"
, IEEE80211_NWID_LEN
, copy_essid(ssid, IEEE80211_NWID_LEN, idp, idlen)
, ssid
+ );
+ printf(" %s %3d %3dM %4d:%-4d %4d %-4.4s"
, ether_ntoa((const struct ether_addr *) sr->isr_bssid)
, ieee80211_mhz2ieee(sr->isr_freq, sr->isr_flags)
, getmaxrate(sr->isr_rates, sr->isr_nrates)
@@ -3765,6 +3777,7 @@
, sr->isr_intval
, getcaps(sr->isr_capinfo)
);
+
printies(vp + sr->isr_ssid_len + sr->isr_meshid_len,
sr->isr_ie_len, 24);
printf("\n");
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, May 18, 1:51 AM (6 h, 43 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33218178
Default Alt Text
D37070.id112043.diff (3 KB)
Attached To
Mode
D37070: ifconfig(8): scan list SSID UTF-32 support
Attached
Detach File
Event Timeline
Log In to Comment