diff --git a/tests/memanalyze.pl b/tests/memanalyze.pl
index 71fc1fde1122cbcfb497deb4a4cd21792a92307b..c354a5687ae11cafd29ab915d19979e911e28a38 100755
--- a/tests/memanalyze.pl
+++ b/tests/memanalyze.pl
@@ -6,14 +6,17 @@
 # MEM mprintf.c:1103 realloc(e5718, 64) = e6118
 # MEM sendf.c:232 free(f6520)
 
-do {
+while(1) {
     if($ARGV[0] eq "-v") {
         $verbose=1;
+        shift @ARGV;
     }
     elsif($ARGV[0] eq "-t") {
         $trace=1;
+        shift @ARGV;
     }
-} while (shift @ARGV);
+    last;
+}
 
 my $maxmem;
 
@@ -26,7 +29,19 @@ sub newtotal {
     }
 }
 
-while(<STDIN>) {
+my $file = $ARGV[0];
+
+if(! -f $file) {
+    print "Usage: memanalyze.pl [options] <dump file>\n",
+    "Options:\n",
+    " -v  Verbose\n",
+    " -t  Trace\n";
+    exit;
+}
+
+open(FILE, "<$file");
+
+while(<FILE>) {
     chomp $_;
     $line = $_;
 
@@ -219,6 +234,7 @@ while(<STDIN>) {
         print "Not recognized prefix line: $line\n";
     }
 }
+close(FILE);
 
 if($totalmem) {
     print "Leak detected: memory still allocated: $totalmem bytes\n";
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 921cd28bfb2778277f6082274f510a75049b85fa..0690d4f09482029b6d49839b4477b5416f1cdac3 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -777,7 +777,7 @@ sub singletest {
             print "\n** ALERT! memory debuggin without any output file?\n";
         }
         else {
-            my @memdata=`$memanalyze < $memdump`;
+            my @memdata=`$memanalyze $memdump`;
             my $leak=0;
             for(@memdata) {
                 if($_ ne "") {