File.h revision 5892856b0cd6591194c669afab5bf9ac19c5b3a0
160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton//===-- File.h --------------------------------------------------*- C++ -*-===// 260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton// 360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton// The LLVM Compiler Infrastructure 460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton// 560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton// This file is distributed under the University of Illinois Open Source 660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton// License. See LICENSE.TXT for details. 760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton// 860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton//===----------------------------------------------------------------------===// 960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 1060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton#ifndef liblldb_File_h_ 1160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton#define liblldb_File_h_ 1260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton#if defined(__cplusplus) 1360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 1460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton#include "lldb/lldb-private.h" 1560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 1660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonnamespace lldb_private { 1760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 1860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton//---------------------------------------------------------------------- 1960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// @class File File.h "lldb/Host/File.h" 2060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// @brief A file class. 2160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// 2260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// A file class that divides abstracts the LLDB core from host file 2360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// functionality. 2460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton//---------------------------------------------------------------------- 2560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonclass File 2660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton{ 2760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonpublic: 285892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton static int kInvalidDescriptor; 295892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton static FILE * kInvalidStream; 305892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 3160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton enum OpenOptions 3260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 3360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionRead = (1u << 0), // Open file for reading 3460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionWrite = (1u << 1), // Open file for writing 3560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionAppend = (1u << 2), // Don't truncate file when opening, append to end of file 3660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionNonBlocking = (1u << 3), // File reads 3760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionCanCreate = (1u << 4), // Create file if doesn't already exist 3860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionCanCreateNewOnly = (1u << 5), // Can create file only if it doesn't already exist 395892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton eOpenOptionSharedLock = (1u << 6), // Open file and get shared lock 405892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton eOpenOptionExclusiveLock = (1u << 7) // Open file and get exclusive lock 4160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton }; 4260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 4360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton enum Permissions 4460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 4560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsUserRead = (1u << 0), 4660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsUserWrite = (1u << 1), 4760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsUserExecute = (1u << 2), 4860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsGroupRead = (1u << 3), 4960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsGroupWrite = (1u << 4), 5060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsGroupExecute = (1u << 5), 5160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsWorldRead = (1u << 6), 5260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsWorldWrite = (1u << 7), 535892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldExecute = (1u << 8), 545892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 555892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsUserRW = (ePermissionsUserRead | ePermissionsUserWrite | 0 ), 565892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsUserRX = (ePermissionsUserRead | 0 | ePermissionsUserExecute ), 575892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsUserRWX = (ePermissionsUserRead | ePermissionsUserWrite | ePermissionsUserExecute ), 585892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 595892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsGroupRW = (ePermissionsGroupRead | ePermissionsGroupWrite | 0 ), 605892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsGroupRX = (ePermissionsGroupRead | 0 | ePermissionsGroupExecute ), 615892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsGroupRWX = (ePermissionsGroupRead | ePermissionsGroupWrite | ePermissionsGroupExecute ), 625892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 635892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldRW = (ePermissionsWorldRead | ePermissionsWorldWrite | 0 ), 645892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldRX = (ePermissionsWorldRead | 0 | ePermissionsWorldExecute ), 655892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldRWX = (ePermissionsWorldRead | ePermissionsWorldWrite | ePermissionsWorldExecute ), 665892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 675892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneR = (ePermissionsUserRead | ePermissionsGroupRead | ePermissionsWorldRead ), 685892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneW = (ePermissionsUserWrite | ePermissionsGroupWrite | ePermissionsWorldWrite ), 695892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneX = (ePermissionsUserExecute | ePermissionsGroupExecute | ePermissionsWorldExecute ), 705892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 715892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneRW = (ePermissionsEveryoneR | ePermissionsEveryoneW | 0 ), 725892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneRX = (ePermissionsEveryoneR | 0 | ePermissionsEveryoneX ), 735892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneRWX = (ePermissionsEveryoneR | ePermissionsEveryoneW | ePermissionsEveryoneX ), 745892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsDefault = (ePermissionsUserRW | ePermissionsGroupRead) 7560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton }; 7660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 775892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File() : 785892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_descriptor (kInvalidDescriptor), 795892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_stream (kInvalidStream), 805892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_options (0), 815892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_owned (false) 825892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 835892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 845892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 855892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File (FILE *fh, bool transfer_ownership) : 865892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_descriptor (kInvalidDescriptor), 875892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_stream (fh), 885892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_options (0), 895892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_owned (transfer_ownership) 9060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 9160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 9260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 935892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File (const File &rhs); 945892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 955892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File & 965892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton operator= (const File &rhs); 9760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 9860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Constructor with path. 9960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 10060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Takes a path to a file which can be just a filename, or a full 10160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// path. If \a path is not NULL or empty, this function will call 102d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// File::Open (const char *path, uint32_t options, uint32_t permissions). 10360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 10460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @param[in] path 10560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// The full or partial path to a file. 10660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 10760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @param[in] options 108d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::OpenOptions) 10960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 11060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @param[in] permissions 111d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::Permissions) 11260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 113d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Open (const char *path, uint32_t options, uint32_t permissions) 11460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 11560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton File (const char *path, 11660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton uint32_t options, 1175892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton uint32_t permissions = ePermissionsDefault); 11860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 1195892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 1205892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File (int fd, bool tranfer_ownership) : 1215892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_descriptor (fd), 1225892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_stream (kInvalidStream), 1235892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_options (0), 1245892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_owned (tranfer_ownership) 1255892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 1265892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 12760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 12860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Destructor. 12960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 13060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// The destructor is virtual in case this class is subclassed. 13160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 13260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton virtual 13360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ~File (); 13460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 13560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton bool 13660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton IsValid () const 13760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 1385892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return DescriptorIsValid() || StreamIsValid(); 13960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 14060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 14160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 14260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Convert to pointer operator. 14360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 14460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// This allows code to check a File object to see if it 14560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// contains anything valid using code such as: 14660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 14760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @code 14860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// File file(...); 14960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// if (file) 15060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// { ... 15160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @endcode 15260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 15360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @return 15460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// A pointer to this object if either the directory or filename 15560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// is valid, NULL otherwise. 15660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 15760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton operator 15860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton bool () const 15960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 1605892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return DescriptorIsValid() || StreamIsValid(); 16160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 16260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 16360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 16460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Logical NOT operator. 16560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 16660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// This allows code to check a File object to see if it is 16760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// invalid using code such as: 16860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 16960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @code 17060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// File file(...); 17160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// if (!file) 17260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// { ... 17360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @endcode 17460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 17560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @return 17660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Returns \b true if the object has an empty directory and 17760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// filename, \b false otherwise. 17860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 17960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton bool 18060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton operator! () const 18160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 1825892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return !DescriptorIsValid() && !StreamIsValid(); 18360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 18460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 18560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 18660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Get the file spec for this file. 18760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 18860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @return 18960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// A reference to the file specification object. 19060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 191882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Error 192882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton GetFileSpec (FileSpec &file_spec) const; 19360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 194d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 195d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Open a file for read/writing with the specified options. 196d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 197d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Takes a path to a file which can be just a filename, or a full 198d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// path. 199d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 200d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] path 201d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The full or partial path to a file. 202d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 203d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] options 204d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::OpenOptions) 205d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 206d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] permissions 207d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::Permissions) 208d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 20960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 21060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Open (const char *path, 21160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton uint32_t options, 2125892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton uint32_t permissions = ePermissionsDefault); 21360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 21460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 21560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Close (); 21660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 2175892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Error 2185892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Duplicate (const File &rhs); 2195892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2205892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton int 2215892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton GetDescriptor() const; 2225892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2235892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton void 2245892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton SetDescriptor(int fd, bool transfer_ownership); 2255892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2265892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton FILE * 2275892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton GetStream (); 2285892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2295892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton void 2305892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton SetStream (FILE *fh, bool transfer_ownership); 2315892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 232d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 233d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Read bytes from a file from the current file position. 234d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 235d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe. Use the read function 236d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that takes an "off_t &offset" to ensure correct operation in 237d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// multi-threaded environments. 238d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 239d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 240d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer where to put the bytes that are read. 241d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 242d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 243d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to read form the current file position 244d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// which gets modified with the number of bytes that were read. 245d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 246d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 247d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 248d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 249d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 25060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 251d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Read (void *buf, size_t &num_bytes); 25260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 253d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 254d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Write bytes to a file at the current file position. 255d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 256d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe. Use the write function 257d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that takes an "off_t &offset" to ensure correct operation in 258d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// multi-threaded environments. 259d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 260d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 261d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer where to put the bytes that are read. 262d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 263d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 264d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to write to the current file position 265d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// which gets modified with the number of bytes that were 266d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// written. 267d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 268d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 269d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 270d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 271d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 27260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 273d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Write (const void *buf, size_t &num_bytes); 27460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 275d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 276d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Seek to an offset relative to the beginning of the file. 277d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 278d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe, other threads that 279d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// access this object might also change the current file position. 280d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// For thread safe reads and writes see the following functions: 281d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Read (void *, size_t, off_t &) 282d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Write (const void *, size_t, off_t &) 283d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 284d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 285d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset to seek to within the file relative to the 286d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// beginning of the file which gets filled in the the resulting 287d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// absolute file offset. 288d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 289d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 290d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 291d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 292d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 293882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Error 294882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton SeekFromStart (off_t& offset); 295882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 296d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 297d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Seek to an offset relative to the current file position. 298d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 299d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe, other threads that 300d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// access this object might also change the current file position. 301d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// For thread safe reads and writes see the following functions: 302d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Read (void *, size_t, off_t &) 303d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Write (const void *, size_t, off_t &) 304d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 305d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 306d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset to seek to within the file relative to the 307d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// current file position. On return this parameter gets filled 308d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// in the the resulting absolute file offset. 309d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 310d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 311d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 312d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 313d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 314882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Error 315882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton SeekFromCurrent (off_t& offset); 316882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 317d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 318d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Seek to an offset relative to the end of the file. 319d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 320d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe, other threads that 321d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// access this object might also change the current file position. 322d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// For thread safe reads and writes see the following functions: 323d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Read (void *, size_t, off_t &) 324d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Write (const void *, size_t, off_t &) 325d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 326d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 327d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset to seek to within the file relative to the 328d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// end of the file which gets filled in the the resulting 329d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// absolute file offset. 330d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 331d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 332d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 333d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 334d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 335882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Error 336882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton SeekFromEnd (off_t& offset); 337882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 338d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 339d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Read bytes from a file from the specified file offset. 340d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 341d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is thread safe in that clients manager their 342d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// own file position markers and reads on other threads won't mess 343d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// up the current read. 344d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 345d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 346d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer where to put the bytes that are read. 347d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 348d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 349d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to read form the current file position 350d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// which gets modified with the number of bytes that were read. 351d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 352d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 353d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset within the file from which to read \a num_bytes 354d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// bytes. This offset gets incremented by the number of bytes 355d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that were read. 356d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 357d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 358d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 359d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 360d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 361d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Error 362d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Read (void *dst, size_t &num_bytes, off_t &offset); 363d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton 364d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 365d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Write bytes to a file at the specified file offset. 366d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 367d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is thread safe in that clients manager their 368d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// own file position markers, though clients will need to implement 369d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// their own locking externally to avoid multiple people writing 370d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// to the file at the same time. 371d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 372d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 373d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer containing the bytes to write. 374d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 375d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 376d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to write to the file at offset \a offset. 377d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// \a num_bytes gets modified with the number of bytes that 378d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// were read. 379d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 380d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 381d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset within the file at which to write \a num_bytes 382d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// bytes. This offset gets incremented by the number of bytes 383d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that were written. 384d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 385d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 386d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 387d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 388d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 389d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Error 390d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Write (const void *src, size_t &num_bytes, off_t &offset); 391d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton 3925892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 3935892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Flush the current stream 3945892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 3955892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// @return 3965892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// An error object that indicates success or the reason for 3975892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// failure. 3985892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 3995892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Error 4005892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Flush (); 401d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton 402d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 403d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Sync to disk. 404d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 405d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 406d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 407d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 408d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 409882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Error 410882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Sync (); 411882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 4125892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 4135892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Output printf formatted output to the stream. 4145892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 4155892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Print some formatted output to the stream. 4165892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 4175892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// @param[in] format 4185892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// A printf style format string. 4195892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 4205892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// @param[in] ... 4215892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Variable arguments that are needed for the printf style 4225892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// format string \a format. 4235892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 4245892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton int 4255892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Printf (const char *format, ...); 4265892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 4275892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton int 4285892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton PrintfVarArg(const char *format, va_list args); 4295892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 43060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonprotected: 4315892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 4325892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 4335892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton bool 4345892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton DescriptorIsValid () const 4355892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 4365892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return m_descriptor >= 0; 4375892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 4385892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 4395892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton bool 4405892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton StreamIsValid () const 4415892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 4425892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return m_stream != kInvalidStream; 4435892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 4445892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 44560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 44660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton // Member variables 44760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 4485892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton int m_descriptor; 4495892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton FILE *m_stream; 4505892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton uint32_t m_options; 4515892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton bool m_owned; 45260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton}; 45360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 45460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton} // namespace lldb_private 45560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 45660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton#endif // #if defined(__cplusplus) 457d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton#endif // liblldb_File_h_ 458