mirror of
https://github.com/troglobit/libite.git
synced 2026-10-01 05:22:34 +07: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:
@@ -4,6 +4,14 @@ Change Log
|
||||
All notable changes to the project are documented in this file.
|
||||
|
||||
|
||||
[v2.4.1][UNRELEASED]
|
||||
-----------------------
|
||||
|
||||
### Changes
|
||||
### Fixes
|
||||
- Fix issue with `tempfile()` returning EOPNOTSUPP on Azure
|
||||
|
||||
|
||||
[v2.4.0][] - 2021-03-27
|
||||
-----------------------
|
||||
|
||||
|
||||
+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