2015-08-23 16:03:24 +02:00
|
|
|
/*
|
|
|
|
* Cppcheck - A tool for static C/C++ code analysis
|
2021-01-09 21:30:29 +01:00
|
|
|
* Copyright (C) 2007-2021 Cppcheck team.
|
2015-08-23 16:03:24 +02:00
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2015-08-30 13:41:57 +02:00
|
|
|
#ifndef CPPCHECKLIBRARYDATA_H
|
|
|
|
#define CPPCHECKLIBRARYDATA_H
|
2015-08-23 16:03:24 +02:00
|
|
|
|
|
|
|
#include <QList>
|
|
|
|
#include <QString>
|
|
|
|
#include <QStringList>
|
|
|
|
#include <QIODevice>
|
|
|
|
|
2015-08-30 13:41:57 +02:00
|
|
|
class CppcheckLibraryData {
|
2015-08-23 16:03:24 +02:00
|
|
|
public:
|
2015-08-30 13:41:57 +02:00
|
|
|
CppcheckLibraryData();
|
2015-08-23 16:03:24 +02:00
|
|
|
|
2015-09-05 20:13:26 +02:00
|
|
|
struct Container {
|
|
|
|
Container() : access_arrayLike(false), size_templateParameter(-1) {}
|
|
|
|
|
|
|
|
QString id;
|
|
|
|
QString inherits;
|
|
|
|
QString startPattern;
|
|
|
|
QString endPattern;
|
2017-11-12 15:07:11 +01:00
|
|
|
QString opLessAllowed;
|
|
|
|
QString itEndPattern;
|
2015-09-05 20:13:26 +02:00
|
|
|
|
|
|
|
bool access_arrayLike;
|
|
|
|
int size_templateParameter;
|
|
|
|
|
|
|
|
struct {
|
|
|
|
QString templateParameter;
|
|
|
|
QString string;
|
|
|
|
} type;
|
|
|
|
|
|
|
|
struct Function {
|
|
|
|
QString name;
|
|
|
|
QString yields;
|
|
|
|
QString action;
|
|
|
|
};
|
|
|
|
QList<struct Function> accessFunctions;
|
|
|
|
QList<struct Function> otherFunctions;
|
|
|
|
QList<struct Function> sizeFunctions;
|
|
|
|
};
|
|
|
|
|
2015-08-23 16:03:24 +02:00
|
|
|
struct Define {
|
|
|
|
QString name;
|
|
|
|
QString value;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Function {
|
2015-09-03 20:36:26 +02:00
|
|
|
Function() : noreturn(Unknown), gccPure(false), gccConst(false),
|
2015-08-23 16:03:24 +02:00
|
|
|
leakignore(false), useretval(false) {
|
|
|
|
}
|
|
|
|
|
2015-09-10 20:11:05 +02:00
|
|
|
QString comments;
|
2015-08-23 16:03:24 +02:00
|
|
|
QString name;
|
2015-09-03 20:36:26 +02:00
|
|
|
enum TrueFalseUnknown { False, True, Unknown } noreturn;
|
2015-08-23 16:03:24 +02:00
|
|
|
bool gccPure;
|
|
|
|
bool gccConst;
|
|
|
|
bool leakignore;
|
|
|
|
bool useretval;
|
2017-11-12 15:07:11 +01:00
|
|
|
struct ReturnValue {
|
|
|
|
ReturnValue() : container(-1) {}
|
|
|
|
QString type;
|
|
|
|
QString value;
|
|
|
|
int container;
|
|
|
|
bool empty() const {
|
|
|
|
return type.isNull() && value.isNull() && container < 0;
|
|
|
|
}
|
|
|
|
} returnValue;
|
2015-08-23 16:03:24 +02:00
|
|
|
struct {
|
|
|
|
QString scan;
|
|
|
|
QString secure;
|
|
|
|
} formatstr;
|
|
|
|
struct Arg {
|
|
|
|
Arg() : nr(0), notbool(false), notnull(false), notuninit(false),
|
|
|
|
formatstr(false), strz(false) {
|
|
|
|
}
|
|
|
|
|
|
|
|
QString name;
|
|
|
|
unsigned int nr;
|
|
|
|
static const unsigned int ANY;
|
2017-11-12 15:07:11 +01:00
|
|
|
static const unsigned int VARIADIC;
|
|
|
|
QString defaultValue;
|
2015-08-23 16:03:24 +02:00
|
|
|
bool notbool;
|
|
|
|
bool notnull;
|
|
|
|
bool notuninit;
|
|
|
|
bool formatstr;
|
|
|
|
bool strz;
|
|
|
|
QString valid;
|
2015-08-30 13:33:43 +02:00
|
|
|
struct MinSize {
|
2015-08-23 16:03:24 +02:00
|
|
|
QString type;
|
|
|
|
QString arg;
|
|
|
|
QString arg2;
|
2015-08-30 13:33:43 +02:00
|
|
|
};
|
|
|
|
QList<struct MinSize> minsizes;
|
2017-11-12 15:07:11 +01:00
|
|
|
struct Iterator {
|
|
|
|
Iterator() : container(-1) {}
|
|
|
|
int container;
|
|
|
|
QString type;
|
|
|
|
} iterator;
|
2015-08-23 16:03:24 +02:00
|
|
|
};
|
|
|
|
QList<struct Arg> args;
|
2015-11-22 11:45:29 +01:00
|
|
|
|
|
|
|
struct {
|
|
|
|
QString severity;
|
2017-11-12 15:07:11 +01:00
|
|
|
QString cstd;
|
2015-11-22 11:45:29 +01:00
|
|
|
QString reason;
|
|
|
|
QString alternatives;
|
|
|
|
QString msg;
|
|
|
|
|
|
|
|
bool isEmpty() const {
|
2017-11-12 15:07:11 +01:00
|
|
|
return cstd.isEmpty() &&
|
|
|
|
severity.isEmpty() &&
|
2015-11-22 11:45:29 +01:00
|
|
|
reason.isEmpty() &&
|
|
|
|
alternatives.isEmpty() &&
|
|
|
|
msg.isEmpty();
|
|
|
|
}
|
|
|
|
} warn;
|
2015-08-23 16:03:24 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct MemoryResource {
|
|
|
|
QString type; // "memory" or "resource"
|
|
|
|
struct Alloc {
|
2020-12-25 20:08:33 +01:00
|
|
|
Alloc() :
|
|
|
|
isRealloc(false),
|
|
|
|
init(false),
|
|
|
|
arg(-1), // -1: Has no optional "arg" attribute
|
|
|
|
reallocArg(-1) // -1: Has no optional "realloc-arg" attribute
|
|
|
|
{}
|
|
|
|
|
|
|
|
bool isRealloc;
|
2015-08-23 16:03:24 +02:00
|
|
|
bool init;
|
2020-12-25 20:08:33 +01:00
|
|
|
int arg;
|
|
|
|
int reallocArg;
|
|
|
|
QString bufferSize;
|
2015-08-23 16:03:24 +02:00
|
|
|
QString name;
|
|
|
|
};
|
2020-12-25 20:08:33 +01:00
|
|
|
struct Dealloc {
|
|
|
|
Dealloc() :
|
|
|
|
arg(-1) // -1: Has no optional "arg" attribute
|
|
|
|
{}
|
|
|
|
|
|
|
|
int arg;
|
|
|
|
QString name;
|
|
|
|
};
|
|
|
|
|
2015-08-23 16:03:24 +02:00
|
|
|
QList<struct Alloc> alloc;
|
2020-12-25 20:08:33 +01:00
|
|
|
QList<struct Dealloc> dealloc;
|
2015-08-23 16:03:24 +02:00
|
|
|
QStringList use;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct PodType {
|
|
|
|
QString name;
|
2021-01-09 21:30:29 +01:00
|
|
|
QString stdtype;
|
2015-08-23 16:03:24 +02:00
|
|
|
QString size;
|
|
|
|
QString sign;
|
|
|
|
};
|
|
|
|
|
2021-01-18 19:10:53 +01:00
|
|
|
using TypeChecks = QList<QPair<QString, QString>>;
|
|
|
|
|
2015-08-23 16:03:24 +02:00
|
|
|
void clear() {
|
2017-11-12 15:22:00 +01:00
|
|
|
containers.clear();
|
2015-08-23 16:03:24 +02:00
|
|
|
defines.clear();
|
2018-10-09 15:05:05 +02:00
|
|
|
undefines.clear();
|
2015-08-23 16:03:24 +02:00
|
|
|
functions.clear();
|
|
|
|
memoryresource.clear();
|
|
|
|
podtypes.clear();
|
2021-01-18 19:10:53 +01:00
|
|
|
smartPointers.clear();
|
|
|
|
typeChecks.clear();
|
2015-08-23 16:03:24 +02:00
|
|
|
}
|
|
|
|
|
2017-11-12 21:03:22 +01:00
|
|
|
void swap(CppcheckLibraryData &other) {
|
|
|
|
containers.swap(other.containers);
|
|
|
|
defines.swap(other.defines);
|
2018-10-09 15:05:05 +02:00
|
|
|
undefines.swap(other.undefines);
|
2017-11-12 21:03:22 +01:00
|
|
|
functions.swap(other.functions);
|
|
|
|
memoryresource.swap(other.memoryresource);
|
|
|
|
podtypes.swap(other.podtypes);
|
2021-01-18 19:10:53 +01:00
|
|
|
smartPointers.swap(other.smartPointers);
|
|
|
|
typeChecks.swap(other.typeChecks);
|
2017-11-12 21:03:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
QString open(QIODevice &file);
|
2015-08-23 16:03:24 +02:00
|
|
|
QString toString() const;
|
|
|
|
|
2015-09-05 20:13:26 +02:00
|
|
|
QList<struct Container> containers;
|
2015-08-23 16:03:24 +02:00
|
|
|
QList<struct Define> defines;
|
|
|
|
QList<struct Function> functions;
|
|
|
|
QList<struct MemoryResource> memoryresource;
|
|
|
|
QList<struct PodType> podtypes;
|
2021-01-18 19:10:53 +01:00
|
|
|
QList<TypeChecks> typeChecks;
|
2018-10-09 15:05:05 +02:00
|
|
|
QStringList undefines;
|
2021-01-18 19:10:53 +01:00
|
|
|
QStringList smartPointers;
|
2015-08-23 16:03:24 +02:00
|
|
|
};
|
|
|
|
|
2020-12-25 20:08:33 +01:00
|
|
|
#endif // CPPCHECKLIBRARYDATA_H
|