Add an option to set custom size for cache partition

Change-Id: I1be43697ee04f46c5839c4d23e461d54eefc450f
diff --git a/android/cmdline-options.h b/android/cmdline-options.h
index eb8ede0..5e8d59f 100644
--- a/android/cmdline-options.h
+++ b/android/cmdline-options.h
@@ -72,6 +72,7 @@
 CFG_PARAM( data,     "<file>", "data image (default <datadir>/userdata-qemu.img" )
 CFG_PARAM( partition_size, "<size>", "system/data partition size in MBs" )
 CFG_PARAM( cache,    "<file>", "cache partition image (default is temporary file)" )
+OPT_PARAM( cache_size, "<size>", "cache partition size in MBs" )
 CFG_FLAG ( no_cache, "disable the cache partition" )
 CFG_FLAG ( nocache,  "same as -no-cache" )
 OPT_PARAM( sdcard, "<file>", "SD card image (default <system>/sdcard.img")
diff --git a/android/help.c b/android/help.c
index c6ffb87..1570160 100644
--- a/android/help.c
+++ b/android/help.c
@@ -585,6 +585,15 @@
 }
 
 static void
+help_cache_size(stralloc_t*  out)
+{
+    PRINTF(
+    "  use '-cache <size>' to specify a /cache partition size in MB. By default,\n"
+    "  the cache partition size is set to 66MB\n\n"
+    );
+}
+
+static void
 help_no_cache(stralloc_t*  out)
 {
     PRINTF(
diff --git a/android/main.c b/android/main.c
index 51d481c..d9d2274 100644
--- a/android/main.c
+++ b/android/main.c
@@ -723,6 +723,18 @@
         }
     }
 
+    if (hw->disk_cachePartition_path && opts->cache_size) {
+        /* Set cache partition size per user options. */
+        char*  end;
+        long   sizeMB = strtol(opts->cache_size, &end, 0);
+
+        if (sizeMB < 0 || *end != 0) {
+            derror( "-cache-size must be followed by a positive integer" );
+            exit(1);
+        }
+        hw->disk_cachePartition_size = (uint64_t) sizeMB * ONE_MB;
+    }
+
     /** SD CARD PARTITION */
 
     if (!hw->hw_sdCard) {