1 #include "CustomFile.h"
3 extern void* MemFOpen( uint8_t* buffer, size_t dataSize, const char * const mode );
4 extern void MemFClose( const void *fp );
5 extern int MemFRead( void* buf, int eleSize, int count, const void *fp );
6 extern void MemFWrite( void *buf, int size, const void *fp );
7 extern int MemFSeek( const void *fp, int offset, int origin );
8 extern int MemFTell( const void *fp );
9 extern bool MemFEof( const void *fp );
11 extern void* OriginalFOpen( const char *name, const char *mode );
12 extern int OriginalFClose( const void *fp );
13 extern int OriginalFRead( void* buf, int eleSize, int count, const void *fp );
14 extern void OriginalFWrite( void *buf, int size, const void *fp );
15 extern void OriginalFWrite( void *buf, int eleSize, int count, const void *fp );
16 extern int OriginalFSeek( const void *fp, int offset, int origin );
17 extern int OriginalFTell( const void *fp );
18 extern bool OriginalFEof( const void *fp );
22 int GetRealFileMode(const char *path, int _Mode)
24 std::string strPath = path;
26 if ((std::ios::in | std::ios::ate == _Mode) && strPath.find(".json") != std::string::npos)
28 return std::ios::in | std::ios::binary | std::ios::ate;
36 extern const char* GetRealName(const char *name);
41 FILE* FOpen( const char *name, const char *mode )
43 if( NULL != name && '*' == name[0] )
45 std::string realName = std::GetRealName( name );
46 FILE* ret = (FILE*)OriginalFOpen( realName.c_str(), mode );
55 return (FILE*)OriginalFOpen( name, mode );
59 int FClose( const void* fp )
61 if( -1 == *( (char*)fp + 4 ) )
68 return OriginalFClose( fp );
72 FILE* FMemopen( void* buffer, size_t dataSize, const char * mode )
74 return (FILE*)MemFOpen( ( uint8_t*)buffer, dataSize, mode );
77 int FRead( void* buf, int eleSize, int count, const void *fp )
79 if( -1 == *( (char*)fp + 4 ) )
81 return MemFRead( buf, eleSize, count, fp );
85 return OriginalFRead( buf, eleSize, count, fp );
89 void FWrite( void *buf, int size, const void *fp )
91 if( -1 == *( (char*)fp + 4 ) )
93 MemFWrite( buf, size, fp );
97 OriginalFWrite( buf, size, fp );
101 unsigned int FWrite( const char *buf, unsigned int eleSize, unsigned int count, void *fp )
103 if( -1 == *( (char*)fp + 4 ) )
105 MemFWrite( (void*)buf, eleSize * count, fp );
109 OriginalFWrite((void*)buf, eleSize, count, fp );
112 return eleSize * count;
115 int FSeek( const void *fp, int offset, int origin )
117 if( -1 == *( (char*)fp + 4 ) )
119 return MemFSeek( fp, offset, origin );
123 return OriginalFSeek( fp, offset, origin );
127 int FTell( const void *fp )
129 if( -1 == *( (char*)fp + 4 ) )
131 return MemFTell( fp );
135 return OriginalFTell( fp );
139 bool FEof( const void *fp )
141 if( -1 == *( (char*)fp + 4 ) )
143 return MemFEof( fp );
147 return OriginalFEof( fp );
154 size_t __cdecl fread_for_c( void* _Buffer, size_t _ElementSize, size_t _ElementCount, void* _Stream )
156 return CustomFile::FRead( _Buffer, _ElementSize, _ElementCount, _Stream );
159 void __cdecl fwrite_for_c( void *buf, int size, const void *fp )
161 CustomFile::FWrite( buf, size, fp );