analyzes fopen() leaks as well
authorDaniel Stenberg <daniel@haxx.se>
Tue, 19 Dec 2000 13:32:30 +0000 (13:32 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 19 Dec 2000 13:32:30 +0000 (13:32 +0000)
memanalyze.pl

index aa8dddb..c2ac11e 100755 (executable)
@@ -99,6 +99,35 @@ while(<STDIN>) {
             }
         }
     }
+    # FILE url.c:1282 fopen("blabla") = 0x5ddd
+    elsif($_ =~ /^FILE ([^:]*):(\d*) (.*)/) {
+        # generic match for the filename+linenumber
+        $source = $1;
+        $linenum = $2;
+        $function = $3;
+
+        if($function =~ /fopen\(\"([^\"]*)\"\) = (\(nil\)|0x([0-9a-f]*))/) {
+            if($2 eq "(nil)") {
+                ;
+            }
+            else {
+                $fopen{$3}=1;
+                $fopenfile{$3}="$source:$linenum";
+                $fopens++;
+            }
+        }
+        # fclose(0x1026c8)
+        elsif($function =~ /fclose\(0x([0-9a-f]*)\)/) {
+            print "CLOSE $1\n";
+            if(!$fopen{$1}) {
+                print "fclose() without fopen(): $line\n";
+            }
+            else {
+                $fopen{$1}=0;
+                $fopens--;
+            }
+        }
+    }
     else {
         print "Not recognized prefix line: $line\n";
     }
@@ -127,3 +156,12 @@ if($openfile) {
         }
     }
 }
+
+if($fopens) {
+    print "Open FILE handles left at:\n";
+    for(keys %fopen) {
+        if($fopen{$_} == 1) {
+            print "fopen() called at ".$fopenfile{$_}."\n";
+        }
+    }
+}