fix stat for correct free space when backup path is second storage

Change-Id: I762269d696a194889e74c101b9338920e924ebb5
Shrink cid

Change-Id: I00556341b746f186f424ebe46c94fd02f10e6536
v6036

Change-Id: I7e70d0e2e367f703fe420d4300eb5fecdc247099
Enable mount usb for external storage on datamedia devices

Change-Id: I73b4112983b7b118d738eb224b32f4f0beb5d147
Fix issue where android device manager, etc, dont actually wipe data.

--wipe_data issues via /cache/recovery/command will now completely format data.

All other manual wipe commands will preserve data on /data/media.
There is another mounts/storage option that will do a true data format.

Change-Id: Ie8ecd2b0e14c3bb1d8a404ea868cdf703455d2ab
Merge "fix stat for correct free space when backup path is second storage" into cm-10.2
Merge "Enable mount usb for external storage on datamedia devices" into cm-10.2
Merge "Fix issue where android device manager, etc, dont actually wipe data." into cm-10.2
If sd-ext is defined in recovery.fstab, but user did not partition sdcard, silent failure while formatting device (every nandroid restore or wipe data)

Change-Id: I3ee2f891899be8e4fe0d722e64357dc5e7bc7428
recovery: Only install adb keys once

 * Recovery is currently calling setup_adbd when the process starts to
   fetch the keys from the data partition and (re)start adbd.
 * This of course has the heinous side effect of making it
   impossible to use gdbserver to debug recovery, making me a sad panda.
 * Make setup_adbd a pseudo-binary, and run it as a oneshot service
   instead.

Change-Id: Ib4b9e342564bb60bdc2df4cee91566f31c7db8f1
recovery: Revenge of MiniVold

 * Vold has been refactored to be friendly to an environment such as
   recovery. Using Vold will eliminate many hacks and add previously
   unavailable features.
 * Link with libminivold and create a pseudo-binary to launch as a
   service in recovery.
 * Libvoldclient is an event-driven client for controlling the daemon.
 * Handles device hotplug and automatic mounting, if desired.
 * Manages USB storage
 * Can check and format volumes using any supported filesystem
 * Dynamically generate all storage paths
 * Dynamically refresh menus affected by storage changes
 * Fixed wall-of-compile-warnings and const-correctness in extendedcommands.c
 * Misc cleanups
 * Say goodbye to "apply /sdcard/update.zip". You have served us well.

Change-Id: I13a3d72493f8fce7c19f192f9e94ad22cb60a2d2
recovery: Don't enable UMS function unless needed

 * This causes problems with some hosts. Only enable the composition if
   the user actually turns UMS on.

Change-Id: I18b109a3416d55ef711d346685d46a93851da332
recovery: Don't automount external storage at startup

 * Do it for hotplug and on-demand only.

Change-Id: I9c0ca96203a8ff1f16fa42e31f426cd25bdaba1d
recovery: Add sdcard daemon

 * Our custom ext4 support for sdcards needs it.

Change-Id: Ie1c22c1d6a3255cbe3a7ff3c072243f4a5461a17
recovery: try to write EMMC partitions more reliably

Nexus 4 has flash errors that manifest during large writes (eg, of the
radio partition).  Writes of some blocks seem to be dropped silently,
without any errors being returned to the user level.

Make two changes to the partition-writing code:

- break it up into 1MB writes instead of writing partitions with a
  single fwrite() call.  Pause for 50ms in between every chunk.

- read the partition back after writing and verify that we read what
  we wrote.  Drop caches before reading so we (hopefully) are reading
  off the actual flash and not some cache.

Neither of these should be necessary.

Bug: 9602014

Change-Id: Ice2e24dd4c11f1a57968277b5eb1468c772f6f63
recovery: write partitions more conservatively

Write and verify partitions using write(2) and read(2) rather than the
stdio functions.  Read and write in 4kb blocks.  When writing, fsync()
every 1MB.

Bug: 9602014
Change-Id: Ie98ce38e857786fc0f4ebf36bb5ffc93b41bc96f
recovery: sleep after writing partition and closing it

Another speculative attempt to get everything we write actually stored
to the device.

Change-Id: Icf40b0741b4c535e55ea34848073a97d90dc0e70
recovery: Support for compressed backups

 * Systems are getting quite large nowadays, and performing backups
   without using compression is wildly inefficient. A good compression
   algorithm also gives us a big speedup on backup and restore times since
   the process is entirely I/O bound.
 * Bring in pigz (via libminipigz), which is a multithreaded version of
   gzip and pipe tar backups and restores thru it.
 * Autodetect compressed images where appropriate, and add a menu option
   to select the compressed format by default.
 * Also fixed various trivial warnings and const-correctness issues.

Comparison on my Flo device right now:

Uncompressed:
  1868512   2013-08-24.07.10.08

Compressed:
  1149300   2013-08-24.06.51.14

Change-Id: I55025c993662142f5b647e600daf6885f9be6667
recovery: all vold loglines deserve newlines

Self-nominating for the most impactful commit CM has seen
since 2009.

Change-Id: I450167573b7cf6db1a92227aef7ff3ed95856dd5
recovery: close zip archive after installation

Otherwise recovery will restart itself (gets killed by vold for
leaving a file open) when reboot is selected.

Change-Id: I915c3082bd99ca994c3a4cbe5ba913866051bc0e