Introduce S_READ/B_READ/B_RDWR - 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
       ---
 (DIR) commit 873f8140b3c1861e5baa5c2dd93f83dfb1d1bc2a
 (DIR) parent 119f4b9531960ed842f475fe4b3e91444ce92b59
 (HTM) Author: sin <sin@2f30.org>
       Date:   Fri, 26 Apr 2019 14:50:26 +0100
       
       Introduce S_READ/B_READ/B_RDWR
       
       Diffstat:
         M block.h                             |       5 +++++
         M bstorage.c                          |      11 +++++++++++
         M dup-check.c                         |       5 ++---
         M dup-gc.c                            |       3 +--
         M dup-init.c                          |       1 -
         M dup-pack.c                          |       3 +--
         M dup-rm.c                            |       5 ++---
         M dup-unpack.c                        |       5 ++---
         M snap.c                              |       4 ++--
         M snap.h                              |       4 ++++
       
       10 files changed, 30 insertions(+), 16 deletions(-)
       ---
 (DIR) diff --git a/block.h b/block.h
       @@ -1,3 +1,8 @@
       +enum {
       +        B_READ  = 1 << 0,
       +        B_RDWR        = 1 << 1,
       +};
       +        
        struct bctx {
                void *gctx;        /* generic layer context (unused) */
                void *cctx;        /* compression layer context */
 (DIR) diff --git a/bstorage.c b/bstorage.c
       @@ -379,6 +379,17 @@ bsopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar)
                struct bhdr *bhdr;
                int fd, calgo, halgo;
        
       +        switch (flags) {
       +        case B_READ:
       +                flags = O_RDONLY;
       +                break;
       +        case B_RDWR:
       +                flags = O_RDWR;
       +                break;
       +        default:
       +                return -1;
       +        }
       +
                fd = open(path, flags, mode);
                if (fd < 0)
                        return -1;
 (DIR) diff --git a/dup-check.c b/dup-check.c
       @@ -2,7 +2,6 @@
        #include <sys/stat.h>
        
        #include <err.h>
       -#include <fcntl.h>
        #include <limits.h>
        #include <stdio.h>
        #include <stdlib.h>
       @@ -61,11 +60,11 @@ main(int argc, char *argv[])
                        usage();
        
                snprintf(path, sizeof(path), "%s/archive/%s", repo, argv[0]);
       -        if (sopen(path, O_RDONLY, 0600, &sctx) < 0)
       +        if (sopen(path, S_READ, 0600, &sctx) < 0)
                        errx(1, "sopen: %s: failed", path);
        
                snprintf(path, sizeof(path), "%s/storage", repo);
       -        if (bopen(path, O_RDONLY, 0600, &bparam, &bctx) <0)
       +        if (bopen(path, B_READ, 0600, &bparam, &bctx) <0)
                        errx(1, "bopen: %s: failed", path);
        
                if (check(sctx, bctx) < 0)
 (DIR) diff --git a/dup-gc.c b/dup-gc.c
       @@ -2,7 +2,6 @@
        #include <sys/stat.h>
        
        #include <err.h>
       -#include <fcntl.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <unistd.h>
       @@ -51,7 +50,7 @@ main(int argc, char *argv[])
                if (chdir(repo) < 0)
                        err(1, "chdir: %s", repo);
        
       -        if (bopen(STORAGEPATH, O_RDWR, 0600, &bpar, &bctx) < 0)
       +        if (bopen(STORAGEPATH, B_RDWR, 0600, &bpar, &bctx) < 0)
                        errx(1, "bopen: failed");
                if (bgc(bctx) < 0)
                        errx(1, "bgc: failed");
 (DIR) diff --git a/dup-init.c b/dup-init.c
       @@ -2,7 +2,6 @@
        #include <sys/stat.h>
        
        #include <err.h>
       -#include <fcntl.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <unistd.h>
 (DIR) diff --git a/dup-pack.c b/dup-pack.c
       @@ -2,7 +2,6 @@
        #include <sys/stat.h>
        
        #include <err.h>
       -#include <fcntl.h>
        #include <limits.h>
        #include <stdio.h>
        #include <stdlib.h>
       @@ -83,7 +82,7 @@ main(int argc, char *argv[])
                        errx(1, "screat: %s: failed", path);
        
                snprintf(path, sizeof(path), "%s/storage", repo);
       -        if (bopen(path, O_RDWR, 0600, &bpar, &bctx) <0)
       +        if (bopen(path, B_RDWR, 0600, &bpar, &bctx) <0)
                        errx(1, "bopen: %s: failed", path);
        
                if (pack(sctx, bctx) < 0)
 (DIR) diff --git a/dup-rm.c b/dup-rm.c
       @@ -2,7 +2,6 @@
        #include <sys/stat.h>
        
        #include <err.h>
       -#include <fcntl.h>
        #include <limits.h>
        #include <stdio.h>
        #include <stdlib.h>
       @@ -63,11 +62,11 @@ main(int argc, char *argv[])
                        usage();
        
                snprintf(spath, sizeof(spath), "%s/archive/%s", repo, argv[0]);
       -        if (sopen(spath, O_RDONLY, 0600, &sctx) < 0)
       +        if (sopen(spath, S_READ, 0600, &sctx) < 0)
                        errx(1, "sopen: %s: failed", spath);
        
                snprintf(bpath, sizeof(bpath), "%s/storage", repo);
       -        if (bopen(bpath, O_RDWR, 0600, &bparam, &bctx) <0)
       +        if (bopen(bpath, B_RDWR, 0600, &bparam, &bctx) <0)
                        errx(1, "bopen: %s: failed", bpath);
        
                if (rm(sctx, bctx) < 0)
 (DIR) diff --git a/dup-unpack.c b/dup-unpack.c
       @@ -2,7 +2,6 @@
        #include <sys/stat.h>
        
        #include <err.h>
       -#include <fcntl.h>
        #include <limits.h>
        #include <stdio.h>
        #include <stdlib.h>
       @@ -95,11 +94,11 @@ main(int argc, char *argv[])
                        usage();
        
                snprintf(path, sizeof(path), "%s/archive/%s", repo, argv[0]);
       -        if (sopen(path, O_RDONLY, 0600, &sctx) < 0)
       +        if (sopen(path, S_READ, 0600, &sctx) < 0)
                        errx(1, "sopen: %s: failed", path);
        
                snprintf(path, sizeof(path), "%s/storage", repo);
       -        if (bopen(path, O_RDONLY, 0600, &bpar, &bctx) <0)
       +        if (bopen(path, B_READ, 0600, &bpar, &bctx) <0)
                        errx(1, "bopen: %s: failed", path);
        
                if (unpack(sctx, bctx) < 0)
 (DIR) diff --git a/snap.c b/snap.c
       @@ -141,10 +141,10 @@ sopen(char *path, int flags, int mode, struct sctx **sctx)
                        return -1;
        
                /* Existing snapshots are immutable */
       -        if (flags != O_RDONLY)
       +        if (flags != S_READ)
                        return -1;
        
       -        fd = open(path, flags, mode);
       +        fd = open(path, O_RDONLY, mode);
                if (fd < 0)
                        return -1;
        
 (DIR) diff --git a/snap.h b/snap.h
       @@ -1,3 +1,7 @@
       +enum {
       +        S_READ  = 1 << 0,
       +};
       +
        struct sctx;
        
        extern int screat(char *path, int mode, struct sctx **sctx);