From: Laszlo T. <ave...@us...> - 2006-02-17 17:17:27
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27615/Core Modified Files: CachedFileStream.cpp CachedFileStream.h DataStream.h FileStream.cpp Log Message: fixed cachedfilestream to be able to open files not in the cachepath Index: CachedFileStream.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/CachedFileStream.h,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** CachedFileStream.h 19 Jun 2005 22:59:33 -0000 1.17 --- CachedFileStream.h 17 Feb 2006 17:17:18 -0000 1.18 *************** *** 43,47 **** unsigned long startpos; _FILE* str; - char originalfile[_MAX_PATH]; public: CachedFileStream(const char* stream, bool autoFree = true); --- 43,46 ---- Index: FileStream.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/FileStream.cpp,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** FileStream.cpp 22 Jun 2005 21:21:15 -0000 1.40 --- FileStream.cpp 17 Feb 2006 17:17:18 -0000 1.41 *************** *** 64,71 **** --- 64,73 ---- opened = true; created = false; + //FIXME: this is a very lame way to tell the file length _fseek( str, 0, SEEK_END ); size = _ftell( str ); _fseek( str, 0, SEEK_SET ); ExtractFileFromPath( filename, fname ); + strncpy( originalfile, fname, _MAX_PATH); Pos = 0; return true; *************** *** 91,96 **** opened = true; created = false; ! size = maxsize; ! strcpy( filename, "" ); _fseek( str, spos, SEEK_SET ); Pos = 0; --- 93,99 ---- opened = true; created = false; ! size = maxsize; ! filename[0]=0; ! originalfile[0]=0; _fseek( str, spos, SEEK_SET ); Pos = 0; *************** *** 108,113 **** bool FileStream::Create(const char *folder, const char* fname, SClass_ID ClassID) { - char path[_MAX_PATH]; - if (str && autoFree) { #ifdef _DEBUG --- 111,114 ---- *************** *** 118,126 **** autoFree = true; ExtractFileFromPath( filename, fname ); ! strcpy( path, folder ); ! strcat( path, SPathDelimiter); ! strcat( path, filename ); ! strcat( path, core->TypeExt( ClassID ) ); ! str = _fopen( path, "wb" ); if (str == NULL) { return false; --- 119,127 ---- autoFree = true; ExtractFileFromPath( filename, fname ); ! strcpy( originalfile, folder ); ! strcat( originalfile, SPathDelimiter); ! strcat( originalfile, filename ); ! strcat( originalfile, core->TypeExt( ClassID ) ); ! str = _fopen( originalfile, "wb" ); if (str == NULL) { return false; Index: DataStream.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/DataStream.h,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** DataStream.h 8 Nov 2005 22:59:05 -0000 1.18 --- DataStream.h 17 Feb 2006 17:17:18 -0000 1.19 *************** *** 57,62 **** unsigned long size; bool Encrypted; ! public: //FIXME: this is a bit ugly ! char filename[_MAX_PATH]; public: DataStream(void); --- 57,63 ---- unsigned long size; bool Encrypted; ! public: ! char filename[16]; //8+1+3+1 padded to dword ! char originalfile[_MAX_PATH]; public: DataStream(void); Index: CachedFileStream.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/CachedFileStream.cpp,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** CachedFileStream.cpp 16 Oct 2005 21:46:06 -0000 1.35 --- CachedFileStream.cpp 17 Feb 2006 17:17:18 -0000 1.36 *************** *** 28,38 **** CachedFileStream::CachedFileStream(const char* stream, bool autoFree) { ! char fname[_MAX_PATH]; ! ExtractFileFromPath( fname, stream ); ! ! char path[_MAX_PATH]; ! PathJoin( path, core->CachePath, fname, NULL ); ! str = _fopen( path, "rb" ); if (str == NULL) { // File was not found in cache if (core->GameOnCD) { --- 28,35 ---- CachedFileStream::CachedFileStream(const char* stream, bool autoFree) { ! ExtractFileFromPath( filename, stream ); ! PathJoin( originalfile, core->CachePath, filename, NULL ); ! str = _fopen( originalfile, "rb" ); if (str == NULL) { // File was not found in cache if (core->GameOnCD) { *************** *** 41,45 **** core->CachedFileStreamPtrCount++; #endif ! _FILE* dest = _fopen( path, "wb" ); #ifdef _DEBUG core->CachedFileStreamPtrCount++; --- 38,42 ---- core->CachedFileStreamPtrCount++; #endif ! _FILE* dest = _fopen( originalfile, "wb" ); #ifdef _DEBUG core->CachedFileStreamPtrCount++; *************** *** 59,66 **** core->CachedFileStreamPtrCount--; #endif - str = _fopen( path, "rb" ); } else { // Don't cache files already on hdd ! str = _fopen( stream, "rb" ); } } #ifdef _DEBUG --- 56,63 ---- core->CachedFileStreamPtrCount--; #endif } else { // Don't cache files already on hdd ! strncpy(originalfile, stream, _MAX_PATH); } + str = _fopen( originalfile, "rb" ); } #ifdef _DEBUG *************** *** 71,76 **** size = _ftell( str ); _fseek( str, 0, SEEK_SET ); - strcpy( filename, fname ); - strcpy( originalfile, stream ); Pos = 0; this->autoFree = autoFree; --- 68,71 ---- *************** *** 92,95 **** --- 87,95 ---- return; } + strncpy( originalfile, cfs->originalfile, sizeof(originalfile) ); + strncpy( filename, cfs->filename, sizeof(filename) ); + } else { + strncpy( originalfile, cpath, sizeof(originalfile) ); + strncpy( filename, cfs->filename, sizeof(filename) ); } #ifdef _DEBUG *************** *** 97,100 **** --- 97,102 ---- #endif _fseek( str, startpos, SEEK_SET ); + + Pos = 0; } *************** *** 116,120 **** //we don't allow partial reads anyway, so it isn't a problem that //i don't adjust length here (partial reads are evil) ! if(Pos+length>size ) { return GEM_ERROR; } --- 118,122 ---- //we don't allow partial reads anyway, so it isn't a problem that //i don't adjust length here (partial reads are evil) ! if (Pos+length>size ) { return GEM_ERROR; } *************** *** 164,168 **** } //we went past the buffer ! if(Pos>size) { printf("[Streams]: Invalid seek position: %ld (limit: %ld)\n",Pos, size); return GEM_ERROR; --- 166,170 ---- } //we went past the buffer ! if (Pos>size) { printf("[Streams]: Invalid seek position: %ld (limit: %ld)\n",Pos, size); return GEM_ERROR; *************** *** 174,178 **** int CachedFileStream::ReadLine(void* buf, unsigned int maxlen) { ! if(!maxlen) { return 0; } --- 176,180 ---- int CachedFileStream::ReadLine(void* buf, unsigned int maxlen) { ! if (!maxlen) { return 0; } |