Coverage Report

Created: 2026-09-04 06:37

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/kcodecs/src/kcodecsuuencode.h
Line
Count
Source
1
/*  -*- c++ -*-
2
    SPDX-FileCopyrightText: 2002 Marc Mutz <mutz@kde.org>
3
4
    SPDX-License-Identifier: LGPL-2.0-or-later
5
*/
6
7
#ifndef KCODECS_UUENCODE_H
8
#define KCODECS_UUENCODE_H
9
10
#include "kcodecs.h"
11
12
namespace KCodecs
13
{
14
/*
15
  A class representing the UUEncode codec.
16
*/
17
class UUCodec : public Codec
18
{
19
public:
20
1
    constexpr UUCodec() = default;
21
22
    constexpr ~UUCodec() override = default;
23
24
    constexpr const char *name() const override
25
8.40k
    {
26
8.40k
        return "x-uuencode";
27
8.40k
    }
28
29
    qsizetype maxEncodedSizeFor(qsizetype insize, NewlineType newline = Codec::NewlineLF) const override
30
4.20k
    {
31
4.20k
        Q_UNUSED(newline);
32
4.20k
        return insize; // we have no encoder!
33
4.20k
    }
34
35
    qsizetype maxDecodedSizeFor(qsizetype insize, NewlineType newline = Codec::NewlineLF) const override
36
4.20k
    {
37
        // assuming all characters are part of the uuencode stream (which
38
        // does almost never hold due to required linebreaking; but
39
        // additional non-uu chars don't affect the output size), each
40
        // 4-tupel of them becomes a 3-tupel in the decoded octet
41
        // stream. So:
42
4.20k
        qsizetype result = ((insize + 3) / 4) * 3;
43
        // but all of them may be \n, so
44
4.20k
        if (newline == Codec::NewlineCRLF) {
45
2.10k
            result *= 2; // :-o
46
2.10k
        }
47
4.20k
        return result;
48
4.20k
    }
49
50
    Encoder *makeEncoder(NewlineType newline = Codec::NewlineLF) const override;
51
52
    Decoder *makeDecoder(NewlineType newline = Codec::NewlineLF) const override;
53
};
54
55
} // namespace KCodecs
56
57
#endif // KCODECS_UUENCODE_H