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 14419144b064166f0d18b06cad4d52fe66e7ca058fGreg Clayton#include <stdio.h> 15419144b064166f0d18b06cad4d52fe66e7ca058fGreg Clayton 1660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton#include "lldb/lldb-private.h" 1760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 1860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonnamespace lldb_private { 1960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 2060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton//---------------------------------------------------------------------- 2160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// @class File File.h "lldb/Host/File.h" 2260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// @brief A file class. 2360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// 2460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// A file class that divides abstracts the LLDB core from host file 2560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton/// functionality. 2660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton//---------------------------------------------------------------------- 2760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonclass File 2860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton{ 2960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonpublic: 305892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton static int kInvalidDescriptor; 315892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton static FILE * kInvalidStream; 325892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 3360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton enum OpenOptions 3460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 3560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionRead = (1u << 0), // Open file for reading 3660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionWrite = (1u << 1), // Open file for writing 3760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton eOpenOptionAppend = (1u << 2), // Don't truncate file when opening, append to end of file 382f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton eOpenOptionTruncate = (1u << 3), // Truncate file when opening 392f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton eOpenOptionNonBlocking = (1u << 4), // File reads 402f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton eOpenOptionCanCreate = (1u << 5), // Create file if doesn't already exist 412f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton eOpenOptionCanCreateNewOnly = (1u << 6) // Can create file only if it doesn't already exist 4260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton }; 4360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 4460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton enum Permissions 4560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 4660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsUserRead = (1u << 0), 4760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsUserWrite = (1u << 1), 4860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsUserExecute = (1u << 2), 4960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsGroupRead = (1u << 3), 5060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsGroupWrite = (1u << 4), 5160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsGroupExecute = (1u << 5), 5260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsWorldRead = (1u << 6), 5360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ePermissionsWorldWrite = (1u << 7), 545892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldExecute = (1u << 8), 555892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 565892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsUserRW = (ePermissionsUserRead | ePermissionsUserWrite | 0 ), 575892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsUserRX = (ePermissionsUserRead | 0 | ePermissionsUserExecute ), 585892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsUserRWX = (ePermissionsUserRead | ePermissionsUserWrite | ePermissionsUserExecute ), 595892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 605892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsGroupRW = (ePermissionsGroupRead | ePermissionsGroupWrite | 0 ), 615892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsGroupRX = (ePermissionsGroupRead | 0 | ePermissionsGroupExecute ), 625892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsGroupRWX = (ePermissionsGroupRead | ePermissionsGroupWrite | ePermissionsGroupExecute ), 635892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 645892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldRW = (ePermissionsWorldRead | ePermissionsWorldWrite | 0 ), 655892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldRX = (ePermissionsWorldRead | 0 | ePermissionsWorldExecute ), 665892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsWorldRWX = (ePermissionsWorldRead | ePermissionsWorldWrite | ePermissionsWorldExecute ), 675892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 685892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneR = (ePermissionsUserRead | ePermissionsGroupRead | ePermissionsWorldRead ), 695892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneW = (ePermissionsUserWrite | ePermissionsGroupWrite | ePermissionsWorldWrite ), 705892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneX = (ePermissionsUserExecute | ePermissionsGroupExecute | ePermissionsWorldExecute ), 715892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 725892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneRW = (ePermissionsEveryoneR | ePermissionsEveryoneW | 0 ), 735892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneRX = (ePermissionsEveryoneR | 0 | ePermissionsEveryoneX ), 745892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsEveryoneRWX = (ePermissionsEveryoneR | ePermissionsEveryoneW | ePermissionsEveryoneX ), 755892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton ePermissionsDefault = (ePermissionsUserRW | ePermissionsGroupRead) 7660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton }; 7760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 785892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File() : 795892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_descriptor (kInvalidDescriptor), 805892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_stream (kInvalidStream), 815892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_options (0), 825892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_owned (false) 835892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 845892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 855892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 865892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File (FILE *fh, bool transfer_ownership) : 875892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_descriptor (kInvalidDescriptor), 885892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_stream (fh), 895892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_options (0), 905892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_owned (transfer_ownership) 9160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 9260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 9360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 945892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File (const File &rhs); 955892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 965892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File & 975892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton operator= (const File &rhs); 9860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 9960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Constructor with path. 10060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 10160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Takes a path to a file which can be just a filename, or a full 10260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// path. If \a path is not NULL or empty, this function will call 103d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// File::Open (const char *path, uint32_t options, uint32_t permissions). 10460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 10560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @param[in] path 10660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// The full or partial path to a file. 10760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 10860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @param[in] options 109d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::OpenOptions) 11060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 11160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @param[in] permissions 112d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::Permissions) 11360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 114d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Open (const char *path, uint32_t options, uint32_t permissions) 11560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 11660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton File (const char *path, 11760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton uint32_t options, 1185892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton uint32_t permissions = ePermissionsDefault); 11960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 1205892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 1215892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton File (int fd, bool tranfer_ownership) : 1225892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_descriptor (fd), 1235892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_stream (kInvalidStream), 1245892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_options (0), 1255892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton m_owned (tranfer_ownership) 1265892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 1275892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 12860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 12960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Destructor. 13060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 13160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// The destructor is virtual in case this class is subclassed. 13260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 13360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton virtual 13460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton ~File (); 13560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 13660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton bool 13760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton IsValid () const 13860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 1395892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return DescriptorIsValid() || StreamIsValid(); 14060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 14160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 14260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 14360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Convert to pointer operator. 14460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 14560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// This allows code to check a File object to see if it 14660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// contains anything valid using code such as: 14760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 14860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @code 14960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// File file(...); 15060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// if (file) 15160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// { ... 15260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @endcode 15360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 15460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @return 15560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// A pointer to this object if either the directory or filename 15660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// is valid, NULL otherwise. 15760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 15860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton operator 15960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton bool () const 16060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 1615892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return DescriptorIsValid() || StreamIsValid(); 16260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 16360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 16460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 16560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Logical NOT operator. 16660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 16760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// This allows code to check a File object to see if it is 16860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// invalid using code such as: 16960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 17060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @code 17160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// File file(...); 17260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// if (!file) 17360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// { ... 17460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @endcode 17560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 17660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @return 17760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Returns \b true if the object has an empty directory and 17860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// filename, \b false otherwise. 17960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 18060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton bool 18160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton operator! () const 18260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton { 1835892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return !DescriptorIsValid() && !StreamIsValid(); 18460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton } 18560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 18660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 18760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// Get the file spec for this file. 18860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// 18960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// @return 19060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton /// A reference to the file specification object. 19160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 192882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Error 193882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton GetFileSpec (FileSpec &file_spec) const; 19460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 195d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 196d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Open a file for read/writing with the specified options. 197d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 198d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Takes a path to a file which can be just a filename, or a full 199d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// path. 200d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 201d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] path 202d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The full or partial path to a file. 203d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 204d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] options 205d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::OpenOptions) 206d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 207d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] permissions 208d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Options to use when opening (see File::Permissions) 209d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 21060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 21160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Open (const char *path, 21260a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton uint32_t options, 2135892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton uint32_t permissions = ePermissionsDefault); 21460a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 21560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 21660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Close (); 21760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 2185892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Error 2195892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Duplicate (const File &rhs); 2205892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2215892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton int 2225892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton GetDescriptor() const; 2235892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2245892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton void 2255892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton SetDescriptor(int fd, bool transfer_ownership); 2265892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2275892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton FILE * 2285892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton GetStream (); 2295892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 2305892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton void 2315892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton SetStream (FILE *fh, bool transfer_ownership); 2325892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 233d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 234d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Read bytes from a file from the current file position. 235d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 236d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe. Use the read function 237d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that takes an "off_t &offset" to ensure correct operation in 238d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// multi-threaded environments. 239d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 240d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 241d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer where to put the bytes that are read. 242d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 243d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 244d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to read form the current file position 245d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// which gets modified with the number of bytes that were read. 246d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 247d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 248d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 249d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 250d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 25160a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 252d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Read (void *buf, size_t &num_bytes); 25360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 254d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 255d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Write bytes to a file at the current file position. 256d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 257d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe. Use the write function 258d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that takes an "off_t &offset" to ensure correct operation in 259d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// multi-threaded environments. 260d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 261d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 262d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer where to put the bytes that are read. 263d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 264d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 265d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to write to the current file position 266d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// which gets modified with the number of bytes that were 267d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// written. 268d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 269d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 270d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 271d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 272d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 27360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton Error 274d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Write (const void *buf, size_t &num_bytes); 27560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 276d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 277d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Seek to an offset relative to the beginning of the file. 278d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 279d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe, other threads that 280d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// access this object might also change the current file position. 281d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// For thread safe reads and writes see the following functions: 282d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Read (void *, size_t, off_t &) 283d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Write (const void *, size_t, off_t &) 284d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 2851c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// @param[in] offset 286d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset to seek to within the file relative to the 2871c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// beginning of the file. 2881c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// 2891c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// @param[in] error_ptr 2901c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// A pointer to a lldb_private::Error object that will be 2911c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// filled in if non-NULL. 292d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 293d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 2941c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// The resulting seek offset, or -1 on error. 295d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 2961c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton off_t 2971c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton SeekFromStart (off_t offset, Error *error_ptr = NULL); 298882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 299d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 300d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Seek to an offset relative to the current file position. 301d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 302d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe, other threads that 303d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// access this object might also change the current file position. 304d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// For thread safe reads and writes see the following functions: 305d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Read (void *, size_t, off_t &) 306d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Write (const void *, size_t, off_t &) 307d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 3081c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// @param[in] offset 309d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset to seek to within the file relative to the 3101c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// current file position. 3111c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// 3121c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// @param[in] error_ptr 3131c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// A pointer to a lldb_private::Error object that will be 3141c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// filled in if non-NULL. 315d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 316d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 3171c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// The resulting seek offset, or -1 on error. 318d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 3191c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton off_t 3201c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton SeekFromCurrent (off_t offset, Error *error_ptr = NULL); 321882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 322d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 323d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Seek to an offset relative to the end of the file. 324d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 325d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is NOT thread safe, other threads that 326d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// access this object might also change the current file position. 327d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// For thread safe reads and writes see the following functions: 328d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Read (void *, size_t, off_t &) 329d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @see File::Write (const void *, size_t, off_t &) 330d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 331d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 332d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset to seek to within the file relative to the 333d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// end of the file which gets filled in the the resulting 334d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// absolute file offset. 335d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 3361c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// @param[in] error_ptr 3371c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// A pointer to a lldb_private::Error object that will be 3381c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// filled in if non-NULL. 3391c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// 340d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 3411c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton /// The resulting seek offset, or -1 on error. 342d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 3431c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton off_t 3441c52f53b131537899c4ec04aa531e81979e1b544Greg Clayton SeekFromEnd (off_t offset, Error *error_ptr = NULL); 345882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 346d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 347d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Read bytes from a file from the specified file offset. 348d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 349d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is thread safe in that clients manager their 350d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// own file position markers and reads on other threads won't mess 351d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// up the current read. 352d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 353d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 354d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer where to put the bytes that are read. 355d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 356d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 357d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to read form the current file position 358d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// which gets modified with the number of bytes that were read. 359d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 360d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 361d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset within the file from which to read \a num_bytes 362d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// bytes. This offset gets incremented by the number of bytes 363d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that were read. 364d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 365d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 366d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 367d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 368d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 369d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Error 370d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Read (void *dst, size_t &num_bytes, off_t &offset); 371d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton 372d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 3732f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// Read bytes from a file from the specified file offset. 3742f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// 3752f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// NOTE: This function is thread safe in that clients manager their 3762f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// own file position markers and reads on other threads won't mess 3772f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// up the current read. 3782f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// 3792f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// @param[in/out] num_bytes 3802f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// The number of bytes to read form the current file position 3812f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// which gets modified with the number of bytes that were read. 3822f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// 3832f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// @param[in/out] offset 3842f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// The offset within the file from which to read \a num_bytes 3852f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// bytes. This offset gets incremented by the number of bytes 3862f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// that were read. 3872f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// 388fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton /// @param[in] null_terminate 389fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton /// Ensure that the data that is read is terminated with a NULL 390fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton /// character so that the data can be used as a C string. 391fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton /// 3922f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// @param[out] data_buffer_sp 3932f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// A data buffer to create and fill in that will contain any 3942f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// data that is read from the file. This buffer will be reset 3952f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// if an error occurs. 3962f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// 3972f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// @return 3982f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// An error object that indicates success or the reason for 3992f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton /// failure. 4002f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton //------------------------------------------------------------------ 4012f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton Error 402fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton Read (size_t &num_bytes, 403fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton off_t &offset, 404fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton bool null_terminate, 405fc04d2463ad654c28f9ee2ee836174cc86b7f8b8Greg Clayton lldb::DataBufferSP &data_buffer_sp); 4062f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton 4072f28ece553d2ef0d7b3e8d1419020591ec3818f9Greg Clayton //------------------------------------------------------------------ 408d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Write bytes to a file at the specified file offset. 409d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 410d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// NOTE: This function is thread safe in that clients manager their 411d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// own file position markers, though clients will need to implement 412d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// their own locking externally to avoid multiple people writing 413d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// to the file at the same time. 414d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 415d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in] buf 416d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// A buffer containing the bytes to write. 417d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 418d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] num_bytes 419d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The number of bytes to write to the file at offset \a offset. 420d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// \a num_bytes gets modified with the number of bytes that 421d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// were read. 422d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 423d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @param[in/out] offset 424d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// The offset within the file at which to write \a num_bytes 425d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// bytes. This offset gets incremented by the number of bytes 426d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// that were written. 427d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 428d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 429d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 430d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 431d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 432d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Error 433d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton Write (const void *src, size_t &num_bytes, off_t &offset); 434d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton 4355892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 4365892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Flush the current stream 4375892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 4385892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// @return 4395892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// An error object that indicates success or the reason for 4405892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// failure. 4415892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 4425892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Error 4435892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton Flush (); 444d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton 445d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 446d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// Sync to disk. 447d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// 448d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// @return 449d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// An error object that indicates success or the reason for 450d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton /// failure. 451d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton //------------------------------------------------------------------ 452882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Error 453882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton Sync (); 454882ef0508d9fc517b8ce51a6115b0a3a4e195725Greg Clayton 4555892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 4565892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Output printf formatted output to the stream. 4575892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 4585892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Print some formatted output to the stream. 4595892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 4605892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// @param[in] format 4615892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// A printf style format string. 4625892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// 4635892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// @param[in] ... 4645892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// Variable arguments that are needed for the printf style 4655892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton /// format string \a format. 4665892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton //------------------------------------------------------------------ 46736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 4687e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda Printf (const char *format, ...) __attribute__ ((format (printf, 2, 3))); 4695892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 47036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton size_t 4715892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton PrintfVarArg(const char *format, va_list args); 4725892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 47360a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Claytonprotected: 4745892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 4755892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 4765892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton bool 4775892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton DescriptorIsValid () const 4785892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 4795892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return m_descriptor >= 0; 4805892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 4815892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 4825892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton bool 4835892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton StreamIsValid () const 4845892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton { 4855892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton return m_stream != kInvalidStream; 4865892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton } 4875892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton 48860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 48960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton // Member variables 49060a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton //------------------------------------------------------------------ 4915892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton int m_descriptor; 4925892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton FILE *m_stream; 4935892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton uint32_t m_options; 4945892856b0cd6591194c669afab5bf9ac19c5b3a0Greg Clayton bool m_owned; 49560a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton}; 49660a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 49760a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton} // namespace lldb_private 49860a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton 49960a63aea48af3c5fb34a808e97cb5227eebbaf00Greg Clayton#endif // #if defined(__cplusplus) 500d35305ab31c10130fd60cec3f6ff62c49f1fb9ddGreg Clayton#endif // liblldb_File_h_ 501