/* SPDX-FileCopyrightText: 2007 Paolo Capriotti SPDX-License-Identifier: GPL-2.0-or-later */ #include "suffixcheck.h" #include #include #include #include namespace { constinit QStringList s_suffixes; constinit std::once_flag s_onceFlag; void fillSuffixes() { Q_ASSERT(s_suffixes.empty()); QSet suffixeSet; QMimeDatabase db; const auto supportedMimeTypes = QImageReader::supportedMimeTypes(); for (const QByteArray &mimeType : supportedMimeTypes) { QMimeType mime(db.mimeTypeForName(QString::fromLatin1(mimeType))); const QStringList globPatterns = mime.globPatterns(); for (const QString &pattern : globPatterns) { suffixeSet.insert(pattern); } } s_suffixes = suffixeSet.values(); } } const QStringList &suffixes() { std::call_once(s_onceFlag, &fillSuffixes); return s_suffixes; } bool isAcceptableSuffix(QString &&suffix) { // Despite its name, suffixes() returns a list of glob patterns. // Therefore the file suffix check needs to include the "*." prefix. std::call_once(s_onceFlag, &fillSuffixes); return s_suffixes.contains(QLatin1String("*.%1").arg(std::move(suffix).toLower())); }