Something went wrong. Try again.
A fork of https://github.com/crosspoint-reader/crosspoint-reader
Something went wrong. Try again.
2.4 kB · 89 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990#include "FsHelpers.h"
#include <cctype>#include <cstring>#include <vector>
namespace FsHelpers {
std::string normalisePath(const std::string& path) { std::vector<std::string> components; std::string component;
for (const auto c : path) { if (c == '/') { if (!component.empty()) { if (component == "..") { if (!components.empty()) { components.pop_back(); } } else { components.push_back(component); } component.clear(); } } else { component += c; } }
if (!component.empty()) { components.push_back(component); }
std::string result; for (const auto& c : components) { if (!result.empty()) { result += "/"; } result += c; }
return result;}
bool checkFileExtension(std::string_view fileName, const char* extension) { const size_t extLen = strlen(extension); if (fileName.length() < extLen) { return false; }
const size_t offset = fileName.length() - extLen; for (size_t i = 0; i < extLen; i++) { if (tolower(static_cast<unsigned char>(fileName[offset + i])) != tolower(static_cast<unsigned char>(extension[i]))) { return false; } } return true;}
bool hasJpgExtension(std::string_view fileName) { return checkFileExtension(fileName, ".jpg") || checkFileExtension(fileName, ".jpeg");}
bool hasPngExtension(std::string_view fileName) { return checkFileExtension(fileName, ".png"); }
bool hasBmpExtension(std::string_view fileName) { return checkFileExtension(fileName, ".bmp"); }
bool hasGifExtension(std::string_view fileName) { return checkFileExtension(fileName, ".gif"); }
bool hasEpubExtension(std::string_view fileName) { return checkFileExtension(fileName, ".epub"); }
bool hasXtcExtension(std::string_view fileName) { return checkFileExtension(fileName, ".xtc") || checkFileExtension(fileName, ".xtch");}
bool hasTxtExtension(std::string_view fileName) { return checkFileExtension(fileName, ".txt"); }
bool hasMarkdownExtension(std::string_view fileName) { return checkFileExtension(fileName, ".md"); }
std::string extractFolderPath(const std::string& filePath) { const auto lastSlash = filePath.find_last_of('/'); if (lastSlash == std::string::npos || lastSlash == 0) { return "/"; } return filePath.substr(0, lastSlash);}
} // namespace FsHelpers