Browse Source

CBufferedFile: add explicit close function

- also use identical close function for CAutoFile (avoids setting file to
  NULL under wrong conditions)
0.10
Philip Kaufmann 10 years ago
parent
commit
0c35486dc9
  1. 22
      src/serialize.h

22
src/serialize.h

@ -1154,7 +1154,7 @@ public:
/** Non-refcounted RAII wrapper for FILE*. /** Non-refcounted RAII wrapper for FILE*
* *
* Will automatically close the file when it goes out of scope if not null. * Will automatically close the file when it goes out of scope if not null.
* If you're returning the file pointer, return file.release(). * If you're returning the file pointer, return file.release().
@ -1186,10 +1186,11 @@ public:
void fclose() void fclose()
{ {
if (file != NULL && file != stdin && file != stdout && file != stderr) if (file) {
::fclose(file); ::fclose(file);
file = NULL; file = NULL;
} }
}
FILE* release() { FILE* ret = file; file = NULL; return ret; } FILE* release() { FILE* ret = file; file = NULL; return ret; }
operator FILE*() { return file; } operator FILE*() { return file; }
@ -1257,7 +1258,11 @@ public:
}; };
/** Non-refcounted RAII wrapper around a FILE* that implements a ring buffer to /** Non-refcounted RAII wrapper around a FILE* that implements a ring buffer to
* deserialize from. It guarantees the ability to rewind a given number of bytes. */ * deserialize from. It guarantees the ability to rewind a given number of bytes.
*
* Will automatically close the file when it goes out of scope if not null.
* If you need to close the file early, use file.fclose() instead of fclose(file).
*/
class CBufferedFile class CBufferedFile
{ {
private: private:
@ -1305,8 +1310,15 @@ public:
~CBufferedFile() ~CBufferedFile()
{ {
if (src) fclose();
fclose(src); }
void fclose()
{
if (src) {
::fclose(src);
src = NULL;
}
} }
// check whether we're at the end of the source file // check whether we're at the end of the source file

Loading…
Cancel
Save