ReactOS  0.4.14-dev-552-g2fad488
diskio.c File Reference
#include "diskio.h"
#include <stdio.h>
Include dependency graph for diskio.c:

Go to the source code of this file.

Functions

DSTATUS disk_openimage (BYTE pdrv, const char *imageFileName)
 
VOID disk_cleanup (BYTE pdrv)
 
DSTATUS disk_initialize (BYTE pdrv)
 
DSTATUS disk_status (BYTE pdrv)
 
DRESULT disk_read (BYTE pdrv, BYTE *buff, DWORD sector, UINT count)
 
DRESULT disk_write (BYTE pdrv, const BYTE *buff, DWORD sector, UINT count)
 
DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void *buff)
 

Variables

UINT sectorCount [1] = { 0 }
 
FILEdriveHandle [1] = { NULL }
 
const int driveHandleCount = sizeof(driveHandle) / sizeof(FILE*)
 

Function Documentation

◆ disk_cleanup()

VOID disk_cleanup ( BYTE  pdrv)

Definition at line 48 of file diskio.c.

51 {
52  if (pdrv < driveHandleCount)
53  {
54  if (driveHandle[pdrv] != NULL)
55  {
56  fclose(driveHandle[pdrv]);
57  driveHandle[pdrv] = NULL;
58  }
59  }
60 }
FILE * driveHandle[1]
Definition: diskio.c:17
smooth NULL
Definition: ftsmooth.c:416
const int driveHandleCount
Definition: diskio.c:18
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)

Referenced by main().

◆ disk_initialize()

DSTATUS disk_initialize ( BYTE  pdrv)

Definition at line 66 of file diskio.c.

69 {
70  if (pdrv == 0) /* only one drive (image file) supported atm. */
71  {
72  return 0;
73  }
74  return STA_NOINIT;
75 }
#define STA_NOINIT
Definition: diskio.h:46

Referenced by f_mkfs(), and find_volume().

◆ disk_ioctl()

DRESULT disk_ioctl ( BYTE  pdrv,
BYTE  cmd,
void buff 
)

Definition at line 169 of file diskio.c.

174 {
175  if (pdrv < driveHandleCount)
176  {
177  if (driveHandle[pdrv] != NULL)
178  {
179  switch (cmd)
180  {
181  case CTRL_SYNC:
182  fflush(driveHandle[pdrv]);
183  return RES_OK;
184  case GET_SECTOR_SIZE:
185  *(DWORD*)buff = 512;
186  return RES_OK;
187  case GET_BLOCK_SIZE:
188  *(DWORD*)buff = 512;
189  return RES_OK;
190  case GET_SECTOR_COUNT:
191  {
192  if (sectorCount[pdrv] <= 0)
193  {
194  if (fseek(driveHandle[pdrv], 0, SEEK_END))
195  printf("fseek failed!\n");
196  else
197  sectorCount[pdrv] = ftell(driveHandle[pdrv]) / 512;
198  }
199 
200  *(DWORD*)buff = sectorCount[pdrv];
201  return RES_OK;
202  }
203  case SET_SECTOR_COUNT:
204  {
205  int count = *(DWORD*)buff;
206  long size;
207 
208  sectorCount[pdrv] = count;
209 
210  fseek(driveHandle[pdrv], 0, SEEK_END);
211  size = ftell(driveHandle[pdrv]) / 512;
212 
213  if (size < count)
214  {
215  if (fseek(driveHandle[pdrv], count * 512 - 1, SEEK_SET))
216  return RES_ERROR;
217 
218  fwrite(buff, 1, 1, driveHandle[pdrv]);
219 
220  return RES_OK;
221  }
222  else
223  {
224  // SHRINKING NOT IMPLEMENTED
225  return RES_OK;
226  }
227  }
228  }
229  }
230  }
231 
232  return RES_PARERR;
233 }
#define GET_BLOCK_SIZE
Definition: diskio.h:57
FILE * driveHandle[1]
Definition: diskio.c:17
#define SET_SECTOR_COUNT
Definition: diskio.h:61
Definition: ftp_var.h:139
GLuint GLuint GLsizei count
Definition: gl.h:1545
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
#define GET_SECTOR_COUNT
Definition: diskio.h:55
smooth NULL
Definition: ftsmooth.c:416
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
#define SEEK_SET
Definition: jmemansi.c:26
GLsizeiptr size
Definition: glext.h:5919
Definition: diskio.h:23
unsigned long DWORD
Definition: ntddk_ex.h:95
const int driveHandleCount
Definition: diskio.c:18
#define GET_SECTOR_SIZE
Definition: diskio.h:56
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
#define CTRL_SYNC
Definition: diskio.h:54
UINT sectorCount[1]
Definition: diskio.c:16
_Check_return_ _CRTIMP long __cdecl ftell(_Inout_ FILE *_File)
#define SEEK_END
Definition: cabinet.c:27
static unsigned char buff[32768]
Definition: fatten.c:17
#define printf
Definition: config.h:203

