Merge "Allow numeric uid & gid in chown"
diff --git a/adb/usb_vendors.c b/adb/usb_vendors.c
index 73bf418..866e3af 100644
--- a/adb/usb_vendors.c
+++ b/adb/usb_vendors.c
@@ -59,7 +59,8 @@
 #define VENDOR_ID_NVIDIA        0x0955
 // Garmin-Asus's USB Vendor ID
 #define VENDOR_ID_GARMIN_ASUS   0x091E
-
+// Sharp's USB Vendor ID
+#define VENDOR_ID_SHARP         0x04dd
 
 /** built-in vendor list */
 int builtInVendorIds[] = {
@@ -75,6 +76,7 @@
     VENDOR_ID_DELL,
     VENDOR_ID_NVIDIA,
     VENDOR_ID_GARMIN_ASUS,
+    VENDOR_ID_SHARP,
 };
 
 #define BUILT_IN_VENDOR_COUNT    (sizeof(builtInVendorIds)/sizeof(builtInVendorIds[0]))
diff --git a/fastboot/fastboot.c b/fastboot/fastboot.c
index aedfce1..bed30b2 100644
--- a/fastboot/fastboot.c
+++ b/fastboot/fastboot.c
@@ -231,11 +231,12 @@
             "  -c <cmdline>                             override kernel commandline\n"
             "  -i <vendor id>                           specify a custom USB vendor id\n"
             "  -b <base_addr>                           specify a custom kernel base address\n"
+            "  -n <page size>                           specify the nand page size. default: 2048\n"
         );
     exit(1);
 }
 
-void *load_bootable_image(const char *kernel, const char *ramdisk, 
+void *load_bootable_image(unsigned page_size, const char *kernel, const char *ramdisk,
                           unsigned *sz, const char *cmdline)
 {
     void *kdata = 0, *rdata = 0;
@@ -276,7 +277,7 @@
     }
 
     fprintf(stderr,"creating boot image...\n");
-    bdata = mkbootimg(kdata, ksize, rdata, rsize, 0, 0, 2048, base_addr, &bsize);
+    bdata = mkbootimg(kdata, ksize, rdata, rsize, 0, 0, page_size, base_addr, &bsize);
     if(bdata == 0) {
         fprintf(stderr,"failed to create boot.img\n");
         return 0;
@@ -548,6 +549,7 @@
     int wants_reboot_bootloader = 0;
     void *data;
     unsigned sz;
+    unsigned page_size = 2048;
 
     skip(1);
     if (argc == 0) {
@@ -570,6 +572,11 @@
             require(2);
             base_addr = strtoul(argv[1], 0, 16);
             skip(2);
+        } else if(!strcmp(*argv, "-n")) {
+            require(2);
+            page_size = (unsigned)strtoul(argv[1], NULL, 0);
+            if (!page_size) die("invalid page size");
+            skip(2);
         } else if(!strcmp(*argv, "-s")) {
             require(2);
             serial = argv[1];
@@ -629,7 +636,7 @@
                 rname = argv[0];
                 skip(1);
             }
-            data = load_bootable_image(kname, rname, &sz, cmdline);
+            data = load_bootable_image(page_size, kname, rname, &sz, cmdline);
             if (data == 0) return 1;
             fb_queue_download("boot.img", data, sz);
             fb_queue_command("boot", "booting");
@@ -659,7 +666,7 @@
             } else {
                 skip(3);
             }
-            data = load_bootable_image(kname, rname, &sz, cmdline);
+            data = load_bootable_image(page_size, kname, rname, &sz, cmdline);
             if (data == 0) die("cannot load bootable image");
             fb_queue_flash(pname, data, sz);
         } else if(!strcmp(*argv, "flashall")) {