[libglnx: 1/2] Add glnx_open_anonymous_tmpfile_full() allowing you to specify the directory



commit e8233c6356ea5c27cf376c157344a1ff47843a57
Author: Alexander Larsson <alexl redhat com>
Date:   Wed Oct 9 14:56:11 2019 +0200

    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.

 glnx-fdio.c | 29 +++++++++++++++++++++++------
 glnx-fdio.h |  7 +++++++
 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
@@ -83,6 +83,13 @@ glnx_open_anonymous_tmpfile (int flags,
                              GLnxTmpfile *out_tmpf,
                              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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]