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: RaidFileWrite.h 65 // Purpose: Writing RAID like files 66 // Created: 2003/07/10 67 // 68 // -------------------------------------------------------------------------- 69 70 #ifndef RAIDFILEWRITE__H 71 #define RAIDFILEWRITE__H 72 73 #include <string> 74 75 #include "IOStream.h" 76 77 class RaidFileDiscSet; 78 79 // -------------------------------------------------------------------------- 80 // 81 // Class 82 // Name: RaidFileWrite 83 // Purpose: Writing RAID like files 84 // Created: 2003/07/10 85 // 86 // -------------------------------------------------------------------------- 87 class RaidFileWrite : public IOStream 88 { 89 public: 90 RaidFileWrite(int SetNumber, const std::string &Filename); 91 RaidFileWrite(int SetNumber, const std::string &Filename, int refcount); 92 ~RaidFileWrite(); 93 private: 94 RaidFileWrite(const RaidFileWrite &rToCopy); 95 96 public: 97 // IOStream interface 98 virtual int Read(void *pBuffer, int NBytes, int Timeout = IOStream::TimeOutInfinite); // will exception 99 virtual void Write(const void *pBuffer, int NBytes); 100 virtual pos_type GetPosition() const; 101 virtual void Seek(pos_type Offset, int SeekType); 102 virtual void Close(); // will discard the file! Use commit instead. 103 virtual bool StreamDataLeft(); 104 virtual bool StreamClosed(); 105 106 // Extra bits 107 void Open(bool AllowOverwrite = false); 108 void Commit(bool ConvertToRaidNow = false); 109 void Discard(); 110 void TransformToRaidStorage(); 111 void Delete(); 112 pos_type GetFileSize(); 113 pos_type GetDiscUsageInBlocks(); 114 115 static void CreateDirectory(int SetNumber, const std::string &rDirName, bool Recursive = false, int mode = 0777); 116 static void CreateDirectory(const RaidFileDiscSet &rSet, const std::string &rDirName, bool Recursive = false, int mode = 0777); 117 118 private: 119 120 private: 121 int mSetNumber; 122 std::string mFilename; 123 int mOSFileHandle; 124 int mRefCount; 125 }; 126 127 #endif // RAIDFILEWRITE__H 128 129