mirror of
https://github.com/troglobit/libite.git
synced 2026-10-20 11:09:33 +00:00
Fix issue with tempfile() returning EOPNOTSUPP on Azure
Turns out O_TMPFILE can fail in interesting ways when the underlying filesystem doesn't support unnamed inodes, e.g. Azure used by GitHub Actions. Here's the exact qoute from open(2): "O_TMPFILE requires support by the underlying filesystem; only a subset of Linux filesystems provide that support. In the initial implementation, support was provided in the ext2, ext3, ext4, UDF, Minix, and shmem filesystems. Support for other filesystems has subsequently been added as follows: XFS (Linux 3.15); Btrfs (Linux 3.16); F2FS (Linux 3.16); and ubifs (Linux 4.9)" This patch adds a silent fallback to tmpfile() in these cases. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
1 parent
1b6707f44e
commit
3d2a975f11
2 files changed
+14
-1
No files matched your search
+6
-1
@@ -15,6 +15,7 @@
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <paths.h>
|
||||
#include <fcntl.h> /* O_TMPFILE requires -D_GNU_SOURCE */
|
||||
#include <stdio.h> /* fdopen() */
|
||||
@@ -42,8 +43,12 @@ FILE *tempfile(void)
|
||||
oldmask = umask(0077);
|
||||
fd = open(_PATH_TMP, O_TMPFILE | O_RDWR | O_EXCL | O_CLOEXEC, S_IRUSR | S_IWUSR);
|
||||
umask(oldmask);
|
||||
if (-1 == fd)
|
||||
if (-1 == fd) {
|
||||
if (errno == EOPNOTSUPP)
|
||||
return tmpfile();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return fdopen(fd, "w+");
|
||||
#else
|
||||
|
||||
Reference in new issue
Block a user