1 /*
2  *  SPDX-FileCopyrightText: 2002-2005 David Faure <faure@kde.org>
3  *
4  *  SPDX-License-Identifier: LGPL-2.0-or-later
5  */
6 
7 #include "ktar.h"
8 
9 #include <QDebug>
10 
11 #include <stdio.h>
12 
recursive_print(const KArchiveDirectory * dir,const QString & path)13 void recursive_print(const KArchiveDirectory *dir, const QString &path)
14 {
15     QStringList l = dir->entries();
16     l.sort();
17     QStringList::ConstIterator it = l.constBegin();
18     for (; it != l.constEnd(); ++it) {
19         const KArchiveEntry *entry = dir->entry((*it));
20         printf("mode=%07o %s %s %s%s %lld isdir=%d\n",
21                entry->permissions(),
22                entry->user().toLatin1().constData(),
23                entry->group().toLatin1().constData(),
24                path.toLatin1().constData(),
25                (*it).toLatin1().constData(),
26                entry->isFile() ? static_cast<const KArchiveFile *>(entry)->size() : 0,
27                entry->isDirectory());
28         if (!entry->symLinkTarget().isEmpty()) {
29             printf("  (symlink to %s)\n", qPrintable(entry->symLinkTarget()));
30         }
31         if (entry->isDirectory()) {
32             recursive_print((KArchiveDirectory *)entry, path + (*it) + '/');
33         }
34     }
35 }
36 
37 // See karchivetest.cpp for the unittest that covers KTar.
38 
main(int argc,char ** argv)39 int main(int argc, char **argv)
40 {
41     if (argc != 2) {
42         printf(
43             "\n"
44             " Usage :\n"
45             " ./ktartest /path/to/existing_file.tar.gz       tests listing an existing tar.gz\n");
46         return 1;
47     }
48 
49     KTar tar(argv[1]);
50 
51     if (!tar.open(QIODevice::ReadOnly)) {
52         printf("Could not open %s for reading\n", argv[1]);
53         return 1;
54     }
55 
56     const KArchiveDirectory *dir = tar.directory();
57 
58     // printf("calling recursive_print\n");
59     recursive_print(dir, QLatin1String(""));
60     // printf("recursive_print called\n");
61 
62     tar.close();
63 
64     return 0;
65 }
66