2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-06-04 19:30:53 +00:00
qpdf/libqpdf/ClosedFileInputSource.cc
Jay Berkenbilt 9044a24097 PointerHolder: deprecate getPointer() and getRefcount()
Use get() and use_count() instead. Add #define
NO_POINTERHOLDER_DEPRECATION to remove deprecation markers for these
only.

This commit also removes all deprecated PointerHolder API calls from
qpdf's code except in PointerHolder's test suite, which must continue
to test the deprecated APIs.
2022-02-04 13:12:37 -05:00

117 lines
2.0 KiB
C++

#include <qpdf/ClosedFileInputSource.hh>
#include <qpdf/FileInputSource.hh>
ClosedFileInputSource::Members::Members(char const* filename) :
filename(filename),
offset(0),
stay_open(false)
{
}
ClosedFileInputSource::Members::~Members()
{
}
ClosedFileInputSource::ClosedFileInputSource(char const* filename) :
m(new Members(filename))
{
}
ClosedFileInputSource::~ClosedFileInputSource()
{
}
void
ClosedFileInputSource::before()
{
if (0 == this->m->fis.get())
{
this->m->fis = new FileInputSource();
this->m->fis->setFilename(this->m->filename.c_str());
this->m->fis->seek(this->m->offset, SEEK_SET);
this->m->fis->setLastOffset(this->last_offset);
}
}
void
ClosedFileInputSource::after()
{
this->last_offset = this->m->fis->getLastOffset();
this->m->offset = this->m->fis->tell();
if (this->m->stay_open)
{
return;
}
this->m->fis = 0;
}
qpdf_offset_t
ClosedFileInputSource::findAndSkipNextEOL()
{
before();
qpdf_offset_t r = this->m->fis->findAndSkipNextEOL();
after();
return r;
}
std::string const&
ClosedFileInputSource::getName() const
{
return this->m->filename;
}
qpdf_offset_t
ClosedFileInputSource::tell()
{
before();
qpdf_offset_t r = this->m->fis->tell();
after();
return r;
}
void
ClosedFileInputSource::seek(qpdf_offset_t offset, int whence)
{
before();
this->m->fis->seek(offset, whence);
after();
}
void
ClosedFileInputSource::rewind()
{
this->m->offset = 0;
if (this->m->fis.get())
{
this->m->fis->rewind();
}
}
size_t
ClosedFileInputSource::read(char* buffer, size_t length)
{
before();
size_t r = this->m->fis->read(buffer, length);
after();
return r;
}
void
ClosedFileInputSource::unreadCh(char ch)
{
before();
this->m->fis->unreadCh(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.get())
{
after();
}
}