diff --git a/src/celutil/directory.cpp b/src/celutil/directory.cpp deleted file mode 100644 index 5d342d30..00000000 --- a/src/celutil/directory.cpp +++ /dev/null @@ -1,82 +0,0 @@ -// directory.h -// -// Copyright (C) 2003, Chris Laurel -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. - -#include -#include "directory.h" - -using namespace std; - - -bool Directory::enumFiles(EnumFilesHandler& handler, bool deep) -{ - string filename; - - while (nextFile(filename)) - { - // Skip all files beginning with a period, most importantly, . and .. - if (filename[0] == '.') - continue; - - // TODO: optimize this to avoid allocating so many strings - string pathname = handler.getPath() + string("/") + filename; - if (IsDirectory(pathname)) - { - if (deep) - { - Directory* dir = OpenDirectory(pathname); - bool cont = true; - - if (dir != nullptr) - { - handler.pushDir(filename); - cont = dir->enumFiles(handler, deep); - handler.popDir(); - delete dir; - } - - if (!cont) - return false; - } - } - else - { - if (!handler.process(filename)) - return false; - } - } - - return true; -} - - -void EnumFilesHandler::pushDir(const std::string& dirName) -{ - if (!dirStack.empty()) - dirStack.push_back(dirStack.back() + string("/") + dirName); - else - dirStack.push_back(dirName); -} - - -void EnumFilesHandler::popDir() -{ - dirStack.pop_back(); -} - - -const string& EnumFilesHandler::getPath() const -{ - // need this so we can return a non-temporary value: - static const string emptyString; - - if (!dirStack.empty()) - return dirStack.back(); - - return emptyString; -} diff --git a/src/celutil/directory.h b/src/celutil/directory.h deleted file mode 100644 index c4e40338..00000000 --- a/src/celutil/directory.h +++ /dev/null @@ -1,48 +0,0 @@ -// directory.h -// -// Copyright (C) 2002, Chris Laurel -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. - -#ifndef _CELUTIL_DIRECTORY_H_ -#define _CELUTIL_DIRECTORY_H_ - -#include -#include - -class EnumFilesHandler -{ - public: - EnumFilesHandler() = default; - virtual ~EnumFilesHandler() = default; - - void pushDir(const std::string&); - void popDir(); - const std::string& getPath() const; - - virtual bool process(const std::string& filename) = 0; - - private: - std::vector dirStack; -}; - -class Directory -{ - public: - Directory() = default; - virtual ~Directory() = default; - - virtual bool nextFile(std::string&) = 0; - - virtual bool enumFiles(EnumFilesHandler& handler, bool deep); -}; - -extern std::string WordExp(const std::string&); -extern Directory* OpenDirectory(const std::string&); -extern bool IsDirectory(const std::string&); - - -#endif // _CELUTIL_DIRECTORY_H_ diff --git a/src/celutil/unixdirectory.cpp b/src/celutil/unixdirectory.cpp deleted file mode 100644 index ab6f90b7..00000000 --- a/src/celutil/unixdirectory.cpp +++ /dev/null @@ -1,135 +0,0 @@ -// unixdirectory.cpp -// -// Copyright (C) 2002, Chris Laurel -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. - -#include -#include -#include -#include -#include - -#include -#include "directory.h" - -using namespace std; - - -#ifdef TARGET_OS_MAC -#ifdef QT_CORE_LIB -// Crash on Mac OS X / Qt4 version when calling wordfree. -// This seems to happen only with Leopard. -#define WORDEXP_PROBLEM -#endif -#endif - -class UnixDirectory : public Directory -{ -public: - UnixDirectory(std::string /*_dirname*/); - ~UnixDirectory() override; - - bool nextFile(std::string& /*filename*/) override; - - enum { - DirGood = 0, - DirBad = 1 - }; - -private: - string dirname; - int status; - DIR* dir; -}; - - -UnixDirectory::UnixDirectory(std::string _dirname) : - dirname(std::move(_dirname)), - status(DirGood), - dir(nullptr) -{ -} - - -UnixDirectory::~UnixDirectory() -{ - if (dir != nullptr) - { - closedir(dir); - dir = nullptr; - } -} - - -bool UnixDirectory::nextFile(std::string& filename) -{ - if (status != DirGood) - return false; - - if (dir == nullptr) - { - dir = opendir(dirname.c_str()); - if (dir == nullptr) - { - status = DirBad; - return false; - } - } - - struct dirent* ent = readdir(dir); - if (ent == nullptr) - { - status = DirBad; - return false; - } - - filename = ent->d_name; - return true; -} - - -Directory* OpenDirectory(const std::string& dirname) -{ - return new UnixDirectory(dirname); -} - - -bool IsDirectory(const std::string& filename) -{ - struct stat buf; - return stat(filename.c_str(), &buf) == 0 ? S_ISDIR(buf.st_mode) : false; -} - -std::string WordExp(const std::string& filename) -{ -#ifndef WORDEXP_PROBLEM - wordexp_t result; - std::string expanded; - - switch(wordexp(filename.c_str(), &result, WRDE_NOCMD)) { - case 0: // successful - break; - case WRDE_NOSPACE: - // If the error was `WRDE_NOSPACE', - // then perhaps part of the result was allocated. - wordfree(&result); - default: // some other error - return filename; - } - - if (result.we_wordc != 1) { - wordfree(&result); - return filename; - } - - expanded = result.we_wordv[0]; - wordfree(&result); -#else - std::string expanded = filename; -#endif - return expanded; -} diff --git a/src/celutil/windirectory.cpp b/src/celutil/windirectory.cpp deleted file mode 100644 index 52c11339..00000000 --- a/src/celutil/windirectory.cpp +++ /dev/null @@ -1,108 +0,0 @@ -// windirectory.cpp -// -// Copyright (C) 2002, Chris Laurel -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. - -#include -#include -#include -#include "directory.h" - -using namespace std; - - -class WindowsDirectory : public Directory -{ -public: - WindowsDirectory(std::string /*_dirname*/); - ~WindowsDirectory() override; - - bool nextFile(std::string& /*filename*/) override; - - enum { - DirGood = 0, - DirBad = 1 - }; - -private: - string dirname; - string searchName; - int status; - HANDLE searchHandle; -}; - - -WindowsDirectory::WindowsDirectory(std::string _dirname) : - dirname(std::move(_dirname)), - status(DirGood), - searchHandle(INVALID_HANDLE_VALUE) -{ - searchName = dirname + string("\\*"); - // Check to make sure that this file is a directory -} - - -WindowsDirectory::~WindowsDirectory() -{ - if (searchHandle != INVALID_HANDLE_VALUE) - FindClose(searchHandle); - searchHandle = nullptr; -} - - -bool WindowsDirectory::nextFile(std::string& filename) -{ - WIN32_FIND_DATAA findData; - - if (status != DirGood) - return false; - - if (searchHandle == INVALID_HANDLE_VALUE) - { - searchHandle = FindFirstFileA(const_cast(searchName.c_str()), - &findData); - if (searchHandle == INVALID_HANDLE_VALUE) - { - status = DirBad; - return false; - } - - filename = findData.cFileName; - return true; - } - else - { - if (FindNextFileA(searchHandle, &findData)) - { - filename = findData.cFileName; - return true; - } - - status = DirBad; - return false; - } -} - - -Directory* OpenDirectory(const std::string& dirname) -{ - return new WindowsDirectory(dirname); -} - - -bool IsDirectory(const std::string& filename) -{ - DWORD attr = GetFileAttributesA(const_cast(filename.c_str())); - if (attr == 0xffffffff) - return false; - - return ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0); -} - -std::string WordExp(const std::string& filename) { - return filename; -}