csum-file.hon commit Merge branch 'rs/mailinfo-lib' into maint (71165f0)
   1#ifndef CSUM_FILE_H
   2#define CSUM_FILE_H
   3
   4struct progress;
   5
   6/* A SHA1-protected file */
   7struct sha1file {
   8        int fd;
   9        int check_fd;
  10        unsigned int offset;
  11        git_SHA_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 sha1file_checkpoint {
  22        off_t offset;
  23        git_SHA_CTX ctx;
  24};
  25
  26extern void sha1file_checkpoint(struct sha1file *, struct sha1file_checkpoint *);
  27extern int sha1file_truncate(struct sha1file *, struct sha1file_checkpoint *);
  28
  29/* sha1close flags */
  30#define CSUM_CLOSE      1
  31#define CSUM_FSYNC      2
  32
  33extern struct sha1file *sha1fd(int fd, const char *name);
  34extern struct sha1file *sha1fd_check(const char *name);
  35extern struct sha1file *sha1fd_throughput(int fd, const char *name, struct progress *tp);
  36extern int sha1close(struct sha1file *, unsigned char *, unsigned int);
  37extern void sha1write(struct sha1file *, const void *, unsigned int);
  38extern void sha1flush(struct sha1file *f);
  39extern void crc32_begin(struct sha1file *);
  40extern uint32_t crc32_end(struct sha1file *);
  41
  42static inline void sha1write_u8(struct sha1file *f, uint8_t data)
  43{
  44        sha1write(f, &data, sizeof(data));
  45}
  46
  47static inline void sha1write_be32(struct sha1file *f, uint32_t data)
  48{
  49        data = htonl(data);
  50        sha1write(f, &data, sizeof(data));
  51}
  52
  53#endif