summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libfile.h2
-rw-r--r--lib/libfile.c30
2 files changed, 31 insertions, 1 deletions
diff --git a/include/libfile.h b/include/libfile.h
index 6dbb81a241..beec7cff79 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 79054eb5ac..6dce5cbfee 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;
+}