◐ Shell
clean mode source ↗

src: workaround AIX libc++ std::filesystem bug · nodejs/node@ad9a290

Original file line numberDiff line numberDiff line change

@@ -1737,7 +1737,15 @@ static void RmSync(const FunctionCallbackInfo<Value>& args) {

17371737

} else if (error == std::errc::not_a_directory) {

17381738

std::string message = "Not a directory: " + file_path_str;

17391739

return env->ThrowErrnoException(ENOTDIR, "rm", message.c_str(), path_c_str);

1740+

#ifdef _AIX

1741+

} else if (error == std::errc::permission_denied ||

1742+

error == std::errc::file_exists) {

1743+

// Workaround for clang libc++ bug on AIX: std::filesystem::remove_all()

1744+

// incorrectly returns EEXIST (17) instead of EACCES (13) for permission

1745+

// errors when trying to remove directories without proper permissions.

1746+

#else

17401747

} else if (error == std::errc::permission_denied) {

1748+

#endif

17411749

std::string message = "Permission denied: " + file_path_str;

17421750

return env->ThrowErrnoException(

17431751

permission_denied_error, "rm", message.c_str(), path_c_str);