summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2019-10-09 14:56:11 +0200
committerAlexander Larsson <alexl@redhat.com>2019-10-09 14:56:11 +0200
commite8233c6356ea5c27cf376c157344a1ff47843a57 (patch)
tree97918f104b1c1aab75baa937104fcae1fee9cd57
parent15c06468804014fc49f6f340132930703f919b19 (diff)
downloadlibglnx-e8233c6356ea5c27cf376c157344a1ff47843a57.tar.gz
Add glnx_open_anonymous_tmpfile_full() allowing you to specify the directory
This is useful if you need the file to be on a particular filesystem. In particular, flatpak wants this to make tempfiles on /tmp for things we need to write during flatpak run, such as the libseccomp output fd. We've had "flatpak run" stop working in low disk situations without this, so its nice to be able to fix it.
-rw-r--r--glnx-fdio.c29
-rw-r--r--glnx-fdio.h7
2 files changed, 30 insertions, 6 deletions
diff --git a/glnx-fdio.c b/glnx-fdio.c
index 7b734ff..1dc5ffd 100644
--- a/glnx-fdio.c
+++ b/glnx-fdio.c
@@ -277,17 +277,19 @@ glnx_open_tmpfile_linkable_at (int dfd,
return open_tmpfile_core (dfd, subpath, flags, out_tmpf, error);
}
+
/* A variant of `glnx_open_tmpfile_linkable_at()` which doesn't support linking.
- * Useful for true temporary storage. The fd will be allocated in /var/tmp to
- * ensure maximum storage space.
+ * Useful for true temporary storage. The fd will be allocated in the specified
+ * directory.
*/
gboolean
-glnx_open_anonymous_tmpfile (int flags,
- GLnxTmpfile *out_tmpf,
- GError **error)
+glnx_open_anonymous_tmpfile_full (int flags,
+ const char *dir,
+ GLnxTmpfile *out_tmpf,
+ GError **error)
{
/* Add in O_EXCL */
- if (!open_tmpfile_core (AT_FDCWD, "/var/tmp", flags | O_EXCL, out_tmpf, error))
+ if (!open_tmpfile_core (AT_FDCWD, dir, flags | O_EXCL, out_tmpf, error))
return FALSE;
if (out_tmpf->path)
{
@@ -299,6 +301,21 @@ glnx_open_anonymous_tmpfile (int flags,
return TRUE;
}
+/* A variant of `glnx_open_tmpfile_linkable_at()` which doesn't support linking.
+ * Useful for true temporary storage. The fd will be allocated in /var/tmp to
+ * ensure maximum storage space.
+ *
+ * If you need the file on a specific filesystem use glnx_open_anonymous_tmpfile_full()
+ * which lets you pass a directory.
+ */
+gboolean
+glnx_open_anonymous_tmpfile (int flags,
+ GLnxTmpfile *out_tmpf,
+ GError **error)
+{
+ return glnx_open_anonymous_tmpfile_full (flags, "/var/tmp", out_tmpf, error);
+}
+
/* Use this after calling glnx_open_tmpfile_linkable_at() to give
* the file its final name (link into place).
*/
diff --git a/glnx-fdio.h b/glnx-fdio.h
index c0a7cc1..d97ea36 100644
--- a/glnx-fdio.h
+++ b/glnx-fdio.h
@@ -84,6 +84,13 @@ glnx_open_anonymous_tmpfile (int flags,
GError **error);
gboolean
+glnx_open_anonymous_tmpfile_full (int flags,
+ const char *dir,
+ GLnxTmpfile *out_tmpf,
+ GError **error);
+
+
+gboolean
glnx_open_tmpfile_linkable_at (int dfd,
const char *subpath,
int flags,