diff --git a/kernel/io.cc b/kernel/io.cc index 5331e2ed8..d5d2994b2 100644 --- a/kernel/io.cc +++ b/kernel/io.cc @@ -247,7 +247,7 @@ std::string make_temp_dir(std::string template_str) #endif } -bool check_directory_exists(const std::string& dirname) +bool check_is_directory(const std::string& dirname) { #if defined(_WIN32) struct _stat info; @@ -267,17 +267,26 @@ bool check_directory_exists(const std::string& dirname) } #ifdef _WIN32 -bool check_file_exists(std::string filename, bool) +bool check_accessible(const std::string& filename, bool) { return _access(filename.c_str(), 0) == 0; } #else -bool check_file_exists(std::string filename, bool is_exec) +bool check_accessible(const std::string& filename, bool is_exec) { return access(filename.c_str(), is_exec ? X_OK : F_OK) == 0; } #endif +bool check_file_exists(const std::string& filename, bool is_exec) +{ + return check_accessible(filename, is_exec) && !check_is_directory(filename); +} +bool check_directory_exists(const std::string& filename, bool is_exec) +{ + return check_accessible(filename, is_exec) && check_is_directory(filename); +} + bool is_absolute_path(std::string filename) { #ifdef _WIN32 diff --git a/kernel/io.h b/kernel/io.h index b21d4d9c8..91699d775 100644 --- a/kernel/io.h +++ b/kernel/io.h @@ -64,6 +64,23 @@ inline std::string stringf(const char *fmt, ...) return string; } +int readsome(std::istream &f, char *s, int n); +std::string next_token(std::string &text, const char *sep = " \t\r\n", bool long_strings = false); +std::vector split_tokens(const std::string &text, const char *sep = " \t\r\n"); +bool patmatch(const char *pattern, const char *string); +#if !defined(YOSYS_DISABLE_SPAWN) +int run_command(const std::string &command, std::function process_line = std::function()); +#endif +std::string get_base_tmpdir(); +std::string make_temp_file(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX"); +std::string make_temp_dir(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX"); +bool check_file_exists(const std::string& filename, bool is_exec = false); +bool check_directory_exists(const std::string& dirname, bool is_exec = false); +bool is_absolute_path(std::string filename); +void remove_directory(std::string dirname); +bool create_directory(const std::string& dirname); +std::string escape_filename_spaces(const std::string& filename); + YOSYS_NAMESPACE_END #endif // YOSYS_IO_H diff --git a/kernel/yosys.cc b/kernel/yosys.cc index 60b1bef4d..7d0d688fc 100644 --- a/kernel/yosys.cc +++ b/kernel/yosys.cc @@ -556,29 +556,29 @@ void init_share_dirname() std::string proc_self_path = proc_self_dirname(); # if defined(_WIN32) && !defined(YOSYS_WIN32_UNIX_DIR) std::string proc_share_path = proc_self_path + "share\\"; - if (check_file_exists(proc_share_path, true)) { + if (check_directory_exists(proc_share_path, true)) { yosys_share_dirname = proc_share_path; return; } proc_share_path = proc_self_path + "..\\share\\"; - if (check_file_exists(proc_share_path, true)) { + if (check_directory_exists(proc_share_path, true)) { yosys_share_dirname = proc_share_path; return; } # else std::string proc_share_path = proc_self_path + "share/"; - if (check_file_exists(proc_share_path, true)) { + if (check_directory_exists(proc_share_path, true)) { yosys_share_dirname = proc_share_path; return; } proc_share_path = proc_self_path + "../share/" + proc_program_prefix()+ "yosys/"; - if (check_file_exists(proc_share_path, true)) { + if (check_directory_exists(proc_share_path, true)) { yosys_share_dirname = proc_share_path; return; } # ifdef YOSYS_DATDIR proc_share_path = YOSYS_DATDIR "/"; - if (check_file_exists(proc_share_path, true)) { + if (check_directory_exists(proc_share_path, true)) { yosys_share_dirname = proc_share_path; return; } diff --git a/kernel/yosys_common.h b/kernel/yosys_common.h index 16215fb76..e84676bc0 100644 --- a/kernel/yosys_common.h +++ b/kernel/yosys_common.h @@ -252,23 +252,6 @@ inline void memhasher() { if (memhasher_active) memhasher_do(); } void yosys_banner(); int ceil_log2(int x) YS_ATTRIBUTE(const); -int readsome(std::istream &f, char *s, int n); -std::string next_token(std::string &text, const char *sep = " \t\r\n", bool long_strings = false); -std::vector split_tokens(const std::string &text, const char *sep = " \t\r\n"); -bool patmatch(const char *pattern, const char *string); -#if !defined(YOSYS_DISABLE_SPAWN) -int run_command(const std::string &command, std::function process_line = std::function()); -#endif -std::string get_base_tmpdir(); -std::string make_temp_file(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX"); -std::string make_temp_dir(std::string template_str = get_base_tmpdir() + "/yosys_XXXXXX"); -bool check_file_exists(std::string filename, bool is_exec = false); -bool check_directory_exists(const std::string& dirname); -bool is_absolute_path(std::string filename); -void remove_directory(std::string dirname); -bool create_directory(const std::string& dirname); -std::string escape_filename_spaces(const std::string& filename); - template int GetSize(const T &obj) { return obj.size(); } inline int GetSize(RTLIL::Wire *wire);