From 4f4c627b77a169e1729982fa03dd75d5035f0297 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 4 Aug 2018 19:50:21 -0400 Subject: ClosedFileInputSource: add method to keep file open During periods of intensive operation on a specific file, this method can reduce the overhead of repeated open/close operations. --- libqpdf/ClosedFileInputSource.cc | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'libqpdf') diff --git a/libqpdf/ClosedFileInputSource.cc b/libqpdf/ClosedFileInputSource.cc index ea79a840..63357886 100644 --- a/libqpdf/ClosedFileInputSource.cc +++ b/libqpdf/ClosedFileInputSource.cc @@ -4,7 +4,8 @@ ClosedFileInputSource::Members::Members(char const* filename) : filename(filename), offset(0), - fis(0) + fis(0), + stay_open(false) { } @@ -42,6 +43,10 @@ ClosedFileInputSource::after() { this->last_offset = this->m->fis->getLastOffset(); this->m->offset = this->m->fis->tell(); + if (this->m->stay_open) + { + return; + } delete this->m->fis; this->m->fis = 0; } @@ -82,6 +87,10 @@ void ClosedFileInputSource::rewind() { this->m->offset = 0; + if (this->m->fis) + { + this->m->fis->rewind(); + } } size_t @@ -101,3 +110,13 @@ ClosedFileInputSource::unreadCh(char ch) // Don't call after -- the file has to stay open after this // operation. } + +void +ClosedFileInputSource::stayOpen(bool val) +{ + this->m->stay_open = val; + if ((! val) && this->m->fis) + { + after(); + } +} -- cgit v1.2.3-54-g00ecf