query/include/matador/utils/os.hpp

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