]> git.cameronkatri.com Git - mandoc.git/commitdiff
Two minor improvements:
authorIngo Schwarze <schwarze@openbsd.org>
Sun, 19 Sep 2021 15:02:55 +0000 (15:02 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Sun, 19 Sep 2021 15:02:55 +0000 (15:02 +0000)
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

index 296bfd42becfc9b5fa60b5bf61bdd6cb69ddcfcc..c2edfcb1927ba14b5d9c2bf7cff677906e5dbe0d 100644 (file)
@@ -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 <schwarze@openbsd.org>
+ * Copyright (c) 2015, 2021 Ingo Schwarze <schwarze@openbsd.org>
  *
  * 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;