misc.c - dedup - deduplicating backup program
 (HTM) git clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
       misc.c (1064B)
       ---
            1 #include <sys/types.h>
            2 
            3 #include <stdarg.h>
            4 #include <stdio.h>
            5 #include <stdlib.h>
            6 #include <unistd.h>
            7 
            8 #define NERRBUF        128
            9 static char errbuf[NERRBUF];
           10 
           11 ssize_t
           12 xread(int fd, void *buf, size_t nbytes)
           13 {
           14         unsigned char *bp = buf;
           15         ssize_t total = 0;
           16 
           17         while (nbytes > 0) {
           18                 ssize_t n;
           19 
           20                 n = read(fd, &bp[total], nbytes);
           21                 if (n < 0)
           22                         return -1;
           23                 else if (n == 0)
           24                         return total;
           25                 total += n;
           26                 nbytes -= n;
           27         }
           28         return total;
           29 }
           30 
           31 ssize_t
           32 xwrite(int fd, void *buf, size_t nbytes)
           33 {
           34         unsigned char *bp = buf;
           35         ssize_t total = 0;
           36 
           37         while (nbytes > 0) {
           38                 ssize_t n;
           39 
           40                 n = write(fd, &bp[total], nbytes);
           41                 if (n < 0)
           42                         return -1;
           43                 else if (n == 0)
           44                         return total;
           45                 total += n;
           46                 nbytes -= n;
           47         }
           48         return total;
           49 }
           50 
           51 void
           52 seterr(char *fmt, ...)
           53 {
           54         va_list ap;
           55 
           56         va_start(ap, fmt);
           57         vsnprintf(errbuf, NERRBUF, fmt, ap);
           58         va_end(ap);
           59 }
           60 
           61 void
           62 printerr(char *fmt, ...)
           63 {
           64         va_list ap;
           65 
           66         va_start(ap, fmt);
           67         vfprintf(stderr, fmt, ap);
           68         if (errbuf[0] == '\0')
           69                 fprintf(stderr, ": unknown error\n");
           70         else
           71                 fprintf(stderr, ": %s\n", errbuf);
           72         va_end(ap);
           73         exit(1);
           74 }