Esempio n. 1
0
int s6_svc_main (int argc, char const *const *argv, char const *optstring, char const *usage, char const *controldir)
{
  char data[DATASIZE] ;
  unsigned int datalen = 0 ;
  register int r ;
  for (;;)
  {
    register int opt = subgetopt(argc, argv, optstring) ;
    if (opt == -1) break ;
    if (opt == '?') strerr_dieusage(100, usage) ;
    if (datalen >= DATASIZE) strerr_dief1x(100, "too many commands") ;
    data[datalen++] = opt ;
  }
  argc -= subgetopt_here.ind ; argv += subgetopt_here.ind ;
  if (!argc) strerr_dieusage(100, usage) ;

  {
    unsigned int arglen = str_len(*argv) ;
    unsigned int cdirlen = str_len(controldir) ;
    char tmp[arglen + cdirlen + 10] ;
    byte_copy(tmp, arglen, *argv) ;
    tmp[arglen] = '/' ;
    byte_copy(tmp + arglen + 1, cdirlen, controldir) ;
    byte_copy(tmp + arglen + 1 + cdirlen, 9, "/control") ;
    r = s6_svc_write(tmp, data, datalen) ;
  }
  if (r < 0) strerr_diefu2sys(111, "control ", *argv) ;
  else if (!r) strerr_diefu3x(100, "control ", *argv, ": supervisor not listening") ;
  return 0 ;
}
Esempio n. 2
0
int s6_svc_writectl (char const *service, char const *subdir, char const *s, unsigned int len)
{
  unsigned int svlen = str_len(service) ;
  unsigned int sublen = str_len(subdir) ;
  char fn[svlen + sublen + 10] ;
  byte_copy(fn, svlen, service) ;
  fn[svlen] = '/' ;
  byte_copy(fn + svlen + 1, sublen, subdir) ;
  byte_copy(fn + svlen + 1 + sublen, 9, "/control") ;
  return s6_svc_write(fn, s, len) ;
}