1 /* This file is part of the KDE libraries
2    SPDX-FileCopyrightText: 2011 Mario Bensi <mbensi@ipsquad.net>
3 
4    Based on kbzip2filter:
5    SPDX-FileCopyrightText: 2000, 2009 David Faure <faure@kde.org>
6 
7    SPDX-License-Identifier: LGPL-2.0-or-later
8 */
9 
10 #include "knonefilter.h"
11 
12 #include <QFile>
13 
14 class Q_DECL_HIDDEN KNoneFilter::Private
15 {
16 public:
Private()17     Private()
18         : mode(0)
19         , avail_out(0)
20         , avail_in(0)
21         , next_in(nullptr)
22         , next_out(nullptr)
23     {
24     }
25 
26     int mode;
27     int avail_out;
28     int avail_in;
29     const char *next_in;
30     char *next_out;
31 };
32 
KNoneFilter()33 KNoneFilter::KNoneFilter()
34     : d(new Private)
35 {
36 }
37 
~KNoneFilter()38 KNoneFilter::~KNoneFilter()
39 {
40     delete d;
41 }
42 
init(int mode)43 bool KNoneFilter::init(int mode)
44 {
45     d->mode = mode;
46     return true;
47 }
48 
mode() const49 int KNoneFilter::mode() const
50 {
51     return d->mode;
52 }
53 
terminate()54 bool KNoneFilter::terminate()
55 {
56     return true;
57 }
58 
reset()59 void KNoneFilter::reset()
60 {
61 }
62 
readHeader()63 bool KNoneFilter::readHeader()
64 {
65     return true;
66 }
67 
writeHeader(const QByteArray &)68 bool KNoneFilter::writeHeader(const QByteArray & /*fileName*/)
69 {
70     return true;
71 }
72 
setOutBuffer(char * data,uint maxlen)73 void KNoneFilter::setOutBuffer(char *data, uint maxlen)
74 {
75     d->avail_out = maxlen;
76     d->next_out = data;
77 }
78 
setInBuffer(const char * data,uint size)79 void KNoneFilter::setInBuffer(const char *data, uint size)
80 {
81     d->next_in = data;
82     d->avail_in = size;
83 }
84 
inBufferAvailable() const85 int KNoneFilter::inBufferAvailable() const
86 {
87     return d->avail_in;
88 }
89 
outBufferAvailable() const90 int KNoneFilter::outBufferAvailable() const
91 {
92     return d->avail_out;
93 }
94 
uncompress()95 KNoneFilter::Result KNoneFilter::uncompress()
96 {
97 #ifndef NDEBUG
98     if (d->mode != QIODevice::ReadOnly) {
99         return KFilterBase::Error;
100     }
101 #endif
102     return copyData();
103 }
104 
compress(bool finish)105 KNoneFilter::Result KNoneFilter::compress(bool finish)
106 {
107     Q_ASSERT(d->mode == QIODevice::WriteOnly);
108     Q_UNUSED(finish);
109 
110     return copyData();
111 }
112 
copyData()113 KNoneFilter::Result KNoneFilter::copyData()
114 {
115     Q_ASSERT(d->avail_out > 0);
116     if (d->avail_in > 0) {
117         const int n = qMin(d->avail_in, d->avail_out);
118         memcpy(d->next_out, d->next_in, n);
119         d->avail_out -= n;
120         d->next_in += n;
121         d->next_out += n;
122         d->avail_in -= n;
123         return KFilterBase::Ok;
124     } else {
125         return KFilterBase::End;
126     }
127 }
128