Skip to content

Commit 068929a

Browse files
committed
Add support for no-fail library allocator attribute to the GUI
1 parent 9f6f7bc commit 068929a

File tree

4 files changed

+19
-0
lines changed

4 files changed

+19
-0
lines changed

gui/cppchecklibrarydata.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ static CppcheckLibraryData::MemoryResource loadMemoryResource(QXmlStreamReader &
272272
if (elementName == "alloc" || elementName == "realloc") {
273273
CppcheckLibraryData::MemoryResource::Alloc alloc;
274274
alloc.isRealloc = (elementName == "realloc");
275+
alloc.noFail = (xmlReader.attributes().value("no-fail").toString() == "true");
275276
alloc.init = (xmlReader.attributes().value("init").toString() == "true");
276277
if (xmlReader.attributes().hasAttribute("arg")) {
277278
alloc.arg = xmlReader.attributes().value("arg").toInt();
@@ -723,6 +724,8 @@ static void writeMemoryResource(QXmlStreamWriter &xmlWriter, const CppcheckLibra
723724
xmlWriter.writeStartElement("alloc");
724725
}
725726
xmlWriter.writeAttribute("init", bool_to_string(alloc.init));
727+
if (alloc.noFail)
728+
xmlWriter.writeAttribute("no-fail", bool_to_string(alloc.noFail));
726729
if (alloc.arg != -1) {
727730
xmlWriter.writeAttribute("arg", QString("%1").arg(alloc.arg));
728731
}

gui/cppchecklibrarydata.h

+1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ class CppcheckLibraryData {
142142
struct Alloc {
143143
bool isRealloc{};
144144
bool init{};
145+
bool noFail{};
145146
int arg = -1; // -1: Has no optional "realloc-arg" attribute
146147
int reallocArg = -1; // -1: Has no optional "arg" attribute
147148
QString bufferSize;

gui/test/cppchecklibrarydata/files/memory_resource_valid.cfg

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<realloc init="false" buffer-size="malloc:2">realloc</realloc>
77
<alloc arg="2">UuidToString</alloc>
88
<dealloc arg="3">HeapFree</dealloc>
9+
<alloc init="false" no-fail="true" buffer-size="malloc">g_malloc</alloc>
910
</memory>
1011

1112
<resource>

gui/test/cppchecklibrarydata/testcppchecklibrarydata.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -292,30 +292,42 @@ void TestCppcheckLibraryData::memoryResourceValid()
292292
QCOMPARE(libraryData.memoryresource[0].alloc[0].bufferSize, QString("malloc"));
293293
QCOMPARE(libraryData.memoryresource[0].alloc[0].isRealloc, false);
294294
QCOMPARE(libraryData.memoryresource[0].alloc[0].init, false);
295+
QCOMPARE(libraryData.memoryresource[0].alloc[0].noFail, false);
295296
QCOMPARE(libraryData.memoryresource[0].alloc[0].arg, -1);
296297
QCOMPARE(libraryData.memoryresource[0].alloc[0].reallocArg, -1);
297298

298299
QCOMPARE(libraryData.memoryresource[0].alloc[1].name, QString("calloc"));
299300
QCOMPARE(libraryData.memoryresource[0].alloc[1].bufferSize, QString("calloc"));
300301
QCOMPARE(libraryData.memoryresource[0].alloc[1].isRealloc, false);
301302
QCOMPARE(libraryData.memoryresource[0].alloc[1].init, true);
303+
QCOMPARE(libraryData.memoryresource[0].alloc[1].noFail, false);
302304
QCOMPARE(libraryData.memoryresource[0].alloc[1].arg, -1);
303305
QCOMPARE(libraryData.memoryresource[0].alloc[1].reallocArg, -1);
304306

305307
QCOMPARE(libraryData.memoryresource[0].alloc[2].name, QString("realloc"));
306308
QCOMPARE(libraryData.memoryresource[0].alloc[2].bufferSize, QString("malloc:2"));
307309
QCOMPARE(libraryData.memoryresource[0].alloc[2].isRealloc, true);
308310
QCOMPARE(libraryData.memoryresource[0].alloc[2].init, false);
311+
QCOMPARE(libraryData.memoryresource[0].alloc[2].noFail, false);
309312
QCOMPARE(libraryData.memoryresource[0].alloc[2].arg, -1);
310313
QCOMPARE(libraryData.memoryresource[0].alloc[2].reallocArg, -1);
311314

312315
QCOMPARE(libraryData.memoryresource[0].alloc[3].name, QString("UuidToString"));
313316
QCOMPARE(libraryData.memoryresource[0].alloc[3].bufferSize.isEmpty(), true);
314317
QCOMPARE(libraryData.memoryresource[0].alloc[3].isRealloc, false);
315318
QCOMPARE(libraryData.memoryresource[0].alloc[3].init, false);
319+
QCOMPARE(libraryData.memoryresource[0].alloc[3].noFail, false);
316320
QCOMPARE(libraryData.memoryresource[0].alloc[3].arg, 2);
317321
QCOMPARE(libraryData.memoryresource[0].alloc[3].reallocArg, -1);
318322

323+
QCOMPARE(libraryData.memoryresource[0].alloc[4].name, QString("g_malloc"));
324+
QCOMPARE(libraryData.memoryresource[0].alloc[4].bufferSize, QString("malloc"));
325+
QCOMPARE(libraryData.memoryresource[0].alloc[4].isRealloc, false);
326+
QCOMPARE(libraryData.memoryresource[0].alloc[4].init, false);
327+
QCOMPARE(libraryData.memoryresource[0].alloc[4].noFail, true);
328+
QCOMPARE(libraryData.memoryresource[0].alloc[4].arg, -1);
329+
QCOMPARE(libraryData.memoryresource[0].alloc[4].reallocArg, -1);
330+
319331
QCOMPARE(libraryData.memoryresource[0].dealloc[0].name, QString("HeapFree"));
320332
QCOMPARE(libraryData.memoryresource[0].dealloc[0].arg, 3);
321333

@@ -328,6 +340,7 @@ void TestCppcheckLibraryData::memoryResourceValid()
328340
QCOMPARE(libraryData.memoryresource[1].alloc[0].bufferSize.isEmpty(), true);
329341
QCOMPARE(libraryData.memoryresource[1].alloc[0].isRealloc, false);
330342
QCOMPARE(libraryData.memoryresource[1].alloc[0].init, true);
343+
QCOMPARE(libraryData.memoryresource[1].alloc[0].noFail, false);
331344
QCOMPARE(libraryData.memoryresource[1].alloc[0].arg, 1);
332345
QCOMPARE(libraryData.memoryresource[1].alloc[0].reallocArg, -1);
333346

@@ -362,6 +375,7 @@ void TestCppcheckLibraryData::memoryResourceValid()
362375
QCOMPARE(lhs.alloc[num].bufferSize, rhs.alloc[num].bufferSize);
363376
QCOMPARE(lhs.alloc[num].isRealloc, rhs.alloc[num].isRealloc);
364377
QCOMPARE(lhs.alloc[num].init, rhs.alloc[num].init);
378+
QCOMPARE(lhs.alloc[num].noFail, rhs.alloc[num].noFail);
365379
QCOMPARE(lhs.alloc[num].arg, rhs.alloc[num].arg);
366380
QCOMPARE(lhs.alloc[num].reallocArg, rhs.alloc[num].reallocArg);
367381
}

0 commit comments

Comments
 (0)