1 // 2 // C++ Interface: diskio 3 // 4 // Description: Class to handle low-level disk I/O for GPT fdisk 5 // 6 // 7 // Author: Rod Smith <[email protected]>, (C) 2009 8 // 9 // Copyright: See COPYING file that comes with this distribution 10 // 11 // 12 // This program is copyright (c) 2009 by Roderick W. Smith. It is distributed 13 // under the terms of the GNU GPL version 2, as detailed in the COPYING file. 14 15 #ifndef __DISKIO_H 16 #define __DISKIO_H 17 18 #include <string> 19 #include <stdint.h> 20 #include <sys/types.h> 21 #ifdef _WIN32 22 #include <windows.h> 23 #include <winioctl.h> 24 #else 25 #include <sys/ioctl.h> 26 #endif 27 28 #ifdef __sun__ 29 #include <sys/dkio.h> 30 #endif 31 32 #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__) 33 #define fstat64 fstat 34 #define stat64 stat 35 #endif 36 37 #include "support.h" 38 //#include "parttypes.h" 39 40 /*************************************** 41 * * 42 * DiskIO class and related structures * 43 * * 44 ***************************************/ 45 46 class DiskIO { 47 protected: 48 std::string userFilename; 49 std::string realFilename; 50 std::string modelName; 51 int isOpen; 52 int openForWrite; 53 #ifdef _WIN32 54 HANDLE fd; 55 #else 56 int fd; 57 #endif 58 #ifdef ENABLE_HEAP_DISKIO 59 const unsigned char* data; 60 size_t size; 61 off_t off; 62 #endif 63 public: 64 DiskIO(void); 65 ~DiskIO(void); 66 67 void MakeRealName(void); 68 #ifdef ENABLE_HEAP_DISKIO 69 int OpenForRead(const unsigned char* data, size_t size); 70 #endif 71 int OpenForRead(const std::string & filename); 72 int OpenForRead(void); 73 int OpenForWrite(const std::string & filename); 74 int OpenForWrite(void); 75 void Close(); 76 int Seek(uint64_t sector); 77 int Read(void* buffer, int numBytes); 78 int Write(void* buffer, int numBytes); 79 int DiskSync(void); // resync disk caches to use new partitions 80 int GetBlockSize(void); 81 int GetPhysBlockSize(void); GetModel(void)82 std::string GetModel(void) {return modelName;} 83 uint32_t GetNumHeads(void); 84 uint32_t GetNumSecsPerTrack(void); IsOpen(void)85 int IsOpen(void) {return isOpen;} IsOpenForWrite(void)86 int IsOpenForWrite(void) {return openForWrite;} GetName(void)87 std::string GetName(void) const {return realFilename;} 88 89 uint64_t DiskSize(int* err); 90 }; // class DiskIO 91 92 #endif 93