[makerom] Changed ReadFile64 & WriteBuffer to read/write data in blocks. (Works around fread/fwrite buffer size limitations)

This commit is contained in:
jakcron
2015-11-15 05:25:41 +08:00
parent 4e6cbfbd80
commit bb10fd8ab3
2 changed files with 16 additions and 8 deletions
+15 -7
View File
@@ -3,6 +3,8 @@
#include "polarssl/base64.h"
#define IO_BLOCKSIZE 5*MB
// Memory
int CopyData(u8 **dest, const u8 *source, u64 size)
{
@@ -370,22 +372,28 @@ u8* ImportFile(char *file, u64 size)
return NULL;
}
FILE *fp = fopen(file,"rb");
fread(data,fsize,1,fp);
ReadFile64(data, fsize, 0, fp);
fclose(fp);
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);
fwrite(buffer,size,1,output);
const u8* _buffer = (const u8*)buffer;
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);
fread(outbuff,size,1,file);
u8* _buffer = (u8*)outbuff;
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)
+1 -1
View File
@@ -55,7 +55,7 @@ u64 wGetFileSize64(u16 *filename);
//IO Misc
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);
int fseek_64(FILE *fp, u64 file_pos);