diff --git a/CMakeLists.txt b/CMakeLists.txt index a1364ff..c08f75a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,9 @@ add_subdirectory(3party/fmt EXCLUDE_FROM_ALL) target_include_directories(sled PUBLIC 3party/eigen) target_sources( sled - PRIVATE src/log/log.cc + PRIVATE + src/filesystem/path.cc + src/log/log.cc src/network/async_resolver.cc src/network/ip_address.cc src/network/null_socket_server.cc diff --git a/include/sled/filesystem/path.h b/include/sled/filesystem/path.h new file mode 100644 index 0000000..b229d73 --- /dev/null +++ b/include/sled/filesystem/path.h @@ -0,0 +1,24 @@ +#pragma once +#ifndef SLED_FILESYSTEM_PATH_H +#define SLED_FILESYSTEM_PATH_H + +#include + +namespace sled { +class Path { +public: + // cwd = current working directory + static Path Current(); + static Path Home(); + static Path TempDir(); + + Path(); + Path(const std::string &path); + + std::string ToString() const { return path_; }; + +private: + std::string path_; +}; +}// namespace sled +#endif// SLED_FILESYSTEM_PATH_H diff --git a/include/sled/filesystem/temporary_file.h b/include/sled/filesystem/temporary_file.h new file mode 100644 index 0000000..ea9e616 --- /dev/null +++ b/include/sled/filesystem/temporary_file.h @@ -0,0 +1,13 @@ +#pragma once +#ifndef SLED_FILESYSTEM_TEMPORARY_FILE_H +#define SLED_FILESYSTEM_TEMPORARY_FILE_H + +#include + +namespace sled { +class TemporaryFile { + TemporaryFile(); + TemporaryFile(const std::string &tmp_dir); +}; +}// namespace sled +#endif// SLED_FILESYSTEM_TEMPORARY_FILE_H diff --git a/src/filesystem/path.cc b/src/filesystem/path.cc new file mode 100644 index 0000000..a1dcc52 --- /dev/null +++ b/src/filesystem/path.cc @@ -0,0 +1,46 @@ +#include "sled/filesystem/path.h" +#include "sled/log/log.h" +#include +#include + +namespace sled { +Path +Path::Current() +{ + char tmp_path[PATH_MAX]; + if (getcwd(tmp_path, PATH_MAX)) { + auto cwd = Path(tmp_path); + return cwd; + } + + LOGE("Path", "getcwd failed: {}", strerror(errno)); + + return Path(); +} + +Path +Path::Home() +{ + char *home = getenv("HOME"); + if (home) { + return Path(home); + } else { + return Path(); + } +} + +Path +Path::TempDir() +{ + char *tmp = getenv("TMPDIR"); + if (tmp) { + return Path(tmp); + } else { + return Path("/tmp/"); + } +} + +Path::Path() {} + +Path::Path(const std::string &path) : path_(path) {} +}// namespace sled