int main (int argc, char const *const *argv) { stralloc sa = STRALLOC_ZERO ; int path = 0, nl = 1 ; PROG = "s6-linkname" ; { subgetopt_t l = SUBGETOPT_ZERO ; for (;;) { register int opt = subgetopt_r(argc, argv, "nf", &l) ; if (opt == -1) break ; switch(opt) { case 'n' : nl = 0 ; break ; case 'f' : path = 1 ; break ; default : dieusage() ; } } argv += l.ind ; argc -= l.ind ; } if (!argc) dieusage() ; if ((path ? sarealpath(&sa, *argv) : sareadlink(&sa, *argv)) == -1) strerr_diefu2sys(111, "resolve ", *argv) ; if ((buffer_putalign(buffer_1small, sa.s, sa.len) == -1) || (nl && (buffer_putalign(buffer_1small, "\n", 1)) == -1) || (buffer_flush(buffer_1small) == -1)) strerr_diefu1sys(111, "write to stdout") ; /* stralloc_free(&sa) ; */ return 0 ; }
int main (int argc, char const *const *argv) { stralloc src = STRALLOC_ZERO ; PROG = "s6-unquote-filter" ; { subgetopt_t l = SUBGETOPT_ZERO ; for (;;) { register int opt = subgetopt_r(argc, argv, "qQvwd:", &l) ; if (opt == -1) break ; switch (opt) { case 'q': strictness = 0 ; break ; case 'Q': strictness = 1 ; break ; case 'v': strictness = 2 ; break ; case 'w': strictness = 3 ; break ; case 'd': delim = l.arg ; break ; default : strerr_dieusage(100, USAGE) ; } } argc -= l.ind ; argv += l.ind ; } delimlen = str_len(delim) ; for (;;) { int r ; src.len = 0 ; r = skagetln(buffer_0f1, &src, '\n') ; if (!r) break ; if (r < 0) { if (errno != EPIPE) strerr_diefu1sys(111, "read from stdin") ; } else src.len-- ; if (!doit(src.s, src.len)) { if (buffer_putalign(buffer_1, src.s, src.len) < (int)src.len) strerr_diefu1sys(111, "write to stdout") ; } if (r > 0) { if (buffer_putalign(buffer_1, "\n", 1) < 1) strerr_diefu1sys(111, "write to stdout") ; } } return 0 ; }
static int outputlines (stralloc const *s, unsigned int len) { register unsigned int i = 0 ; for (; i < len ; i++) if (buffer_putalign(buffer_1, s[i].s, s[i].len) == -1) return -1 ; if (buffer_flush(buffer_1) == -1) return -1 ; return 0 ; }
int buffer_put (register buffer_ref b, char const *buf, unsigned int len) { if (len > (b->a - b->n)) { buffer_clean(b) ; if ((len > (b->a - b->n)) && (buffer_flush(b) == -1)) return -1 ; } return buffer_putalign(b, buf, len) ; }
int main (int argc, char const *const *argv) { unsigned int count = 0 ; flags_t flags = FLAGS_ZERO ; PROG = "s6-grep" ; { subgetopt_t l = SUBGETOPT_ZERO ; for (;;) { register int opt = subgetopt_r(argc, argv, "Fcnqv", &l) ; if (opt == -1) break ; switch (opt) { case 'F': flags.fixed = 1 ; break ; case 'c': flags.count = 1 ; break ; case 'n': flags.num = 1 ; break ; case 'q': flags.quiet = 1 ; break ; case 'v': flags.not = 1 ; break ; default : strerr_dieusage(100, USAGE) ; } } argc -= l.ind ; argv += l.ind ; } if (!argc) strerr_dieusage(100, USAGE) ; { stralloc line = STRALLOC_ZERO ; struct sredfa *re = 0 ; unsigned int num = 0 ; unsigned int arglen = 0 ; if (flags.fixed) arglen = str_len(argv[0]) ; else { re = sredfa_new() ; if (!re) strerr_diefu1sys(111, "sredfa_new") ; if (!sredfa_from_regexp(re, argv[0])) strerr_diefu1sys(111, "compile regular expression") ; } for (;;) { register int r ; line.len = 0 ; r = skagetln(buffer_0f1, &line, '\n') ; if (!r) break ; if (r < 0) { if ((errno != EPIPE) || !stralloc_catb(&line, "\n", 1)) strerr_diefu1sys(111, "read from stdin") ; } num++ ; r = flags.fixed ? (str_strn(line.s, line.len-1, argv[0], arglen) < line.len - 1) : sredfa_match(re, line.s, line.len-1) ; if (r < 0) { int e = errno ; buffer_flush(buffer_1) ; errno = e ; strerr_diefu1sys(111, "match line against pattern") ; } if (r ^ flags.not) { count++ ; if (!flags.quiet && !flags.count) { if (flags.num) { char fmt[UINT_FMT] ; register unsigned int n = uint_fmt(fmt, num) ; fmt[n++] = ':' ; if (buffer_putalign(buffer_1, fmt, n) < (int)n) strerr_diefu1sys(111, "write to stdout") ; } if (buffer_putalign(buffer_1, line.s, line.len) < (int)line.len) strerr_diefu1sys(111, "write to stdout") ; } } } if (flags.quiet) return !count ; stralloc_free(&line) ; if (!flags.fixed) sredfa_delete(re) ; } if (flags.count) { char fmt[UINT_FMT] ; register unsigned int n = uint_fmt(fmt, count) ; fmt[n++] = '\n' ; if (buffer_putalign(buffer_1, fmt, n) < (int)n) strerr_diefu1sys(111, "write to stdout") ; } return !count ; }
void put(const char *buf,unsigned int len) { if (buffer_putalign(&bnew,buf,len) == -1) die_write(); }
void put (const char *buf, unsigned int len) { if (buffer_putalign (&bnew, buf, len) == -1) err (-1, "could not write `%s'", fnnew); }
int buffer_putsalign(buffer *s,const char *buf) { return buffer_putalign(s,buf,str_len(buf)); }
static int doit (int fd, diuint const *s, unsigned int len, unsigned long flags, char delim) { char buf[BUFFER_INSIZE] ; buffer b = BUFFER_INIT(&buffer_flush1read, fd, buf, BUFFER_INSIZE) ; for (;;) { int r ; satmp.len = 0 ; r = skagetln(&b, &satmp, '\n') ; if ((r == -1) && (errno != EPIPE)) return 0 ; if (!r) break ; if (flags & 2) { register unsigned int i = 0 ; for (; i < len ; i++) { register unsigned int j = s[i].right ; if (s[i].left >= satmp.len) break ; if (!j || (j > satmp.len)) { j = satmp.len ; r = 0 ; } if (buffer_putalign(buffer_1, satmp.s + s[i].left - 1, j + 1 - s[i].left) == -1) return 0 ; } } else { register unsigned int i = 0, j = 0, count = 1 ; for (; i < len ; i++) { for (; count < s[i].left ; count++) { j += byte_chr(satmp.s + j, satmp.len - j, delim) ; if (j == satmp.len) break ; j++ ; } if (j == satmp.len) { if (count == 1) { if ((flags & 1) && (buffer_putalign(buffer_1, satmp.s, satmp.len) == -1)) return 0 ; r = 0 ; } break ; } for (; !s[i].right || (count <= s[i].right) ; count++) { register unsigned int k = byte_chr(satmp.s + j, satmp.len - j, delim) ; if ((count > s[0].left) && (buffer_putalign(buffer_1, &delim, 1) == -1)) return 0 ; if (buffer_putalign(buffer_1, satmp.s + j, k) == -1) return 0 ; j += k ; if (j == satmp.len) { r = 0 ; break ; } j++ ; } if (j == satmp.len) break ; } } if ((r > 0) && (buffer_putalign(buffer_1, "\n", 1) == -1)) return 0 ; } return 1 ; }
int buffer_PUTC (buffer_ref b, char c) { return buffer_putalign(b, &c, 1) ; }
static int doit (char const *s, unsigned int len) { if (delimlen) { if (!len--) { switch (strictness) { case 1 : case 2 : strerr_warnw1x("empty line") ; break ; case 3 : buffer_flush(buffer_1) ; strerr_dief1x(100, "empty line") ; default : break ; } return 1 ; } if (byte_chr(delim, delimlen, *s) >= delimlen) { switch (strictness) { case 0 : return 0 ; case 1 : { strerr_warnw1x("invalid starting quote character") ; return 0 ; } case 2 : { char fmt[40] ; unsigned int n = len < 39 ? len+1 : 36 ; byte_copy(fmt, n, s) ; if (len >= 39) { byte_copy(fmt+n, 3, "...") ; n += 3 ; } fmt[n] = 0 ; strerr_warnw3x("invalid starting quote character", " in line: ", fmt) ; return 0 ; } case 3 : { buffer_flush(buffer_1) ; strerr_dief1x(100, "invalid starting quote character") ; } default : strerr_dief1x(101, "can't happen: unknown strictness") ; } } } { unsigned int r, w ; char d[len] ; if (!string_unquote_withdelim(d, &w, s + !!delimlen, len, &r, delim, delimlen)) { switch (strictness) { case 0 : return 0 ; case 1 : { strerr_warnwu1sys("unquote") ; return 0 ; } case 2 : { char fmt[40] ; unsigned int n = (len + !!delimlen) < 40 ? (len + !!delimlen) : 36 ; byte_copy(fmt, n, s) ; if ((len + !!delimlen) >= 40) { byte_copy(fmt+n, 3, "...") ; n += 3 ; } fmt[n] = 0 ; strerr_warnwu3sys("unquote", " line: ", fmt) ; return 0 ; } case 3 : { int e = errno ; buffer_flush(buffer_1) ; errno = e ; strerr_diefu1sys(100, "unquote") ; } default : strerr_dief1x(101, "can't happen: unknown strictness") ; } } if (delimlen) { if (r == len) { switch (strictness) { case 0 : return 0 ; case 1 : { strerr_warnwu2x("unquote", ": no ending quote character") ; return 0 ; } case 2 : { char fmt[40] ; unsigned int n = len < 40 ? len : 36 ; byte_copy(fmt, n, s) ; if (len >= 40) { byte_copy(fmt+n, 3, "...") ; n += 3 ; } fmt[n] = 0 ; strerr_warnwu5x("unquote", ": no ending quote character", " in ", "line: ", fmt) ; return 0 ; } case 3 : { int e = errno ; buffer_flush(buffer_1) ; errno = e ; strerr_diefu2x(100, "unquote", ": no ending quote character") ; } default : strerr_dief1x(101, "can't happen: unknown strictness") ; } } else if ((r < len-1) && (strictness >= 2)) { char fmtnum[UINT_FMT] ; char fmtden[UINT_FMT] ; char fmt[40] ; unsigned int n = len < 39 ? len+1 : 36 ; byte_copy(fmt, n, s) ; if (len >= 39) { byte_copy(fmt+n, 3, "...") ; n += 3 ; } fmt[n] = 0 ; fmtnum[uint_fmt(fmtnum, r+1)] = 0 ; fmtden[uint_fmt(fmtden, len)] = 0 ; strerr_warnw7x("found ending quote character at position ", fmtnum, "/", fmtden, ", ignoring remainder of ", "line: ", fmt) ; } } if (buffer_putalign(buffer_1, d, w) < (int)w) strerr_diefu1sys(111, "write to stdout") ; } return 1 ; }