106 lines
3.0 KiB
C++
106 lines
3.0 KiB
C++
#ifndef MATADOR_OS_HPP
|
|
#define MATADOR_OS_HPP
|
|
|
|
#include "matador/utils/export.hpp"
|
|
|
|
#include <cstdio>
|
|
#include <string>
|
|
|
|
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 <typename ...T>
|
|
std::string build_path(const std::string &a, const std::string &b, T& ...arg)
|
|
{
|
|
return build_path(build_path(a, b), arg...);
|
|
}
|
|
|
|
template<typename... ARGS>
|
|
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
|