summaryrefslogtreecommitdiff
path: root/src/filebuf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/filebuf.h')
-rw-r--r--src/filebuf.h22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/filebuf.h b/src/filebuf.h
index 9db615fbd..37cb36784 100644
--- a/src/filebuf.h
+++ b/src/filebuf.h
@@ -3,14 +3,17 @@
#include "fileops.h"
#include "hash.h"
+#include "git2/zlib.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_FILEBUF_HASH_CONTENTS (1 << 0)
+#define GIT_FILEBUF_APPEND (1 << 2)
+#define GIT_FILEBUF_FORCE (1 << 3)
+#define GIT_FILEBUF_TEMPORARY (1 << 4)
+#define GIT_FILEBUF_DEFLATE_CONTENTS (1 << 5)
#define GIT_FILELOCK_EXTENSION ".lock\0"
#define GIT_FILELOCK_EXTLENGTH 6
@@ -19,12 +22,16 @@ struct git_filebuf {
char *path_original;
char *path_lock;
+ int (*write)(struct git_filebuf *file,
+ const void *source, size_t len);
+
git_hash_ctx *digest;
unsigned char *buffer;
-#ifdef GIT_FILEBUF_THREADS
- unsigned char *buffer_back;
-#endif
+ unsigned char *z_buf;
+
+ z_stream zs;
+ int flush_mode;
size_t buf_size, buf_pos;
git_file fd;
@@ -32,12 +39,13 @@ struct git_filebuf {
typedef struct git_filebuf git_filebuf;
-int git_filebuf_write(git_filebuf *lock, void *buff, size_t len);
+int git_filebuf_write(git_filebuf *lock, const 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);
+int git_filebuf_commit_at(git_filebuf *lock, const char *path);
void git_filebuf_cleanup(git_filebuf *lock);
int git_filebuf_hash(git_oid *oid, git_filebuf *file);