Artifact ebd6df1f69c757b3364b5ce3e38fbdee82db499e:
- Executable file
leakcheck/check-malloc-free.sh
— part of check-in
[709b50760d]
at
2010-05-15 00:34:57
on branch trunk
— Added line numbers to debugging output
Added overloaded debugging strdup to check for leaks (user: rkeene, size: 1317) [annotate] [blame] [check-ins using]
 - Executable file
leakcheck/leakcheck
— part of check-in
[168d86b82b]
at
2010-05-15 00:48:38
on branch trunk
— Renamed leakcheck tool
Added documentation for leakcheck tool (user: rkeene, size: 1317) [annotate] [blame] [check-ins using]
 
#! /bin/bash
TMPFILE="${TMPDIR:-/tmp}/malloc-free-check-$$${RANDOM}${RANDOM}${RANDOM}.tmp"
egrep '(MALLOC|FREE|REALLOC)' "$@" | sed 's@^.*FREE(\(0x[0-9a-f]*\)).*$@free \1@;s@^.*MALLOC() = @malloc @;s@^.*REALLOC(\(0x[0-9a-f]*\)) = @realloc \1 @' > "${TMPFILE}"
cat "${TMPFILE}" | while read op addr newaddr; do
	case "${op}" in
		malloc)
			if [ -z "${alloclist}" ]; then
				alloclist="${addr}"
			else
				alloclist="${alloclist} ${addr}"
			fi
			;;
		free)
			if ! echo " ${alloclist} " | grep " ${addr} " >/dev/null; then
				if [ -z "${alloclist}" ]; then
					alloclist="!${addr}"
				else
					alloclist="${alloclist} !${addr}"
				fi
				continue
			fi
			alloclist="$(echo " ${alloclist} " | sed "s@ ${addr} @ @;s@^  *@@;s@  *\$@@")"
			;;
		realloc)
			alloclist="$(echo " ${alloclist} " | sed "s@ ${addr} @ ${newaddr} @;s@^  *@@;s@  *\$@@")"
			;;
	esac
	echo "${alloclist}"
done | tail -1 | while read leftovers; do
	for leftover in ${leftovers}; do
		case "${leftover}" in
			!*)
				leftover="$(echo "${leftover}" | cut -c 2-)"
				echo "Double freed or never allocated ${leftover}:"
				grep "${leftover}" "$@" | sed 's@^@    @'
				echo ''
				;;
			*)
				echo "Unfreed memory ${leftover}:"
				grep "${leftover}" "$@" | sed 's@^@    @'
				echo ''
				;;
		esac
	done
done
rm -f "${TMPFILE}"