1 /* ISC license. */
2 
3 #include <errno.h>
4 
5 #include <skalibs/error.h>
6 #include <skalibs/kolbak.h>
7 #include <skalibs/skaclient.h>
8 #include <skalibs/unixmessage.h>
9 #include <skalibs/djbunix.h>
10 #include <skalibs/socket.h>
11 #include "skaclient-internal.h"
12 
skaclient_start_async(skaclient_t * a,char * bufss,size_t bufsn,char * auxbufss,size_t auxbufsn,char * bufas,size_t bufan,char * auxbufas,size_t auxbufan,kolbak_closure_t * q,size_t qlen,char const * path,uint32_t options,char const * before,size_t beforelen,char const * after,size_t afterlen,skaclient_cbdata_t * blah)13 int skaclient_start_async (
14   skaclient_t *a,
15   char *bufss,
16   size_t bufsn,
17   char *auxbufss,
18   size_t auxbufsn,
19   char *bufas,
20   size_t bufan,
21   char *auxbufas,
22   size_t auxbufan,
23   kolbak_closure_t *q,
24   size_t qlen,
25   char const *path,
26   uint32_t options,
27   char const *before,
28   size_t beforelen,
29   char const *after,
30   size_t afterlen,
31   skaclient_cbdata_t *blah)
32 {
33   int fd = ipc_stream_nbcoe() ;
34   if (fd < 0) return 0 ;
35   if ((!ipc_connect(fd, path) && !error_isalready(errno))
36    || !skaclient_init(a, fd, bufss, bufsn, auxbufss, auxbufsn, bufas, bufan, auxbufas, auxbufan, q, qlen, before, beforelen))
37   {
38     fd_close(fd) ;
39     return 0 ;
40   }
41   a->pid = 0 ;
42   a->options = options & ~SKACLIENT_OPTION_WAITPID ;
43   if (!kolbak_enqueue(&a->kq, (unixmessage_handler_func_t_ref)&skaclient_start_cb, blah))
44   {
45     skaclient_end(a) ;
46     return 0 ;
47   }
48   blah->a = a ;
49   blah->after = after ;
50   blah->afterlen = afterlen ;
51   return 1 ;
52 }
53