Update and rename some Utils::FileSystem functions

Replace boost::filesystem::is_directory
with    Utils::FileSystem::isDirectory

Replace boost::filesystem::is_regular_file
with    Utils::FileSystem::isRegularFile

Replace boost::filesystem::is_symlink
with    Utils::FileSystem::isSymlink

Replace boost::filesystem::exists
with    Utils::FileSystem::exists

Replace boost::filesystem::create_directory
with    Utils::FileSystem::createDirectory

Replace boost::filesystem::remove
with    Utils::FileSystem::removeFile
This commit is contained in:
Tomas Jakobsson 2018-01-09 23:55:09 +01:00
parent 96a0fa3a14
commit c1f8e7294c
19 changed files with 244 additions and 187 deletions

View file

@ -1,6 +1,7 @@
#include "CollectionSystemManager.h" #include "CollectionSystemManager.h"
#include "guis/GuiInfoPopup.h" #include "guis/GuiInfoPopup.h"
#include "utils/FileSystemUtil.h"
#include "utils/StringUtil.h" #include "utils/StringUtil.h"
#include "views/gamelist/IGameListView.h" #include "views/gamelist/IGameListView.h"
#include "views/ViewController.h" #include "views/ViewController.h"
@ -50,8 +51,8 @@ CollectionSystemManager::CollectionSystemManager(Window* window) : mWindow(windo
mCollectionEnvData->mPlatformIds = allPlatformIds; mCollectionEnvData->mPlatformIds = allPlatformIds;
std::string path = getCollectionsFolder(); std::string path = getCollectionsFolder();
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
boost::filesystem::create_directory(path); Utils::FileSystem::createDirectory(path);
mIsEditingCustom = false; mIsEditingCustom = false;
mEditingCollection = "Favorites"; mEditingCollection = "Favorites";
@ -332,7 +333,7 @@ bool CollectionSystemManager::isThemeCustomCollectionCompatible(std::vector<std:
if(set != themeSets.cend()) if(set != themeSets.cend())
{ {
std::string defaultThemeFilePath = set->second.path.string() + "/theme.xml"; std::string defaultThemeFilePath = set->second.path.string() + "/theme.xml";
if (boost::filesystem::exists(defaultThemeFilePath)) if (Utils::FileSystem::exists(defaultThemeFilePath))
{ {
return true; return true;
} }
@ -722,7 +723,7 @@ void CollectionSystemManager::populateCustomCollection(CollectionSystemData* sys
CollectionSystemDecl sysDecl = sysData->decl; CollectionSystemDecl sysDecl = sysData->decl;
std::string path = getCustomCollectionConfigPath(newSys->getName()); std::string path = getCustomCollectionConfigPath(newSys->getName());
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
{ {
LOG(LogInfo) << "Couldn't find custom collection config file at " << path; LOG(LogInfo) << "Couldn't find custom collection config file at " << path;
return; return;
@ -829,7 +830,7 @@ std::vector<std::string> CollectionSystemManager::getSystemsFromConfig()
std::vector<std::string> systems; std::vector<std::string> systems;
std::string path = SystemData::getConfigPath(false); std::string path = SystemData::getConfigPath(false);
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
{ {
return systems; return systems;
} }
@ -882,18 +883,18 @@ std::vector<std::string> CollectionSystemManager::getSystemsFromTheme()
boost::filesystem::path themePath = set->second.path; boost::filesystem::path themePath = set->second.path;
if (boost::filesystem::exists(themePath)) if (Utils::FileSystem::exists(themePath.generic_string()))
{ {
boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end
for (boost::filesystem::directory_iterator itr(themePath); itr != end_itr; ++itr) for (boost::filesystem::directory_iterator itr(themePath); itr != end_itr; ++itr)
{ {
if (boost::filesystem::is_directory(itr->status())) if (Utils::FileSystem::isDirectory(itr->path().generic_string()))
{ {
//... here you have a directory //... here you have a directory
std::string folder = itr->path().string(); std::string folder = itr->path().string();
folder = folder.substr(themePath.string().size()+1); folder = folder.substr(themePath.string().size()+1);
if(boost::filesystem::exists(set->second.getThemePath(folder))) if(Utils::FileSystem::exists(set->second.getThemePath(folder).generic_string()))
{ {
systems.push_back(folder); systems.push_back(folder);
} }
@ -942,12 +943,12 @@ std::vector<std::string> CollectionSystemManager::getCollectionsFromConfigFolder
std::vector<std::string> systems; std::vector<std::string> systems;
boost::filesystem::path configPath = getCollectionsFolder(); boost::filesystem::path configPath = getCollectionsFolder();
if (boost::filesystem::exists(configPath)) if (Utils::FileSystem::exists(configPath.generic_string()))
{ {
boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end boost::filesystem::directory_iterator end_itr; // default construction yields past-the-end
for (boost::filesystem::directory_iterator itr(configPath); itr != end_itr; ++itr) for (boost::filesystem::directory_iterator itr(configPath); itr != end_itr; ++itr)
{ {
if (boost::filesystem::is_regular_file(itr->status())) if (Utils::FileSystem::isRegularFile(itr->path().generic_string()))
{ {
// it's a file // it's a file
std::string file = itr->path().string(); std::string file = itr->path().string();

View file

@ -1,5 +1,6 @@
#include "FileData.h" #include "FileData.h"
#include "utils/FileSystemUtil.h"
#include "utils/StringUtil.h" #include "utils/StringUtil.h"
#include "utils/TimeUtil.h" #include "utils/TimeUtil.h"
#include "AudioManager.h" #include "AudioManager.h"
@ -12,7 +13,6 @@
#include "Util.h" #include "Util.h"
#include "VolumeControl.h" #include "VolumeControl.h"
#include "Window.h" #include "Window.h"
#include <boost/filesystem/operations.hpp>
FileData::FileData(FileType type, const boost::filesystem::path& path, SystemEnvironmentData* envData, SystemData* system) FileData::FileData(FileType type, const boost::filesystem::path& path, SystemEnvironmentData* envData, SystemData* system)
: mType(type), mPath(path), mSystem(system), mEnvData(envData), mSourceFileData(NULL), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor! : mType(type), mPath(path), mSystem(system), mEnvData(envData), mSourceFileData(NULL), mParent(NULL), metadata(type == GAME ? GAME_METADATA : FOLDER_METADATA) // metadata is REALLY set in the constructor!
@ -66,7 +66,7 @@ const std::string FileData::getThumbnailPath() const
if(thumbnail.empty()) if(thumbnail.empty())
{ {
std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i]; std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i];
if(boost::filesystem::exists(path)) if(Utils::FileSystem::exists(path))
thumbnail = path; thumbnail = path;
} }
} }
@ -109,7 +109,7 @@ const std::string FileData::getVideoPath() const
if(video.empty()) if(video.empty())
{ {
std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-video.mp4"; std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-video.mp4";
if(boost::filesystem::exists(path)) if(Utils::FileSystem::exists(path))
video = path; video = path;
} }
@ -129,7 +129,7 @@ const std::string FileData::getMarqueePath() const
if(marquee.empty()) if(marquee.empty())
{ {
std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-marquee" + extList[i]; std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-marquee" + extList[i];
if(boost::filesystem::exists(path)) if(Utils::FileSystem::exists(path))
marquee = path; marquee = path;
} }
} }
@ -151,7 +151,7 @@ const std::string FileData::getImagePath() const
if(image.empty()) if(image.empty())
{ {
std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i]; std::string path = mEnvData->mStartPath + "/images/" + getDisplayName() + "-image" + extList[i];
if(boost::filesystem::exists(path)) if(Utils::FileSystem::exists(path))
image = path; image = path;
} }
} }

View file

@ -1,5 +1,6 @@
#include "Gamelist.h" #include "Gamelist.h"
#include "utils/FileSystemUtil.h"
#include "FileData.h" #include "FileData.h"
#include "FileFilterIndex.h" #include "FileFilterIndex.h"
#include "Log.h" #include "Log.h"
@ -87,7 +88,7 @@ void parseGamelist(SystemData* system)
bool trustGamelist = Settings::getInstance()->getBool("ParseGamelistOnly"); bool trustGamelist = Settings::getInstance()->getBool("ParseGamelistOnly");
std::string xmlpath = system->getGamelistPath(false); std::string xmlpath = system->getGamelistPath(false);
if(!boost::filesystem::exists(xmlpath)) if(!Utils::FileSystem::exists(xmlpath))
return; return;
LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"..."; LOG(LogInfo) << "Parsing XML file \"" << xmlpath << "\"...";
@ -120,7 +121,7 @@ void parseGamelist(SystemData* system)
{ {
boost::filesystem::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false); boost::filesystem::path path = resolvePath(fileNode.child("path").text().get(), relativeTo, false);
if(!trustGamelist && !boost::filesystem::exists(path)) if(!trustGamelist && !Utils::FileSystem::exists(path.generic_string()))
{ {
LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring."; LOG(LogWarning) << "File \"" << path << "\" does not exist! Ignoring.";
continue; continue;
@ -183,7 +184,7 @@ void updateGamelist(SystemData* system)
pugi::xml_node root; pugi::xml_node root;
std::string xmlReadPath = system->getGamelistPath(false); std::string xmlReadPath = system->getGamelistPath(false);
if(boost::filesystem::exists(xmlReadPath)) if(Utils::FileSystem::exists(xmlReadPath))
{ {
//parse an existing file first //parse an existing file first
pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str());
@ -241,7 +242,7 @@ void updateGamelist(SystemData* system)
boost::filesystem::path nodePath = resolvePath(pathNode.text().get(), system->getStartPath(), true); boost::filesystem::path nodePath = resolvePath(pathNode.text().get(), system->getStartPath(), true);
boost::filesystem::path gamePath((*fit)->getPath()); boost::filesystem::path gamePath((*fit)->getPath());
if(nodePath == gamePath || (boost::filesystem::exists(nodePath) && boost::filesystem::exists(gamePath) && boost::filesystem::equivalent(nodePath, gamePath))) if(nodePath == gamePath || (Utils::FileSystem::exists(nodePath.generic_string()) && Utils::FileSystem::exists(gamePath.generic_string()) && boost::filesystem::equivalent(nodePath, gamePath)))
{ {
// found it // found it
root.remove_child(fileNode); root.remove_child(fileNode);
@ -259,7 +260,7 @@ void updateGamelist(SystemData* system)
if (numUpdated > 0) { if (numUpdated > 0) {
//make sure the folders leading up to this path exist (or the write will fail) //make sure the folders leading up to this path exist (or the write will fail)
boost::filesystem::path xmlWritePath(system->getGamelistPath(true)); boost::filesystem::path xmlWritePath(system->getGamelistPath(true));
boost::filesystem::create_directories(xmlWritePath.parent_path()); Utils::FileSystem::createDirectory(xmlWritePath.parent_path().generic_string());
LOG(LogInfo) << "Added/Updated " << numUpdated << " entities in '" << xmlReadPath << "'"; LOG(LogInfo) << "Added/Updated " << numUpdated << " entities in '" << xmlReadPath << "'";

View file

@ -1,5 +1,6 @@
#include "SystemData.h" #include "SystemData.h"
#include "utils/FileSystemUtil.h"
#include "CollectionSystemManager.h" #include "CollectionSystemManager.h"
#include "FileFilterIndex.h" #include "FileFilterIndex.h"
#include "FileSorts.h" #include "FileSorts.h"
@ -82,7 +83,7 @@ bool isHidden(const boost::filesystem::path &filePath)
void SystemData::populateFolder(FileData* folder) void SystemData::populateFolder(FileData* folder)
{ {
const boost::filesystem::path& folderPath = folder->getPath(); const boost::filesystem::path& folderPath = folder->getPath();
if(!boost::filesystem::is_directory(folderPath)) if(!Utils::FileSystem::isDirectory(folderPath.generic_string()))
{ {
LOG(LogWarning) << "Error - folder with path \"" << folderPath << "\" is not a directory!"; LOG(LogWarning) << "Error - folder with path \"" << folderPath << "\" is not a directory!";
return; return;
@ -91,7 +92,7 @@ void SystemData::populateFolder(FileData* folder)
const std::string folderStr = folderPath.generic_string(); const std::string folderStr = folderPath.generic_string();
//make sure that this isn't a symlink to a thing we already have //make sure that this isn't a symlink to a thing we already have
if(boost::filesystem::is_symlink(folderPath)) if(Utils::FileSystem::isSymlink(folderPath.generic_string()))
{ {
//if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse //if this symlink resolves to somewhere that's at the beginning of our path, it's gonna recurse
if(folderStr.find(boost::filesystem::canonical(folderPath).generic_string()) == 0) if(folderStr.find(boost::filesystem::canonical(folderPath).generic_string()) == 0)
@ -132,7 +133,7 @@ void SystemData::populateFolder(FileData* folder)
} }
//add directories that also do not match an extension as folders //add directories that also do not match an extension as folders
if(!isGame && boost::filesystem::is_directory(filePath)) if(!isGame && Utils::FileSystem::isDirectory(filePath.generic_string()))
{ {
FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), mEnvData, this); FileData* newFolder = new FileData(FOLDER, filePath.generic_string(), mEnvData, this);
populateFolder(newFolder); populateFolder(newFolder);
@ -186,7 +187,7 @@ bool SystemData::loadConfig()
LOG(LogInfo) << "Loading system config file " << path << "..."; LOG(LogInfo) << "Loading system config file " << path << "...";
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
{ {
LOG(LogError) << "es_systems.cfg file does not exist!"; LOG(LogError) << "es_systems.cfg file does not exist!";
writeExampleConfig(getConfigPath(true)); writeExampleConfig(getConfigPath(true));
@ -349,7 +350,7 @@ void SystemData::deleteSystems()
std::string SystemData::getConfigPath(bool forWrite) std::string SystemData::getConfigPath(bool forWrite)
{ {
boost::filesystem::path path = getHomePath() + "/.emulationstation/es_systems.cfg"; boost::filesystem::path path = getHomePath() + "/.emulationstation/es_systems.cfg";
if(forWrite || boost::filesystem::exists(path)) if(forWrite || Utils::FileSystem::exists(path.generic_string()))
return path.generic_string(); return path.generic_string();
return "/etc/emulationstation/es_systems.cfg"; return "/etc/emulationstation/es_systems.cfg";
@ -388,13 +389,13 @@ std::string SystemData::getGamelistPath(bool forWrite) const
boost::filesystem::path filePath; boost::filesystem::path filePath;
filePath = mRootFolder->getPath() / "gamelist.xml"; filePath = mRootFolder->getPath() / "gamelist.xml";
if(boost::filesystem::exists(filePath)) if(Utils::FileSystem::exists(filePath.generic_string()))
return filePath.generic_string(); return filePath.generic_string();
filePath = getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml"; filePath = getHomePath() + "/.emulationstation/gamelists/" + mName + "/gamelist.xml";
if(forWrite) // make sure the directory exists if we're going to write to it, or crashes will happen if(forWrite) // make sure the directory exists if we're going to write to it, or crashes will happen
boost::filesystem::create_directories(filePath.parent_path()); Utils::FileSystem::createDirectory(filePath.parent_path().generic_string());
if(forWrite || boost::filesystem::exists(filePath)) if(forWrite || Utils::FileSystem::exists(filePath.generic_string()))
return filePath.generic_string(); return filePath.generic_string();
return "/etc/emulationstation/gamelists/" + mName + "/gamelist.xml"; return "/etc/emulationstation/gamelists/" + mName + "/gamelist.xml";
@ -409,13 +410,13 @@ std::string SystemData::getThemePath() const
// first, check game folder // first, check game folder
boost::filesystem::path localThemePath = mRootFolder->getPath() / "theme.xml"; boost::filesystem::path localThemePath = mRootFolder->getPath() / "theme.xml";
if(boost::filesystem::exists(localThemePath)) if(Utils::FileSystem::exists(localThemePath.generic_string()))
return localThemePath.generic_string(); return localThemePath.generic_string();
// not in game folder, try system theme in theme sets // not in game folder, try system theme in theme sets
localThemePath = ThemeData::getThemeFromCurrentSet(mThemeFolder); localThemePath = ThemeData::getThemeFromCurrentSet(mThemeFolder);
if (boost::filesystem::exists(localThemePath)) if (Utils::FileSystem::exists(localThemePath.generic_string()))
return localThemePath.generic_string(); return localThemePath.generic_string();
// not system theme, try default system theme in theme set // not system theme, try default system theme in theme set
@ -426,7 +427,7 @@ std::string SystemData::getThemePath() const
bool SystemData::hasGamelist() const bool SystemData::hasGamelist() const
{ {
return (boost::filesystem::exists(getGamelistPath(false))); return (Utils::FileSystem::exists(getGamelistPath(false)));
} }
unsigned int SystemData::getGameCount() const unsigned int SystemData::getGameCount() const
@ -488,7 +489,7 @@ void SystemData::loadTheme()
std::string path = getThemePath(); std::string path = getThemePath();
if(!boost::filesystem::exists(path)) // no theme available for this platform if(!Utils::FileSystem::exists(path)) // no theme available for this platform
return; return;
try try

View file

@ -4,6 +4,7 @@
#include "components/VideoPlayerComponent.h" #include "components/VideoPlayerComponent.h"
#endif #endif
#include "components/VideoVlcComponent.h" #include "components/VideoVlcComponent.h"
#include "utils/FileSystemUtil.h"
#include "views/gamelist/IGameListView.h" #include "views/gamelist/IGameListView.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "FileData.h" #include "FileData.h"
@ -38,8 +39,8 @@ SystemScreenSaver::SystemScreenSaver(Window* window) :
{ {
mWindow->setScreenSaver(this); mWindow->setScreenSaver(this);
std::string path = getTitleFolder(); std::string path = getTitleFolder();
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
boost::filesystem::create_directory(path); Utils::FileSystem::createDirectory(path);
srand((unsigned int)time(NULL)); srand((unsigned int)time(NULL));
mVideoChangeTime = 30000; mVideoChangeTime = 30000;
} }
@ -81,13 +82,13 @@ void SystemScreenSaver::startScreenSaver()
pickRandomVideo(path); pickRandomVideo(path);
int retry = 200; int retry = 200;
while(retry > 0 && ((path.empty() || !boost::filesystem::exists(path)) || mCurrentGame == NULL)) while(retry > 0 && ((path.empty() || !Utils::FileSystem::exists(path)) || mCurrentGame == NULL))
{ {
retry--; retry--;
pickRandomVideo(path); pickRandomVideo(path);
} }
if (!path.empty() && boost::filesystem::exists(path)) if (!path.empty() && Utils::FileSystem::exists(path))
{ {
#ifdef _RPI_ #ifdef _RPI_
// Create the correct type of video component // Create the correct type of video component
@ -164,7 +165,7 @@ void SystemScreenSaver::startScreenSaver()
std::string bg_audio_file = Settings::getInstance()->getString("SlideshowScreenSaverBackgroundAudioFile"); std::string bg_audio_file = Settings::getInstance()->getString("SlideshowScreenSaverBackgroundAudioFile");
if ((!mBackgroundAudio) && (bg_audio_file != "")) if ((!mBackgroundAudio) && (bg_audio_file != ""))
{ {
if (boost::filesystem::exists(bg_audio_file)) if (Utils::FileSystem::exists(bg_audio_file))
{ {
// paused PS so that the background audio keeps playing // paused PS so that the background audio keeps playing
PowerSaver::pause(); PowerSaver::pause();
@ -269,7 +270,7 @@ unsigned long SystemScreenSaver::countGameListNodes(const char *nodeName)
pugi::xml_node root; pugi::xml_node root;
std::string xmlReadPath = (*it)->getGamelistPath(false); std::string xmlReadPath = (*it)->getGamelistPath(false);
if(boost::filesystem::exists(xmlReadPath)) if(Utils::FileSystem::exists(xmlReadPath))
{ {
pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str());
if (!result) if (!result)
@ -321,7 +322,7 @@ void SystemScreenSaver::pickGameListNode(unsigned long index, const char *nodeNa
std::string xmlReadPath = (*it)->getGamelistPath(false); std::string xmlReadPath = (*it)->getGamelistPath(false);
if(boost::filesystem::exists(xmlReadPath)) if(Utils::FileSystem::exists(xmlReadPath))
{ {
pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str()); pugi::xml_parse_result result = doc.load_file(xmlReadPath.c_str());
if (!result) if (!result)
@ -416,7 +417,7 @@ void SystemScreenSaver::pickRandomGameListImage(std::string& path)
void SystemScreenSaver::pickRandomCustomImage(std::string& path) void SystemScreenSaver::pickRandomCustomImage(std::string& path)
{ {
std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir"); std::string imageDir = Settings::getInstance()->getString("SlideshowScreenSaverImageDir");
if ((imageDir != "") && (boost::filesystem::exists(imageDir))) if ((imageDir != "") && (Utils::FileSystem::exists(imageDir)))
{ {
std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter"); std::string imageFilter = Settings::getInstance()->getString("SlideshowScreenSaverImageFilter");
@ -430,7 +431,7 @@ void SystemScreenSaver::pickRandomCustomImage(std::string& path)
// TODO: Figure out how to remove this duplication in the else block // TODO: Figure out how to remove this duplication in the else block
for (iter; iter != end_iter; ++iter) for (iter; iter != end_iter; ++iter)
{ {
if (boost::filesystem::is_regular_file(iter->status())) if (Utils::FileSystem::isRegularFile(iter->path().generic_string()))
{ {
// If the image filter is empty, or the file extension is in the filter string, // If the image filter is empty, or the file extension is in the filter string,
// add it to the matching files list // add it to the matching files list
@ -449,7 +450,7 @@ void SystemScreenSaver::pickRandomCustomImage(std::string& path)
for (iter; iter != end_iter; ++iter) for (iter; iter != end_iter; ++iter)
{ {
if (boost::filesystem::is_regular_file(iter->status())) if (Utils::FileSystem::isRegularFile(iter->path().generic_string()))
{ {
// If the image filter is empty, or the file extension is in the filter string, // If the image filter is empty, or the file extension is in the filter string,
// add it to the matching files list // add it to the matching files list

View file

@ -3,6 +3,7 @@
#include "guis/GuiDetectDevice.h" #include "guis/GuiDetectDevice.h"
#include "guis/GuiMsgBox.h" #include "guis/GuiMsgBox.h"
#include "utils/FileSystemUtil.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "CollectionSystemManager.h" #include "CollectionSystemManager.h"
#include "EmulationStation.h" #include "EmulationStation.h"
@ -14,7 +15,6 @@
#include "Settings.h" #include "Settings.h"
#include "SystemData.h" #include "SystemData.h"
#include "SystemScreenSaver.h" #include "SystemScreenSaver.h"
#include <boost/filesystem/operations.hpp>
#include <SDL_events.h> #include <SDL_events.h>
#include <SDL_main.h> #include <SDL_main.h>
#include <SDL_timer.h> #include <SDL_timer.h>
@ -169,11 +169,11 @@ bool verifyHomeFolderExists()
//make sure the config directory exists //make sure the config directory exists
std::string home = getHomePath(); std::string home = getHomePath();
std::string configDir = home + "/.emulationstation"; std::string configDir = home + "/.emulationstation";
if(!boost::filesystem::exists(configDir)) if(!Utils::FileSystem::exists(configDir))
{ {
std::cout << "Creating config directory \"" << configDir << "\"\n"; std::cout << "Creating config directory \"" << configDir << "\"\n";
boost::filesystem::create_directory(configDir); Utils::FileSystem::createDirectory(configDir);
if(!boost::filesystem::exists(configDir)) if(!Utils::FileSystem::exists(configDir))
{ {
std::cerr << "Config directory could not be created!\n"; std::cerr << "Config directory could not be created!\n";
return false; return false;
@ -335,7 +335,7 @@ int main(int argc, char* argv[])
//choose which GUI to open depending on if an input configuration already exists //choose which GUI to open depending on if an input configuration already exists
if(errorMsg == NULL) if(errorMsg == NULL)
{ {
if(boost::filesystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) if(Utils::FileSystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0)
{ {
ViewController::get()->goToStart(); ViewController::get()->goToStart();
}else{ }else{

View file

@ -1,12 +1,12 @@
#include "scrapers/Scraper.h" #include "scrapers/Scraper.h"
#include "utils/FileSystemUtil.h"
#include "FileData.h" #include "FileData.h"
#include "GamesDBScraper.h" #include "GamesDBScraper.h"
#include "Log.h" #include "Log.h"
#include "platform.h" #include "platform.h"
#include "Settings.h" #include "Settings.h"
#include "SystemData.h" #include "SystemData.h"
#include <boost/filesystem/operations.hpp>
#include <FreeImage.h> #include <FreeImage.h>
#include <fstream> #include <fstream>
@ -278,13 +278,13 @@ std::string getSaveAsPath(const ScraperSearchParams& params, const std::string&
std::string path = getHomePath() + "/.emulationstation/downloaded_images/"; std::string path = getHomePath() + "/.emulationstation/downloaded_images/";
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
boost::filesystem::create_directory(path); Utils::FileSystem::createDirectory(path);
path += subdirectory + "/"; path += subdirectory + "/";
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
boost::filesystem::create_directory(path); Utils::FileSystem::createDirectory(path);
size_t dot = url.find_last_of('.'); size_t dot = url.find_last_of('.');
std::string ext; std::string ext;

View file

@ -1,11 +1,11 @@
#include "views/gamelist/BasicGameListView.h" #include "views/gamelist/BasicGameListView.h"
#include "utils/FileSystemUtil.h"
#include "views/UIModeController.h" #include "views/UIModeController.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#include "CollectionSystemManager.h" #include "CollectionSystemManager.h"
#include "Settings.h" #include "Settings.h"
#include "SystemData.h" #include "SystemData.h"
#include <boost/filesystem/operations.hpp>
BasicGameListView::BasicGameListView(Window* window, FileData* root) BasicGameListView::BasicGameListView(Window* window, FileData* root)
: ISimpleGameListView(window, root), mList(window) : ISimpleGameListView(window, root), mList(window)
@ -105,7 +105,7 @@ void BasicGameListView::launch(FileData* game)
void BasicGameListView::remove(FileData *game, bool deleteFile) void BasicGameListView::remove(FileData *game, bool deleteFile)
{ {
if (deleteFile) if (deleteFile)
boost::filesystem::remove(game->getPath()); // actually delete the file on the filesystem Utils::FileSystem::removeFile(game->getPath().generic_string()); // actually delete the file on the filesystem
FileData* parent = game->getParent(); FileData* parent = game->getParent();
if (getCursor() == game) // Select next element in list, or prev if none if (getCursor() == game) // Select next element in list, or prev if none
{ {

View file

@ -5,11 +5,11 @@
#include "components/VideoPlayerComponent.h" #include "components/VideoPlayerComponent.h"
#endif #endif
#include "components/VideoVlcComponent.h" #include "components/VideoVlcComponent.h"
#include "utils/FileSystemUtil.h"
#include "views/ViewController.h" #include "views/ViewController.h"
#ifdef _RPI_ #ifdef _RPI_
#include "Settings.h" #include "Settings.h"
#endif #endif
#include <boost/filesystem/operations.hpp>
VideoGameListView::VideoGameListView(Window* window, FileData* root) : VideoGameListView::VideoGameListView(Window* window, FileData* root) :
BasicGameListView(window, root), BasicGameListView(window, root),
@ -224,7 +224,7 @@ void VideoGameListView::updateInfoPanel()
{ {
FileData* file = (mList.size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected(); FileData* file = (mList.size() == 0 || mList.isScrolling()) ? NULL : mList.getSelected();
boost::filesystem::remove(getTitlePath().c_str()); Utils::FileSystem::removeFile(getTitlePath());
bool fadingOut; bool fadingOut;
if(file == NULL) if(file == NULL)

View file

@ -1,7 +1,8 @@
#include "HttpReq.h" #include "HttpReq.h"
#include "utils/FileSystemUtil.h"
#include "Log.h" #include "Log.h"
#include <boost/filesystem/operations.hpp> #include <assert.h>
CURLM* HttpReq::s_multi_handle = curl_multi_init(); CURLM* HttpReq::s_multi_handle = curl_multi_init();
@ -32,7 +33,7 @@ std::string HttpReq::urlEncode(const std::string &s)
bool HttpReq::isUrl(const std::string& str) bool HttpReq::isUrl(const std::string& str)
{ {
//the worst guess //the worst guess
return (!str.empty() && !boost::filesystem::exists(str) && return (!str.empty() && !Utils::FileSystem::exists(str) &&
(str.find("http://") != std::string::npos || str.find("https://") != std::string::npos || str.find("www.") != std::string::npos)); (str.find("http://") != std::string::npos || str.find("https://") != std::string::npos || str.find("www.") != std::string::npos));
} }

View file

@ -1,10 +1,10 @@
#include "InputManager.h" #include "InputManager.h"
#include "utils/FileSystemUtil.h"
#include "CECInput.h" #include "CECInput.h"
#include "Log.h" #include "Log.h"
#include "platform.h" #include "platform.h"
#include "Window.h" #include "Window.h"
#include <boost/filesystem/operations.hpp>
#include <pugixml/src/pugixml.hpp> #include <pugixml/src/pugixml.hpp>
#include <SDL.h> #include <SDL.h>
#include <iostream> #include <iostream>
@ -278,7 +278,7 @@ bool InputManager::parseEvent(const SDL_Event& ev, Window* window)
bool InputManager::loadInputConfig(InputConfig* config) bool InputManager::loadInputConfig(InputConfig* config)
{ {
std::string path = getConfigPath(); std::string path = getConfigPath();
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
return false; return false;
pugi::xml_document doc; pugi::xml_document doc;
@ -333,7 +333,7 @@ void InputManager::writeDeviceConfig(InputConfig* config)
pugi::xml_document doc; pugi::xml_document doc;
if(boost::filesystem::exists(path)) if(Utils::FileSystem::exists(path))
{ {
// merge files // merge files
pugi::xml_parse_result result = doc.load_file(path.c_str()); pugi::xml_parse_result result = doc.load_file(path.c_str());
@ -394,7 +394,7 @@ void InputManager::doOnFinish()
std::string path = getConfigPath(); std::string path = getConfigPath();
pugi::xml_document doc; pugi::xml_document doc;
if(boost::filesystem::exists(path)) if(Utils::FileSystem::exists(path))
{ {
pugi::xml_parse_result result = doc.load_file(path.c_str()); pugi::xml_parse_result result = doc.load_file(path.c_str());
if(!result) if(!result)

View file

@ -1,9 +1,11 @@
#include "Settings.h" #include "Settings.h"
#include "utils/FileSystemUtil.h"
#include "Log.h" #include "Log.h"
#include "platform.h" #include "platform.h"
#include <boost/filesystem/operations.hpp>
#include <pugixml/src/pugixml.hpp> #include <pugixml/src/pugixml.hpp>
#include <algorithm>
#include <vector>
Settings* Settings::sInstance = NULL; Settings* Settings::sInstance = NULL;
@ -185,7 +187,7 @@ void Settings::loadFile()
{ {
const std::string path = getHomePath() + "/.emulationstation/es_settings.cfg"; const std::string path = getHomePath() + "/.emulationstation/es_settings.cfg";
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
return; return;
pugi::xml_document doc; pugi::xml_document doc;

View file

@ -2,6 +2,7 @@
#include "components/ImageComponent.h" #include "components/ImageComponent.h"
#include "components/TextComponent.h" #include "components/TextComponent.h"
#include "utils/FileSystemUtil.h"
#include "Log.h" #include "Log.h"
#include "platform.h" #include "platform.h"
#include "Settings.h" #include "Settings.h"
@ -205,7 +206,7 @@ void ThemeData::loadFile(std::map<std::string, std::string> sysDataMap, const st
ThemeException error; ThemeException error;
error.setFiles(mPaths); error.setFiles(mPaths);
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
throw error << "File does not exist!"; throw error << "File does not exist!";
mVersion = 0; mVersion = 0;
@ -484,7 +485,7 @@ const std::shared_ptr<ThemeData>& ThemeData::getDefault()
theme = std::shared_ptr<ThemeData>(new ThemeData()); theme = std::shared_ptr<ThemeData>(new ThemeData());
const std::string path = getHomePath() + "/.emulationstation/es_theme_default.xml"; const std::string path = getHomePath() + "/.emulationstation/es_theme_default.xml";
if(boost::filesystem::exists(path)) if(Utils::FileSystem::exists(path))
{ {
try try
{ {
@ -544,12 +545,12 @@ std::map<std::string, ThemeSet> ThemeData::getThemeSets()
for(size_t i = 0; i < pathCount; i++) for(size_t i = 0; i < pathCount; i++)
{ {
if(!boost::filesystem::is_directory(paths[i])) if(!Utils::FileSystem::isDirectory(paths[i].generic_string()))
continue; continue;
for(boost::filesystem::directory_iterator it(paths[i]); it != end; ++it) for(boost::filesystem::directory_iterator it(paths[i]); it != end; ++it)
{ {
if(boost::filesystem::is_directory(*it)) if(Utils::FileSystem::isDirectory((*it).path().generic_string()))
{ {
ThemeSet set = {*it}; ThemeSet set = {*it};
sets[set.getName()] = set; sets[set.getName()] = set;

View file

@ -1,5 +1,6 @@
#include "Util.h" #include "Util.h"
#include "utils/FileSystemUtil.h"
#include "platform.h" #include "platform.h"
#include <boost/filesystem/operations.hpp> #include <boost/filesystem/operations.hpp>
@ -27,7 +28,7 @@ std::string strToUpper(const std::string& str)
// embedded resources, e.g. ":/font.ttf", need to be properly handled too // embedded resources, e.g. ":/font.ttf", need to be properly handled too
std::string getCanonicalPath(const std::string& path) std::string getCanonicalPath(const std::string& path)
{ {
if(path.empty() || !boost::filesystem::exists(path)) if(path.empty() || !Utils::FileSystem::exists(path))
return path; return path;
return boost::filesystem::canonical(path).generic_string(); return boost::filesystem::canonical(path).generic_string();
@ -83,14 +84,14 @@ boost::filesystem::path removeCommonPathUsingStrings(const boost::filesystem::pa
boost::filesystem::path removeCommonPath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains) boost::filesystem::path removeCommonPath(const boost::filesystem::path& path, const boost::filesystem::path& relativeTo, bool& contains)
{ {
// if either of these doesn't exist, boost::filesystem::canonical() is going to throw an error // if either of these doesn't exist, boost::filesystem::canonical() is going to throw an error
if(!boost::filesystem::exists(path) || !boost::filesystem::exists(relativeTo)) if(!Utils::FileSystem::exists(path.generic_string()) || !Utils::FileSystem::exists(relativeTo.generic_string()))
{ {
contains = false; contains = false;
return path; return path;
} }
// if it's a symlink we don't want to apply boost::filesystem::canonical on it, otherwise we'll lose the current parent_path // if it's a symlink we don't want to apply boost::filesystem::canonical on it, otherwise we'll lose the current parent_path
boost::filesystem::path p = (boost::filesystem::is_symlink(path) ? boost::filesystem::canonical(path.parent_path()) / path.filename() : boost::filesystem::canonical(path)); boost::filesystem::path p = (Utils::FileSystem::isSymlink(path.generic_string()) ? boost::filesystem::canonical(path.parent_path()) / path.filename() : boost::filesystem::canonical(path));
boost::filesystem::path r = boost::filesystem::canonical(relativeTo); boost::filesystem::path r = boost::filesystem::canonical(relativeTo);
if(p.root_path() != r.root_path()) if(p.root_path() != r.root_path())

View file

@ -1,12 +1,12 @@
#include "components/VideoComponent.h" #include "components/VideoComponent.h"
#include "resources/ResourceManager.h" #include "resources/ResourceManager.h"
#include "utils/FileSystemUtil.h"
#include "PowerSaver.h" #include "PowerSaver.h"
#include "Renderer.h" #include "Renderer.h"
#include "ThemeData.h" #include "ThemeData.h"
#include "Util.h" #include "Util.h"
#include "Window.h" #include "Window.h"
#include <boost/filesystem/operations.hpp>
#include <SDL_timer.h> #include <SDL_timer.h>
#define FADE_TIME_MS 200 #define FADE_TIME_MS 200
@ -75,8 +75,8 @@ VideoComponent::VideoComponent(Window* window) :
} }
std::string path = getTitleFolder(); std::string path = getTitleFolder();
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
boost::filesystem::create_directory(path); Utils::FileSystem::createDirectory(path);
} }
VideoComponent::~VideoComponent() VideoComponent::~VideoComponent()

View file

@ -2,12 +2,12 @@
#include "components/TextComponent.h" #include "components/TextComponent.h"
#include "guis/GuiInputConfig.h" #include "guis/GuiInputConfig.h"
#include "utils/FileSystemUtil.h"
#include "InputManager.h" #include "InputManager.h"
#include "PowerSaver.h" #include "PowerSaver.h"
#include "Renderer.h" #include "Renderer.h"
#include "Util.h" #include "Util.h"
#include "Window.h" #include "Window.h"
#include <boost/filesystem/operations.hpp>
#define HOLD_TIME 1000 #define HOLD_TIME 1000
@ -102,7 +102,7 @@ void GuiDetectDevice::update(int deltaTime)
if(mHoldingConfig) if(mHoldingConfig)
{ {
// If ES starts and if a known device is connected after startup skip controller configuration // If ES starts and if a known device is connected after startup skip controller configuration
if(mFirstRun && boost::filesystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0) if(mFirstRun && Utils::FileSystem::exists(InputManager::getConfigPath()) && InputManager::getInstance()->getNumConfiguredDevices() > 0)
{ {
if(mDoneCallback) if(mDoneCallback)
mDoneCallback(); mDoneCallback();

View file

@ -1,7 +1,7 @@
#include "ResourceManager.h" #include "ResourceManager.h"
#include "../data/Resources.h" #include "../data/Resources.h"
#include <boost/filesystem/operations.hpp> #include "utils/FileSystemUtil.h"
#include <fstream> #include <fstream>
auto array_deleter = [](unsigned char* p) { delete[] p; }; auto array_deleter = [](unsigned char* p) { delete[] p; };
@ -37,7 +37,7 @@ const ResourceData ResourceManager::getFileData(const std::string& path) const
} }
//it's not embedded; load the file //it's not embedded; load the file
if(!boost::filesystem::exists(path)) if(!Utils::FileSystem::exists(path))
{ {
//if the file doesn't exist, return an "empty" ResourceData //if the file doesn't exist, return an "empty" ResourceData
ResourceData data = {NULL, 0}; ResourceData data = {NULL, 0};
@ -71,7 +71,7 @@ bool ResourceManager::fileExists(const std::string& path) const
if(res2hMap.find(path) != res2hMap.cend()) if(res2hMap.find(path) != res2hMap.cend())
return true; return true;
return boost::filesystem::exists(path); return Utils::FileSystem::exists(path);
} }
void ResourceManager::unloadAll() void ResourceManager::unloadAll()

View file

@ -23,7 +23,7 @@ namespace Utils
{ {
stringList getDirContent(const std::string& _path) stringList getDirContent(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
stringList contentList; stringList contentList;
// only parse the directory, if it's a directory // only parse the directory, if it's a directory
@ -90,7 +90,7 @@ namespace Utils
// this should give us something like "/home/YOUR_USERNAME" on Linux and "C:/Users/YOUR_USERNAME/" on Windows // this should give us something like "/home/YOUR_USERNAME" on Linux and "C:/Users/YOUR_USERNAME/" on Windows
std::string envHome(getenv("HOME")); std::string envHome(getenv("HOME"));
if(envHome.length()) if(envHome.length())
path = genericPath(envHome); path = getGenericPath(envHome);
#if defined(_WIN32) #if defined(_WIN32)
// but does not seem to work for Windows XP or Vista, so try something else // but does not seem to work for Windows XP or Vista, so try something else
@ -99,7 +99,7 @@ namespace Utils
std::string envDir(getenv("HOMEDRIVE")); std::string envDir(getenv("HOMEDRIVE"));
std::string envPath(getenv("HOMEPATH")); std::string envPath(getenv("HOMEPATH"));
if(envDir.length() && envPath.length()) if(envDir.length() && envPath.length())
path = genericPath(envDir + "/" + envPath); path = getGenericPath(envDir + "/" + envPath);
} }
#endif // _WIN32 #endif // _WIN32
@ -115,11 +115,11 @@ namespace Utils
char temp[512]; char temp[512];
// return current working directory path // return current working directory path
return (getcwd(temp, 512) ? genericPath(temp) : ""); return (getcwd(temp, 512) ? getGenericPath(temp) : "");
} // getCWDPath } // getCWDPath
std::string genericPath(const std::string& _path) std::string getGenericPath(const std::string& _path)
{ {
std::string path = _path; std::string path = _path;
size_t offset = std::string::npos; size_t offset = std::string::npos;
@ -139,11 +139,11 @@ namespace Utils
// return generic path // return generic path
return path; return path;
} // genericPath } // getGenericPath
std::string escapedPath(const std::string& _path) std::string getEscapedPath(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
#if defined(_WIN32) #if defined(_WIN32)
// windows escapes stuff by just putting everything in quotes // windows escapes stuff by just putting everything in quotes
@ -166,11 +166,11 @@ namespace Utils
return path; return path;
#endif // _WIN32 #endif // _WIN32
} // escapedPath } // getEscapedPath
std::string canonicalPath(const std::string& _path) std::string getCanonicalPath(const std::string& _path)
{ {
std::string path = absolutePath(_path); std::string path = exists(_path) ? getAbsolutePath(_path) : getGenericPath(_path);
// cleanup path // cleanup path
bool scan = true; bool scan = true;
@ -244,78 +244,21 @@ namespace Utils
// return canonical path // return canonical path
return path; return path;
} // canonicalPath } // getCanonicalPath
std::string absolutePath(const std::string& _path, const std::string& _base) std::string getAbsolutePath(const std::string& _path, const std::string& _base)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
std::string base = isAbsolute(_base) ? genericPath(_base) : absolutePath(_base); std::string base = isAbsolute(_base) ? getGenericPath(_base) : getAbsolutePath(_base);
// return absolute path // return absolute path
return isAbsolute(path) ? path : genericPath(base + "/" + path); return isAbsolute(path) ? path : getGenericPath(base + "/" + path);
} // absolutePath } // getAbsolutePath
std::string resolvePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome)
{
std::string path = genericPath(_path);
std::string relativeTo = isDirectory(_relativeTo) ? _relativeTo : getParent(_relativeTo);
// nothing to resolve
if(!path.length())
return path;
// replace '.' with relativeTo
if(path[0] == '.')
return genericPath(relativeTo + "/" + &(path[1]));
// replace '~' with homePath
if(_allowHome && (path[0] == '~'))
return genericPath(getHomePath() + "/" + &(path[1]));
// nothing to resolve
return path;
} // resolvePath
std::string resolveSymlink(const std::string& _path)
{
std::string path = genericPath(_path);
std::string resolved;
#if defined(_WIN32)
HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if(hFile != INVALID_HANDLE_VALUE)
{
resolved.resize(GetFinalPathNameByHandle(hFile, nullptr, 0, FILE_NAME_NORMALIZED) + 1);
if(GetFinalPathNameByHandle(hFile, (LPSTR)resolved.data(), (DWORD)resolved.size(), FILE_NAME_NORMALIZED) > 0)
{
resolved.resize(resolved.size() - 1);
resolved = genericPath(resolved);
}
CloseHandle(hFile);
}
#else // _WIN32
struct stat info;
// check if lstat succeeded
if(lstat(path.c_str(), &info) == 0)
{
resolved.resize(info.st_size);
if(readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0)
resolved = genericPath(resolved);
}
#endif // _WIN32
// return resolved path
return resolved;
} // resolveSymlink
std::string getParent(const std::string& _path) std::string getParent(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
size_t offset = std::string::npos; size_t offset = std::string::npos;
// find last '/' and erase it // find last '/' and erase it
@ -329,7 +272,7 @@ namespace Utils
std::string getFileName(const std::string& _path) std::string getFileName(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
size_t offset = std::string::npos; size_t offset = std::string::npos;
// find last '/' and return the filename // find last '/' and return the filename
@ -377,9 +320,112 @@ namespace Utils
} // getExtension } // getExtension
std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome)
{
std::string path = getGenericPath(_path);
std::string relativeTo = isDirectory(_relativeTo) ? getGenericPath(_relativeTo) : getParent(_relativeTo);
// nothing to resolve
if (!path.length())
return path;
// replace '.' with relativeTo
if (path[0] == '.')
return (relativeTo + "/" + &(path[1]));
// replace '~' with homePath
if (_allowHome && (path[0] == '~'))
return (getHomePath() + "/" + &(path[1]));
// nothing to resolve
return path;
} // resolveRelativePath
std::string createRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome)
{
bool contains = false;
std::string path = removeCommonPath(_path, _relativeTo, contains);
if (contains)
{
// success
return ("." + path);
}
if (_allowHome)
{
contains = false;
std::string path = removeCommonPath(_path, getHomePath(), contains);
if (contains)
{
// success
return ("~" + path);
}
}
// nothing to resolve
return path;
} // createRelativePath
std::string removeCommonPath(const std::string& _path, const std::string& _common, bool& _contains)
{
std::string path = getGenericPath(_path);
std::string common = isDirectory(_common) ? getGenericPath(_common) : getParent(_common);
// check if path contains common
if (path.find_first_of(common) == 0)
{
_contains = true;
return path.substr(common.length() + 1);
}
// it didn't
_contains = false;
return path;
} // removeCommonPath
std::string resolveSymlink(const std::string& _path)
{
std::string path = getGenericPath(_path);
std::string resolved;
#if defined(_WIN32)
HANDLE hFile = CreateFile(path.c_str(), FILE_READ_ATTRIBUTES, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
if (hFile != INVALID_HANDLE_VALUE)
{
resolved.resize(GetFinalPathNameByHandle(hFile, nullptr, 0, FILE_NAME_NORMALIZED) + 1);
if (GetFinalPathNameByHandle(hFile, (LPSTR)resolved.data(), (DWORD)resolved.size(), FILE_NAME_NORMALIZED) > 0)
{
resolved.resize(resolved.size() - 1);
resolved = getGenericPath(resolved);
}
CloseHandle(hFile);
}
#else // _WIN32
struct stat info;
// check if lstat succeeded
if (lstat(path.c_str(), &info) == 0)
{
resolved.resize(info.st_size);
if (readlink(path.c_str(), (char*)resolved.data(), resolved.size()) > 0)
resolved = getGenericPath(resolved);
}
#endif // _WIN32
// return resolved path
return resolved;
} // resolveSymlink
bool removeFile(const std::string& _path) bool removeFile(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
// don't remove if it doesn't exists // don't remove if it doesn't exists
if(!exists(path)) if(!exists(path))
@ -392,7 +438,7 @@ namespace Utils
bool createDirectory(const std::string& _path) bool createDirectory(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
// don't create if it already exists // don't create if it already exists
if(exists(path)) if(exists(path))
@ -416,7 +462,7 @@ namespace Utils
bool exists(const std::string& _path) bool exists(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
struct stat info; struct stat info;
// check if stat succeeded // check if stat succeeded
@ -426,7 +472,7 @@ namespace Utils
bool isAbsolute(const std::string& _path) bool isAbsolute(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
#if defined(_WIN32) #if defined(_WIN32)
return ((path.size() > 1) && (path[1] == ':')); return ((path.size() > 1) && (path[1] == ':'));
@ -438,7 +484,7 @@ namespace Utils
bool isRegularFile(const std::string& _path) bool isRegularFile(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
struct stat info; struct stat info;
// check if stat succeeded // check if stat succeeded
@ -452,7 +498,7 @@ namespace Utils
bool isDirectory(const std::string& _path) bool isDirectory(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
struct stat info; struct stat info;
// check if stat succeeded // check if stat succeeded
@ -466,7 +512,7 @@ namespace Utils
bool isSymlink(const std::string& _path) bool isSymlink(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
#if defined(_WIN32) #if defined(_WIN32)
// check for symlink attribute // check for symlink attribute
@ -491,7 +537,7 @@ namespace Utils
bool isHidden(const std::string& _path) bool isHidden(const std::string& _path)
{ {
std::string path = genericPath(_path); std::string path = getGenericPath(_path);
#if defined(_WIN32) #if defined(_WIN32)
// check for hidden attribute // check for hidden attribute
@ -511,8 +557,8 @@ namespace Utils
bool isEquivalent(const std::string& _path1, const std::string& _path2) bool isEquivalent(const std::string& _path1, const std::string& _path2)
{ {
std::string path1 = genericPath(_path1); std::string path1 = getGenericPath(_path1);
std::string path2 = genericPath(_path2); std::string path2 = getGenericPath(_path2);
struct stat info1; struct stat info1;
struct stat info2; struct stat info2;

View file

@ -14,16 +14,18 @@ namespace Utils
stringList getDirContent (const std::string& _path); stringList getDirContent (const std::string& _path);
std::string getHomePath (); std::string getHomePath ();
std::string getCWDPath (); std::string getCWDPath ();
std::string genericPath (const std::string& _path); std::string getGenericPath (const std::string& _path);
std::string escapedPath (const std::string& _path); std::string getEscapedPath (const std::string& _path);
std::string canonicalPath (const std::string& _path); std::string getCanonicalPath (const std::string& _path);
std::string absolutePath (const std::string& _path, const std::string& _base = getCWDPath()); std::string getAbsolutePath (const std::string& _path, const std::string& _base = getCWDPath());
std::string resolvePath (const std::string& _path, const std::string& _relativeTo, const bool _allowHome);
std::string resolveSymlink (const std::string& _path);
std::string getParent (const std::string& _path); std::string getParent (const std::string& _path);
std::string getFileName (const std::string& _path); std::string getFileName (const std::string& _path);
std::string getStem (const std::string& _path); std::string getStem (const std::string& _path);
std::string getExtension (const std::string& _path); std::string getExtension (const std::string& _path);
std::string resolveRelativePath(const std::string& _path, const std::string& _relativeTo, const bool _allowHome);
std::string createRelativePath (const std::string& _path, const std::string& _relativeTo, const bool _allowHome);
std::string removeCommonPath (const std::string& _path, const std::string& _common, bool& _contains);
std::string resolveSymlink (const std::string& _path);
bool removeFile (const std::string& _path); bool removeFile (const std::string& _path);
bool createDirectory (const std::string& _path); bool createDirectory (const std::string& _path);
bool exists (const std::string& _path); bool exists (const std::string& _path);