Memory Leak: Better checking of mismatching alloc and dealloc for gtk

This commit is contained in:
Daniel Marjamäki 2008-10-19 15:20:31 +00:00
parent f4319a865f
commit 65da6b3cd7
1 changed files with 27 additions and 15 deletions

View File

@ -43,7 +43,7 @@ static bool isclass( const std::string &typestr )
//---------------------------------------------------------------------------
enum AllocType { No, Malloc, New, NewA };
enum AllocType { No, Malloc, gMalloc, New, NewA };
// Extra allocation..
class AllocFunc
@ -82,18 +82,6 @@ static AllocType GetAllocationType( const TOKEN *tok2 )
"strdup",
"kmalloc",
"kzalloc",
"g_new",
"g_new0",
"g_renew",
"g_try_new",
"g_try_new0",
"g_try_renew",
"g_malloc",
"g_malloc0",
"g_realloc",
"g_try_malloc",
"g_try_malloc0",
"g_try_realloc",
0};
for ( unsigned int i = 0; mallocfunc[i]; i++ )
{
@ -101,6 +89,28 @@ static AllocType GetAllocationType( const TOKEN *tok2 )
return Malloc;
}
// Does tok2 point on "malloc", "strdup" or "kmalloc"..
const char *gmallocfunc[] = {"g_new",
"g_new0",
"g_renew",
"g_try_new",
"g_try_new0",
"g_try_renew",
"g_malloc",
"g_malloc0",
"g_realloc",
"g_try_malloc",
"g_try_malloc0",
"g_try_realloc",
"g_strdup",
"g_strndup",
0};
for ( unsigned int i = 0; gmallocfunc[i]; i++ )
{
if ( strcmp(gmallocfunc[i], tok2->str) == 0 )
return gMalloc;
}
if ( Match( tok2, "new %type% [;(]" ) )
return New;
@ -136,12 +146,14 @@ static AllocType GetDeallocationType( const TOKEN *tok, const char *varnames[] )
return NewA;
if ( Match(tok, "free ( %var1% ) ;", varnames) ||
Match(tok, "kfree ( %var1% ) ;", varnames) ||
Match(tok, "g_free ( %var1% ) ;", varnames) )
Match(tok, "kfree ( %var1% ) ;", varnames) )
{
return Malloc;
}
if ( Match(tok, "g_free ( %var1% ) ;", varnames) )
return gMalloc;
return No;
}
//---------------------------------------------------------------------------