Using GNU sed:
sed -i '$ d' foo.txt
The -i option does not exist in GNU sed versions older than 3.95, so you have to use it as a filter with a temporary file:
cp foo.txt foo.txt.tmp
sed '$ d' foo.txt.tmp > foo.txt
rm -f foo.txt.tmp
Of course, in that case you could also use head -n -1 instead of sed.
MacOS:
On Mac OS X (as of 10.7.4), the equivalent of the sed -i command above is
sed -i '' -e '$ d' foo.txt