From da18dde44e7ed710106dba929c6d3e23d85e4666 Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Sun, 19 Sep 2021 15:02:55 +0000 Subject: Two minor improvements: 1. If mktemp(3) fails, do not overwrite the errno because all errors mktemp(3) might return are also valid for mkdtemp(3). 2. If mkdir(2) fails, always put back the Xes, even if the error is fatal and the function is about to return NULL. --- compat_mkdtemp.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/compat_mkdtemp.c b/compat_mkdtemp.c index 296bfd42..c2edfcb1 100644 --- a/compat_mkdtemp.c +++ b/compat_mkdtemp.c @@ -1,6 +1,6 @@ -/* $Id: compat_mkdtemp.c,v 1.3 2020/06/15 01:37:15 schwarze Exp $ */ +/* $Id: compat_mkdtemp.c,v 1.4 2021/09/19 15:02:55 schwarze Exp $ */ /* - * Copyright (c) 2015 Ingo Schwarze + * Copyright (c) 2015, 2021 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -36,16 +36,14 @@ mkdtemp(char *path) start--; for (tries = INT_MAX; tries; tries--) { - if (mktemp(path) == NULL) { - errno = EEXIST; + if (mktemp(path) == NULL) return NULL; - } if (mkdir(path, S_IRUSR | S_IWUSR | S_IXUSR) == 0) return path; - if (errno != EEXIST) - return NULL; for (cp = start; *cp != '\0'; cp++) *cp = 'X'; + if (errno != EEXIST) + return NULL; } errno = EEXIST; return NULL; -- cgit v1.2.3-56-ge451