Annotation of truecrypt/platform/file.cpp, revision 1.1

1.1     ! root        1: /*
        !             2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
        !             3: 
        !             4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
        !             5:  in the file License.txt included in TrueCrypt binary and source code
        !             6:  distribution packages.
        !             7: */
        !             8: 
        !             9: #      define FSEEK _fseeki64
        !            10: #      define FTELL _ftelli64
        !            11: 
        !            12: #include <stdio.h>
        !            13: #include "File.h"
        !            14: 
        !            15: namespace TrueCrypt
        !            16: {
        !            17: 
        !            18:        void File::Close ()
        !            19:        {
        !            20:                if_debug (ValidateState ());
        !            21: 
        !            22:                if (!SharedHandle)
        !            23:                        fclose (FileHandle);
        !            24:                FileIsOpen = false;
        !            25:        }
        !            26: 
        !            27:        void File::Delete ()
        !            28:        {
        !            29:                Close();
        !            30:                Path.Delete();
        !            31:        }
        !            32: 
        !            33:        uint32 File::GetDeviceSectorSize () const
        !            34:        {
        !            35:                return 512;
        !            36:        }
        !            37: 
        !            38:        void File::Flush () const
        !            39:        {
        !            40:                if_debug (ValidateState ());
        !            41:                throw_sys_sub_if (fflush (FileHandle) != 0, wstring (Path));
        !            42:        }
        !            43: 
        !            44:        uint64 File::Length () const
        !            45:        {
        !            46:                uint64 current = FTELL (FileHandle);
        !            47:                SeekEnd (0);
        !            48:                uint64 length = FTELL (FileHandle);
        !            49:                SeekAt (current);
        !            50:                return length;
        !            51:        }
        !            52: 
        !            53:        void File::Open (const FilePath &path, FileOpenMode mode, FileShareMode shareMode, FileOpenFlags flags)
        !            54:        {
        !            55:                mFileOpenFlags = flags;
        !            56: 
        !            57:                const wchar_t *fMode;
        !            58: 
        !            59:                switch (mode)
        !            60:                {
        !            61:                case CreateReadWrite:
        !            62:                        fMode = L"w+b";
        !            63:                        break;
        !            64:                                
        !            65:                case CreateWrite:
        !            66:                        fMode = L"wb";
        !            67:                        break;
        !            68: 
        !            69:                case OpenRead:
        !            70:                        fMode = L"rb";
        !            71:                        break;
        !            72:                                
        !            73:                case OpenWrite:
        !            74:                case OpenReadWrite:
        !            75:                        fMode = L"r+b";
        !            76:                        break;
        !            77: 
        !            78:                default:
        !            79:                        throw ParameterIncorrect (SRC_POS);
        !            80:                }
        !            81: 
        !            82:                FileHandle = _wfopen (wstring (path).c_str(), fMode);
        !            83:                throw_sys_sub_if (FileHandle == nullptr, wstring (path));
        !            84: 
        !            85:                Path = path;
        !            86:                FileIsOpen = true;
        !            87:        }
        !            88: 
        !            89:        uint64 File::Read (const BufferPtr &buffer) const
        !            90:        {
        !            91:                if_debug (ValidateState ());
        !            92: 
        !            93:                uint64 bytesRead = fread (buffer, 1, buffer.Size(), FileHandle);
        !            94:                throw_sys_sub_if (ferror (FileHandle) != 0, wstring (Path));
        !            95: 
        !            96:                return bytesRead;
        !            97:        }
        !            98: 
        !            99:        uint64 File::ReadAt (const BufferPtr &buffer, uint64 position) const
        !           100:        {
        !           101:                if_debug (ValidateState ());
        !           102:                
        !           103:                SeekAt (position);
        !           104:                return Read (buffer);
        !           105:        }
        !           106: 
        !           107:        void File::SeekAt (uint64 position) const
        !           108:        {
        !           109:                if_debug (ValidateState());
        !           110:                throw_sys_sub_if (FSEEK (FileHandle, position, SEEK_SET) != 0, wstring (Path));
        !           111:        }
        !           112: 
        !           113:        void File::SeekEnd (int offset) const
        !           114:        {
        !           115:                if_debug (ValidateState ());
        !           116:                throw_sys_sub_if (FSEEK (FileHandle, offset, SEEK_END) != 0, wstring (Path));
        !           117:        }
        !           118: 
        !           119:        void File::Write (const ConstBufferPtr &buffer) const
        !           120:        {
        !           121:                if_debug (ValidateState ());
        !           122:                uint64 bytesWritten = fwrite (buffer, 1, buffer.Size(), FileHandle);
        !           123:                throw_sys_sub_if (bytesWritten != buffer.Size() || ferror (FileHandle) != 0, wstring (Path));
        !           124:        }
        !           125:        
        !           126:        void File::WriteAt (const ConstBufferPtr &buffer, uint64 position) const
        !           127:        {
        !           128:                if_debug (ValidateState ());
        !           129:                SeekAt (position);
        !           130:                Write (buffer);
        !           131:        }
        !           132: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.