summaryrefslogtreecommitdiff
path: root/src/filebuf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/filebuf.h')
-rw-r--r--src/filebuf.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/filebuf.h b/src/filebuf.h
new file mode 100644
index 000000000..f2e4dba51
--- /dev/null
+++ b/src/filebuf.h
@@ -0,0 +1,40 @@
+#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
+
+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_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