File indexing completed on 2025-02-16 13:00:37
0001 /* This file is part of the KDE libraries 0002 SPDX-FileCopyrightText: 2011 Mario Bensi <mbensi@ipsquad.net> 0003 0004 Based on kbzip2filter: 0005 SPDX-FileCopyrightText: 2000, 2009 David Faure <faure@kde.org> 0006 0007 SPDX-License-Identifier: LGPL-2.0-or-later 0008 */ 0009 0010 #include "knonefilter.h" 0011 0012 #include <QFile> 0013 0014 class Q_DECL_HIDDEN KNoneFilter::Private 0015 { 0016 public: 0017 Private() 0018 : mode(0) 0019 , avail_out(0) 0020 , avail_in(0) 0021 , next_in(nullptr) 0022 , next_out(nullptr) 0023 { 0024 } 0025 0026 int mode; 0027 int avail_out; 0028 int avail_in; 0029 const char *next_in; 0030 char *next_out; 0031 }; 0032 0033 KNoneFilter::KNoneFilter() 0034 : d(new Private) 0035 { 0036 } 0037 0038 KNoneFilter::~KNoneFilter() 0039 { 0040 delete d; 0041 } 0042 0043 bool KNoneFilter::init(int mode) 0044 { 0045 d->mode = mode; 0046 return true; 0047 } 0048 0049 int KNoneFilter::mode() const 0050 { 0051 return d->mode; 0052 } 0053 0054 bool KNoneFilter::terminate() 0055 { 0056 return true; 0057 } 0058 0059 void KNoneFilter::reset() 0060 { 0061 } 0062 0063 bool KNoneFilter::readHeader() 0064 { 0065 return true; 0066 } 0067 0068 bool KNoneFilter::writeHeader(const QByteArray & /*fileName*/) 0069 { 0070 return true; 0071 } 0072 0073 void KNoneFilter::setOutBuffer(char *data, uint maxlen) 0074 { 0075 d->avail_out = maxlen; 0076 d->next_out = data; 0077 } 0078 0079 void KNoneFilter::setInBuffer(const char *data, uint size) 0080 { 0081 d->next_in = data; 0082 d->avail_in = size; 0083 } 0084 0085 int KNoneFilter::inBufferAvailable() const 0086 { 0087 return d->avail_in; 0088 } 0089 0090 int KNoneFilter::outBufferAvailable() const 0091 { 0092 return d->avail_out; 0093 } 0094 0095 KNoneFilter::Result KNoneFilter::uncompress() 0096 { 0097 #ifndef NDEBUG 0098 if (d->mode != QIODevice::ReadOnly) { 0099 return KFilterBase::Error; 0100 } 0101 #endif 0102 return copyData(); 0103 } 0104 0105 KNoneFilter::Result KNoneFilter::compress(bool finish) 0106 { 0107 Q_ASSERT(d->mode == QIODevice::WriteOnly); 0108 Q_UNUSED(finish); 0109 0110 return copyData(); 0111 } 0112 0113 KNoneFilter::Result KNoneFilter::copyData() 0114 { 0115 Q_ASSERT(d->avail_out > 0); 0116 if (d->avail_in > 0) { 0117 const int n = qMin(d->avail_in, d->avail_out); 0118 memcpy(d->next_out, d->next_in, n); 0119 d->avail_out -= n; 0120 d->next_in += n; 0121 d->next_out += n; 0122 d->avail_in -= n; 0123 return KFilterBase::Ok; 0124 } else { 0125 return KFilterBase::End; 0126 } 0127 }