struct FileHolder to encapsulate _tfopen/_tfopen_s() Modified: trunk/reactos/subsys/system/explorer/utility/xmlstorage.h _____
Modified: trunk/reactos/subsys/system/explorer/utility/xmlstorage.h --- trunk/reactos/subsys/system/explorer/utility/xmlstorage.h 2005-11-29 22:39:33 UTC (rev 19760) +++ trunk/reactos/subsys/system/explorer/utility/xmlstorage.h 2005-11-30 00:01:25 UTC (rev 19761) @@ -269,14 +269,37 @@
typedef std::filebuf STDIO_FILEBUF; #endif
+ +struct FileHolder +{ + FileHolder(LPCTSTR path, LPCTSTR mode) + { +#ifdef __STDC_WANT_SECURE_LIB__ // VS2005 + if (_tfopen_s(&_pfile, path, mode) != 0) + _pfile = NULL; +#else + _pfile = _tfopen(path, mode); +#endif + } + + ~FileHolder() + { + if (_pfile) + fclose(_pfile); + } + +protected: + FILE* _pfile; +}; + /// input file stream with ANSI/UNICODE file names -struct tifstream : public std::istream +struct tifstream : public std::istream, FileHolder { typedef std::istream super;
tifstream(LPCTSTR path) : super(&_buf), - _pfile(_tfopen(path, TEXT("r"))), + FileHolder(path, TEXT("r")), #ifdef __GNUC__ _buf(_pfile, ios::in) #else @@ -285,25 +308,18 @@ { }
- ~tifstream() - { - if (_pfile) - fclose(_pfile); - } - protected: - FILE* _pfile; STDIO_FILEBUF _buf; };
/// output file stream with ANSI/UNICODE file names -struct tofstream : public std::ostream +struct tofstream : public std::ostream, FileHolder { typedef std::ostream super;
tofstream(LPCTSTR path) : super(&_buf), - _pfile(_tfopen(path, TEXT("w"))), + FileHolder(path, TEXT("w")), #ifdef __GNUC__ _buf(_pfile, ios::out) #else @@ -315,13 +331,9 @@ ~tofstream() { flush(); - - if (_pfile) - fclose(_pfile); }
protected: - FILE* _pfile; STDIO_FILEBUF _buf; };