sim: Move `flash` inside of `Images` struct

Every use of `Images` uses the same flash device as a base.  Move this
value into the struct, instead of having to pass it around in parallel.

Signed-off-by: David Brown <david.brown@linaro.org>
diff --git a/sim/src/lib.rs b/sim/src/lib.rs
index 4c6f069..74f6b09 100644
--- a/sim/src/lib.rs
+++ b/sim/src/lib.rs
@@ -223,37 +223,44 @@
     pub fn run_single(&mut self, device: DeviceName, align: u8) {
         warn!("Running on device {} with alignment {}", device, align);
 
-        let mut run = Run::new(device, align);
+        let run = Run::new(device, align);
 
         let mut failed = false;
 
         // Creates a badly signed image in slot1 to check that it is not
         // upgraded to
         let mut bad_flash = run.flash.clone();
+        let primary = install_image(&mut bad_flash, run.slots[0].base_off, 32784, false);
+        let upgrade = install_image(&mut bad_flash, run.slots[1].base_off, 41928, true);
         let bad_slot1_image = Images {
+            flash: bad_flash,
             slot0: run.slots[0].clone(),
             slot1: run.slots[1].clone(),
-            primary: install_image(&mut bad_flash, run.slots[0].base_off, 32784, false),
-            upgrade: install_image(&mut bad_flash, run.slots[1].base_off, 41928, true),
+            primary: primary,
+            upgrade: upgrade,
             align: align,
         };
 
-        failed |= run_signfail_upgrade(&bad_flash, &run.areadesc, &bad_slot1_image);
+        failed |= run_signfail_upgrade(&run.areadesc, &bad_slot1_image);
 
-        let images = Images {
+        let mut flash = run.flash.clone();
+        let primary = install_image(&mut flash, run.slots[0].base_off, 32784, false);
+        let upgrade = install_image(&mut flash, run.slots[1].base_off, 41928, false);
+        let mut images = Images {
+            flash: flash,
             slot0: run.slots[0].clone(),
             slot1: run.slots[1].clone(),
-            primary: install_image(&mut run.flash, run.slots[0].base_off, 32784, false),
-            upgrade: install_image(&mut run.flash, run.slots[1].base_off, 41928, false),
+            primary: primary,
+            upgrade: upgrade,
             align: align,
         };
 
-        failed |= run_norevert_newimage(&run.flash, &run.areadesc, &images);
+        failed |= run_norevert_newimage(&run.areadesc, &images);
 
-        mark_upgrade(&mut run.flash, &images.slot1);
+        mark_upgrade(&mut images.flash, &images.slot1);
 
         // upgrades without fails, counts number of flash operations
-        let total_count = match run_basic_upgrade(&run.flash, &run.areadesc, &images) {
+        let total_count = match run_basic_upgrade(&run.areadesc, &images) {
             Ok(v)  => v,
             Err(_) => {
                 self.failures += 1;
@@ -261,12 +268,11 @@
             },
         };
 
-        failed |= run_basic_revert(&run.flash, &run.areadesc, &images);
-        failed |= run_revert_with_fails(&run.flash, &run.areadesc, &images, total_count);
-        failed |= run_perm_with_fails(&run.flash, &run.areadesc, &images, total_count);
-        failed |= run_perm_with_random_fails(&run.flash, &run.areadesc, &images,
-                                             total_count, 5);
-        failed |= run_norevert(&run.flash, &run.areadesc, &images);
+        failed |= run_basic_revert(&run.areadesc, &images);
+        failed |= run_revert_with_fails(&run.areadesc, &images, total_count);
+        failed |= run_perm_with_fails(&run.areadesc, &images, total_count);
+        failed |= run_perm_with_random_fails(&run.areadesc, &images, total_count, 5);
+        failed |= run_norevert(&run.areadesc, &images);
 
         //show_flash(&flash);
 
@@ -336,9 +342,8 @@
 ///
 /// Returns the number of flash operations which can later be used to
 /// inject failures at chosen steps.
-fn run_basic_upgrade(flash: &SimFlash, areadesc: &AreaDesc, images: &Images)
-                     -> Result<i32, ()> {
-    let (fl, total_count) = try_upgrade(&flash, &areadesc, &images, None);
+fn run_basic_upgrade(areadesc: &AreaDesc, images: &Images) -> Result<i32, ()> {
+    let (fl, total_count) = try_upgrade(&images.flash, &areadesc, &images, None);
     info!("Total flash operation count={}", total_count);
 
     if !verify_image(&fl, images.slot0.base_off, &images.upgrade) {
@@ -351,19 +356,19 @@
 
 #[cfg(feature = "overwrite-only")]
 #[allow(unused_variables)]
-fn run_basic_revert(flash: &SimFlash, areadesc: &AreaDesc, images: &Images) -> bool {
+fn run_basic_revert(areadesc: &AreaDesc, images: &Images) -> bool {
     false
 }
 
 #[cfg(not(feature = "overwrite-only"))]
-fn run_basic_revert(flash: &SimFlash, areadesc: &AreaDesc, images: &Images) -> bool {
+fn run_basic_revert(areadesc: &AreaDesc, images: &Images) -> bool {
     let mut fails = 0;
 
     // FIXME: this test would also pass if no swap is ever performed???
     if Caps::SwapUpgrade.present() {
         for count in 2 .. 5 {
             info!("Try revert: {}", count);
-            let fl = try_revert(&flash, &areadesc, count, images.align);
+            let fl = try_revert(&images.flash, &areadesc, count, images.align);
             if !verify_image(&fl, images.slot0.base_off, &images.primary) {
                 error!("Revert failure on count {}", count);
                 fails += 1;
@@ -374,14 +379,13 @@
     fails > 0
 }
 
-fn run_perm_with_fails(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
-                       total_flash_ops: i32) -> bool {
+fn run_perm_with_fails(areadesc: &AreaDesc, images: &Images, total_flash_ops: i32) -> bool {
     let mut fails = 0;
 
     // Let's try an image halfway through.
     for i in 1 .. total_flash_ops {
         info!("Try interruption at {}", i);
-        let (fl, count) = try_upgrade(&flash, &areadesc, &images, Some(i));
+        let (fl, count) = try_upgrade(&images.flash, &areadesc, &images, Some(i));
         info!("Second boot, count={}", count);
         if !verify_image(&fl, images.slot0.base_off, &images.upgrade) {
             warn!("FAIL at step {} of {}", i, total_flash_ops);
@@ -416,11 +420,11 @@
     fails > 0
 }
 
-fn run_perm_with_random_fails(flash: &SimFlash, areadesc: &AreaDesc,
+fn run_perm_with_random_fails(areadesc: &AreaDesc,
                               images: &Images, total_flash_ops: i32,
                               total_fails: usize) -> bool {
     let mut fails = 0;
-    let (fl, total_counts) = try_random_fails(&flash, &areadesc, &images,
+    let (fl, total_counts) = try_random_fails(&images.flash, &areadesc, &images,
                                               total_flash_ops, total_fails);
     info!("Random interruptions at reset points={:?}", total_counts);
 
@@ -456,20 +460,19 @@
 
 #[cfg(feature = "overwrite-only")]
 #[allow(unused_variables)]
-fn run_revert_with_fails(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
+fn run_revert_with_fails(areadesc: &AreaDesc, images: &Images,
                          total_count: i32) -> bool {
     false
 }
 
 #[cfg(not(feature = "overwrite-only"))]
-fn run_revert_with_fails(flash: &SimFlash, areadesc: &AreaDesc, images: &Images,
-                         total_count: i32) -> bool {
+fn run_revert_with_fails(areadesc: &AreaDesc, images: &Images, total_count: i32) -> bool {
     let mut fails = 0;
 
     if Caps::SwapUpgrade.present() {
         for i in 1 .. (total_count - 1) {
             info!("Try interruption at {}", i);
-            if try_revert_with_fail_at(&flash, &areadesc, &images, i) {
+            if try_revert_with_fail_at(&images.flash, &areadesc, &images, i) {
                 error!("Revert failed at interruption {}", i);
                 fails += 1;
             }
@@ -481,13 +484,13 @@
 
 #[cfg(feature = "overwrite-only")]
 #[allow(unused_variables)]
-fn run_norevert(flash: &SimFlash, areadesc: &AreaDesc, images: &Images) -> bool {
+fn run_norevert(areadesc: &AreaDesc, images: &Images) -> bool {
     false
 }
 
 #[cfg(not(feature = "overwrite-only"))]
-fn run_norevert(flash: &SimFlash, areadesc: &AreaDesc, images: &Images) -> bool {
-    let mut fl = flash.clone();
+fn run_norevert(areadesc: &AreaDesc, images: &Images) -> bool {
+    let mut fl = images.flash.clone();
     let mut fails = 0;
 
     info!("Try norevert");
@@ -549,9 +552,8 @@
 
 // Tests a new image written to slot0 that already has magic and image_ok set
 // while there is no image on slot1, so no revert should ever happen...
-fn run_norevert_newimage(flash: &SimFlash, areadesc: &AreaDesc,
-                         images: &Images) -> bool {
-    let mut fl = flash.clone();
+fn run_norevert_newimage(areadesc: &AreaDesc, images: &Images) -> bool {
+    let mut fl = images.flash.clone();
     let mut fails = 0;
 
     info!("Try non-revert on imgtool generated image");
@@ -595,9 +597,8 @@
 
 // Tests a new image written to slot0 that already has magic and image_ok set
 // while there is no image on slot1, so no revert should ever happen...
-fn run_signfail_upgrade(flash: &SimFlash, areadesc: &AreaDesc,
-                        images: &Images) -> bool {
-    let mut fl = flash.clone();
+fn run_signfail_upgrade(areadesc: &AreaDesc, images: &Images) -> bool {
+    let mut fl = images.flash.clone();
     let mut fails = 0;
 
     info!("Try upgrade image with bad signature");
@@ -975,6 +976,7 @@
 }
 
 struct Images {
+    flash: SimFlash,
     slot0: SlotInfo,
     slot1: SlotInfo,
     primary: Vec<u8>,