From: Michael Haggerty Date: Mon, 10 Aug 2015 09:47:44 +0000 (+0200) Subject: register_tempfile(): new function to handle an existing temporary file X-Git-Tag: v2.6.0-rc0~46^2~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=99397152a345011c99497b93f8518c7981e811a5;p=thirdparty%2Fgit.git register_tempfile(): new function to handle an existing temporary file Allow an existing file to be registered with the tempfile-handling infrastructure; in particular, arrange for it to be deleted on program exit. This can be used if the temporary file has to be created in a more complicated way than just open(). For example: * If the file itself needs to be created via the lockfile API * If it is not a regular file (e.g., a socket) Signed-off-by: Michael Haggerty Signed-off-by: Junio C Hamano --- diff --git a/tempfile.c b/tempfile.c index 0b5d8ce929..0af7ebf016 100644 --- a/tempfile.c +++ b/tempfile.c @@ -137,6 +137,14 @@ int create_tempfile(struct tempfile *tempfile, const char *path) return tempfile->fd; } +void register_tempfile(struct tempfile *tempfile, const char *path) +{ + prepare_tempfile_object(tempfile); + strbuf_add_absolute_path(&tempfile->filename, path); + tempfile->owner = getpid(); + tempfile->active = 1; +} + int mks_tempfile_sm(struct tempfile *tempfile, const char *template, int suffixlen, int mode) { diff --git a/tempfile.h b/tempfile.h index a30e12c7e5..4219fe41bd 100644 --- a/tempfile.h +++ b/tempfile.h @@ -92,6 +92,14 @@ struct tempfile { */ extern int create_tempfile(struct tempfile *tempfile, const char *path); +/* + * Register an existing file as a tempfile, meaning that it will be + * deleted when the program exits. The tempfile is considered closed, + * but it can be worked with like any other closed tempfile (for + * example, it can be opened using reopen_tempfile()). + */ +extern void register_tempfile(struct tempfile *tempfile, const char *path); + /* * mks_tempfile functions