summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/libwpactrl/index.html5
-rw-r--r--src/include/bcnm/wpactrl.h3
-rw-r--r--src/libwpactrl/wpactrl_end.c7
-rw-r--r--src/libwpactrl/wpactrl_start.c13
4 files changed, 20 insertions, 8 deletions
diff --git a/doc/libwpactrl/index.html b/doc/libwpactrl/index.html
index 6f114c3..204f9f8 100644
--- a/doc/libwpactrl/index.html
+++ b/doc/libwpactrl/index.html
@@ -132,7 +132,10 @@ will immediately be aborted.
<p>
<code> int wpactrl_end (wpactrl_t *a) </code> <br />
-Ends the session, freeing all used resources.
+Ends the session, freeing all used resources. It is important
+to use this function even if your process exits right away,
+because <tt>wpactrl_end()</tt> will also delete entries in
+the filesystem.
</p>
<h3> Low-level command sending </h3>
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 ;