Merge "ginstall: support reading tar from stdin."
diff --git a/ginstall/ginstall.py b/ginstall/ginstall.py
index fc354db..81be82a 100755
--- a/ginstall/ginstall.py
+++ b/ginstall/ginstall.py
@@ -625,6 +625,14 @@
                 'gftv200-39-pre1 and before.')
 
 
+def CheckMultiLoader(manifest):
+  """Check if this ginstall image supports platform-named loaders."""
+  multiloader = manifest.get('multiloader')
+  if not multiloader:
+    return False
+  return True
+
+
 class ProgressBar(object):
   """Progress bar that prints one dot per 1MB."""
 
@@ -863,6 +871,12 @@
   CheckMinimumVersion(manifest)
   CheckMisc(manifest)
 
+  loader_bin_list = ['loader.img', 'loader.bin']
+  loader_sig_list = ['loader.sig']
+  if CheckMultiLoader(manifest):
+    loader_bin_list = ['loader.%s.bin' % GetPlatform().lower()]
+    loader_sig_list = ['loader.%s.sig' % GetPlatform().lower()]
+
   uloader = loader = None
   uloadersig = FileWithSecureHash(StringIO.StringIO(''), 'badsig')
   loadersig = FileWithSecureHash(StringIO.StringIO(''), 'badsig')
@@ -878,10 +892,10 @@
     elif ti.name.startswith('rootfs.'):
       fh = FileWithSecureHash(tar.extractfile(ti), secure_hash)
       InstallRootfs(fh, partition)
-    elif ti.name in ['loader.img', 'loader.bin']:
+    elif ti.name in loader_bin_list:
       buf = StringIO.StringIO(tar.extractfile(ti).read())
       loader = FileWithSecureHash(buf, secure_hash)
-    elif ti.name == 'loader.sig':
+    elif ti.name in loader_sig_list:
       buf = StringIO.StringIO(tar.extractfile(ti).read())
       loadersig = FileWithSecureHash(buf, secure_hash)
     elif ti.name == 'uloader.img':
diff --git a/ginstall/install_test.sh b/ginstall/install_test.sh
index 4338bac..ec372c5 100755
--- a/ginstall/install_test.sh
+++ b/ginstall/install_test.sh
@@ -5,6 +5,7 @@
 tmpdir="$(mktemp -d)"
 export PATH="$tmpdir/bin:${PATH}"
 export GINSTALL_OUT_FILE="$tmpdir/out"
+psiz=$(stat --format=%s testdata/img/loader.gflt110.bin)
 lsiz=$(stat --format=%s testdata/img/loader.img)
 ksiz=$(stat --format=%s testdata/img/kernel.img)
 rsiz=$(stat --format=%s testdata/img/rootfs.img)
@@ -195,6 +196,45 @@
 
 
 
+# GFLT110 with gflt110.bin loader.
+echo; echo; echo GFLT110 with platform loader
+setup_fakeroot GFLT110
+expected="\
+psback
+logos ginstall
+flash_unlock ${tmpdir}/dev/mtd6
+flash_erase --quiet ${tmpdir}/dev/mtd6 0 0
+flash_unlock ${tmpdir}/dev/mtd0
+flash_erase --quiet ${tmpdir}/dev/mtd0 0 0
+hnvram -q -w ACTIVATED_KERNEL_NAME=kernel0"
+
+WVPASS ./ginstall.py --basepath="$tmpdir" --tar=./testdata/img/image_gflt110_platform_loader.gi --partition=primary --skiploadersig
+WVPASSEQ "$expected" "$(cat $GINSTALL_OUT_FILE)"
+WVPASS cmp --bytes="$psiz" "${tmpdir}/dev/mtd0" testdata/img/loader.gflt110.bin
+WVPASS cmp --bytes="$ksiz" "${tmpdir}/dev/mtd6" testdata/img/kernel.img
+
+
+
+# GFLT110 with both loaders with the MANIFEST containing "multiloader: 1"
+echo; echo; echo GFLT110 with both loaders
+setup_fakeroot GFLT110
+expected="\
+psback
+logos ginstall
+flash_unlock ${tmpdir}/dev/mtd6
+flash_erase --quiet ${tmpdir}/dev/mtd6 0 0
+flash_unlock ${tmpdir}/dev/mtd0
+flash_erase --quiet ${tmpdir}/dev/mtd0 0 0
+hnvram -q -w ACTIVATED_KERNEL_NAME=kernel0"
+
+WVPASS ./ginstall.py --basepath="$tmpdir" --tar=./testdata/img/image_gflt110_both_loaders.gi --partition=primary --skiploadersig
+WVPASSEQ "$expected" "$(cat $GINSTALL_OUT_FILE)"
+WVFAIL cmp --bytes="$lsiz" "${tmpdir}/dev/mtd0" testdata/img/loader.bin
+WVPASS cmp --bytes="$psiz" "${tmpdir}/dev/mtd0" testdata/img/loader.gflt110.bin
+WVPASS cmp --bytes="$ksiz" "${tmpdir}/dev/mtd6" testdata/img/kernel.img
+
+
+
 echo; echo; echo MANIFEST with Bad checksums
 setup_fakeroot GFHD100
 echo "This should not be touched" >"${tmpdir}/dev/mtd0"
diff --git a/ginstall/testdata/img/image_gflt110_both_loaders.gi b/ginstall/testdata/img/image_gflt110_both_loaders.gi
new file mode 100644
index 0000000..62f2a03
--- /dev/null
+++ b/ginstall/testdata/img/image_gflt110_both_loaders.gi
Binary files differ
diff --git a/ginstall/testdata/img/image_gflt110_platform_loader.gi b/ginstall/testdata/img/image_gflt110_platform_loader.gi
new file mode 100644
index 0000000..8d7ed9b
--- /dev/null
+++ b/ginstall/testdata/img/image_gflt110_platform_loader.gi
Binary files differ
diff --git a/ginstall/testdata/img/loader.gflt110.bin b/ginstall/testdata/img/loader.gflt110.bin
new file mode 100644
index 0000000..a95b6ae
--- /dev/null
+++ b/ginstall/testdata/img/loader.gflt110.bin
@@ -0,0 +1 @@
+gflt110.bin
\ No newline at end of file