diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/bcnm/wpactrl.h | 3 | ||||
-rw-r--r-- | src/libwpactrl/wpactrl_end.c | 7 | ||||
-rw-r--r-- | src/libwpactrl/wpactrl_start.c | 13 |
3 files changed, 16 insertions, 7 deletions
diff --git a/src/include/bcnm/wpactrl.h b/src/include/bcnm/wpactrl.h index 102c063..a81385e 100644 --- a/src/include/bcnm/wpactrl.h +++ b/src/include/bcnm/wpactrl.h @@ -47,8 +47,9 @@ struct wpactrl_s size_t datahead ; stralloc data ; stralloc filters ; + stralloc clientpath ; } ; -#define WPACTRL_ZERO { -1, -1, 0, TAIN_ZERO, 0, STRALLOC_ZERO, STRALLOC_ZERO } +#define WPACTRL_ZERO { -1, -1, 0, TAIN_ZERO, 0, STRALLOC_ZERO, STRALLOC_ZERO, STRALLOC_ZERO } #define WPACTRL_OPTION_NOFILTER 0x0001U diff --git a/src/libwpactrl/wpactrl_end.c b/src/libwpactrl/wpactrl_end.c index a14b6c8..41ea81a 100644 --- a/src/libwpactrl/wpactrl_end.c +++ b/src/libwpactrl/wpactrl_end.c @@ -1,14 +1,21 @@ /* ISC license. */ +#include <skalibs/posixplz.h> #include <skalibs/stralloc.h> #include <skalibs/djbunix.h> + #include <bcnm/wpactrl.h> void wpactrl_end (wpactrl_t *a) { + a->clientpath.s[a->clientpath.len - 2] = 's' ; + unlink_void(a->clientpath.s) ; + a->clientpath.s[a->clientpath.len - 2] = 'a' ; + unlink_void(a->clientpath.s) ; fd_close(a->fda) ; fd_close(a->fds) ; stralloc_free(&a->filters) ; stralloc_free(&a->data) ; + stralloc_free(&a->clientpath) ; *a = wpactrl_zero ; } diff --git a/src/libwpactrl/wpactrl_start.c b/src/libwpactrl/wpactrl_start.c index a3e5331..df2b480 100644 --- a/src/libwpactrl/wpactrl_start.c +++ b/src/libwpactrl/wpactrl_start.c @@ -18,14 +18,13 @@ int wpactrl_start (wpactrl_t *a, char const *path, unsigned int timeout, tain_t { tain_t tto, deadline ; int fda, fds ; - size_t pos ; stralloc sa = STRALLOC_ZERO ; if (timeout) tain_from_millisecs(&tto, timeout) ; else tto = tain_infinite_relative ; if (!stralloc_cats(&sa, BCNM_TMPDIR)) return 0 ; - if (!stralloc_cats(&sa, "/clientfds")) goto err ; - pos = sa.len - 1 ; - if (!sauniquename(&sa) || !stralloc_0(&sa)) goto err ; + if (!stralloc_cats(&sa, "/libwpactrl") + || !sauniquename(&sa) + || !stralloc_catb(&sa, ":s", 3)) goto err ; fds = ipc_datagram_nbcoe() ; if (fds < 0) goto err ; unlink_void(sa.s) ; @@ -34,7 +33,7 @@ int wpactrl_start (wpactrl_t *a, char const *path, unsigned int timeout, tain_t || !ipc_timed_connect(fds, path, &deadline, stamp)) goto errs ; fda = ipc_datagram_nbcoe() ; if (fda < 0) goto errs ; - sa.s[pos] = 'a' ; + sa.s[sa.len - 2] = 'a' ; unlink_void(sa.s) ; if (ipc_bind(fda, sa.s) == -1 || !ipc_timed_connect(fda, path, &deadline, stamp) @@ -45,7 +44,9 @@ int wpactrl_start (wpactrl_t *a, char const *path, unsigned int timeout, tain_t r = wpactrl_fd_timed_recv(fda, answer, 3, &deadline, stamp) ; if (r != 3 || memcmp(answer, "OK\n", 3)) goto erra ; } - stralloc_free(&sa) ; + if (!stralloc_shrink(&sa)) goto erra ; + + a->clientpath = sa ; a->fds = fds ; a->fda = fda ; a->tto = tto ; |