about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/bcnm/wpactrl.h3
-rw-r--r--src/libwpactrl/wpactrl_end.c7
-rw-r--r--src/libwpactrl/wpactrl_start.c13
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 ;