#!/usr/bin/perl -w
# /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# *
# * You can contact me via email at:
# *
# * jbuchana@iquest.net (preferred)
# * c22jrb@dawg.delcoelect.com (intermediate)
# * jrbuchan@mail.delcoelect.com (disliked, but it's gonna stay around)
# *
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#
# /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# *
# * Copyright (C) 1996, 1997, 1998 Jim Buchanan
# *
# * This is free software. You may freely copy it and freely distribute it.
# *
# * You must retain this copyright notice when doing so.
# *
# * Should you decide to distribute it in executable binary form, you must
# * provide the source code, or make it freely available. A pointer to an
# * anonymous ftp site or a web site which offers the source is adequate, but
# * not preferred.
# *
# * When making this software available to others, you may not attempt to limit
# * their redistribution of this software. They must receive it under the terms
# * of this license, as you do.
# *
# * You may include any of the programs, in their entirety, that make up this
# * software package, or the entire package, in any free software package you
# * develop. You must retain this copyright notice in those parts you include.
# *
# * You may include any of the programs, in their entirety, that make up this
# * software package, or the entire package, in a commercial software package or
# * distribution, so long as you include this copyright notice. You may not
# * attempt to limit redistribution of the portions of the finished product
# * which came from this software package. They must receive it under the terms
# * of this license, as you do.
# *
# * You may, of course, control the distribution of the original portions of
# * your commercial package.
# *
# * Naturally this also means that you may include it on a CDROM (or other
# * media) archive which you distribute commercially. Where would we be without
# * those?
# *
# * You may use portions of this source code in any free software you develop.
# * In fact, it is encouraged. You must, however, retain this copyright notice.
# * You can use any reasonable free licensing scheme you want on your portions
# * of the code. The Free Software Foundation's General Public License would be
# * fine. If in doubt, ask me.
# *
# * If you are developing a commercial software package you may not use portions
# * of this source code smaller than that required to build an executable
# * program. You may commercially distribute portions of this software package
# * as described above, but they must compromise an entire executable program,
# * or the source code required to build such an entity. If you are interested
# * in any commercial use of portions of this source code, contact me, I'm sure
# * we can arrange something.
# *
# * You may modify this software in any way and distribute it freely under the
# * same terms that you may use portions of it. You must retain this copyright
# * notice, and add your own notice describing the changes made. I'd surely like
# * to see the finished product, but you really don't even have to tell me about
# * it.
# *
# * You may not modify this software in any way other than the above mentioned
# * case of including part of it, down to the level of an individual program, in
# * another package and then distribute it commercially. If you feel this need,
# * contact me, once again, I'm sure we can work things out.
# *
# * I reserve the right to use any portion of this software package, or future
# * upgrades to the package as a whole, in a commercial product of my own,
# * license it out to to others for commercial purposes, or to base future
# * commercial products on it.
# *
# * But I probably won't. Let's get real here. I wrote this for fun.
# *
# * Any future use of this software for commercial gains does not affect your
# * right to copy and freely distribute this version. This license ensures that
# * this version of the software package may be freely distributed and will
# * remain so.
# *
# * It does not guarantee that future versions will remain so. But they probably
# * will.
# *
# * There is no warranty provided with this free software. No fitness for any
# * purpose is claimed or implied. It might not work correctly. It might not
# * work at all. It might do something really unpleasant. The risk is yours.
# * You accept it by installing and running this software. Under no
# * circumstances are the author, any modifiers, or any distributors of this
# * software liable for any damages arising out of the use or inability to use
# * this software.
# *
# * Have a nice day.
# *
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# The "-i" switch tells mem_analyze to ignore error lines in input data
# It's probably not a good idea to do so, when they are encountered
# you should probably determine what the problem is before going on.
$stop_on_errors = 1;
if (defined (@ARGV))
{
if ($ARGV[0] eq "-i")
{
shift (@ARGV);
$stop_on_errors = 0;
}
}
# Read each line in one at a time.
while (defined ($current_line = <>))
{
chop ($current_line);
# Do we have an error? Have we said to ignore them?
if (($current_line =~ /ERROR/i) && ($stop_on_errors))
{
die ("***ERROR*** An error was encountered at line $. in the input data.\n");
}
# Remove any comments
$current_line =~ s/#.*//;
# Skip blank lines, put data into hash table
if ($current_line ne "")
{
@fields = split (/:/, $current_line);
if (($#fields != 4) && ($stop_on_errors))
{
die ("***ERROR*** An error was encountered at line $. in the input data, illegal field count.\n");
}
if (defined ($fields[1]))
{
$usage{$fields[1]} = $current_line;
}
}
}
# Look at each table entry
foreach $key (keys %usage)
{
($function, $pointer, $allocated, $file, $line_number) = split (/:/, $usage{$key});
# If the memory location has not been freed, print the entry out
if ($allocated != 0)
{
print "$allocated bytes of memory left allocated at $pointer\n";
print "$pointer was last touched by $function at line $line_number of $file\n\n";
}
}