X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=backup%2Freadbuffer.c;h=e48e78c6ff9fd2819e4747ddd6565ec9c269e9b8;hp=f389a77c3fce8bf6319bc4a2c6698dfe28e68dc9;hb=35eebe42ba3cd77674422cebf674e316d5a258b1;hpb=460e29f1c9232dafbdc161bf67d3e956d23eeb6b diff --git a/backup/readbuffer.c b/backup/readbuffer.c index f389a77..e48e78c 100644 --- a/backup/readbuffer.c +++ b/backup/readbuffer.c @@ -29,96 +29,63 @@ #include #include -#include #include #include #include #include #include -#ifndef RWBUFFER_SIZE_MB -#define RWBUFFER_SIZE_MB 16 -#endif +#include "rwbuffer.h" -#define BUFFER (RWBUFFER_SIZE_MB*1024*1024) -#define WAITEMPTY ((BUFFER*1)/4) +const char *progname= "readbuffer"; -static inline int min(int a, int b) { return a<=b ? a : b; } - -static void nonblock(int fd) { - int r; - r= fcntl(fd,F_GETFL,0); if (r == -1) { perror("fcntl getfl"); exit(1); } - r |= O_NDELAY; - if (fcntl(fd,F_SETFL,r) == -1) { perror("fcntl setfl"); exit(1); } -} +static size_t waitempty; int main(int argc, const char *const *argv) { - static unsigned char buf[BUFFER]; - - unsigned char *wp, *rp; - int used,r,reading,seeneof; - fd_set readfds; - fd_set writefds; - - used=0; wp=rp=buf; reading=1; seeneof=0; - nonblock(0); nonblock(1); - - if (argv[1] && !strcmp(argv[1],"--mlock")) { - if (mlock(buf,sizeof(buf))) { perror("mlock"); exit(1); } - argv++; argc--; - } - if (argv[1]) { fputs("usage: readbuffer [--mlock]\n",stderr); exit(1); } + int r,reading; + startup(argv); + waitempty= (buffersize*1)/4; + reading=1; + while (!seeneof || used) { + FD_ZERO(&readfds); if (reading) { - if (used