[BACK]Return to blocks.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / rsync

Diff for /src/usr.bin/rsync/blocks.c between version 1.22 and 1.23

version 1.22, 2024/02/27 11:28:30 version 1.23, 2024/02/28 09:36:11
Line 243 
Line 243 
 blk_match(struct sess *sess, const struct blkset *blks,  blk_match(struct sess *sess, const struct blkset *blks,
         const char *path, struct blkstat *st)          const char *path, struct blkstat *st)
 {  {
         off_t             last, end, sz;          off_t             last, end = 0, sz;
         int32_t           tok;          int32_t           tok;
         size_t            i;          size_t            i;
         const struct blk *blk;          const struct blk *blk;
Line 265 
Line 265 
                  */                   */
   
                 end = st->mapsz + 1 - blks->blks[blks->blksz - 1].len;                  end = st->mapsz + 1 - blks->blks[blks->blksz - 1].len;
                 last = st->offs;          }
   
                 for (i = 0; st->offs < end; st->offs++, i++) {          last = st->offs;
                         blk = blk_find(sess, st, blks, path, i == 0);          for (i = 0; st->offs < end; st->offs++, i++) {
                         if (blk == NULL)                  blk = blk_find(sess, st, blks, path, i == 0);
                                 continue;                  if (blk == NULL)
                           continue;
   
                         sz = st->offs - last;                  sz = st->offs - last;
                         st->dirty += sz;                  st->dirty += sz;
                         st->total += sz;                  st->total += sz;
                         LOG4("%s: flushing %jd B before %zu B block %zu",                  LOG4("%s: flushing %jd B before %zu B block %zu",
                             path, (intmax_t)sz,                      path, (intmax_t)sz,
                             blk->len, blk->idx);                      blk->len, blk->idx);
                         tok = -(blk->idx + 1);                  tok = -(blk->idx + 1);
   
                         hash_file_buf(&st->ctx, st->map + last, sz + blk->len);                  hash_file_buf(&st->ctx, st->map + last, sz + blk->len);
   
                         /*                  /*
                          * Write the data we have, then follow it with                   * Write the data we have, then follow it with
                          * the tag of the block that matches.                   * the tag of the block that matches.
                          */                   */
   
                         st->curpos = last;  
                         st->curlen = st->curpos + sz;  
                         st->curtok = tok;  
                         assert(st->curtok != 0);  
                         st->curst = sz ? BLKSTAT_DATA : BLKSTAT_TOK;  
                         st->total += blk->len;  
                         st->offs += blk->len;  
                         st->hint = blk->idx + 1;  
   
                         return;  
                 }  
   
                 /* Emit remaining data and send terminator token. */  
   
                 sz = st->mapsz - last;  
                 LOG4("%s: flushing remaining %jd B",  
                     path, (intmax_t)sz);  
   
                 st->total += sz;  
                 st->dirty += sz;  
                 st->curpos = last;                  st->curpos = last;
                 st->curlen = st->curpos + sz;                  st->curlen = st->curpos + sz;
                 st->curtok = 0;                  st->curtok = tok;
                   assert(st->curtok != 0);
                 st->curst = sz ? BLKSTAT_DATA : BLKSTAT_TOK;                  st->curst = sz ? BLKSTAT_DATA : BLKSTAT_TOK;
                   st->total += blk->len;
                   st->offs += blk->len;
                   st->hint = blk->idx + 1;
   
                 hash_file_buf(&st->ctx, st->map + st->curpos, sz);                  return;
         } else {          }
                 st->curpos = 0;  
                 st->curlen = st->mapsz;  
                 st->curtok = 0;  
                 st->curst = st->mapsz ? BLKSTAT_DATA : BLKSTAT_TOK;  
                 st->dirty = st->total = st->mapsz;  
   
                 hash_file_buf(&st->ctx, st->map, st->mapsz);          /* Emit remaining data and send terminator token. */
   
                 LOG4("%s: flushing whole file %zu B",          sz = st->mapsz - last;
                     path, st->mapsz);          LOG4("%s: flushing %s %jd B", path,
         }              last == 0 ? "whole" : "remaining", (intmax_t)sz);
   
           hash_file_buf(&st->ctx, st->map + last, sz);
   
           st->total += sz;
           st->dirty += sz;
           st->curpos = last;
           st->curlen = st->curpos + sz;
           st->curtok = 0;
           st->curst = sz ? BLKSTAT_DATA : BLKSTAT_TOK;
 }  }
   
 /*  /*

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23