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 }