From 02830985a18950497003f3392cf8d6cc30c15c50 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Sat, 5 Oct 2013 04:55:11 +0100 Subject: Move stuff around a bit: - Create FileSystem class: * Move ServerConfig::CleanFilename to FileSystem::GetFileName and rewrite. * Move ServerConfig::ExpandPath to FileSystem. * Move ServerConfig::FileExists to FileSystem. * Move ServerConfig::StartsWithWindowsDriveLetter to FileSystem. - Move FileReader to fileutils.cpp and fix documentation. - Move UserManager::DoBackgroundUserStuff to usermanager.cpp. --- include/configreader.h | 30 +++-------------- include/fileutils.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++ include/inspircd.h | 1 + include/modules.h | 38 ---------------------- 4 files changed, 92 insertions(+), 64 deletions(-) create mode 100644 include/fileutils.h (limited to 'include') diff --git a/include/configreader.h b/include/configreader.h index 0fbf234c3..a46f9cf95 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -225,10 +225,10 @@ class CoreExport ServerConfig , Log(LOG_PATH) , Module(MOD_PATH) { } - std::string PrependConfig(const std::string& fn) const { return ServerConfig::ExpandPath(Config, fn); } - std::string PrependData(const std::string& fn) const { return ServerConfig::ExpandPath(Data, fn); } - std::string PrependLog(const std::string& fn) const { return ServerConfig::ExpandPath(Log, fn); } - std::string PrependModule(const std::string& fn) const { return ServerConfig::ExpandPath(Module, fn); } + std::string PrependConfig(const std::string& fn) const { return FileSystem::ExpandPath(Config, fn); } + std::string PrependData(const std::string& fn) const { return FileSystem::ExpandPath(Data, fn); } + std::string PrependLog(const std::string& fn) const { return FileSystem::ExpandPath(Log, fn); } + std::string PrependModule(const std::string& fn) const { return FileSystem::ExpandPath(Module, fn); } }; /** Get a configuration tag @@ -551,30 +551,8 @@ class CoreExport ServerConfig void Fill(); - /** Returns true if the given string starts with a windows drive letter - */ - static bool StartsWithWindowsDriveLetter(const std::string& path); - bool ApplyDisabledCommands(const std::string& data); - /** Clean a filename, stripping the directories (and drives) from string. - * @param name Directory to tidy - * @return The cleaned filename - */ - static const char* CleanFilename(const char* name); - - /** Check if a file exists. - * @param file The full path to a file - * @return True if the file exists and is readable. - */ - static bool FileExists(const char* file); - - /** Expands a path fragment to a full path. - * @param base The base path to expand from - * @param fragment The path fragment to expand on top of base. - */ - static std::string ExpandPath(const std::string& base, const std::string& fragment); - /** Escapes a value for storage in a configuration key. * @param str The string to escape. * @param xml Are we using the XML config format? diff --git a/include/fileutils.h b/include/fileutils.h new file mode 100644 index 000000000..45865bbb0 --- /dev/null +++ b/include/fileutils.h @@ -0,0 +1,87 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2013 Peter Powell + * + * This file is part of InspIRCd. InspIRCd 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, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#pragma once + +/** Provides an easy method of reading a text file into memory. */ +class CoreExport FileReader : public classbase +{ + /** The lines of text in the file. */ + std::vector lines; + + /** File size in bytes. */ + unsigned long totalSize; + + public: + /** Initializes a new file reader. */ + FileReader() : totalSize(0) { } + + /** Initializes a new file reader and reads the specified file. + * @param filename The file to read into memory. + */ + FileReader(const std::string& filename); + + /** Loads a text file from disk. + * @param filename The file to read into memory. + * @throw CoreException The file can not be loaded. + */ + void Load(const std::string& filename); + + /** Retrieves the entire contents of the file cache as a single string. */ + std::string GetString() const; + + /** Retrieves the entire contents of the file cache as a vector of strings. */ + const std::vector& GetVector() const { return lines; } + + /** Retrieves the total size in bytes of the file. */ + unsigned long TotalSize() const { return totalSize; } +}; + +/** Implements methods for file system access */ +class CoreExport FileSystem +{ +private: + FileSystem() { } + +public: + /** Expands a path fragment to a full path. + * @param base The base path to expand from + * @param fragment The path fragment to expand on top of base. + */ + static std::string ExpandPath(const std::string& base, const std::string& fragment); + + /** + * Checks whether a file with the specified name exists on the filesystem. + * @param path The path to a file. + * @return True if the file exists; otherwise, false. + */ + static bool FileExists(const std::string& path); + + /** Gets the file name segment of a path. + * @param path The path to extract the file name from. + * @return The file name segment of a path. + */ + static std::string GetFileName(const std::string& path); + + /** Determines whether the given path starts with a Windows drive letter. + * @param path The path to validate. + * @returns True if the path begins with a Windows drive letter; otherwise, false. + */ + static bool StartsWithWindowsDriveLetter(const std::string& path); +}; diff --git a/include/inspircd.h b/include/inspircd.h index f43141c38..e02a5deb5 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -54,6 +54,7 @@ CoreExport extern InspIRCd* ServerInstance; #include "caller.h" #include "cull_list.h" #include "extensible.h" +#include "fileutils.h" #include "numerics.h" #include "uid.h" #include "users.h" diff --git a/include/modules.h b/include/modules.h index 931d85032..b7cffd1a0 100644 --- a/include/modules.h +++ b/include/modules.h @@ -1078,44 +1078,6 @@ class CoreExport Module : public classbase, public usecountbase virtual void OnSetUserIP(LocalUser* user); }; -/** Provides an easy method of reading a text file into memory. */ -class CoreExport FileReader : public classbase -{ - /** The lines of text in the file. - */ - std::vector lines; - - /** Content size in bytes - */ - unsigned long totalSize; - - public: - /** Initializes a new file reader. - */ - FileReader() : totalSize(0) { } - - /** Initializes a new file reader and reads the specified file. - * @param filename The file to read into memory. - */ - FileReader(const std::string& filename); - - /** Loads a text file from disk. - * @param filename The file to read into memory. - * @throw CoreException The file can not be loaded. - */ - void Load(const std::string& filename); - - /** Retrieves the entire contents of the file cache as a single string. - */ - std::string GetString(); - - /** Retrieves the entire contents of the file cache as a vector of strings. - */ - const std::vector& GetVector() { return lines; } - - unsigned long TotalSize() { return totalSize; } -}; - /** A list of modules */ typedef std::vector IntModuleList; -- cgit v1.2.3