xref: /aosp_15_r20/external/gptfdisk/diskio.h (revision 57696d54d05c64fd1b1787f8371dbcf104911cfb)
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