/
dieoska
/
ddnet
Обзор
Документация
Войти
/
dieoska
/
ddnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/base/fs.cpp
77 строк
2 KB
Robert Müller
Move Windows-specific system functions to `base/windows.cpp/h`
03 дек 2025, 23:00
03 дек 2025, 23:00
557b59b
Код
Авторство
О чём код?
#include <base/fs.h> #include <base/log.h> #include <base/system.h> #include <base/types.h> #include <base/windows.h> #include <cerrno> #include <cstring> #if defined(CONF_FAMILY_UNIX) #include <sys/stat.h> #include <unistd.h> #elif defined(CONF_FAMILY_WINDOWS) #include <io.h> #include <windows.h> #include <string> #else #error NOT IMPLEMENTED #endif int fs_makedir(const char *path) { #if defined(CONF_FAMILY_WINDOWS) const std::wstring wide_path = windows_utf8_to_wide(path); if(CreateDirectoryW(wide_path.c_str(), nullptr) != 0) { return 0; } const DWORD error = GetLastError(); if(error == ERROR_ALREADY_EXISTS) { return 0; } log_error("filesystem", "Failed to create folder '%s' (%ld '%s')", path, error, windows_format_system_message(error).c_str()); return -1; #else #if defined(CONF_PLATFORM_HAIKU) if(fs_is_dir(path)) { return 0; } #endif if(mkdir(path, 0755) == 0 || errno == EEXIST) { return 0; } log_error("filesystem", "Failed to create folder '%s' (%d '%s')", path, errno, strerror(errno)); return -1; #endif } int fs_removedir(const char *path) { #if defined(CONF_FAMILY_WINDOWS) const std::wstring wide_path = windows_utf8_to_wide(path); if(RemoveDirectoryW(wide_path.c_str()) != 0) { return 0; } const DWORD error = GetLastError(); if(error == ERROR_FILE_NOT_FOUND) { return 0; } log_error("filesystem", "Failed to remove folder '%s' (%ld '%s')", path, error, windows_format_system_message(error).c_str()); return -1; #else if(rmdir(path) == 0 || errno == ENOENT) { return 0; } log_error("filesystem", "Failed to remove folder '%s' (%d '%s')", path, errno, strerror(errno)); return -1; #endif }