• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <rodsmith@rodsbooks.com>, (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 using namespace std;
41 
42 /***************************************
43  *                                     *
44  * DiskIO class and related structures *
45  *                                     *
46  ***************************************/
47 
48 class DiskIO {
49    protected:
50       string userFilename;
51       string realFilename;
52       string modelName;
53       int isOpen;
54       int openForWrite;
55 #ifdef _WIN32
56       HANDLE fd;
57 #else
58       int fd;
59 #endif
60 #ifdef ENABLE_HEAP_DISKIO
61       const unsigned char* data;
62       size_t size;
63       off_t off;
64 #endif
65    public:
66       DiskIO(void);
67       ~DiskIO(void);
68 
69       void MakeRealName(void);
70 #ifdef ENABLE_HEAP_DISKIO
71       int OpenForRead(const unsigned char* data, size_t size);
72 #endif
73       int OpenForRead(const string & filename);
74       int OpenForRead(void);
75       int OpenForWrite(const string & filename);
76       int OpenForWrite(void);
77       void Close();
78       int Seek(uint64_t sector);
79       int Read(void* buffer, int numBytes);
80       int Write(void* buffer, int numBytes);
81       int DiskSync(void); // resync disk caches to use new partitions
82       int GetBlockSize(void);
83       int GetPhysBlockSize(void);
GetModel(void)84       string GetModel(void) {return modelName;}
85       uint32_t GetNumHeads(void);
86       uint32_t GetNumSecsPerTrack(void);
IsOpen(void)87       int IsOpen(void) {return isOpen;}
IsOpenForWrite(void)88       int IsOpenForWrite(void) {return openForWrite;}
GetName(void)89       string GetName(void) const {return realFilename;}
90 
91       uint64_t DiskSize(int* err);
92 }; // class DiskIO
93 
94 #endif
95