Library: Refactoring alloc/dealloc functions. Normally the token should be passed so extra validation can be made
This commit is contained in:
parent
5fc43f85b1
commit
01d14d0388
|
@ -232,7 +232,7 @@ void CheckLeakAutoVar::checkScope(const Token * const startToken,
|
|||
|
||||
// allocation?
|
||||
if (Token::Match(tok->tokAt(2), "%type% (")) {
|
||||
int i = _settings->library.alloc(tok->strAt(2));
|
||||
int i = _settings->library.alloc(tok->tokAt(2));
|
||||
if (i > 0) {
|
||||
alloctype[tok->varId()] = i;
|
||||
}
|
||||
|
@ -255,7 +255,7 @@ void CheckLeakAutoVar::checkScope(const Token * const startToken,
|
|||
if (innerTok->str() == ")")
|
||||
break;
|
||||
if (innerTok->str() == "(" && innerTok->previous()->isName()) {
|
||||
const int deallocId = _settings->library.dealloc(tok->str());
|
||||
const int deallocId = _settings->library.dealloc(tok);
|
||||
functionCall(innerTok->previous(), varInfo, deallocId);
|
||||
innerTok = innerTok->link();
|
||||
}
|
||||
|
@ -343,7 +343,7 @@ void CheckLeakAutoVar::checkScope(const Token * const startToken,
|
|||
|
||||
// Function call..
|
||||
else if (Token::Match(tok, "%type% (") && tok->str() != "return") {
|
||||
const int dealloc = _settings->library.dealloc(tok->str());
|
||||
const int dealloc = _settings->library.dealloc(tok);
|
||||
|
||||
functionCall(tok, varInfo, dealloc);
|
||||
|
||||
|
|
|
@ -180,7 +180,7 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getAllocationType(const Token *tok2,
|
|||
}
|
||||
|
||||
// Does tok2 point on "g_malloc", "g_strdup", ..
|
||||
const int alloctype = settings1->library.alloc(tok2->str());
|
||||
const int alloctype = settings1->library.alloc(tok2);
|
||||
if (alloctype > 0) {
|
||||
if (alloctype == settings1->library.dealloc("free"))
|
||||
return Malloc;
|
||||
|
@ -271,7 +271,7 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getDeallocationType(const Token *tok
|
|||
|
||||
// Does tok2 point on "g_free", etc ..
|
||||
if (Token::Match(tok, "%type% ( %varid% )", varid)) {
|
||||
const int dealloctype = settings1->library.dealloc(tok->str());
|
||||
const int dealloctype = settings1->library.dealloc(tok);
|
||||
if (dealloctype > 0)
|
||||
return Library::ismemory(dealloctype) ? OtherMem : OtherRes;
|
||||
}
|
||||
|
@ -309,7 +309,7 @@ CheckMemoryLeak::AllocType CheckMemoryLeak::getDeallocationType(const Token *tok
|
|||
return Pipe;
|
||||
|
||||
if (Token::Match(tok, ("%type% ( " + varname + " )").c_str())) {
|
||||
int type = settings1->library.dealloc(tok->str());
|
||||
int type = settings1->library.dealloc(tok);
|
||||
if (type > 0)
|
||||
return Library::ismemory(type) ? OtherMem : OtherRes;
|
||||
}
|
||||
|
@ -2764,7 +2764,7 @@ void CheckMemoryLeakNoVar::checkForUnusedReturnValue(const Scope *scope)
|
|||
for (const Token *tok = scope->classStart; tok != scope->classEnd; tok = tok->next()) {
|
||||
if (Token::Match(tok, "{|}|; %var% (")) {
|
||||
tok = tok->next();
|
||||
const int allocationId = _settings->library.alloc(tok->str());
|
||||
const int allocationId = _settings->library.alloc(tok);
|
||||
if (allocationId > 0)
|
||||
returnValueNotUsedError(tok, tok->str());
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "config.h"
|
||||
#include "path.h"
|
||||
#include "mathlib.h"
|
||||
#include "token.h"
|
||||
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
@ -50,13 +51,23 @@ public:
|
|||
bool loadxmldata(const char xmldata[], std::size_t len);
|
||||
bool load(const tinyxml2::XMLDocument &doc);
|
||||
|
||||
/** get allocation id for function (by name) */
|
||||
int alloc(const std::string &name) const {
|
||||
/** get allocation id for function by name */
|
||||
int alloc(const char name[]) const {
|
||||
return getid(_alloc, name);
|
||||
}
|
||||
|
||||
/** get deallocation id for function (by name) */
|
||||
int dealloc(const std::string &name) const {
|
||||
/** get allocation id for function */
|
||||
int alloc(const Token *tok) const {
|
||||
return tok->function() ? 0 : getid(_alloc, tok->str());
|
||||
}
|
||||
|
||||
/** get deallocation id for function */
|
||||
int dealloc(const Token *tok) const {
|
||||
return tok->function() ? 0 : getid(_dealloc, tok->str());
|
||||
}
|
||||
|
||||
/** get deallocation id for function by name */
|
||||
int dealloc(const char name[]) const {
|
||||
return getid(_dealloc, name);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue