summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamsay Jones <ramsay@ramsay1.demon.co.uk>2009-06-04 16:46:54 +0100
committerAndreas Ericsson <ae@op5.se>2009-06-05 10:21:52 +0200
commitca481fc4f12cec56b71bd50ae72e3f088b69021f (patch)
treed0fdf2dcff2f548952eec536ccc6d266550041bc
parent4319860c60d84ec2513be34ee1a65dec5eceb6c4 (diff)
downloadlibgit2-ca481fc4f12cec56b71bd50ae72e3f088b69021f.tar.gz
Add the git_move_file() function
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk> Signed-off-by: Andreas Ericsson <ae@op5.se>
-rw-r--r--src/fileops.c13
-rw-r--r--src/fileops.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/src/fileops.c b/src/fileops.c
index 581dc350d..3d35c193f 100644
--- a/src/fileops.c
+++ b/src/fileops.c
@@ -105,6 +105,19 @@ void gitfo_free_buf(gitfo_buf *obj)
obj->data = NULL;
}
+int gitfo_move_file(char *from, char *to)
+{
+ if (!link(from, to)) {
+ gitfo_unlink(from);
+ return GIT_SUCCESS;
+ }
+
+ if (!rename(from, to))
+ return GIT_SUCCESS;
+
+ return git_os_error();
+}
+
int gitfo_map_ro(git_map *out, git_file fd, off_t begin, size_t len)
{
if (git__mmap(out, len, GIT_PROT_READ, GIT_MAP_SHARED, fd, begin) < 0)
diff --git a/src/fileops.h b/src/fileops.h
index 568464205..175396917 100644
--- a/src/fileops.h
+++ b/src/fileops.h
@@ -69,6 +69,7 @@ extern off_t gitfo_size(git_file fd);
extern int gitfo_read_file(gitfo_buf *obj, const char *path);
extern void gitfo_free_buf(gitfo_buf *obj);
+extern int gitfo_move_file(char *from, char *to);
#define gitfo_unlink(p) unlink(p)
#define gitfo_rmdir(p) rmdir(p)