libui/leaks.awk

57 lines
812 B
Awk

# 7 april 2015
$2 == "alloc" {
if ($1 in A) {
problem($1 " already allocated (" A[$1] "); allocated at " NR)
next
}
A[$1] = type()
next
}
$2 == "realloc" {
if (!($1 in A)) {
problem($1 " not yet allocated; reallocated at " NR)
next
}
if ($3 in A) {
problem($3 " already allocated (" A[$3] "); reallocated at " NR)
next
}
t = A[$1]
delete A[$1]
A[$3] = t
next
}
$2 == "free" {
if (!($1 in A)) {
problem($1 " not yet allocated; freed at " NR)
next
}
delete A[$1]
next
}
{ problem("unrecognized line " $0 " at " NR) }
END {
for (i in A)
problem("leaked " A[i] " at " i)
close("/dev/stderr")
if (hasProblems)
exit 1
}
function problem(s) {
print s > "/dev/stderr"
hasProblems = 1
}
function type( s, i) {
s = $3
for (i = 4; i <= NF; i++)
s = s " " $i
return s
}