Example #1
0
int
send_file_fd (int out_fd, int in_fd, uint64 offset, uint64 size, uint64 *sent)
{
  char data_in[BUFFER_INSIZE];
  char data_out[BUFFER_OUTSIZE];
  struct buffer buf_in;
  struct buffer buf_out;
  int64 r;
  int64 w;
  uint64 r_sent = 0;
  char *x;

  buffer_init (&buf_in, (buffer_op) read, in_fd, data_in, sizeof (data_in));
  buffer_init (&buf_out, (buffer_op) write, out_fd, data_out, sizeof (data_out));

  for (;;) {
    r = buffer_feed (&buf_in);
    if (r == 0) break;
    if (r == -1) goto FAIL;
    x = buffer_peek (&buf_in);
    w = buffer_put (&buf_out, x, r);
    if (w == -1) goto FAIL;
    buffer_seek (&buf_in, r);
    r_sent += w;
  }
  *sent = r_sent;
  return 0;

  FAIL:
  *sent = r_sent;
  return -1;
}
Example #2
0
ssize_t buffer_get_token(buffer* b,char* x,size_t len,const char* charset,size_t setlen) {
  size_t blen;

  if ((ssize_t)len<0) len=(ssize_t)(((size_t)-1)>>1);
  if (setlen==1) {
    for (blen=0; blen<len; ) {
      ssize_t n=buffer_feed(b);
      char* d;
      if (n<=0) return blen;
      if (n>(ssize_t)(len-blen)) n=len-blen;
      if ((d=memccpy(x+blen,b->x+b->p,(unsigned char)charset[0],n))) {
	/* memccpy returns a pointer to the next char after matching
	 * char or NULL if it copied all bytes it was asked for */
	b->p+=(d-(x+blen));
	return d-x-1;
      }
      blen+=n;
      b->p+=n;
    }
  } else {
    for (blen=0;blen<len;++blen) {
      register ssize_t r;
      if ((r=buffer_getc(b,x))<0) return r;
      if (r==0) { *x=0; break; }
      if (byte_chr(charset,setlen,*x)<setlen) break;
      ++x;
    }
  }
  return (ssize_t)blen;
}
Example #3
0
ssize_t buffer_getc(buffer* b,char* x) {
  if (b->p==b->n) {
    register ssize_t blen;
    if ((blen=buffer_feed(b))<=0) return blen;
  }
  *x=b->x[b->p];
  ++b->p;
  return 1;
}
Example #4
0
int buffer_get(buffer *s,char *buf,unsigned int len)
{
  int r;
 
  if (s->p > 0) return getthis(s,buf,len);
  if (s->n <= len) return oneread(s->op,s->fd,buf,len);
  r = buffer_feed(s); if (r <= 0) return r;
  return getthis(s,buf,len);
}
Example #5
0
/* skips bytes in buffer until a char in charset occurs, the char itself will be skipped also */
int buffer_skip_until(buffer* b, const char* charset, unsigned long int setlen) {
  int r;
  int n = 0;
  for (;;) {
    if(b->p == b->n)
      if((r = buffer_feed(b)) <= 0)
        return r;
    n++;
    if(byte_chr(charset, setlen, b->x[b->p++]) < setlen) break;
  }
  return n;
}
Example #6
0
ssize_t
buffer_get(buffer* b, char* x, size_t len) {
  ssize_t blen, r = 0;
  if((ssize_t)len < 0) len = (ssize_t)(((size_t)-1) >> 1);
  while(len) {
    if((blen = buffer_feed(b)) < 0) return blen;
    if(blen == 0) break;
    if(blen >= (ssize_t)len) blen = (ssize_t)len;
    byte_copy(x, (size_t)blen, b->x + b->p);
    b->p += (size_t)blen;
    len -= (size_t)blen;
    x += blen;
    r += blen;
  }
  return r;
}
Example #7
0
main()
{
  register int n;
  register char *x;
  char ch;

  for (;;) {
    n = buffer_feed(buffer_0);
    if (n < 0) _exit(111);
    if (!n) _exit(0);
    x = buffer_PEEK(buffer_0);
    buffer_SEEK(buffer_0,n);
    while (n > 0) {
      ch = *x++; --n;
      if (ch == '\n') buffer_PUTC(buffer_1,"\r"[0]);
      buffer_PUTC(buffer_1,ch);
    }
  }
}
int buffer_copyline(buffer *out,buffer *in,char eol)
{
  int n;
  char *x;
  int i;
  for (;;) {
    n = buffer_feed(in);
    if (n < 0) return -2;
    if (!n) break;
    x = buffer_PEEK(in);
    i = byte_chr(x,n,eol);
    if (buffer_put(out,x,i) < 0) return -3;
    buffer_SEEK(in,i);
    if (i < in->p) {
      buffer_PUTC(out,eol);
      buffer_SEEK(in,1);
      break;
    }
  }
  return 0;
}
Example #9
0
int getln2(buffer *ss,stralloc *sa,char **cont,unsigned int *clen,int sep)
{
  register char *x;
  register unsigned int i;
  int n;
 
  if (!stralloc_ready(sa,0)) return -1;
  sa->len = 0;
 
  for (;;) {
    n = buffer_feed(ss);
    if (n < 0) return -1;
    if (n == 0) { *clen = 0; return 0; }
    x = buffer_PEEK(ss);
    i = byte_chr(x,n,sep);
    if (i < n) { buffer_SEEK(ss,*clen = i + 1); *cont = x; return 0; }
    if (!stralloc_readyplus(sa,n)) return -1;
    i = sa->len;
    sa->len = i + buffer_get(ss,sa->s + i,n);
  }
}
Example #10
0
int getln2(buffer *buf,stralloc *sa,
	   /*@out@*/char **cont,/*@out@*/unsigned int *clen,int sep)
{
  char *x;
  unsigned int i;
  int n;
 
  if (!stralloc_ready(sa,0)) return -1;
  sa->len = 0;
 
  for (;;) {
    n = buffer_feed(buf);
    if (n < 0) return -1;
    if (n == 0) { *clen = 0; return 0; }
    x = buffer_PEEK(buf);
    i = byte_chr(x,n,sep);
    if (i < n) { buffer_SEEK(buf,*clen = i + 1); *cont = x; return 0; }
    if (!stralloc_readyplus(sa,n)) return -1;
    i = sa->len;
    sa->len = i + buffer_get(buf,sa->s + i,n);
  }
}