summaryrefslogtreecommitdiffstats
path: root/tempfile.c
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2015-08-10 11:47:42 +0200
committerJunio C Hamano <gitster@pobox.com>2015-08-10 12:57:14 -0700
commit7eba6ce5c79447579689218d8dab59a8434fd7c7 (patch)
tree8b7bad1293e78afb396cc5289cee20968548d728 /tempfile.c
parent1a9d15db25487bb3fc009a88375cc206a60e0e3b (diff)
downloadgit-7eba6ce5c79447579689218d8dab59a8434fd7c7.tar.gz
git-7eba6ce5c79447579689218d8dab59a8434fd7c7.tar.xz
prepare_tempfile_object(): new function, extracted from create_tempfile()
This makes the next step easier. The old code used to use "path" to set the initial length of tempfile->filename. This was not helpful because path was usually relative whereas the value stored to filename will be absolute. So just initialize the length to 0. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'tempfile.c')
-rw-r--r--tempfile.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/tempfile.c b/tempfile.c
index d8358187f..d840f0452 100644
--- a/tempfile.c
+++ b/tempfile.c
@@ -85,11 +85,11 @@ static void remove_tempfiles_on_signal(int signo)
raise(signo);
}
-/* Make sure errno contains a meaningful value on error */
-int create_tempfile(struct tempfile *tempfile, const char *path)
+/*
+ * Initialize *tempfile if necessary and add it to tempfile_list.
+ */
+static void prepare_tempfile_object(struct tempfile *tempfile)
{
- size_t pathlen = strlen(path);
-
if (!tempfile_list) {
/* One-time initialization */
sigchain_push_common(remove_tempfiles_on_signal);
@@ -97,21 +97,27 @@ int create_tempfile(struct tempfile *tempfile, const char *path)
}
if (tempfile->active)
- die("BUG: create_tempfile called for active object");
+ die("BUG: prepare_tempfile_object called for active object");
if (!tempfile->on_list) {
/* Initialize *tempfile and add it to tempfile_list: */
tempfile->fd = -1;
tempfile->fp = NULL;
tempfile->active = 0;
tempfile->owner = 0;
- strbuf_init(&tempfile->filename, pathlen);
+ strbuf_init(&tempfile->filename, 0);
tempfile->next = tempfile_list;
tempfile_list = tempfile;
tempfile->on_list = 1;
} else if (tempfile->filename.len) {
/* This shouldn't happen, but better safe than sorry. */
- die("BUG: create_tempfile called for improperly-reset object");
+ die("BUG: prepare_tempfile_object called for improperly-reset object");
}
+}
+
+/* Make sure errno contains a meaningful value on error */
+int create_tempfile(struct tempfile *tempfile, const char *path)
+{
+ prepare_tempfile_object(tempfile);
strbuf_add_absolute_path(&tempfile->filename, path);
tempfile->fd = open(tempfile->filename.buf, O_RDWR | O_CREAT | O_EXCL, 0666);