[Windows] Fix windows is_path_invalid, and apply it to directory creation.

(cherry picked from commit be8f60a78d)
This commit is contained in:
bruvzg 2024-02-09 10:47:07 +02:00 committed by Rémi Verschelde
parent dea652d9a2
commit 1e55de9b8b
No known key found for this signature in database
GPG Key ID: C3336907360768E1
3 changed files with 11 additions and 7 deletions

View File

@ -31,6 +31,7 @@
#if defined(WINDOWS_ENABLED)
#include "dir_access_windows.h"
#include "file_access_windows.h"
#include "core/config/project_settings.h"
#include "core/os/memory.h"
@ -177,6 +178,13 @@ Error DirAccessWindows::make_dir(String p_dir) {
p_dir = fix_path(p_dir);
}
if (FileAccessWindows::is_path_invalid(p_dir)) {
#ifdef DEBUG_ENABLED
WARN_PRINT("The path :" + p_dir + " is a reserved Windows system pipe, so it can't be used for creating directories.");
#endif
return ERR_INVALID_PARAMETER;
}
p_dir = p_dir.simplify_path().replace("/", "\\");
bool success;

View File

@ -60,12 +60,7 @@ void FileAccessWindows::check_errors() const {
bool FileAccessWindows::is_path_invalid(const String &p_path) {
// Check for invalid operating system file.
String fname = p_path;
int dot = fname.find(".");
if (dot != -1) {
fname = fname.substr(0, dot);
}
fname = fname.to_lower();
String fname = p_path.get_file().get_basename().to_lower();
return invalid_files.has(fname);
}

View File

@ -50,10 +50,11 @@ class FileAccessWindows : public FileAccess {
void _close();
static bool is_path_invalid(const String &p_path);
static HashSet<String> invalid_files;
public:
static bool is_path_invalid(const String &p_path);
virtual String fix_path(const String &p_path) const override;
virtual Error open_internal(const String &p_path, int p_mode_flags) override; ///< open a file
virtual bool is_open() const override; ///< true when file is open