* lib/mkdir-p.c (make_dir_parents): If mkdir fails with ENOENT or
ENOTDIR, do not attempt anything else since the file does not exist.
Treat ENOENT and ENOTDIR consistently later, too.
2025-07-22 Paul Eggert <eggert@cs.ucla.edu>
+ mkdir-p: ENOENT/ENOTDIR safety and consistency
+ * lib/mkdir-p.c (make_dir_parents): If mkdir fails with ENOENT or
+ ENOTDIR, do not attempt anything else since the file does not exist.
+ Treat ENOENT and ENOTDIR consistently later, too.
+
mkdir-p: better diagnostics
Problem reported by Lauri Tirkkonen <https://bugs.gnu.org/79072>.
* lib/mkdir-p.c (make_dir_parents):
mkdir_mode = -1;
}
- if (preserve_existing)
+ if (mkdir_errno == ENOENT || mkdir_errno == ENOTDIR)
+ ;
+ else if (preserve_existing)
{
if (mkdir_errno == 0)
return true;
- if (mkdir_errno != ENOENT && make_ancestor)
+ if (make_ancestor)
{
struct stat st;
if (stat (dir + prefix_len, &st) == 0)
return true;
if (mkdir_errno == 0
- || (mkdir_errno != ENOENT && make_ancestor
- && errno != ENOTDIR))
+ || (make_ancestor && errno != ENOENT && errno != ENOTDIR))
{
error (0, errno,
_(keep_owner