summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-12-22 17:37:09 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-12-22 17:37:09 +0000
commitd7242bda59ec2ec056508b39cb532b5e7318dd13 (patch)
treeffb04351e694d0f7935062127daf0d1b47ebf3d2
parentda7304bbbfb90ced7a00acf5dbca0319d89fcc3a (diff)
downloads6-d7242bda59ec2ec056508b39cb532b5e7318dd13.tar.xz
Port ftrigr and s6lock to textclient
-rw-r--r--INSTALL2
-rw-r--r--NEWS7
-rw-r--r--doc/index.html4
-rw-r--r--doc/upgrade.html13
-rw-r--r--package/info2
-rw-r--r--src/include/s6/ftrigr.h11
-rw-r--r--src/include/s6/s6lock.h9
-rw-r--r--src/libs6/ftrigr_end.c4
-rw-r--r--src/libs6/ftrigr_start.c5
-rw-r--r--src/libs6/ftrigr_startf.c5
-rw-r--r--src/libs6/ftrigr_subscribe.c18
-rw-r--r--src/libs6/ftrigr_unsubscribe.c12
-rw-r--r--src/libs6/ftrigr_updateb.c19
-rw-r--r--src/libs6/s6-ftrigrd.c52
-rw-r--r--src/libs6/s6lock_acquire.c12
-rw-r--r--src/libs6/s6lock_end.c4
-rw-r--r--src/libs6/s6lock_release.c12
-rw-r--r--src/libs6/s6lock_start.c5
-rw-r--r--src/libs6/s6lock_startf.c7
-rw-r--r--src/libs6/s6lock_update.c17
-rw-r--r--src/libs6/s6lockd.c56
21 files changed, 135 insertions, 141 deletions
diff --git a/INSTALL b/INSTALL
index 5314d66..f1162aa 100644
--- a/INSTALL
+++ b/INSTALL
@@ -6,7 +6,7 @@ Build Instructions
- A POSIX-compliant C development environment
- GNU make version 3.81 or later
- - skalibs version 2.6.2.0 or later: http://skarnet.org/software/skalibs/
+ - skalibs version 2.6.3.0 or later: http://skarnet.org/software/skalibs/
- execline version 2.3.0.4 or later: http://skarnet.org/software/execline/
This software will run on any operating system that implements
diff --git a/NEWS b/NEWS
index e184613..3586f17 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,12 @@
Changelog for s6.
+In 2.7.0.0
+----------
+
+ - s6-ftrigrd and s6lockd internally use the textclient API/ABI
+instead of skaclient. This is cleaner, faster code.
+
+
In 2.6.2.0
----------
diff --git a/doc/index.html b/doc/index.html
index 330d56e..952a907 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -83,7 +83,7 @@ with s6</a> </li>
<li> A POSIX-compliant system with a standard C development environment </li>
<li> GNU make, version 3.81 or later </li>
<li> <a href="//skarnet.org/software/skalibs/">skalibs</a> version
-2.6.2.0 or later. It's a build-time requirement. It's also a run-time
+2.6.3.0 or later. It's a build-time requirement. It's also a run-time
requirement if you link against the shared version of the skalibs
library. </li>
<li> <a href="//skarnet.org/software/execline/">execline</a> version
@@ -100,7 +100,7 @@ library. </li>
<h3> Download </h3>
<ul>
- <li> The current released version of s6 is <a href="s6-2.6.2.0.tar.gz">2.6.2.0</a>. </li>
+ <li> The current released version of s6 is <a href="s6-2.7.0.0.tar.gz">2.7.0.0</a>. </li>
<li> Alternatively, you can checkout a copy of the
<a href="//git.skarnet.org/cgi-bin/cgit.cgi/s6/">s6
git repository</a>:
diff --git a/doc/upgrade.html b/doc/upgrade.html
index 8f5db8d..fb83a77 100644
--- a/doc/upgrade.html
+++ b/doc/upgrade.html
@@ -18,6 +18,19 @@
<h1> What has changed in s6 </h1>
+<h2> in 2.7.0.0 </h2>
+
+<ul>
+ <li> skalibs dependency bumped to 2.6.3.0. </li>
+ <li> <a href="libs6/s6lockd.html">s6lockd</a> and
+<a href="libs6/s6-ftrigrd.html">s6-ftrigrd</a> now use the new
+<tt>textclient</tt> API and ABI from skalibs, instead of the
+more generic <tt>skaclient</tt>. This is cleaner, faster code.
+(<a href="s6-fdholderd.html">s6-fdholderd</a> still uses
+skaclient, since its point is to transmit file descriptors,
+which textclient does not support.) </li>
+</ul>
+
<h2> in 2.6.2.0 </h2>
<ul>
diff --git a/package/info b/package/info
index a778841..1324557 100644
--- a/package/info
+++ b/package/info
@@ -1,4 +1,4 @@
package=s6
-version=2.6.2.0
+version=2.7.0.0
category=admin
package_macro_name=S6
diff --git a/src/include/s6/ftrigr.h b/src/include/s6/ftrigr.h
index 425a689..3efb206 100644
--- a/src/include/s6/ftrigr.h
+++ b/src/include/s6/ftrigr.h
@@ -10,13 +10,13 @@
#include <skalibs/stralloc.h>
#include <skalibs/genalloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/config.h>
/* Constants */
-#define FTRIGR_IPCPATH SKALIBS_SPROOT "/service/ftrigrd/s"
+#define FTRIGR_IPCPATH SKALIBS_SPROOT "/run/service/ftrigrd/s"
#define FTRIGRD_PROG S6_BINPREFIX "s6-ftrigrd"
#define FTRIGR_BANNER1 "ftrigr v1.0 (b)\n"
@@ -54,13 +54,12 @@ extern ftrigr1_t const ftrigr1_zero ;
typedef struct ftrigr_s ftrigr, ftrigr_t, *ftrigr_ref, *ftrigr_t_ref ;
struct ftrigr_s
{
- skaclient_t connection ;
+ textclient_t connection ;
genalloc list ; /* array of uint16_t */
size_t head ;
gensetdyn data ; /* set of ftrigr1_t */
- skaclient_buffer_t buffers ;
} ;
-#define FTRIGR_ZERO { .connection = SKACLIENT_ZERO, .list = GENALLOC_ZERO, .head = 0, .data = GENSETDYN_INIT(ftrigr1_t, 2, 0, 1) }
+#define FTRIGR_ZERO { .connection = TEXTCLIENT_ZERO, .list = GENALLOC_ZERO, .head = 0, .data = GENSETDYN_INIT(ftrigr1_t, 2, 0, 1) }
extern ftrigr_t const ftrigr_zero ;
@@ -75,7 +74,7 @@ extern void ftrigr_end (ftrigr_t *) ;
/* Instant primitives for async programming */
-#define ftrigr_fd(a) skaclient_fd(&(a)->connection)
+#define ftrigr_fd(a) textclient_fd(&(a)->connection)
extern int ftrigr_updateb (ftrigr_t *) ;
extern int ftrigr_update (ftrigr_t *) ;
extern int ftrigr_check (ftrigr_t *, uint16_t, char *) ;
diff --git a/src/include/s6/s6lock.h b/src/include/s6/s6lock.h
index 8ac0127..b1f69c4 100644
--- a/src/include/s6/s6lock.h
+++ b/src/include/s6/s6lock.h
@@ -7,7 +7,7 @@
#include <skalibs/tai.h>
#include <skalibs/genalloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/config.h>
@@ -27,12 +27,11 @@
typedef struct s6lock_s s6lock_t, *s6lock_t_ref ;
struct s6lock_s
{
- skaclient_t connection ;
+ textclient_t connection ;
genalloc list ; /* array of uint16_t */
gensetdyn data ; /* set of char */
- skaclient_buffer_t buffers ;
} ;
-#define S6LOCK_ZERO { .connection = SKACLIENT_ZERO, .list = GENALLOC_ZERO, .data = GENSETDYN_INIT(int, 2, 0, 1) }
+#define S6LOCK_ZERO { .connection = TEXTCLIENT_ZERO, .list = GENALLOC_ZERO, .data = GENSETDYN_INIT(int, 2, 0, 1) }
extern s6lock_t const s6lock_zero ;
@@ -47,7 +46,7 @@ extern void s6lock_end (s6lock_t *) ;
/* Asynchronous primitives */
-#define s6lock_fd(a) skaclient_fd(&(a)->connection)
+#define s6lock_fd(a) textclient_fd(&(a)->connection)
extern int s6lock_update (s6lock_t *) ;
extern int s6lock_check (s6lock_t *, uint16_t) ;
diff --git a/src/libs6/ftrigr_end.c b/src/libs6/ftrigr_end.c
index 9783601..555053f 100644
--- a/src/libs6/ftrigr_end.c
+++ b/src/libs6/ftrigr_end.c
@@ -3,13 +3,13 @@
#include <stdint.h>
#include <skalibs/genalloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/ftrigr.h>
void ftrigr_end (ftrigr_ref a)
{
gensetdyn_free(&a->data) ;
genalloc_free(uint16_t, &a->list) ;
- skaclient_end(&a->connection) ;
+ textclient_end(&a->connection) ;
*a = ftrigr_zero ;
}
diff --git a/src/libs6/ftrigr_start.c b/src/libs6/ftrigr_start.c
index 4cf9e72..5b6e8af 100644
--- a/src/libs6/ftrigr_start.c
+++ b/src/libs6/ftrigr_start.c
@@ -1,10 +1,9 @@
/* ISC license. */
-#include <skalibs/tai.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/ftrigr.h>
int ftrigr_start (ftrigr_t *a, char const *path, tain_t const *deadline, tain_t *stamp)
{
- return skaclient_start_b(&a->connection, &a->buffers, path, 0, FTRIGR_BANNER1, FTRIGR_BANNER1_LEN, FTRIGR_BANNER2, FTRIGR_BANNER2_LEN, deadline, stamp) ;
+ return textclient_start(&a->connection, path, 0, FTRIGR_BANNER1, FTRIGR_BANNER1_LEN, FTRIGR_BANNER2, FTRIGR_BANNER2_LEN, deadline, stamp) ;
}
diff --git a/src/libs6/ftrigr_startf.c b/src/libs6/ftrigr_startf.c
index 47c310d..ff02792 100644
--- a/src/libs6/ftrigr_startf.c
+++ b/src/libs6/ftrigr_startf.c
@@ -1,12 +1,11 @@
/* ISC license. */
-#include <skalibs/tai.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/ftrigr.h>
int ftrigr_startf (ftrigr_t *a, tain_t const *deadline, tain_t *stamp)
{
static char const *const cargv[2] = { FTRIGRD_PROG, 0 } ;
static char const *const cenvp[1] = { 0 } ;
- return skaclient_startf_b(&a->connection, &a->buffers, cargv[0], cargv, cenvp, SKACLIENT_OPTION_WAITPID, FTRIGR_BANNER1, FTRIGR_BANNER1_LEN, FTRIGR_BANNER2, FTRIGR_BANNER2_LEN, deadline, stamp) ;
+ return textclient_startf(&a->connection, cargv, cenvp, TEXTCLIENT_OPTION_WAITPID, FTRIGR_BANNER1, FTRIGR_BANNER1_LEN, FTRIGR_BANNER2, FTRIGR_BANNER2_LEN, deadline, stamp) ;
}
diff --git a/src/libs6/ftrigr_subscribe.c b/src/libs6/ftrigr_subscribe.c
index cbbde1e..72b87dc 100644
--- a/src/libs6/ftrigr_subscribe.c
+++ b/src/libs6/ftrigr_subscribe.c
@@ -9,15 +9,15 @@
#include <skalibs/tai.h>
#include <skalibs/stralloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/ftrigr.h>
uint16_t ftrigr_subscribe (ftrigr_t *a, char const *path, char const *re, uint32_t options, tain_t const *deadline, tain_t *stamp)
{
size_t pathlen = strlen(path) ;
size_t relen = strlen(re) ;
+ ftrigr1_t ft = { .options = options, .state = FR1STATE_LISTENING, .what = STRALLOC_ZERO } ;
uint32_t i ;
- char err ;
char tmp[15] = "--L" ;
struct iovec v[3] = { { .iov_base = tmp, .iov_len = 15 }, { .iov_base = (char *)path, .iov_len = pathlen + 1 }, { .iov_base = (char *)re, .iov_len = relen + 1 } } ;
if (!gensetdyn_new(&a->data, &i)) return 0 ;
@@ -30,23 +30,13 @@ uint16_t ftrigr_subscribe (ftrigr_t *a, char const *path, char const *re, uint32
uint32_pack_big(tmp+3, options) ;
uint32_pack_big(tmp+7, (uint32_t)pathlen) ;
uint32_pack_big(tmp+11, (uint32_t)relen) ;
- if (!skaclient_sendv(&a->connection, v, 3, &skaclient_default_cb, &err, deadline, stamp))
+ if (!textclient_commandv(&a->connection, v, 3, deadline, stamp))
{
int e = errno ;
gensetdyn_delete(&a->data, i) ;
errno = e ;
return 0 ;
}
- if (err)
- {
- gensetdyn_delete(&a->data, i) ;
- return (errno = err, 0) ;
- }
- {
- ftrigr1_t *p = GENSETDYN_P(ftrigr1_t, &a->data, i) ;
- p->options = options ;
- p->state = FR1STATE_LISTENING ;
- p->what = stralloc_zero ;
- }
+ *GENSETDYN_P(ftrigr1_t, &a->data, i) = ft ;
return (uint16_t)(i+1) ;
}
diff --git a/src/libs6/ftrigr_unsubscribe.c b/src/libs6/ftrigr_unsubscribe.c
index a96ddb0..557f5ea 100644
--- a/src/libs6/ftrigr_unsubscribe.c
+++ b/src/libs6/ftrigr_unsubscribe.c
@@ -4,12 +4,13 @@
#include <skalibs/uint16.h>
#include <skalibs/stralloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/ftrigr.h>
int ftrigr_unsubscribe (ftrigr_t *a, uint16_t i, tain_t const *deadline, tain_t *stamp)
{
ftrigr1_t *p ;
+ char pack[3] = "--U" ;
if (!i--) return (errno = EINVAL, 0) ;
p = GENSETDYN_P(ftrigr1_t, &a->data, i) ;
if (!p) return (errno = EINVAL, 0) ;
@@ -24,13 +25,8 @@ int ftrigr_unsubscribe (ftrigr_t *a, uint16_t i, tain_t const *deadline, tain_t
}
default : break ;
}
- {
- char err ;
- char pack[3] = "--U" ;
- uint16_pack_big(pack, i) ;
- if (!skaclient_send(&a->connection, pack, 3, &skaclient_default_cb, &err, deadline, stamp)) return 0 ;
- if (err) return (errno = err, 0) ;
- }
+ uint16_pack_big(pack, i) ;
+ if (!textclient_command(&a->connection, pack, 3, deadline, stamp)) return 0 ;
stralloc_free(&p->what) ;
*p = ftrigr1_zero ;
return gensetdyn_delete(&a->data, i) ;
diff --git a/src/libs6/ftrigr_updateb.c b/src/libs6/ftrigr_updateb.c
index edf6f2c..5f0bd77 100644
--- a/src/libs6/ftrigr_updateb.c
+++ b/src/libs6/ftrigr_updateb.c
@@ -1,6 +1,7 @@
/* ISC license. */
#include <sys/types.h>
+#include <sys/uio.h>
#include <stdint.h>
#include <errno.h>
#include <skalibs/gccattributes.h>
@@ -8,8 +9,7 @@
#include <skalibs/uint16.h>
#include <skalibs/genalloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/unixmessage.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/ftrigr.h>
static inline int appears (uint16_t, uint16_t const *, size_t) gccattr_pure ;
@@ -20,26 +20,27 @@ static inline int appears (uint16_t id, uint16_t const *list, size_t len)
return 0 ;
}
-static int msghandler (unixmessage_t const *m, void *context)
+static int msghandler (struct iovec const *v, void *context)
{
ftrigr_t *a = (ftrigr_t *)context ;
ftrigr1_t *p ;
int addit = 1 ;
+ char const *s = v->iov_base ;
uint16_t id ;
- if (m->len != 4 || m->nfds) return (errno = EPROTO, 0) ;
- uint16_unpack_big(m->s, &id) ;
+ if (v->iov_len != 4) return (errno = EPROTO, 0) ;
+ uint16_unpack_big(s, &id) ;
p = GENSETDYN_P(ftrigr1_t, &a->data, id) ;
if (!p) return 1 ;
if (p->state != FR1STATE_LISTENING) return (errno = EINVAL, 0) ;
if (!genalloc_readyplus(uint16_t, &a->list, 1)) return 0 ;
- switch (m->s[2])
+ switch (s[2])
{
case 'd' :
- if (!stralloc_catb(&p->what, m->s + 3, 1)) return 0 ;
+ if (!stralloc_catb(&p->what, s + 3, 1)) return 0 ;
p->state = FR1STATE_WAITACK ;
break ;
case '!' :
- if (!stralloc_catb(&p->what, m->s + 3, 1)) return 0 ;
+ if (!stralloc_catb(&p->what, s + 3, 1)) return 0 ;
if (p->options & FTRIGR_REPEAT)
{
if (p->what.len > 1
@@ -60,6 +61,6 @@ static int msghandler (unixmessage_t const *m, void *context)
int ftrigr_updateb (ftrigr_t *a)
{
size_t curlen = genalloc_len(uint16_t, &a->list) ;
- int r = skaclient_update(&a->connection, &msghandler, a) ;
+ int r = textclient_update(&a->connection, &msghandler, a) ;
return r < 0 ? r : (int)(genalloc_len(uint16_t, &a->list) - curlen) ;
}
diff --git a/src/libs6/s6-ftrigrd.c b/src/libs6/s6-ftrigrd.c
index 7ec2230..dd04548 100644
--- a/src/libs6/s6-ftrigrd.c
+++ b/src/libs6/s6-ftrigrd.c
@@ -1,5 +1,6 @@
/* ISC license. */
+#include <sys/uio.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
@@ -15,8 +16,8 @@
#include <skalibs/tai.h>
#include <skalibs/djbunix.h>
#include <skalibs/iopause.h>
-#include <skalibs/unixmessage.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textmessage.h>
+#include <skalibs/textclient.h>
#include "ftrig1.h"
#include <s6/ftrigr.h>
@@ -59,10 +60,9 @@ static void cleanup (void)
static void trig (uint16_t id, char what, char info)
{
char pack[4] ;
- unixmessage_t m = { .s = pack, .len = 4, .fds = 0, .nfds = 0 } ;
uint16_pack_big(pack, id) ;
pack[2] = what ; pack[3] = info ;
- if (!unixmessage_put(unixmessage_sender_x, &m))
+ if (!textmessage_put(textmessage_sender_x, pack, 4))
{
cleanup() ;
strerr_diefu1sys(111, "build answer") ;
@@ -71,11 +71,10 @@ static void trig (uint16_t id, char what, char info)
static void answer (char c)
{
- unixmessage_t m = { .s = &c, .len = 1, .fds = 0, .nfds = 0 } ;
- if (!unixmessage_put(unixmessage_sender_1, &m))
+ if (!textmessage_put(textmessage_sender_1, &c, 1))
{
cleanup() ;
- strerr_diefu1sys(111, "unixmessage_put") ;
+ strerr_diefu1sys(111, "textmessage_put") ;
}
}
@@ -112,16 +111,17 @@ static inline int ftrigio_read (ftrigio_t *p)
return 1 ;
}
-static int parse_protocol (unixmessage_t const *m, void *context)
+static int parse_protocol (struct iovec const *v, void *context)
{
+ char const *s = v->iov_base ;
uint16_t id ;
- if (m->len < 3 || m->nfds)
+ if (v->iov_len < 3)
{
cleanup() ;
strerr_dief1x(100, "invalid client request") ;
}
- uint16_unpack_big(m->s, &id) ;
- switch (m->s[2])
+ uint16_unpack_big(s, &id) ;
+ switch (s[2])
{
case 'U' : /* unsubscribe */
{
@@ -139,15 +139,15 @@ static int parse_protocol (unixmessage_t const *m, void *context)
{
uint32_t options, pathlen, relen ;
int r ;
- if (m->len < 19)
+ if (v->iov_len < 19)
{
answer(EPROTO) ;
break ;
}
- uint32_unpack_big(m->s + 3, &options) ;
- uint32_unpack_big(m->s + 7, &pathlen) ;
- uint32_unpack_big(m->s + 11, &relen) ;
- if (((pathlen + relen + 17) != m->len) || m->s[15 + pathlen] || m->s[m->len - 1])
+ uint32_unpack_big(s + 3, &options) ;
+ uint32_unpack_big(s + 7, &pathlen) ;
+ uint32_unpack_big(s + 11, &relen) ;
+ if (((pathlen + relen + 17) != v->iov_len) || s[15 + pathlen] || s[v->iov_len - 1])
{
answer(EPROTO) ;
break ;
@@ -157,13 +157,13 @@ static int parse_protocol (unixmessage_t const *m, void *context)
answer(ENFILE) ;
break ;
}
- r = regcomp(&a[n].re, m->s + 16 + pathlen, REG_EXTENDED) ;
+ r = regcomp(&a[n].re, s + 16 + pathlen, REG_EXTENDED) ;
if (r)
{
answer(r == REG_ESPACE ? ENOMEM : EINVAL) ;
break ;
}
- if (!ftrig1_make(&a[n].trig, m->s + 15))
+ if (!ftrig1_make(&a[n].trig, s + 15))
{
regfree(&a[n].re) ;
answer(errno) ;
@@ -200,7 +200,7 @@ int main (void)
tain_t deadline ;
tain_now_g() ;
tain_addsec_g(&deadline, 2) ;
- if (!skaclient_server_01x_init_g(FTRIGR_BANNER1, FTRIGR_BANNER1_LEN, FTRIGR_BANNER2, FTRIGR_BANNER2_LEN, &deadline))
+ if (!textclient_server_01x_init_g(FTRIGR_BANNER1, FTRIGR_BANNER1_LEN, FTRIGR_BANNER2, FTRIGR_BANNER2_LEN, &deadline))
strerr_diefu1sys(111, "sync with client") ;
}
@@ -210,9 +210,9 @@ int main (void)
unsigned int i = 0 ;
x[0].fd = 0 ; x[0].events = IOPAUSE_EXCEPT | IOPAUSE_READ ;
- x[1].fd = 1 ; x[1].events = IOPAUSE_EXCEPT | (unixmessage_sender_isempty(unixmessage_sender_1) ? 0 : IOPAUSE_WRITE) ;
- x[2].fd = unixmessage_sender_fd(unixmessage_sender_x) ;
- x[2].events = IOPAUSE_EXCEPT | (unixmessage_sender_isempty(unixmessage_sender_x) ? 0 : IOPAUSE_WRITE) ;
+ x[1].fd = 1 ; x[1].events = IOPAUSE_EXCEPT | (textmessage_sender_isempty(textmessage_sender_1) ? 0 : IOPAUSE_WRITE) ;
+ x[2].fd = textmessage_sender_fd(textmessage_sender_x) ;
+ x[2].events = IOPAUSE_EXCEPT | (textmessage_sender_isempty(textmessage_sender_x) ? 0 : IOPAUSE_WRITE) ;
for (; i < n ; i++)
{
a[i].xindex = 3 + i ;
@@ -231,13 +231,13 @@ int main (void)
/* client is reading */
if (x[1].revents & IOPAUSE_WRITE)
- if (!unixmessage_sender_flush(unixmessage_sender_1) && !error_isagain(errno))
+ if (!textmessage_sender_flush(textmessage_sender_1) && !error_isagain(errno))
{
cleanup() ;
strerr_diefu1sys(111, "flush stdout") ;
}
if (x[2].revents & IOPAUSE_WRITE)
- if (!unixmessage_sender_flush(unixmessage_sender_x) && !error_isagain(errno))
+ if (!textmessage_sender_flush(textmessage_sender_x) && !error_isagain(errno))
{
cleanup() ;
return 1 ;
@@ -251,9 +251,9 @@ int main (void)
}
/* client is writing */
- if (!unixmessage_receiver_isempty(unixmessage_receiver_0) || x[0].revents & IOPAUSE_READ)
+ if (!textmessage_receiver_isempty(textmessage_receiver_0) || x[0].revents & IOPAUSE_READ)
{
- if (unixmessage_handle(unixmessage_receiver_0, &parse_protocol, 0) < 0)
+ if (textmessage_handle(textmessage_receiver_0, &parse_protocol, 0) < 0)
{
if (errno == EPIPE) break ; /* normal exit */
cleanup() ;
diff --git a/src/libs6/s6lock_acquire.c b/src/libs6/s6lock_acquire.c
index b9791bf..3ce6c77 100644
--- a/src/libs6/s6lock_acquire.c
+++ b/src/libs6/s6lock_acquire.c
@@ -8,13 +8,12 @@
#include <skalibs/uint32.h>
#include <skalibs/tai.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/s6lock.h>
int s6lock_acquire (s6lock_t *a, uint16_t *u, char const *path, uint32_t options, tain_t const *limit, tain_t const *deadline, tain_t *stamp)
{
size_t pathlen = strlen(path) ;
- char err ;
char tmp[23] = "--<" ;
struct iovec v[2] = { { .iov_base = tmp, .iov_len = 23 }, { .iov_base = (char *)path, .iov_len = pathlen + 1 } } ;
uint32_t i ;
@@ -29,16 +28,13 @@ int s6lock_acquire (s6lock_t *a, uint16_t *u, char const *path, uint32_t options
uint32_pack_big(tmp+3, options) ;
tain_pack(tmp+7, limit) ;
uint32_pack_big(tmp+19, (uint32_t)pathlen) ;
- if (!skaclient_sendv(&a->connection, v, 2, &skaclient_default_cb, &err, deadline, stamp))
+ if (!textclient_commandv(&a->connection, v, 2, deadline, stamp))
{
+ int e = errno ;
gensetdyn_delete(&a->data, i) ;
+ errno = e ;
return 0 ;
}
- if (err)
- {
- gensetdyn_delete(&a->data, i) ;
- return (errno = err, 0) ;
- }
*GENSETDYN_P(char, &a->data, i) = EAGAIN ;
*u = i ;
return 1 ;
diff --git a/src/libs6/s6lock_end.c b/src/libs6/s6lock_end.c
index 74e83f1..e278bd8 100644
--- a/src/libs6/s6lock_end.c
+++ b/src/libs6/s6lock_end.c
@@ -3,13 +3,13 @@
#include <stdint.h>
#include <skalibs/genalloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/s6lock.h>
void s6lock_end (s6lock_t *a)
{
gensetdyn_free(&a->data) ;
genalloc_free(uint16_t, &a->list) ;
- skaclient_end(&a->connection) ;
+ textclient_end(&a->connection) ;
*a = s6lock_zero ;
}
diff --git a/src/libs6/s6lock_release.c b/src/libs6/s6lock_release.c
index caf91a3..293d8f4 100644
--- a/src/libs6/s6lock_release.c
+++ b/src/libs6/s6lock_release.c
@@ -4,24 +4,20 @@
#include <skalibs/error.h>
#include <skalibs/uint16.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/s6lock.h>
int s6lock_release (s6lock_t *a, uint16_t i, tain_t const *deadline, tain_t *stamp)
{
char *p = GENSETDYN_P(char, &a->data, i) ;
+ char pack[3] = "-->" ;
if ((*p != EBUSY) && !error_isagain(*p))
{
s6lock_check(a, i) ;
return 1 ;
}
- {
- char err ;
- char pack[3] = "-->" ;
- uint16_pack_big(pack, i) ;
- if (!skaclient_send(&a->connection, pack, 3, &skaclient_default_cb, &err, deadline, stamp)) return 0 ;
- if (err) return (errno = err, 0) ;
- }
+ uint16_pack_big(pack, i) ;
+ if (!textclient_command(&a->connection, pack, 3, deadline, stamp)) return 0 ;
*p = EINVAL ;
return gensetdyn_delete(&a->data, i) ;
}
diff --git a/src/libs6/s6lock_start.c b/src/libs6/s6lock_start.c
index c527bee..1b95d75 100644
--- a/src/libs6/s6lock_start.c
+++ b/src/libs6/s6lock_start.c
@@ -1,10 +1,9 @@
/* ISC license. */
-#include <skalibs/tai.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/s6lock.h>
int s6lock_start (s6lock_t *a, char const *path, tain_t const *deadline, tain_t *stamp)
{
- return skaclient_start_b(&a->connection, &a->buffers, path, 0, S6LOCK_BANNER1, S6LOCK_BANNER1_LEN, S6LOCK_BANNER2, S6LOCK_BANNER2_LEN, deadline, stamp) ;
+ return textclient_start(&a->connection, path, 0, S6LOCK_BANNER1, S6LOCK_BANNER1_LEN, S6LOCK_BANNER2, S6LOCK_BANNER2_LEN, deadline, stamp) ;
}
diff --git a/src/libs6/s6lock_startf.c b/src/libs6/s6lock_startf.c
index c34a595..293d84c 100644
--- a/src/libs6/s6lock_startf.c
+++ b/src/libs6/s6lock_startf.c
@@ -1,14 +1,13 @@
/* ISC license. */
#include <errno.h>
-#include <skalibs/environ.h>
-#include <skalibs/tai.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/posixplz.h>
+#include <skalibs/textclient.h>
#include <s6/s6lock.h>
int s6lock_startf (s6lock_t *a, char const *lockdir, tain_t const *deadline, tain_t *stamp)
{
char const *cargv[3] = { S6LOCKD_PROG, lockdir, 0 } ;
if (!lockdir) return (errno = EINVAL, 0) ;
- return skaclient_startf_b(&a->connection, &a->buffers, cargv[0], cargv, (char const *const *)environ, SKACLIENT_OPTION_WAITPID, S6LOCK_BANNER1, S6LOCK_BANNER1_LEN, S6LOCK_BANNER2, S6LOCK_BANNER2_LEN, deadline, stamp) ;
+ return textclient_startf(&a->connection, cargv, (char const *const *)environ, TEXTCLIENT_OPTION_WAITPID, S6LOCK_BANNER1, S6LOCK_BANNER1_LEN, S6LOCK_BANNER2, S6LOCK_BANNER2_LEN, deadline, stamp) ;
}
diff --git a/src/libs6/s6lock_update.c b/src/libs6/s6lock_update.c
index a56c276..9795d9d 100644
--- a/src/libs6/s6lock_update.c
+++ b/src/libs6/s6lock_update.c
@@ -1,25 +1,26 @@
/* ISC license. */
+#include <sys/uio.h>
#include <stdint.h>
#include <errno.h>
#include <skalibs/error.h>
#include <skalibs/uint16.h>
#include <skalibs/genalloc.h>
#include <skalibs/gensetdyn.h>
-#include <skalibs/unixmessage.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textclient.h>
#include <s6/s6lock.h>
-static int msghandler (unixmessage_t const *m, void *context)
+static int msghandler (struct iovec const *v, void *context)
{
s6lock_t *a = (s6lock_t *)context ;
+ char const *s = v->iov_base ;
char *p ;
uint16_t id ;
- if (m->len != 3 || m->nfds) return (errno = EPROTO, 0) ;
- uint16_unpack_big(m->s, &id) ;
+ if (v->iov_len != 3) return (errno = EPROTO, 0) ;
+ uint16_unpack_big(s, &id) ;
p = GENSETDYN_P(char, &a->data, id) ;
- if (*p == EBUSY) *p = m->s[2] ;
- else if (error_isagain(*p)) *p = m->s[2] ? m->s[2] : EBUSY ;
+ if (*p == EBUSY) *p = s[2] ;
+ else if (error_isagain(*p)) *p = s[2] ? s[2] : EBUSY ;
else return (errno = EPROTO, 0) ;
if (!genalloc_append(uint16_t, &a->list, &id)) return 0 ;
return 1 ;
@@ -28,5 +29,5 @@ static int msghandler (unixmessage_t const *m, void *context)
int s6lock_update (s6lock_t *a)
{
genalloc_setlen(uint16_t, &a->list, 0) ;
- return skaclient_update(&a->connection, &msghandler, a) ;
+ return textclient_update(&a->connection, &msghandler, a) ;
}
diff --git a/src/libs6/s6lockd.c b/src/libs6/s6lockd.c
index 5899b46..6c4cc1a 100644
--- a/src/libs6/s6lockd.c
+++ b/src/libs6/s6lockd.c
@@ -1,5 +1,6 @@
/* ISC license. */
+#include <sys/uio.h>
#include <stdint.h>
#include <unistd.h>
#include <errno.h>
@@ -14,8 +15,8 @@
#include <skalibs/tai.h>
#include <skalibs/djbunix.h>
#include <skalibs/iopause.h>
-#include <skalibs/unixmessage.h>
-#include <skalibs/skaclient.h>
+#include <skalibs/textmessage.h>
+#include <skalibs/textclient.h>
#include <s6/s6lock.h>
#define USAGE "s6lockd lockdir"
@@ -55,10 +56,9 @@ static void cleanup (void)
static void trig (uint16_t id, char e)
{
char pack[3] ;
- unixmessage_t m = { .s = pack, .len = 3, .fds = 0, .nfds = 0 } ;
uint16_pack_big(pack, id) ;
pack[2] = e ;
- if (!unixmessage_put(unixmessage_sender_x, &m))
+ if (!textmessage_put(textmessage_sender_x, pack, 3))
{
cleanup() ;
strerr_diefu1sys(111, "build answer") ;
@@ -67,11 +67,10 @@ static void trig (uint16_t id, char e)
static void answer (char c)
{
- unixmessage_t m = { .s = &c, .len = 1, .fds = 0, .nfds = 0 } ;
- if (!unixmessage_put(unixmessage_sender_1, &m))
+ if (!textmessage_put(textmessage_sender_1, &c, 1))
{
cleanup() ;
- strerr_diefu1sys(111, "unixmessage_put") ;
+ strerr_diefu1sys(111, "textmessage_put") ;
}
}
@@ -102,16 +101,17 @@ static void handle_signals (void)
}
}
-static int parse_protocol (unixmessage_t const *m, void *context)
+static int parse_protocol (struct iovec const *v, void *context)
{
+ char *s = v->iov_base ;
uint16_t id ;
- if (m->len < 3 || m->nfds)
+ if (v->iov_len < 3)
{
cleanup() ;
strerr_dief1x(100, "invalid client request") ;
}
- uint16_unpack_big(m->s, &id) ;
- switch (m->s[2])
+ uint16_unpack_big(s, &id) ;
+ switch (s[2])
{
case '>' : /* release */
{
@@ -131,25 +131,25 @@ static int parse_protocol (unixmessage_t const *m, void *context)
char const *cargv[3] = { S6LOCKD_HELPER_PROG, 0, 0 } ;
char const *cenvp[2] = { 0, 0 } ;
uint32_t options, pathlen ;
- if (m->len < 23)
+ if (v->iov_len < 23)
{
answer(EPROTO) ;
break ;
}
- uint32_unpack_big(m->s + 3, &options) ;
- tain_unpack(m->s + 7, &f.limit) ;
- uint32_unpack_big(m->s + 19, &pathlen) ;
- if (pathlen + 23 != m->len || m->s[m->len - 1])
+ uint32_unpack_big(s + 3, &options) ;
+ tain_unpack(s + 7, &f.limit) ;
+ uint32_unpack_big(s + 19, &pathlen) ;
+ if (pathlen + 23 != v->iov_len || s[v->iov_len - 1])
{
answer(EPROTO) ;
break ;
}
f.id = id ;
- m->s[21] = '.' ;
- m->s[22] = '/' ;
- cargv[1] = (char const *)m->s + 21 ;
+ s[21] = '.' ;
+ s[22] = '/' ;
+ cargv[1] = (char const *)s + 21 ;
if (options & S6LOCK_OPTIONS_EX) cenvp[0] = "S6LOCK_EX=1" ;
- f.pid = child_spawn(cargv[0], cargv, cenvp, f.p, 2) ;
+ f.pid = child_spawn2(cargv[0], cargv, cenvp, f.p) ;
if (!f.pid)
{
answer(errno) ;
@@ -204,7 +204,7 @@ int main (int argc, char const *const *argv)
tain_now_g() ;
tain_addsec_g(&deadline, 2) ;
- if (!skaclient_server_01x_init_g(S6LOCK_BANNER1, S6LOCK_BANNER1_LEN, S6LOCK_BANNER2, S6LOCK_BANNER2_LEN, &deadline))
+ if (!textclient_server_01x_init_g(S6LOCK_BANNER1, S6LOCK_BANNER1_LEN, S6LOCK_BANNER2, S6LOCK_BANNER2_LEN, &deadline))
strerr_diefu1sys(111, "sync with client") ;
for (;;)
@@ -216,9 +216,9 @@ int main (int argc, char const *const *argv)
tain_add_g(&deadline, &tain_infinite_relative) ;
x[0].fd = 0 ; x[0].events = IOPAUSE_EXCEPT | IOPAUSE_READ ;
- x[1].fd = 1 ; x[1].events = IOPAUSE_EXCEPT | (unixmessage_sender_isempty(unixmessage_sender_1) ? 0 : IOPAUSE_WRITE ) ;
- x[2].fd = unixmessage_sender_fd(unixmessage_sender_x) ;
- x[2].events = IOPAUSE_EXCEPT | (unixmessage_sender_isempty(unixmessage_sender_x) ? 0 : IOPAUSE_WRITE) ;
+ x[1].fd = 1 ; x[1].events = IOPAUSE_EXCEPT | (textmessage_sender_isempty(textmessage_sender_1) ? 0 : IOPAUSE_WRITE ) ;
+ x[2].fd = textmessage_sender_fd(textmessage_sender_x) ;
+ x[2].events = IOPAUSE_EXCEPT | (textmessage_sender_isempty(textmessage_sender_x) ? 0 : IOPAUSE_WRITE) ;
x[3].fd = sfd ; x[3].events = IOPAUSE_READ ;
for (; i < n ; i++)
{
@@ -257,13 +257,13 @@ int main (int argc, char const *const *argv)
/* client is reading */
if (x[1].revents & IOPAUSE_WRITE)
- if (!unixmessage_sender_flush(unixmessage_sender_1) && !error_isagain(errno))
+ if (!textmessage_sender_flush(textmessage_sender_1) && !error_isagain(errno))
{
cleanup() ;
strerr_diefu1sys(111, "flush stdout") ;
}
if (x[2].revents & IOPAUSE_WRITE)
- if (!unixmessage_sender_flush(unixmessage_sender_x) && !error_isagain(errno))
+ if (!textmessage_sender_flush(textmessage_sender_x) && !error_isagain(errno))
{
cleanup() ;
strerr_diefu1sys(111, "flush asyncout") ;
@@ -301,9 +301,9 @@ int main (int argc, char const *const *argv)
if (x[3].revents & (IOPAUSE_READ | IOPAUSE_EXCEPT)) handle_signals() ;
/* client is writing */
- if (!unixmessage_receiver_isempty(unixmessage_receiver_0) || x[0].revents & IOPAUSE_READ)
+ if (!textmessage_receiver_isempty(textmessage_receiver_0) || x[0].revents & IOPAUSE_READ)
{
- if (unixmessage_handle(unixmessage_receiver_0, &parse_protocol, 0) < 0)
+ if (textmessage_handle(textmessage_receiver_0, &parse_protocol, 0) < 0)
{
if (errno == EPIPE) break ; /* normal exit */
cleanup() ;