#ifndef MATADOR_OS_HPP #define MATADOR_OS_HPP #include "matador/utils/export.hpp" #include #include namespace matador::utils::os { enum class override_env_value { KeepValue, OverrideValue }; #ifdef _WIN32 std::string error_string(unsigned long error); #endif void setenv(const char *name, const char *value, override_env_value override_value); std::string getenv(const char* name); void unsetenv(const char *name); } namespace matador::os { /// @cond MATADOR_DEV #ifdef _WIN32 MATADOR_UTILS_API extern char DIR_SEPARATOR; MATADOR_UTILS_API extern const char* DIR_SEPARATOR_STRING; #else MATADOR_UTILS_API extern char DIR_SEPARATOR; MATADOR_UTILS_API extern const char* DIR_SEPARATOR_STRING; #endif MATADOR_UTILS_API FILE* fopen(const std::string &path, const char *modes); MATADOR_UTILS_API FILE* fopen(const char *path, const char *modes); MATADOR_UTILS_API FILE* freopen(const std::string &path, const char *modes, FILE *stream); MATADOR_UTILS_API FILE* freopen(const char *path, const char *modes, FILE *stream); MATADOR_UTILS_API bool fclose(FILE *f); MATADOR_UTILS_API bool remove(const std::string &name); MATADOR_UTILS_API bool remove(const char *name); MATADOR_UTILS_API bool rename(const std::string &old_name, const std::string &new_name); MATADOR_UTILS_API bool rename(const char *old_name, const char *new_name); MATADOR_UTILS_API bool access(const std::string &path, int mode); MATADOR_UTILS_API bool access(const char *path, int mode); MATADOR_UTILS_API int dup(FILE *stream); MATADOR_UTILS_API bool mkdir(const std::string &dirname); MATADOR_UTILS_API bool mkdir(const char *dirname); MATADOR_UTILS_API bool chdir(const std::string &dirname); MATADOR_UTILS_API bool chdir(const char *dirname); MATADOR_UTILS_API bool rmdir(const std::string &dirname); MATADOR_UTILS_API bool rmdir(const char *dirname); MATADOR_UTILS_API std::string get_current_dir(); MATADOR_UTILS_API bool mkpath(const std::string &path); MATADOR_UTILS_API bool mkpath(const char *path); MATADOR_UTILS_API bool rmpath(const std::string &path); MATADOR_UTILS_API bool rmpath(const char *path); MATADOR_UTILS_API bool is_readable(const std::string &path); MATADOR_UTILS_API bool is_readable(const char *path); MATADOR_UTILS_API bool is_writable(const std::string &path); MATADOR_UTILS_API bool is_writable(const char *path); MATADOR_UTILS_API bool exists(const std::string &path); MATADOR_UTILS_API bool exists(const char *path); MATADOR_UTILS_API size_t file_size(FILE *stream); MATADOR_UTILS_API std::string build_path(const std::string &a, const std::string &b); template std::string build_path(const std::string &a, const std::string &b, T& ...arg) { return build_path(build_path(a, b), arg...); } template int sprintf(char* str, size_t s, const char* format, ARGS const&... args) { #ifdef _WIN32 return sprintf_s(str, s, format, args...); #else return ::snprintf(str, s, format, args...); #endif } MATADOR_UTILS_API char* strerror(int err, char* errbuf, size_t bufsize); /// @endcond } #endif //MATADOR_OS_HPP