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