mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-04 00:39:03 +00:00
[makerom] Changed ReadFile64 & WriteBuffer to read/write data in blocks. (Works around fread/fwrite buffer size limitations)
This commit is contained in:
+15
-7
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include "polarssl/base64.h"
|
#include "polarssl/base64.h"
|
||||||
|
|
||||||
|
#define IO_BLOCKSIZE 5*MB
|
||||||
|
|
||||||
// Memory
|
// Memory
|
||||||
int CopyData(u8 **dest, const u8 *source, u64 size)
|
int CopyData(u8 **dest, const u8 *source, u64 size)
|
||||||
{
|
{
|
||||||
@@ -370,22 +372,28 @@ u8* ImportFile(char *file, u64 size)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
FILE *fp = fopen(file,"rb");
|
FILE *fp = fopen(file,"rb");
|
||||||
fread(data,fsize,1,fp);
|
ReadFile64(data, fsize, 0, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WriteBuffer(void *buffer, u64 size, u64 offset, FILE *output)
|
void WriteBuffer(const void *buffer, u64 size, u64 offset, FILE *fp)
|
||||||
{
|
{
|
||||||
fseek_64(output,offset);
|
const u8* _buffer = (const u8*)buffer;
|
||||||
fwrite(buffer,size,1,output);
|
fseek_64(fp,offset);
|
||||||
|
for (; size > IO_BLOCKSIZE; size -= IO_BLOCKSIZE, _buffer += IO_BLOCKSIZE)
|
||||||
|
fwrite(_buffer, IO_BLOCKSIZE, 1, fp);
|
||||||
|
fwrite(_buffer,size,1,fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReadFile64(void *outbuff, u64 size, u64 offset, FILE *file)
|
void ReadFile64(void *outbuff, u64 size, u64 offset, FILE *fp)
|
||||||
{
|
{
|
||||||
fseek_64(file,offset);
|
u8* _buffer = (u8*)outbuff;
|
||||||
fread(outbuff,size,1,file);
|
fseek_64(fp, offset);
|
||||||
|
for (; size > IO_BLOCKSIZE; size -= IO_BLOCKSIZE, _buffer += IO_BLOCKSIZE)
|
||||||
|
fread(_buffer, IO_BLOCKSIZE, 1, fp);
|
||||||
|
fread(_buffer, size, 1, fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
int fseek_64(FILE *fp, u64 file_pos)
|
int fseek_64(FILE *fp, u64 file_pos)
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ u64 wGetFileSize64(u16 *filename);
|
|||||||
|
|
||||||
//IO Misc
|
//IO Misc
|
||||||
u8* ImportFile(char *file, u64 size);
|
u8* ImportFile(char *file, u64 size);
|
||||||
void WriteBuffer(void *buffer, u64 size, u64 offset, FILE *output);
|
void WriteBuffer(const void *buffer, u64 size, u64 offset, FILE *output);
|
||||||
void ReadFile64(void *outbuff, u64 size, u64 offset, FILE *file);
|
void ReadFile64(void *outbuff, u64 size, u64 offset, FILE *file);
|
||||||
int fseek_64(FILE *fp, u64 file_pos);
|
int fseek_64(FILE *fp, u64 file_pos);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user