Merge "run-as: use mmap to read package list file"
diff --git a/adb/commandline.c b/adb/commandline.c
index 4c15232..31ba3ac 100644
--- a/adb/commandline.c
+++ b/adb/commandline.c
@@ -561,6 +561,10 @@
 
     free(quoted_log_tags);
 
+    if (!strcmp(argv[0],"longcat")) {
+        strncat(buf, " -v long", sizeof(buf)-1);
+    }
+
     argc -= 1;
     argv += 1;
     while(argc-- > 0) {
@@ -577,9 +581,29 @@
     return 0;
 }
 
+static int mkdirs(char *path)
+{
+    int ret;
+    char *x = path + 1;
+
+    for(;;) {
+        x = adb_dirstart(x);
+        if(x == 0) return 0;
+        *x = 0;
+        ret = adb_mkdir(path, 0775);
+        *x = OS_PATH_SEPARATOR;
+        if((ret < 0) && (errno != EEXIST)) {
+            return ret;
+        }
+        x++;
+    }
+    return 0;
+}
+
 static int backup(int argc, char** argv) {
     char buf[4096];
-    const char* filename = "./backup.ab";
+    char default_name[32];
+    const char* filename = strcpy(default_name, "./backup.ab");
     int fd, outFd;
     int i, j;
 
@@ -602,7 +626,9 @@
     /* bare "adb backup" or "adb backup -f filename" are not valid invocations */
     if (argc < 2) return usage();
 
-    outFd = adb_open_mode(filename, O_WRONLY | O_CREAT | O_TRUNC, 0640);
+    adb_unlink(filename);
+    mkdirs((char *)filename);
+    outFd = adb_creat(filename, 0640);
     if (outFd < 0) {
         fprintf(stderr, "adb: unable to open file %s\n", filename);
         return -1;
@@ -1203,7 +1229,7 @@
         return 0;
     }
 
-    if(!strcmp(argv[0],"logcat") || !strcmp(argv[0],"lolcat")) {
+    if(!strcmp(argv[0],"logcat") || !strcmp(argv[0],"lolcat") || !strcmp(argv[0],"longcat")) {
         return logcat(ttype, serial, argc, argv);
     }
 
diff --git a/rootdir/init.rc b/rootdir/init.rc
index f44d89a..822ae02 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -70,6 +70,7 @@
     write /proc/sys/kernel/randomize_va_space 2
     write /proc/sys/kernel/kptr_restrict 2
     write /proc/sys/kernel/dmesg_restrict 1
+    write /proc/sys/vm/mmap_min_addr 32768
 
 # Create cgroup mount points for process groups
     mkdir /dev/cpuctl