diff options
Diffstat (limited to 'src/libwpactrl/wpactrl_scan_parse.c')
-rw-r--r-- | src/libwpactrl/wpactrl_scan_parse.c | 59 |
1 files changed, 12 insertions, 47 deletions
diff --git a/src/libwpactrl/wpactrl_scan_parse.c b/src/libwpactrl/wpactrl_scan_parse.c index ab4a9fe..e75072d 100644 --- a/src/libwpactrl/wpactrl_scan_parse.c +++ b/src/libwpactrl/wpactrl_scan_parse.c @@ -3,7 +3,7 @@ #include <string.h> #include <stdint.h> #include <errno.h> -#include <skalibs/uint16.h> +#include <skalibs/uint32.h> #include <skalibs/bytestr.h> #include <skalibs/error.h> #include <skalibs/fmtscan.h> @@ -11,56 +11,25 @@ #include <skalibs/genalloc.h> #include <bcnm/wpactrl.h> -static size_t bssid_scan (char const *s, char *bssid) -{ - unsigned int i = 0 ; - char sep[6] = ":::::\t" ; - for (; i < 6 ; i++) - { - if (!ucharn_scan(s, bssid + i, 1)) goto eproto ; - if (s[2] != sep[i]) goto eproto ; - s += 3 ; - } - return 18 ; - - eproto: - return (errno = EPROTO, 0) ; -} - -static int flags_scan (char const *s, size_t len, stralloc *sa) -{ - while (len) - { - size_t pos ; - if (*s++ != '[') goto eproto ; - len-- ; - pos = byte_chr(s, len, ']') ; - if (pos >= len || !pos) goto eproto ; - if (!stralloc_catb(sa, s, pos) || !stralloc_0(sa)) return 0 ; - s += pos + 1 ; len -= pos + 1 ; - } - return 1 ; - - eproto: - return (errno = EPROTO, 0) ; -} - static int wpactrl_scan_parse_one (char const *s, size_t len, wpactrl_scanres_t *thing, stralloc *sa) { wpactrl_scanres_t sr ; size_t pos = byte_chr(s, len, '\t') ; if (pos >= len) goto eproto ; - if (pos != 18) goto eproto ; - if (bssid_scan(s, sr.bssid) != pos) goto eproto ; + if (wpactrl_bssid_scan(s, sr.bssid) != pos) goto eproto ; s += pos + 1 ; len -= pos + 1 ; pos = byte_chr(s, len, '\t') ; if (pos >= len) goto eproto ; - if (uint16_scan(s, &sr.frequency) != pos) goto eproto ; + if (uint32_scan(s, &sr.frequency) != pos) goto eproto ; + s += pos + 1 ; len -= pos + 1 ; + pos = byte_chr(s, len, '\t') ; + if (pos >= len) goto eproto ; + if (uint32_scan(s, &sr.signal_level) != pos) goto eproto ; s += pos + 1 ; len -= pos + 1 ; pos = byte_chr(s, len, '\t') ; if (pos >= len) goto eproto ; sr.flags_start = sa->len ; - if (!flags_scan(s, pos, sa)) goto eproto ; + if (wpactrl_flags_scan(s, sa) != pos) goto eproto ; s += pos + 1 ; len -= pos + 1 ; sr.flags_len = sa->len - sr.flags_start ; sr.ssid_start = sa->len ; @@ -92,13 +61,9 @@ int wpactrl_scan_parse (char const *s, size_t len, genalloc *ga, stralloc *sa) return 1 ; err: - { - int e = errno ; - if (gawasnull) genalloc_free(wpactrl_scanres_t, ga) ; - else genalloc_setlen(wpactrl_scanres_t, ga, gabase) ; - if (sawasnull) stralloc_free(sa) ; - else sa->len = sabase ; - errno = e ; - } + if (gawasnull) genalloc_free(wpactrl_scanres_t, ga) ; + else genalloc_setlen(wpactrl_scanres_t, ga, gabase) ; + if (sawasnull) stralloc_free(sa) ; + else sa->len = sabase ; return 0 ; } |