URI: 
       tdup-list.c - dedup - data deduplication program
  HTML git clone git://bitreich.org/dedup/ git://hg6vgqziawt5s4dj.onion/dedup/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
       tdup-list.c (1736B)
       ---
            1 #include <sys/types.h>
            2 #include <sys/stat.h>
            3 #include <sys/file.h>
            4 
            5 #include <err.h>
            6 #include <fcntl.h>
            7 #include <stdio.h>
            8 #include <stdint.h>
            9 #include <stdlib.h>
           10 #include <string.h>
           11 #include <unistd.h>
           12 
           13 #include "arg.h"
           14 #include "blake2.h"
           15 #include "dedup.h"
           16 
           17 static struct snap_hdr snap_hdr;
           18 static struct blk_hdr blk_hdr;
           19 static int ifd;
           20 static int sfd;
           21 static int hash_algo = HASH_BLAKE2B;
           22 static int compr_algo = COMPR_LZ4;
           23 
           24 int verbose;
           25 char *argv0;
           26 
           27 static void
           28 print_md(FILE *fp, uint8_t *md, size_t size)
           29 {
           30         size_t i;
           31 
           32         for (i = 0; i < size; i++)
           33                 fprintf(fp, "%02x", md[i]);
           34 }
           35 
           36 static int
           37 list(struct snap *snap, void *arg)
           38 {
           39         print_md(stdout, snap->md, sizeof(snap->md));
           40         if (snap->msg[0] != '\0')
           41                 printf("\t%s\n", snap->msg);
           42         else
           43                 putchar('\n');
           44         return WALK_CONTINUE;
           45 }
           46 
           47 static void
           48 init(void)
           49 {
           50         ifd = open(SNAPSF, O_RDONLY, 0600);
           51         if (ifd < 0)
           52                 err(1, "open %s", SNAPSF);
           53 
           54         sfd = open(STOREF, O_RDONLY, 0600);
           55         if (sfd < 0)
           56                 err(1, "open %s", STOREF);
           57 
           58         if (flock(ifd, LOCK_NB | LOCK_EX) < 0 ||
           59             flock(sfd, LOCK_NB | LOCK_EX) < 0)
           60                 err(1, "flock");
           61 
           62         xlseek(ifd, 0, SEEK_SET);
           63         load_snap_hdr(ifd, &snap_hdr);
           64         xlseek(sfd, 0, SEEK_SET);
           65         load_blk_hdr(sfd, &blk_hdr, &compr_algo, &hash_algo);
           66 }
           67 
           68 static void
           69 term(void)
           70 {
           71         close(ifd);
           72         close(sfd);
           73 }
           74 
           75 static void
           76 usage(void)
           77 {
           78         fprintf(stderr, "usage: %s [-v] [repo]\n", argv0);
           79         exit(1);
           80 }
           81 
           82 int
           83 main(int argc, char *argv[])
           84 {
           85         char *repo = NULL;
           86 
           87         ARGBEGIN {
           88         case 'v':
           89                 verbose++;
           90                 break;
           91         default:
           92                 usage();
           93         } ARGEND
           94 
           95         switch (argc) {
           96         case 0:
           97                 repo = ".";
           98                 break;
           99         case 1:
          100                 repo = argv[0];
          101                 break;
          102         default:
          103                 usage();
          104         };
          105 
          106         if (chdir(repo) < 0)
          107                 err(1, "chdir: %s", repo);
          108 
          109         init();
          110         walk_snap(ifd, &snap_hdr, list, NULL);
          111         term();
          112         return 0;
          113 }