Remove repeated code and enable encrypted SD cards and USB sticks images.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2750 c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/vl.c b/vl.c
index 8707a1f..bb36281 100644
--- a/vl.c
+++ b/vl.c
@@ -6714,6 +6714,24 @@
 
 /* password input */
 
+int qemu_key_check(BlockDriverState *bs, const char *name)
+{
+    char password[256];
+    int i;
+
+    if (!bdrv_is_encrypted(bs))
+        return 0;
+
+    term_printf("%s is encrypted.\n", name);
+    for(i = 0; i < 3; i++) {
+        monitor_readline("Password: ", 1, password, sizeof(password));
+        if (bdrv_set_key(bs, password) == 0)
+            return 0;
+        term_printf("invalid password\n");
+    }
+    return -EPERM;
+}
+
 static BlockDriverState *get_bdrv(int index)
 {
     BlockDriverState *bs;
@@ -6731,21 +6749,12 @@
 static void read_passwords(void)
 {
     BlockDriverState *bs;
-    int i, j;
-    char password[256];
+    int i;
 
     for(i = 0; i < 6; i++) {
         bs = get_bdrv(i);
-        if (bs && bdrv_is_encrypted(bs)) {
-            term_printf("%s is encrypted.\n", bdrv_get_device_name(bs));
-            for(j = 0; j < 3; j++) {
-                monitor_readline("Password: ", 
-                                 1, password, sizeof(password));
-                if (bdrv_set_key(bs, password) == 0)
-                    break;
-                term_printf("invalid password\n");
-            }
-        }
+        if (bs)
+            qemu_key_check(bs, bdrv_get_device_name(bs));
     }
 }
 
@@ -7622,7 +7631,7 @@
         }
     }
 
-    /* Open the virtual parallel flash bloc devices */
+    /* Open the virtual parallel flash block devices */
     for(i = 0; i < MAX_PFLASH; i++) {
         if (pflash_filename[i]) {
             if (!pflash_table[i]) {
@@ -7648,7 +7657,8 @@
                       snapshot ? BDRV_O_SNAPSHOT : 0) < 0) {
             fprintf(stderr, "qemu: could not open SD card image %s\n",
                     sd_filename);
-        }
+        } else
+            qemu_key_check(bs, sd_filename);
     }
 
     register_savevm("timer", 0, 2, timer_save, timer_load, NULL);