5992bf798ceed1ba31313560bfc47395a27fb44a
[platform/core/uifw/dali-adaptor.git] / third-party / windows-platform / Win32File / CustomFile.cpp
1 #include "CustomFile.h"
2
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 );
10
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 );
19
20 namespace std
21 {
22 int GetRealFileMode(const char *path, int _Mode)
23 {
24   std::string strPath = path;
25
26   if ((std::ios::in | std::ios::ate == _Mode) && strPath.find(".json") != std::string::npos)
27   {
28     return std::ios::in | std::ios::binary | std::ios::ate;
29   }
30   else
31   {
32     return _Mode;
33   }
34 }
35
36 extern const char* GetRealName(const char *name);
37 }
38
39 namespace CustomFile
40 {
41 FILE* FOpen( const char *name, const char *mode )
42 {
43   if( NULL != name && '*' == name[0] )
44   {
45     std::string realName = std::GetRealName( name );
46     FILE* ret = (FILE*)OriginalFOpen( realName.c_str(), mode );
47     if (NULL == ret)
48     {
49       int temp = 0;
50     }
51     return ret;
52   }
53   else
54   {
55     return (FILE*)OriginalFOpen( name, mode );
56   }
57 }
58
59 int FClose( const void* fp )
60 {
61   if( -1 == *( (char*)fp + 4 ) )
62   {
63     MemFClose( fp );
64     return 0;
65   }
66   else
67   {
68     return OriginalFClose( fp );
69   }
70 }
71
72 FILE* FMemopen( void* buffer, size_t dataSize, const char * mode )
73 {
74   return (FILE*)MemFOpen( ( uint8_t*)buffer, dataSize, mode );
75 }
76
77 int FRead( void* buf, int eleSize, int count, const void *fp )
78 {
79   if( -1 == *( (char*)fp + 4 ) )
80   {
81     return MemFRead( buf, eleSize, count, fp );
82   }
83   else
84   {
85     return OriginalFRead( buf, eleSize, count, fp );
86   }
87 }
88
89 void FWrite( void *buf, int size, const void *fp )
90 {
91   if( -1 == *( (char*)fp + 4 ) )
92   {
93     MemFWrite( buf, size, fp );
94   }
95   else
96   {
97     OriginalFWrite( buf, size, fp );
98   }
99 }
100
101 unsigned int FWrite( const char  *buf, unsigned int eleSize, unsigned int count, void *fp )
102 {
103   if( -1 == *( (char*)fp + 4 ) )
104   {
105     MemFWrite( (void*)buf, eleSize * count, fp );
106   }
107   else
108   {
109     OriginalFWrite((void*)buf, eleSize, count, fp );
110   }
111
112   return eleSize * count;
113 }
114
115 int FSeek( const void *fp, int offset, int origin )
116 {
117   if( -1 == *( (char*)fp + 4 ) )
118   {
119     return MemFSeek( fp, offset, origin );
120   }
121   else
122   {
123     return OriginalFSeek( fp, offset, origin );
124   }
125 }
126
127 int FTell( const void *fp )
128 {
129   if( -1 == *( (char*)fp + 4 ) )
130   {
131     return MemFTell( fp );
132   }
133   else
134   {
135     return OriginalFTell( fp );
136   }
137 }
138
139 bool FEof( const void *fp )
140 {
141   if( -1 == *( (char*)fp + 4 ) )
142   {
143     return MemFEof( fp );
144   }
145   else
146   {
147     return OriginalFEof( fp );
148   }
149 }
150 }
151
152 extern "C"
153 {
154 size_t __cdecl fread_for_c( void*  _Buffer, size_t _ElementSize, size_t _ElementCount, void*  _Stream )
155 {
156   return CustomFile::FRead( _Buffer, _ElementSize, _ElementCount, _Stream );
157 }
158
159 void __cdecl fwrite_for_c( void *buf, int size, const void *fp )
160 {
161   CustomFile::FWrite( buf, size, fp );
162 }
163 }