14 , m_mappedArea(nullptr)
30 return !
m_file.open(QFile::ReadWrite);
42#if EXIV2_TEST_VERSION(0,28,0)
48 if (!m_file.isWritable()) {
49 qWarning() <<
"KisExiv2IODevice: File not open for writing.";
52 const qint64 writeCount = m_file.write(
reinterpret_cast<const char *
>(data), wcount);
60#if EXIV2_TEST_VERSION(0,28,0)
66 if (
static_cast<BasicIo *
>(
this) == &src) {
72 if (!m_file.isWritable()) {
73 qWarning() <<
"KisExiv2IODevice: File not open for writing.";
76 Exiv2::byte buffer[4096];
78 long totalWriteCount = 0;
79 while ((readCount = src.read(buffer,
sizeof(buffer))) != 0) {
80 totalWriteCount += write(buffer, readCount);
83 return totalWriteCount;
88 if (!
m_file.isWritable()) {
89 qWarning() <<
"KisExiv2IODevice: File not open for writing.";
92 if (
m_file.putChar(data)) {
99#if EXIV2_TEST_VERSION(0,28,0)
105 Exiv2::DataBuf buf(rcount);
106#if EXIV2_TEST_VERSION(0,28,0)
107 const size_t readCount = read(buf.data(), buf.size());
108 buf.resize(readCount);
110 const long readCount = read(buf.pData_, buf.size_);
111 buf.size_ = readCount;
116#if EXIV2_TEST_VERSION(0,28,0)
122 const qint64 bytesRead = m_file.read(
reinterpret_cast<char *
>(buf), rcount);
126 qWarning() <<
"KisExiv2IODevice: Couldn't read file:" << m_file.errorString();
144 bool isFileBased = (
dynamic_cast<Exiv2::FileIo *
>(&src) ||
dynamic_cast<KisExiv2IODevice *
>(&src));
145 bool useFallback =
false;
148 const QString srcPath = QString::fromStdString(src.path());
153 if (!isFileBased || useFallback) {
154 const bool wasOpen =
isopen();
155 const QIODevice::OpenMode oldMode =
m_file.openMode();
158 if (src.open() != 0) {
159 qWarning() <<
"KisExiv2IODevice::transfer: Couldn't open src file" << QString::fromStdString(src.path());
163 if (!
open(QIODevice::ReadWrite | QIODevice::Truncate)) {
164 qWarning() <<
"KisExiv2IODevice::transfer: Couldn't open dest file" <<
filePathQString();
178#if defined(_MSC_VER) || EXIV2_TEST_VERSION(0,28,0)
186 case Exiv2::BasicIo::beg:
189 case Exiv2::BasicIo::cur:
190 pos = tell() + offset;
192 case Exiv2::BasicIo::end:
193 pos = size() + offset;
196 return m_file.seek(pos);
201 Q_UNUSED(isWriteable);
204 qWarning() <<
"KisExiv2IODevice::mmap: Couldn't unmap the mapped file";
211 qWarning() <<
"KisExiv2IODevice::mmap: Couldn't map the file" <<
m_file.fileName();
226#if EXIV2_TEST_VERSION(0,28,0)
227void KisExiv2IODevice::populateFakeData()
233#if EXIV2_TEST_VERSION(0,28,0)
244 if (
m_file.isWritable()) {
258 return m_file.error() != QFileDevice::NoError;
266#if EXIV2_TEST_VERSION(0,28,0)
272 return filePathQString().toStdString();
285 QFile::Permissions permissions = QFile::permissions(
filePathQString());
291 qWarning() <<
"KisExiv2IODevice:renameToCurrent Couldn't copy file from" << srcPath <<
"to" <<
filePathQString();
299 return QFileInfo(
m_file).absoluteFilePath();
long write(const Exiv2::byte *data, long wcount) override
int error() const override
Exiv2::DataBuf read(long rcount) override
size_t size() const override
QString filePathQString() const
Exiv2::byte * m_mappedArea
~KisExiv2IODevice() override
int seek(long offset, Position pos) override
long tell() const override
bool isopen() const override
bool renameToCurrent(const QString srcPath)
int putb(Exiv2::byte data) override
Exiv2::byte * mmap(bool isWriteable=false) override
std::string path() const override
void transfer(BasicIo &src) override
bool eof() const override
KisExiv2IODevice(QString path)