1 // distribution boxbackup-0.11_trunk_2979 (svn version: 2979) 2 // Box Backup, http://www.boxbackup.org/ 3 // 4 // Copyright (c) 2003-2010, Ben Summers and contributors. 5 // All rights reserved. 6 // 7 // Note that this project uses mixed licensing. Any file with this license 8 // attached, or where the code LICENSE-DUAL appears on the first line, falls 9 // under this license. See the file COPYING.txt for more information. 10 // 11 // This file is dual licensed. You may use and distribute it providing that you 12 // comply EITHER with the terms of the BSD license, OR the GPL license. It is 13 // not necessary to comply with both licenses, only one. 14 // 15 // The BSD license option follows: 16 // 17 // Redistribution and use in source and binary forms, with or without 18 // modification, are permitted provided that the following conditions are met: 19 // 20 // 1. Redistributions of source code must retain the above copyright 21 // notice, this list of conditions and the following disclaimer. 22 // 23 // 2. Redistributions in binary form must reproduce the above copyright 24 // notice, this list of conditions and the following disclaimer in the 25 // documentation and/or other materials provided with the distribution. 26 // 27 // 3. Neither the name of the Box Backup nor the names of its contributors may 28 // be used to endorse or promote products derived from this software without 29 // specific prior written permission. 30 // 31 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 32 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 33 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 34 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 35 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 37 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 38 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 39 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 40 // THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 41 // 42 // [http://en.wikipedia.org/wiki/BSD_licenses#3-clause_license_.28.22New_BSD_License.22.29] 43 // 44 // The GPL license option follows: 45 // 46 // This program is free software; you can redistribute it and/or 47 // modify it under the terms of the GNU General Public License 48 // as published by the Free Software Foundation; either version 2 49 // of the License, or (at your option) any later version. 50 // 51 // This program is distributed in the hope that it will be useful, 52 // but WITHOUT ANY WARRANTY; without even the implied warranty of 53 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 54 // GNU General Public License for more details. 55 // 56 // You should have received a copy of the GNU General Public License 57 // along with this program; if not, write to the Free Software 58 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 59 // 60 // [http://www.gnu.org/licenses/old-licenses/gpl-2.0.html#SEC4] 61 // -------------------------------------------------------------------------- 62 // 63 // File 64 // Name: RaidFileRead.h 65 // Purpose: Read Raid like Files 66 // Created: 2003/07/13 67 // 68 // -------------------------------------------------------------------------- 69 70 #ifndef RAIDFILEREAD__H 71 #define RAIDFILEREAD__H 72 73 #include <cstring> 74 #include <cstdlib> 75 #include <memory> 76 #include <vector> 77 78 #include "IOStream.h" 79 80 class RaidFileDiscSet; 81 82 83 // -------------------------------------------------------------------------- 84 // 85 // Class 86 // Name: RaidFileRead 87 // Purpose: Read RAID like files 88 // Created: 2003/07/13 89 // 90 // -------------------------------------------------------------------------- 91 class RaidFileRead : public IOStream 92 { 93 protected: 94 RaidFileRead(int SetNumber, const std::string &Filename); 95 public: 96 virtual ~RaidFileRead(); 97 private: 98 RaidFileRead(const RaidFileRead &rToCopy); 99 100 public: 101 // Open a raid file 102 static std::auto_ptr<RaidFileRead> Open(int SetNumber, const std::string &Filename, int64_t *pRevisionID = 0, int BufferSizeHint = 4096); 103 104 // Extra info 105 virtual pos_type GetFileSize() const = 0; 106 107 // Utility functions 108 static bool FileExists(int SetNumber, const std::string &rFilename, int64_t *pRevisionID = 0); 109 static bool DirectoryExists(const RaidFileDiscSet &rSet, const std::string &rDirName); 110 static bool DirectoryExists(int SetNumber, const std::string &rDirName); 111 enum 112 { 113 DirReadType_FilesOnly = 0, 114 DirReadType_DirsOnly = 1 115 }; 116 static bool ReadDirectoryContents(int SetNumber, const std::string &rDirName, int DirReadType, std::vector<std::string> &rOutput); 117 118 // Common IOStream interface implementation 119 virtual void Write(const void *pBuffer, int NBytes); 120 virtual bool StreamClosed(); 121 virtual pos_type BytesLeftToRead(); 122 123 pos_type GetDiscUsageInBlocks(); 124 125 typedef int64_t FileSizeType; 126 127 protected: 128 int mSetNumber; 129 std::string mFilename; 130 }; 131 132 #endif // RAIDFILEREAD__H 133 134