There was a regression: $ mkdir a $ touch a/b
Calling mkpath("a/b") would return an error with EEXIST errno. This is because "a/b" is a regular file. However mkpath() should only create the leading directories of "a/b", which is "a/", which shouldn't be an error because attempting to create an already existed directory shouldn't fail. --- lib/lib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/lib.c b/lib/lib.c index dfa4499f..76726931 100644 --- a/lib/lib.c +++ b/lib/lib.c @@ -177,7 +177,8 @@ int mkpathat(int atfd, char *dir, mode_t lastmode, int flags) // not-a-directory along the way, but the last one we must explicitly // test for. Might as well do it up front. - if (!fstatat(atfd, dir, &buf, 0) && !S_ISDIR(buf.st_mode)) { + if (flags&MKPATHAT_MKLAST && !fstatat(atfd, dir, &buf, 0) + && !S_ISDIR(buf.st_mode)) { errno = EEXIST; return 1; } -- 2.30.0.478.g8a0d178c01-goog _______________________________________________ Toybox mailing list Toybox@lists.landley.net http://lists.landley.net/listinfo.cgi/toybox-landley.net