#ifndef CSUM_FILE_H
#define CSUM_FILE_H

struct progress;

/* A SHA1-protected file */
struct sha1file {
	int fd;
	int check_fd;
	unsigned int offset;
	git_SHA_CTX ctx;
	off_t total;
	struct progress *tp;
	const char *name;
	int do_crc;
	uint32_t crc32;
	unsigned char buffer[8192];
};

/* Checkpoint */
struct sha1file_checkpoint {
	off_t offset;
	git_SHA_CTX ctx;
};

extern void sha1file_checkpoint(struct sha1file *, struct sha1file_checkpoint *);
extern int sha1file_truncate(struct sha1file *, struct sha1file_checkpoint *);

/* sha1close flags */
#define CSUM_CLOSE	1
#define CSUM_FSYNC	2

extern struct sha1file *sha1fd(int fd, const char *name);
extern struct sha1file *sha1fd_check(const char *name);
extern struct sha1file *sha1fd_throughput(int fd, const char *name, struct progress *tp);
extern int sha1close(struct sha1file *, unsigned char *, unsigned int);
extern void sha1write(struct sha1file *, const void *, unsigned int);
extern void sha1flush(struct sha1file *f);
extern void crc32_begin(struct sha1file *);
extern uint32_t crc32_end(struct sha1file *);

static inline void sha1write_u8(struct sha1file *f, uint8_t data)
{
	sha1write(f, &data, sizeof(data));
}

static inline void sha1write_be32(struct sha1file *f, uint32_t data)
{
	data = htonl(data);
	sha1write(f, &data, sizeof(data));
}

#endif
