From a712364d493ca564fcfd28e4eb04236f6cb89cae Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Wed, 6 Oct 2021 18:05:45 +0200 Subject: [PATCH] tempfile(): use same fallback also when O_TMPFILE is missing Signed-off-by: Joachim Wiberg --- src/tempfile.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/tempfile.c b/src/tempfile.c index 5c5f106..751311a 100644 --- a/src/tempfile.c +++ b/src/tempfile.c @@ -29,6 +29,18 @@ #include /* mkostemp() */ #include /* umask() */ +static FILE *fallback(void) +{ + char nm[15] = _PATH_TMP "XXXXXXXX"; + int fd; + + fd = mkostemp(nm, O_CLOEXEC); + if (-1 == fd) + return NULL; + + return fdopen(fd, "w+"); +} + /** * A secure tmpfile() replacement * @@ -54,19 +66,15 @@ FILE *tempfile(void) fd = open(_PATH_TMP, O_TMPFILE | O_RDWR | O_EXCL | O_CLOEXEC, S_IRUSR | S_IWUSR); umask(oldmask); if (-1 == fd) { - if (errno == EOPNOTSUPP) { - char nm[15] = _PATH_TMP "XXXXXXXX"; + if (errno == EOPNOTSUPP) + return fallback(); - fd = mkostemp(nm, O_CLOEXEC); - if (-1 == fd) - return NULL; - } else - return NULL; + return NULL; } return fdopen(fd, "w+"); #else - return tmpfile(); /* Fallback on older GLIBC/Linux and actual UNIX systems */ + return fallback(); #endif }