blob: dec56ad7f554ee9211b9b293e9d0ddcb58728095 [file] [log] [blame]
srs5694add79a62010-01-26 15:59:58 -05001//
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>
srs56940a697312010-01-28 21:10:52 -050021#ifdef _WIN32
srs5694add79a62010-01-26 15:59:58 -050022#include <windows.h>
23#include <winioctl.h>
24#else
25#include <sys/ioctl.h>
26#endif
27
srs56940741fa22013-01-09 12:55:40 -050028#ifdef __sun__
29#include <sys/dkio.h>
30#endif
31
srs569408bb0da2010-02-19 17:19:55 -050032#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__)
srs5694add79a62010-01-26 15:59:58 -050033#define fstat64 fstat
34#define stat64 stat
35#endif
36
37#include "support.h"
srs5694bf8950c2011-03-12 01:23:12 -050038//#include "parttypes.h"
srs5694add79a62010-01-26 15:59:58 -050039
srs5694add79a62010-01-26 15:59:58 -050040/***************************************
41 * *
42 * DiskIO class and related structures *
43 * *
44 ***************************************/
45
46class DiskIO {
47 protected:
Rod Smithedc67b62022-04-10 09:28:08 -040048 std::string userFilename;
49 std::string realFilename;
50 std::string modelName;
srs5694add79a62010-01-26 15:59:58 -050051 int isOpen;
52 int openForWrite;
srs56940a697312010-01-28 21:10:52 -050053#ifdef _WIN32
srs5694add79a62010-01-26 15:59:58 -050054 HANDLE fd;
55#else
56 int fd;
57#endif
Jeff Sharkey83fdc992020-10-13 19:50:30 -060058#ifdef ENABLE_HEAP_DISKIO
59 const unsigned char* data;
60 size_t size;
61 off_t off;
62#endif
srs5694add79a62010-01-26 15:59:58 -050063 public:
64 DiskIO(void);
srs5694add79a62010-01-26 15:59:58 -050065 ~DiskIO(void);
66
srs5694add79a62010-01-26 15:59:58 -050067 void MakeRealName(void);
Jeff Sharkey83fdc992020-10-13 19:50:30 -060068#ifdef ENABLE_HEAP_DISKIO
69 int OpenForRead(const unsigned char* data, size_t size);
70#endif
Rod Smithedc67b62022-04-10 09:28:08 -040071 int OpenForRead(const std::string & filename);
srs5694add79a62010-01-26 15:59:58 -050072 int OpenForRead(void);
Rod Smithedc67b62022-04-10 09:28:08 -040073 int OpenForWrite(const std::string & filename);
srs5694add79a62010-01-26 15:59:58 -050074 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);
srs5694a17fe692011-09-10 20:30:20 -040079 int DiskSync(void); // resync disk caches to use new partitions
srs5694add79a62010-01-26 15:59:58 -050080 int GetBlockSize(void);
Rod Smithfc0e0142017-07-25 21:33:18 -040081 int GetPhysBlockSize(void);
Rod Smithedc67b62022-04-10 09:28:08 -040082 std::string GetModel(void) {return modelName;}
srs5694bf8950c2011-03-12 01:23:12 -050083 uint32_t GetNumHeads(void);
84 uint32_t GetNumSecsPerTrack(void);
srs5694add79a62010-01-26 15:59:58 -050085 int IsOpen(void) {return isOpen;}
86 int IsOpenForWrite(void) {return openForWrite;}
Rod Smithedc67b62022-04-10 09:28:08 -040087 std::string GetName(void) const {return realFilename;}
srs5694add79a62010-01-26 15:59:58 -050088
89 uint64_t DiskSize(int* err);
srs5694a6297b82012-03-25 16:13:16 -040090}; // class DiskIO
srs5694add79a62010-01-26 15:59:58 -050091
92#endif