| #ifndef _RAR_SAVEPOS_ |
| #define _RAR_SAVEPOS_ |
| |
| namespace third_party_unrar { |
| |
| class SaveFilePos |
| { |
| private: |
| File *SaveFile; |
| int64 SavePos; |
| public: |
| SaveFilePos(File &Src) |
| { |
| SaveFile=&Src; |
| SavePos=Src.Tell(); |
| } |
| ~SaveFilePos() |
| { |
| // If file is already closed by current exception processing, |
| // we would get uneeded error messages and an exception inside of |
| // exception and terminate if we try to seek without checking |
| // if file is still opened. We should not also restore the position |
| // if external code closed the file on purpose. |
| if (SaveFile->IsOpened()) |
| SaveFile->Seek(SavePos,SEEK_SET); |
| } |
| }; |
| |
| } // namespace third_party_unrar |
| |
| #endif |