57 lines
812 B
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
|
|
}
|