summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/minutils/s6-devd.c67
-rw-r--r--src/minutils/s6-uevent-listener.c8
2 files changed, 39 insertions, 36 deletions
diff --git a/src/minutils/s6-devd.c b/src/minutils/s6-devd.c
index f14a8f1..7122e13 100644
--- a/src/minutils/s6-devd.c
+++ b/src/minutils/s6-devd.c
@@ -30,6 +30,7 @@ int main (int argc, char const *const *argv, char const *const *envp)
unsigned int kbufsz = 65536, verbosity = 1 ;
char const *linevar = 0 ;
char const *targ = 0 ;
+ char fmtv[UINT_FMT] ;
PROG = "s6-devd" ;
{
subgetopt_t l = SUBGETOPT_ZERO ;
@@ -50,50 +51,54 @@ int main (int argc, char const *const *argv, char const *const *envp)
argc -= l.ind ; argv += l.ind ;
}
if (!argc) strerr_dieusage(100, USAGE) ;
+ if (verbosity != 1) fmtv[uint_fmt(fmtv, verbosity)] = 0 ;
{
- size_t pos = 0 ;
unsigned int m = 0 ;
- char fmt[UINT_FMT * 3] ;
- char const *newargv[argc + 15] ;
- newargv[m++] = S6_LINUX_UTILS_BINPREFIX "s6-uevent-listener" ;
+ int fd ;
+ char const *cargv[argc + 9] ;
+ cargv[m++] = S6_LINUX_UTILS_BINPREFIX "s6-uevent-spawner" ;
if (verbosity != 1)
{
- newargv[m++] = "-v" ;
- newargv[m++] = fmt + pos ;
- pos += uint_fmt(fmt + pos, verbosity) ;
- fmt[pos++] = 0 ;
+ cargv[m++] = "-v" ;
+ cargv[m++] = fmtv ;
}
- if (kbufsz != 65536)
+ if (linevar)
{
- newargv[m++] = "-b" ;
- newargv[m++] = fmt + pos ;
- pos += uint_fmt(fmt + pos, kbufsz) ;
- fmt[pos++] = 0 ;
+ cargv[m++] = "-l" ;
+ cargv[m++] = linevar ;
}
- newargv[m++] = "--" ;
- newargv[m++] = S6_LINUX_UTILS_BINPREFIX "s6-uevent-spawner" ;
- if (verbosity != 1)
+ if (targ)
{
- newargv[m++] = "-v" ;
- newargv[m++] = fmt + pos ;
- pos += uint_fmt(fmt + pos, verbosity) ;
- fmt[pos++] = 0 ;
+ cargv[m++] = "-t" ;
+ cargv[m++] = targ ;
}
- if (linevar)
+ cargv[m++] = "--" ;
+ while (*argv) cargv[m++] = *argv++ ;
+ cargv[m++] = 0 ;
+ if (!child_spawn1_pipe(cargv[0], cargv, envp, &fd, 0))
+ strerr_diefu2sys(111, "spawn ", cargv[0]) ;
+ if (fd_move(1, fd) < 0) strerr_diefu1sys(111, "fd_move") ;
+ }
+
+ {
+ unsigned int m = 0 ;
+ char const *pargv[6] ;
+ char fmtk[UINT_FMT] ;
+ pargv[m++] = S6_LINUX_UTILS_BINPREFIX "s6-uevent-listener" ;
+ if (verbosity != 1)
{
- newargv[m++] = "-l" ;
- newargv[m++] = linevar ;
+ pargv[m++] = "-v" ;
+ pargv[m++] = fmtv ;
}
- if (targ)
+ if (kbufsz != 65536)
{
- newargv[m++] = "-t" ;
- newargv[m++] = targ ;
+ pargv[m++] = "-b" ;
+ pargv[m++] = fmtk ;
+ fmtk[uint_fmt(fmtk, kbufsz)] = 0 ;
}
- newargv[m++] = "--" ;
- while (*argv) newargv[m++] = *argv++ ;
- newargv[m++] = 0 ;
- pathexec_run(newargv[0], newargv, envp) ;
- strerr_dieexec(111, newargv[0]) ;
+ pargv[m++] = 0 ;
+ pathexec_run(pargv[0], pargv, envp) ;
+ strerr_dieexec(111, pargv[0]) ;
}
}
diff --git a/src/minutils/s6-uevent-listener.c b/src/minutils/s6-uevent-listener.c
index e882821..4998cd9 100644
--- a/src/minutils/s6-uevent-listener.c
+++ b/src/minutils/s6-uevent-listener.c
@@ -156,12 +156,10 @@ int main (int argc, char const *const *argv, char const *const *envp)
r = iopause(x, 2 + cont, 0, 0) ;
if (r < 0) strerr_diefu1sys(111, "iopause") ;
if (!r) continue ;
- for (r = 0 ; r < 2 ; r++)
- if (x[r].revents & IOPAUSE_EXCEPT)
- x[r].revents |= IOPAUSE_READ | IOPAUSE_WRITE ;
- if (x[0].revents & IOPAUSE_READ) handle_signals() ;
+ if (x[1].revents & IOPAUSE_EXCEPT) break ;
if (x[1].revents & IOPAUSE_WRITE) handle_stdout() ;
- if (cont && x[2].events & IOPAUSE_READ && x[2].revents & IOPAUSE_READ)
+ if (x[0].revents & (IOPAUSE_READ | IOPAUSE_EXCEPT)) handle_signals() ;
+ if (cont && x[2].events & IOPAUSE_READ && x[2].revents & (IOPAUSE_READ | IOPAUSE_EXCEPT))
handle_netlink() ;
}
if (verbosity >= 2) strerr_warni1x("exiting") ;