URI: 
       Rework lookup - dedup - deduplicating backup program
  HTML git clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
   DIR commit a7876bfd884b201019ba7d498347257d1869f340
   DIR parent b32c5c5b3c6b92b0a10ddc694e7df2d233c43c52
  HTML Author: sin <sin@2f30.org>
       Date:   Sun, 17 Feb 2019 10:08:01 +0000
       
       Rework lookup
       
       Diffstat:
         M dedup.c                             |      25 +++++++++++--------------
       
       1 file changed, 11 insertions(+), 14 deletions(-)
       ---
   DIR diff --git a/dedup.c b/dedup.c
       @@ -351,16 +351,14 @@ store_size(void)
        }
        
        int
       -lookup_blk(uint8_t *md, struct bdescr *bdescr)
       +lookup_blk(uint8_t *md)
        {
                struct cent *ent, key;
        
                memcpy(key.bdescr.md, md, sizeof(key.bdescr.md));
                ent = RB_FIND(cache, &cache_head, &key);
       -        if (ent != NULL) {
       -                *bdescr = ent->bdescr;
       +        if (ent != NULL)
                        return 0;
       -        }
                return -1;
        }
        
       @@ -389,26 +387,25 @@ dedup(int fd)
                                else
                                        blksiz = n;
        
       -                        hash_blk(bp, blksiz, md);
       +                        memcpy(bdescr.md, md, sizeof(bdescr));
       +                        bdescr.offset = store_size();
       +                        bdescr.size = blksiz;
       +
       +                        hash_blk(bp, bdescr.size, bdescr.md);
        
                                /* Calculate file hash one block at a time */
       -                        SHA256_Update(&ctx, bp, blksiz);
       +                        SHA256_Update(&ctx, bp, bdescr.size);
        
                                ent = grow_ent(ent, ent->nblks + 1);
       -                        if (lookup_blk(md, &bdescr) < 0) {
       -                                struct bdescr bdescr;
       -                                struct cent *cent;
        
       -                                /* Block not found, create new block descriptor */
       -                                memcpy(bdescr.md, md, sizeof(bdescr));
       -                                bdescr.offset = store_size();
       -                                bdescr.size = blksiz;
       +                        if (lookup_blk(bdescr.md) < 0) {
       +                                struct cent *cent;
        
                                        /* Update index entry */
                                        ent->bdescr[ent->nblks++] = bdescr;
        
                                        /* Store block */
       -                                append_blk(bp, blksiz);
       +                                append_blk(bp, bdescr.size);
        
                                        /* Create a cache entry for this block */
                                        cent = alloc_cent();