From 23fc6756f1894e1af35853eb2251f08d5b25cf30 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Wed, 18 May 2022 10:45:54 -0400 Subject: Add QUtil::FileCloser to the public API --- include/qpdf/QUtil.hh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'include') diff --git a/include/qpdf/QUtil.hh b/include/qpdf/QUtil.hh index 5d33b2a5..283db861 100644 --- a/include/qpdf/QUtil.hh +++ b/include/qpdf/QUtil.hh @@ -114,6 +114,33 @@ namespace QUtil QPDF_DLL FILE* fopen_wrapper(std::string const&, FILE*); + // This is a little class to help with automatic closing files. + // You can do something like + // + // QUtil::FileCloser fc(QUtil::safe_fopen(filename, "rb")); + // + // and then use fc.f to the file. Be sure to actually declare a + // variable of type FileCloser. Using it as a temporary won't work + // because it will close the file as soon as it goes out of scope. + class FileCloser + { + public: + FileCloser(FILE* f) : + f(f) + { + } + + ~FileCloser() + { + if (f) { + fclose(f); + f = nullptr; + } + } + + FILE* f; + }; + // Attempt to open the file read only and then close again QPDF_DLL bool file_can_be_opened(char const* filename); -- cgit v1.2.3-70-g09d2