// // C++ Interface: diskio // // Description: Class to handle low-level disk I/O for GPT fdisk // // // Author: Rod Smith , (C) 2009 // // Copyright: See COPYING file that comes with this distribution // // // This program is copyright (c) 2009 by Roderick W. Smith. It is distributed // under the terms of the GNU GPL version 2, as detailed in the COPYING file. #ifndef __DISKIO_H #define __DISKIO_H #include #include #include #ifdef _WIN32 #include #include #else #include #endif #ifdef __sun__ #include #endif #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) #define fstat64 fstat #define stat64 stat #endif #include "support.h" //#include "parttypes.h" using namespace std; /*************************************** * * * DiskIO class and related structures * * * ***************************************/ class DiskIO { protected: string userFilename; string realFilename; string modelName; int isOpen; int openForWrite; #ifdef _WIN32 HANDLE fd; #else int fd; #endif #ifdef ENABLE_HEAP_DISKIO const unsigned char* data; size_t size; off_t off; #endif public: DiskIO(void); ~DiskIO(void); void MakeRealName(void); #ifdef ENABLE_HEAP_DISKIO int OpenForRead(const unsigned char* data, size_t size); #endif int OpenForRead(const string & filename); int OpenForRead(void); int OpenForWrite(const string & filename); int OpenForWrite(void); void Close(); int Seek(uint64_t sector); int Read(void* buffer, int numBytes); int Write(void* buffer, int numBytes); int DiskSync(void); // resync disk caches to use new partitions int GetBlockSize(void); int GetPhysBlockSize(void); string GetModel(void) {return modelName;} uint32_t GetNumHeads(void); uint32_t GetNumSecsPerTrack(void); int IsOpen(void) {return isOpen;} int IsOpenForWrite(void) {return openForWrite;} string GetName(void) const {return realFilename;} uint64_t DiskSize(int* err); }; // class DiskIO #endif