Mercurial > gnulib
changeset 40025:d80a47eca286
mkdir-p: improve diagnostic for FUSE mounts
Problem reported by Niklas Hambüchen in:
https://lists.gnu.org/r/bug-gnulib/2018-12/msg00074.html
* lib/mkdir-p.c (make_dir_parents): In diagnostic, prefer stat
errno to mkdir errno if the stat errno is likely more interesting.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 14 Dec 2018 16:25:13 -0800 |
parents | 493211f9fd3d |
children | c51e38088432 |
files | ChangeLog lib/mkdir-p.c |
diffstat | 2 files changed, 24 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Fri Dec 14 23:08:10 2018 +0100 +++ b/ChangeLog Fri Dec 14 16:25:13 2018 -0800 @@ -1,3 +1,11 @@ +2018-12-14 Paul Eggert <eggert@cs.ucla.edu> + + mkdir-p: improve diagnostic for FUSE mounts + Problem reported by Niklas Hambüchen in: + https://lists.gnu.org/r/bug-gnulib/2018-12/msg00074.html + * lib/mkdir-p.c (make_dir_parents): In diagnostic, prefer stat + errno to mkdir errno if the stat errno is likely more interesting. + 2018-12-14 Bruno Haible <bruno@clisp.org> hash-map: Add tests.
--- a/lib/mkdir-p.c Fri Dec 14 23:08:10 2018 +0100 +++ b/lib/mkdir-p.c Fri Dec 14 16:25:13 2018 -0800 @@ -146,12 +146,23 @@ if (preserve_existing) { - struct stat st; - if (mkdir_errno == 0 - || (mkdir_errno != ENOENT && make_ancestor - && stat (dir + prefix_len, &st) == 0 - && S_ISDIR (st.st_mode))) + if (mkdir_errno == 0) return true; + if (mkdir_errno != ENOENT && make_ancestor) + { + struct stat st; + if (stat (dir + prefix_len, &st) == 0) + { + if (S_ISDIR (st.st_mode)) + return true; + } + else if (mkdir_errno == EEXIST + && errno != ENOENT && errno != ENOTDIR) + { + error (0, errno, _("cannot stat %s"), quote (dir)); + return false; + } + } } else {