diff --git a/include/libfile.h b/include/libfile.h index 6dbb81a24..beec7cff7 100644 --- a/include/libfile.h +++ b/include/libfile.h @@ -28,4 +28,6 @@ int unlink_recursive(const char *path, char **failedpath); char *make_temp(const char *template); +int cache_file(const char *path, char **newpath); + #endif /* __LIBFILE_H */ diff --git a/lib/libfile.c b/lib/libfile.c index 79054eb5a..6dce5cbfe 100644 --- a/lib/libfile.c +++ b/lib/libfile.c @@ -496,7 +496,7 @@ int open_and_lseek(const char *filename, int mode, loff_t pos) * create a unique filename. * * Return: This function returns a filename which can be used as a temporary - * file lateron. The returned filename must be freed by the caller. + * file later on. The returned filename must be freed by the caller. */ char *make_temp(const char *template) { @@ -512,3 +512,31 @@ char *make_temp(const char *template) return name; } + +/** + * cache_file - Cache a file in /tmp + * @path: The file to cache + * @newpath: The return path where the file is copied to + * + * This function copies a given file to /tmp and returns its name in @newpath. + * @newpath is dynamically allocated and must be freed by the caller. + * + * Return: 0 for success, negative error code otherwise. + */ +int cache_file(const char *path, char **newpath) +{ + char *npath; + int ret; + + npath = make_temp("filecache"); + + ret = copy_file(path, npath, 0); + if (ret) { + free(npath); + return ret; + } + + *newpath = npath; + + return 0; +}