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