17e272fcfSJohn W. Linville /* 27e272fcfSJohn W. Linville * lib80211 -- common bits for IEEE802.11 drivers 37e272fcfSJohn W. Linville * 47e272fcfSJohn W. Linville * Copyright(c) 2008 John W. Linville <linville@tuxdriver.com> 57e272fcfSJohn W. Linville * 67e272fcfSJohn W. Linville */ 77e272fcfSJohn W. Linville 87e272fcfSJohn W. Linville #include <linux/module.h> 9*2819f8adSJohn W. Linville #include <linux/ctype.h> 107e272fcfSJohn W. Linville #include <linux/ieee80211.h> 117e272fcfSJohn W. Linville 127e272fcfSJohn W. Linville #include <net/lib80211.h> 137e272fcfSJohn W. Linville 147e272fcfSJohn W. Linville #define DRV_NAME "lib80211" 157e272fcfSJohn W. Linville 167e272fcfSJohn W. Linville #define DRV_DESCRIPTION "common routines for IEEE802.11 drivers" 177e272fcfSJohn W. Linville 187e272fcfSJohn W. Linville MODULE_DESCRIPTION(DRV_DESCRIPTION); 197e272fcfSJohn W. Linville MODULE_AUTHOR("John W. Linville <linville@tuxdriver.com>"); 207e272fcfSJohn W. Linville MODULE_LICENSE("GPL"); 217e272fcfSJohn W. Linville 227e272fcfSJohn W. Linville const char *escape_ssid(const char *ssid, u8 ssid_len) 237e272fcfSJohn W. Linville { 24*2819f8adSJohn W. Linville static char escaped[IEEE80211_MAX_SSID_LEN * 4 + 1]; 257e272fcfSJohn W. Linville const char *s = ssid; 267e272fcfSJohn W. Linville char *d = escaped; 277e272fcfSJohn W. Linville 287e272fcfSJohn W. Linville ssid_len = min_t(u8, ssid_len, IEEE80211_MAX_SSID_LEN); 297e272fcfSJohn W. Linville while (ssid_len--) { 30*2819f8adSJohn W. Linville if (isprint(*s)) { 317e272fcfSJohn W. Linville *d++ = *s++; 32*2819f8adSJohn W. Linville continue; 337e272fcfSJohn W. Linville } 34*2819f8adSJohn W. Linville 35*2819f8adSJohn W. Linville *d++ = '\\'; 36*2819f8adSJohn W. Linville if (*s == '\0') 37*2819f8adSJohn W. Linville *d++ = '0'; 38*2819f8adSJohn W. Linville else if (*s == '\n') 39*2819f8adSJohn W. Linville *d++ = 'n'; 40*2819f8adSJohn W. Linville else if (*s == '\r') 41*2819f8adSJohn W. Linville *d++ = 'r'; 42*2819f8adSJohn W. Linville else if (*s == '\t') 43*2819f8adSJohn W. Linville *d++ = 't'; 44*2819f8adSJohn W. Linville else if (*s == '\\') 45*2819f8adSJohn W. Linville *d++ = '\\'; 46*2819f8adSJohn W. Linville else 47*2819f8adSJohn W. Linville d += snprintf(d, 3, "%03o", *s); 48*2819f8adSJohn W. Linville s++; 497e272fcfSJohn W. Linville } 507e272fcfSJohn W. Linville *d = '\0'; 517e272fcfSJohn W. Linville return escaped; 527e272fcfSJohn W. Linville } 537e272fcfSJohn W. Linville EXPORT_SYMBOL(escape_ssid); 547e272fcfSJohn W. Linville 557e272fcfSJohn W. Linville static int __init ieee80211_init(void) 567e272fcfSJohn W. Linville { 577e272fcfSJohn W. Linville printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION "\n"); 587e272fcfSJohn W. Linville return 0; 597e272fcfSJohn W. Linville } 607e272fcfSJohn W. Linville 617e272fcfSJohn W. Linville static void __exit ieee80211_exit(void) 627e272fcfSJohn W. Linville { 637e272fcfSJohn W. Linville } 647e272fcfSJohn W. Linville 657e272fcfSJohn W. Linville module_init(ieee80211_init); 667e272fcfSJohn W. Linville module_exit(ieee80211_exit); 67