summaryrefslogtreecommitdiff
path: root/src/libwpactrl/wpactrl_scan_parse.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-08-04 22:46:45 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-08-04 22:46:45 +0000
commitbabf43abf301d072192bda1f72a47440c354b072 (patch)
treed917d33ebb97d2b783e163f299b360be4f5b3a0a /src/libwpactrl/wpactrl_scan_parse.c
parent69099d84949a8044fdfc74e9d7ff6b9e57fc0bcd (diff)
downloadbcnm-babf43abf301d072192bda1f72a47440c354b072.tar.xz
Add the higher layer of libwpactrl
Diffstat (limited to 'src/libwpactrl/wpactrl_scan_parse.c')
-rw-r--r--src/libwpactrl/wpactrl_scan_parse.c59
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 ;
}