csum-file.hon commit Merge branch 'en/rebase-i-microfixes' (b345b77)
   1#ifndef CSUM_FILE_H
   2#define CSUM_FILE_H
   3
   4struct progress;
   5
   6/* A SHA1-protected file */
   7struct hashfile {
   8        int fd;
   9        int check_fd;
  10        unsigned int offset;
  11        git_hash_ctx ctx;
  12        off_t total;
  13        struct progress *tp;
  14        const char *name;
  15        int do_crc;
  16        uint32_t crc32;
  17        unsigned char buffer[8192];
  18};
  19
  20/* Checkpoint */
  21struct hashfile_checkpoint {
  22        off_t offset;
  23        git_hash_ctx ctx;
  24};
  25
  26extern void hashfile_checkpoint(struct hashfile *, struct hashfile_checkpoint *);
  27extern int hashfile_truncate(struct hashfile *, struct hashfile_checkpoint *);
  28
  29/* finalize_hashfile flags */
  30#define CSUM_CLOSE              1
  31#define CSUM_FSYNC              2
  32#define CSUM_HASH_IN_STREAM     4
  33
  34extern struct hashfile *hashfd(int fd, const char *name);
  35extern struct hashfile *hashfd_check(const char *name);
  36extern struct hashfile *hashfd_throughput(int fd, const char *name, struct progress *tp);
  37extern int finalize_hashfile(struct hashfile *, unsigned char *, unsigned int);
  38extern void hashwrite(struct hashfile *, const void *, unsigned int);
  39extern void hashflush(struct hashfile *f);
  40extern void crc32_begin(struct hashfile *);
  41extern uint32_t crc32_end(struct hashfile *);
  42
  43static inline void hashwrite_u8(struct hashfile *f, uint8_t data)
  44{
  45        hashwrite(f, &data, sizeof(data));
  46}
  47
  48static inline void hashwrite_be32(struct hashfile *f, uint32_t data)
  49{
  50        data = htonl(data);
  51        hashwrite(f, &data, sizeof(data));
  52}
  53
  54#endif