Skip to content

Commit

Permalink
prepare_tempfile_object(): new function, extracted from create_tempfi…
Browse files Browse the repository at this point in the history
…le()

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>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed Aug 10, 2015
1 parent 1a9d15d commit 7eba6ce
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions tempfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,33 +85,39 @@ 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);
atexit(remove_tempfiles_on_exit);
}

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);
Expand Down

0 comments on commit 7eba6ce

Please sign in to comment.