| #ifndef INCLUDE_filebuf_h__ |
| #define INCLUDE_filebuf_h__ |
| |
| #include "fileops.h" |
| #include "hash.h" |
| |
| #ifdef GIT_THREADS |
| # define GIT_FILEBUF_THREADS |
| #endif |
| |
| #define GIT_FILEBUF_HASH_CONTENTS 0x1 |
| #define GIT_FILEBUF_APPEND 0x2 |
| #define GIT_FILEBUF_FORCE 0x4 |
| |
| #define GIT_FILELOCK_EXTENSION ".lock\0" |
| #define GIT_FILELOCK_EXTLENGTH 6 |
| |
| struct git_filebuf { |
| char *path_original; |
| char *path_lock; |
| |
| git_hash_ctx *digest; |
| |
| unsigned char *buffer; |
| #ifdef GIT_FILEBUF_THREADS |
| unsigned char *buffer_back; |
| #endif |
| |
| size_t buf_size, buf_pos; |
| git_file fd; |
| }; |
| |
| typedef struct git_filebuf git_filebuf; |
| |
| int git_filebuf_write(git_filebuf *lock, void *buff, size_t len); |
| int git_filebuf_reserve(git_filebuf *file, void **buff, size_t len); |
| int git_filebuf_printf(git_filebuf *file, const char *format, ...); |
| |
| int git_filebuf_open(git_filebuf *lock, const char *path, int flags); |
| int git_filebuf_commit(git_filebuf *lock); |
| void git_filebuf_cleanup(git_filebuf *lock); |
| int git_filebuf_hash(git_oid *oid, git_filebuf *file); |
| |
| #endif |