OSDN Git Service

Usischev Yury pointed out that id shouldn't use exit() directly.
[android-x86/external-toybox.git] / scripts / bloatcheck
index a5a28f1..fff4690 100755 (executable)
@@ -14,47 +14,54 @@ addline()
     STUFF="$(printf "%s\n%s" "$STUFF" "$NEXT")"
 }
 
-diff <(nm --size-sort "$1" | sort -k3,3) \
-     <(nm --size-sort "$2" | sort -k3,3) | grep '^[<>]' | sort -k4,4 | \
-(
-LASTNAME=
-DELTA=0
-TOTAL=0
-OLD=0
-NEW=0
-STUFF=
-
-printf "name% 46s% 10s% 11s\n" old new delta
-echo "-----------------------------------------------------------------------"
-while read a b c d
-do
-  THISNAME=$(echo " $d" | sed 's/[.][0-9]*$//')
-
-  if [ "$LASTNAME" != "$THISNAME" ]
-  then
-    TOTAL=$(($TOTAL+$DELTA))
-    [ $DELTA -ne 0 ] && addline
-    LASTNAME="$THISNAME"
-    DELTA=0
-    OLD=0
-    NEW=0
-  fi
-
-  SIZE=$(printf "%d" "0x$b")
-  if [ "$a" == "<" ]
-  then
-    OLD=$(($OLD+$SIZE))
-    SIZE=$((-1*$SIZE))
-  else
-    NEW=$(($NEW+$SIZE))
-  fi
-  DELTA=$(($DELTA+$SIZE))
-done
-
-TOTAL=$(($TOTAL+$DELTA))
-[ $DELTA -ne 0 ] && addline
-
-echo "$STUFF" | sort -k4,4nr
-echo "-----------------------------------------------------------------------"
-printf "% 71d total\n" "$TOTAL"
-)
+do_bloatcheck()
+{
+  LASTNAME=
+  DELTA=0
+  TOTAL=0
+  OLD=0
+  NEW=0
+  STUFF=
+
+  printf "name% 46s% 10s% 11s\n" old new delta
+  echo "-----------------------------------------------------------------------"
+  while read a b c d
+  do
+    THISNAME=$(echo "$d" | sed 's/[.][0-9]*$//')
+
+    if [ "$LASTNAME" != "$THISNAME" ]
+    then
+      TOTAL=$(($TOTAL+$DELTA))
+      [ $DELTA -ne 0 ] && addline
+      LASTNAME="$THISNAME"
+      DELTA=0
+      OLD=0
+      NEW=0
+    fi
+
+    SIZE=$(printf "%d" "0x$b")
+    if [ "$a" == "-" ]
+    then
+      OLD=$(($OLD+$SIZE))
+      SIZE=$((-1*$SIZE))
+    else
+      NEW=$(($NEW+$SIZE))
+    fi
+    DELTA=$(($DELTA+$SIZE))
+  done
+
+  TOTAL=$(($TOTAL+$DELTA))
+  [ $DELTA -ne 0 ] && addline
+
+  echo "$STUFF" | sort -k4,4nr
+  echo "-----------------------------------------------------------------------"
+  printf "% 71d total\n" "$TOTAL"
+}
+
+DIFF1=`mktemp base.XXXXXXX`
+DIFF2=`mktemp bloat.XXXXXXX`
+trap "rm $DIFF1 $DIFF2" EXIT
+nm --size-sort "$1" | sort -k3,3 > $DIFF1
+nm --size-sort "$2" | sort -k3,3 > $DIFF2
+diff -U 0 $DIFF1 $DIFF2 | tail -n +3 | sed -n 's/^\([-+]\)/\1 /p' \
+  | sort -k4,4 | do_bloatcheck