diff options
author | Vicent Marti <tanoku@gmail.com> | 2011-03-23 18:44:53 +0200 |
---|---|---|
committer | Vicent Marti <tanoku@gmail.com> | 2011-03-23 18:44:53 +0200 |
commit | f6f72d7ef8091bf1fcf19f284e1db62a43f93381 (patch) | |
tree | 24b7f1fa9bc18ab2bce72e337c3b7f6ca3b51e51 /src/fileops.c | |
parent | 08db1efd3d64bda358071612ff3662f4bf1aea61 (diff) | |
download | libgit2-f6f72d7ef8091bf1fcf19f284e1db62a43f93381.tar.gz |
Improve the ODB writing backend
Temporary files when doing streaming writes are now stored inside the
Objects folder, to prevent issues when moving files between
disks/partitions.
Add support for block writes to the ODB again (for those backends that
cannot implement streaming).
Diffstat (limited to 'src/fileops.c')
-rw-r--r-- | src/fileops.c | 64 |
1 files changed, 2 insertions, 62 deletions
diff --git a/src/fileops.c b/src/fileops.c index d754c49ee..5dd4a3806 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -25,11 +25,11 @@ int gitfo_mkdir_2file(const char *file_path) return GIT_SUCCESS; } -static int creat_tempfile(char *path_out, const char *tmp_dir, const char *filename) +int gitfo_mktemp(char *path_out, const char *filename) { int fd; - git__joinpath(path_out, tmp_dir, filename); + strcpy(path_out, filename); strcat(path_out, "_git2_XXXXXX"); #if defined(_MSC_VER) @@ -46,66 +46,6 @@ static int creat_tempfile(char *path_out, const char *tmp_dir, const char *filen return fd >= 0 ? fd : GIT_EOSERR; } -static const char *find_tmpdir(void) -{ - static int tmpdir_not_found = 0; - static char temp_dir[GIT_PATH_MAX]; - static const char *env_vars[] = { - "TEMP", "TMP", "TMPDIR" - }; - - unsigned int i, j; - char test_file[GIT_PATH_MAX]; - - if (tmpdir_not_found) - return NULL; - - if (temp_dir[0] != '\0') - return temp_dir; - - for (i = 0; i < ARRAY_SIZE(env_vars); ++i) { - char *env_path; - - env_path = getenv(env_vars[i]); - if (env_path == NULL) - continue; - - strcpy(temp_dir, env_path); - - /* Fix backslashes because Windows environment vars - * are probably fucked up */ - for (j = 0; j < strlen(temp_dir); ++j) - if (temp_dir[j] == '\\') - temp_dir[j] = '/'; - - if (creat_tempfile(test_file, temp_dir, "writetest") >= 0) { - gitfo_unlink(test_file); - return temp_dir; - } - } - - /* last resort: current folder. */ - strcpy(temp_dir, "./"); - if (creat_tempfile(test_file, temp_dir, "writetest") >= 0) { - gitfo_unlink(test_file); - return temp_dir; - } - - tmpdir_not_found = 1; - return NULL; -} - -int gitfo_creat_tmp(char *path_out, const char *filename) -{ - const char *tmp_dir; - - tmp_dir = find_tmpdir(); - if (tmp_dir == NULL) - return GIT_EOSERR; - - return creat_tempfile(path_out, tmp_dir, filename); -} - int gitfo_open(const char *path, int flags) { int fd = open(path, flags | O_BINARY); |