s6

Mirror/fork of https://skarnet.org/software/s6/
git clone https://ccx.te2000.cz/git/s6
Log | Files | Refs | README | LICENSE

s6-instance-list.c (1171B)


      1 /* ISC license. */
      2 
      3 #include <errno.h>
      4 #include <string.h>
      5 
      6 #include <skalibs/buffer.h>
      7 #include <skalibs/strerr.h>
      8 #include <skalibs/sgetopt.h>
      9 #include <skalibs/direntry.h>
     10 
     11 #include <s6/supervise.h>
     12 
     13 #define USAGE "s6-instance-list service"
     14 #define dieusage() strerr_dieusage(100, USAGE)
     15 
     16 int main (int argc, char const *const *argv)
     17 {
     18   DIR *dir ;
     19   PROG = "s6-instance-list" ;
     20   {
     21     subgetopt l = SUBGETOPT_ZERO ;
     22     for (;;)
     23     {
     24       int opt = subgetopt_r(argc, argv, "", &l) ;
     25       if (opt == -1) break ;
     26       switch (opt)
     27       {
     28         default : dieusage() ;
     29       }
     30     }
     31     argc -= l.ind ; argv += l.ind ;
     32   }
     33   if (!argc) dieusage() ;
     34 
     35   s6_instance_chdirservice(argv[0]) ;
     36   dir = opendir(".") ;
     37   for (;;)
     38   {
     39     direntry *d ;
     40     errno = 0 ;
     41     d = readdir(dir) ;
     42     if (!d) break ;
     43     if (d->d_name[0] == '.') continue ;
     44     if (buffer_puts(buffer_1, d->d_name) < 0
     45      || buffer_put(buffer_1, "\n", 1) < 0)
     46       strerr_diefu1sys(111, "write to stdout") ;
     47   }
     48   if (errno) strerr_diefu3sys(111, "readdir ", argv[0], "/instance") ;
     49   dir_close(dir) ;
     50   if (!buffer_flush(buffer_1)) strerr_diefu1sys(111, "write to stdout") ;
     51   return 0 ;
     52 }