Referenced by f_mkfs(), find_volume(), main(), remove_chain(), and sync_fs().

◆ disk_openimage()

DSTATUS disk_openimage ( BYTE  pdrv,
const char imageFileName 
)

Definition at line 24 of file diskio.c.

25 {
26  if (pdrv < driveHandleCount)
27  {
28  if (driveHandle[0] != NULL)
29  return 0;
30 
31  driveHandle[0] = fopen(imageFileName, "r+b");
32  if (!driveHandle[0])
33  {
34  driveHandle[0] = fopen(imageFileName, "w+b");
35  }
36 
37  if (driveHandle[0] != NULL)
38  return 0;
39  }
40  return STA_NOINIT;
41 }
FILE * driveHandle[1]
Definition: diskio.c:17
#define STA_NOINIT
Definition: diskio.h:46
smooth NULL
Definition: ftsmooth.c:416
const int driveHandleCount
Definition: diskio.c:18
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)

Referenced by main().

◆ disk_read()

DRESULT disk_read ( BYTE  pdrv,
BYTE buff,
DWORD  sector,
UINT  count 
)

Definition at line 99 of file diskio.c.

105 {
106  DWORD result;
107 
108  if (pdrv < driveHandleCount)
109  {
110  if (driveHandle[pdrv] != NULL)
111  {
112  if (fseek(driveHandle[pdrv], sector * 512, SEEK_SET))
113  return RES_ERROR;
114 
115  result = fread(buff, 512, count, driveHandle[pdrv]);
116 
117  if (result != count)
118  return RES_ERROR;
119 
120  return RES_OK;
121  }
122  }
123 
124  return RES_PARERR;
125 }
FILE * driveHandle[1]
Definition: diskio.c:17
uint32_t sector
Definition: isohybrid.c:61
GLuint GLuint GLsizei count
Definition: gl.h:1545
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
smooth NULL
Definition: ftsmooth.c:416
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
#define SEEK_SET
Definition: jmemansi.c:26
Definition: diskio.h:23
unsigned long DWORD
Definition: ntddk_ex.h:95
const int driveHandleCount
Definition: diskio.c:18
GLuint64EXT * result
Definition: glext.h:11304
static unsigned char buff[32768]
Definition: fatten.c:17

◆ disk_status()

DSTATUS disk_status ( BYTE  pdrv)

Definition at line 83 of file diskio.c.

86 {
87  if (pdrv < driveHandleCount)
88  {
89  if (driveHandle[pdrv] != NULL)
90  return 0;
91  }
92  return STA_NOINIT;
93 }
FILE * driveHandle[1]
Definition: diskio.c:17
#define STA_NOINIT
Definition: diskio.h:46
smooth NULL
Definition: ftsmooth.c:416
const int driveHandleCount
Definition: diskio.c:18

Referenced by find_volume(), and validate().

◆ disk_write()

DRESULT disk_write ( BYTE  pdrv,
const BYTE buff,
DWORD  sector,
UINT  count 
)

Definition at line 134 of file diskio.c.

140 {
141  DWORD result;
142 
143  if (pdrv < driveHandleCount)
144  {
145  if (driveHandle[pdrv] != NULL)
146  {
147  if (fseek(driveHandle[pdrv], sector * 512, SEEK_SET))
148  return RES_ERROR;
149 
150  result = fwrite(buff, 512, count, driveHandle[pdrv]);
151 
152  if (result != count)
153  return RES_ERROR;
154 
155  return RES_OK;
156  }
157  }
158 
159  return RES_PARERR;
160 }
FILE * driveHandle[1]
Definition: diskio.c:17
uint32_t sector
Definition: isohybrid.c:61
GLuint GLuint GLsizei count
Definition: gl.h:1545
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
smooth NULL
Definition: ftsmooth.c:416
_Check_return_opt_ _CRTIMP int __cdecl fseek(_Inout_ FILE *_File, _In_ long _Offset, _In_ int _Origin)
#define SEEK_SET
Definition: jmemansi.c:26
Definition: diskio.h:23
unsigned long DWORD
Definition: ntddk_ex.h:95
const int driveHandleCount
Definition: diskio.c:18
GLuint64EXT * result
Definition: glext.h:11304
static unsigned char buff[32768]
Definition: fatten.c:17

Variable Documentation

◆ driveHandle

FILE* driveHandle[1] = { NULL }

Definition at line 17 of file diskio.c.

Referenced by disk_cleanup(), disk_ioctl(), disk_openimage(), disk_read(), disk_status(), and disk_write().

◆ driveHandleCount

const int driveHandleCount = sizeof(driveHandle) / sizeof(FILE*)

Definition at line 18 of file diskio.c.

Referenced by disk_cleanup(), disk_ioctl(), disk_openimage(), disk_read(), disk_status(), and disk_write().

◆ sectorCount

UINT sectorCount[1] = { 0 }