#include <file.hpp>
Inheritance diagram for CFile:
Public Methods | |
CFile (const char *filename, const char *mode) | |
~CFile () | |
void | Seek (long offset, int whence=SEEK_SET) const |
char * | ReadString () const |
char * | ReadStringFlag (unsigned flag) const |
long | Tell () const |
void | RawRead (void *ptr, size_t size) const |
void | RawWrite (const void *ptr, size_t size) |
FILE * | GetFile () |
Private Methods | |
void | Close () |
Private Attributes | |
FILE * | file |
|
Definition at line 35 of file file.cpp. References file.
|
|
Definition at line 170 of file file.cpp. References Close().
00171 { 00172 Close(); 00173 } |
|
Definition at line 43 of file file.cpp. References file. Referenced by ~CFile().
|
|
Definition at line 64 of file file.hpp. References file. Referenced by OutputImport().
00064 { return file; }; |
|
Implements ICFile. Reimplemented in CSignFile. Definition at line 158 of file file.cpp. References file. Referenced by ObjectModule::ObjectModule(), CSignFile::RawRead(), and ReadStringFlag().
00159 { 00160 if ( fread(ptr,1,size,file) != size ) 00161 throw runtime_error("Unable to read from file"); 00162 } |
|
Implements ICFile. Definition at line 164 of file file.cpp. References file. Referenced by WriteIcons().
00165 { 00166 if ( fwrite(ptr,1,size,file) != size ) 00167 throw runtime_error("Unable to write to file"); 00168 } |
|
Implements ICFile. Reimplemented in CSignFile. Definition at line 64 of file file.cpp. References file. Referenced by CSignFile::ReadString().
00065 { 00066 char *pbegin = new char[16]; 00067 char *p = pbegin; 00068 char *pend = pbegin + 16; 00069 int c; 00070 for (;;) 00071 { 00072 c = fgetc(file); 00073 if (c==EOF) 00074 throw runtime_error("Error reading string"); 00075 if (p==pend) { 00076 int size = (pend-pbegin); 00077 pend = new char[size+16]; 00078 memcpy(pend,pbegin,size*sizeof(char)); 00079 delete [] pbegin; 00080 pbegin = pend; 00081 pend = (p = pbegin + size) + 16; 00082 } 00083 *p++ = (char)c; 00084 if (c==0) 00085 return pbegin; 00086 } 00087 } |
|
Implements ICFile. Reimplemented in CSignFile. Definition at line 90 of file file.cpp. References file, RawRead(), ICFile::strLen16, ICFile::strLen32, ICFile::strLen8, ICFile::strLenMask, and ICFile::strUcs2. Referenced by CSignFile::ReadStringFlag().
00091 { 00092 unsigned char charBit = flag & strUcs2 ? 1:0; 00093 char *pbegin = new char[16<<charBit]; 00094 char *p = pbegin; 00095 char *pend = pbegin + (16<<charBit); 00096 int c,cc; 00097 unsigned len = ~0u; 00098 00099 uint32_t ui32; 00100 uint16_t ui16; 00101 uint8_t ui8; 00102 00103 switch (flag & strLenMask) 00104 { 00105 case strLen8: RawRead(&ui8, sizeof(ui8) ); len = ui8; break; 00106 case strLen16: RawRead(&ui16,sizeof(ui16)); len = ui16; break; 00107 case strLen32: RawRead(&ui32,sizeof(ui32)); len = ui32; break; 00108 } 00109 00110 cc = 0; 00111 for (;;--len) 00112 { 00113 // read char 00114 c = fgetc(file); 00115 if (c==EOF) 00116 throw runtime_error("Error reading string"); 00117 if (charBit) 00118 { 00119 cc = fgetc(file); 00120 if (cc==EOF) 00121 throw runtime_error("Error reading string"); 00122 } 00123 00124 // extend buffer if needed 00125 if (p==pend) { 00126 int size = (pend-pbegin); 00127 pend = new char[size+(16<<charBit)]; 00128 memcpy(pend,pbegin,size*sizeof(char)); 00129 delete [] pbegin; 00130 pbegin = pend; 00131 pend = (p = pbegin + size) + (16<<charBit); 00132 } 00133 00134 // check end string 00135 if (len == 0) 00136 { 00137 *p++ = 0; 00138 if (charBit) 00139 *p++ = 0; 00140 break; 00141 } 00142 00143 // write char 00144 *p++ = (char)c; 00145 if (charBit) 00146 *p++ = (char)cc; 00147 00148 if ( (flag&strLenMask) == 0 ) 00149 { 00150 if ( c==0 && cc==0 ) 00151 break; 00152 } 00153 } 00154 00155 return pbegin; 00156 } |
|
Implements ICFile. Definition at line 50 of file file.cpp. References file. Referenced by MarkImport(), ObjectModule::ObjectModule(), and RawDump().
00051 { 00052 if ( fseek(file,offset,whence)!=0 ) 00053 throw runtime_error("Unable to seek"); 00054 } |
|
Implements ICFile. Definition at line 56 of file file.cpp. References file. Referenced by RawDump(), CSignFile::RawRead(), CSignFile::ReadString(), and CSignFile::ReadStringFlag().
00057 { 00058 long pos = ftell(file); 00059 if ( pos == -1L ) 00060 throw runtime_error("Seek error"); 00061 return pos; 00062 } |
|
Definition at line 67 of file file.hpp. Referenced by CFile(), Close(), GetFile(), RawRead(), RawWrite(), ReadString(), ReadStringFlag(), Seek(), and Tell(). |