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 ;
}
Example #3
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 ;
}
Example #4
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) ;
}
Example #5
0
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 ;
}
Example #6
0
void put(const char *buf,unsigned int len)
{
  if (buffer_putalign(&bnew,buf,len) == -1) die_write();
}
Example #7
0
void
put (const char *buf, unsigned int len)
{
    if (buffer_putalign (&bnew, buf, len) == -1)
        err (-1, "could not write `%s'", fnnew);
}
Example #8
0
int buffer_putsalign(buffer *s,const char *buf)
{
  return buffer_putalign(s,buf,str_len(buf));
}
Example #9
0
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 ;
}