diff options
author | Doug Zongker <dougz@android.com> | 2011-04-22 18:26:44 +0200 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2011-05-04 17:17:35 +0200 |
commit | 90588820b7110acf142d17457f0d10cd7cb57a8a (patch) | |
tree | 5bfdb16d111ab15cba3fd4466579b17f6a7d2e68 /bootloader.c | |
parent | log which key a package verified against in recovery (diff) | |
download | android_bootable_recovery-90588820b7110acf142d17457f0d10cd7cb57a8a.tar android_bootable_recovery-90588820b7110acf142d17457f0d10cd7cb57a8a.tar.gz android_bootable_recovery-90588820b7110acf142d17457f0d10cd7cb57a8a.tar.bz2 android_bootable_recovery-90588820b7110acf142d17457f0d10cd7cb57a8a.tar.lz android_bootable_recovery-90588820b7110acf142d17457f0d10cd7cb57a8a.tar.xz android_bootable_recovery-90588820b7110acf142d17457f0d10cd7cb57a8a.tar.zst android_bootable_recovery-90588820b7110acf142d17457f0d10cd7cb57a8a.zip |
Diffstat (limited to '')
-rw-r--r-- | bootloader.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/bootloader.c b/bootloader.c index b690c5582..709656602 100644 --- a/bootloader.c +++ b/bootloader.c @@ -22,6 +22,8 @@ #include <errno.h> #include <stdio.h> #include <string.h> +#include <sys/stat.h> +#include <unistd.h> static int get_bootloader_message_mtd(struct bootloader_message *out, const Volume* v); static int set_bootloader_message_mtd(const struct bootloader_message *in, const Volume* v); @@ -132,8 +134,26 @@ static int set_bootloader_message_mtd(const struct bootloader_message *in, // for misc partitions on block devices // ------------------------------------ +static void wait_for_device(const char* fn) { + int tries = 0; + int ret; + struct stat buf; + do { + ++tries; + ret = stat(fn, &buf); + if (ret) { + printf("stat %s try %d: %s\n", fn, tries, strerror(errno)); + sleep(1); + } + } while (ret && tries < 10); + if (ret) { + printf("failed to stat %s\n", fn); + } +} + static int get_bootloader_message_block(struct bootloader_message *out, const Volume* v) { + wait_for_device(v->device); FILE* f = fopen(v->device, "rb"); if (f == NULL) { LOGE("Can't open %s\n(%s)\n", v->device, strerror(errno)); @@ -155,6 +175,7 @@ static int get_bootloader_message_block(struct bootloader_message *out, static int set_bootloader_message_block(const struct bootloader_message *in, const Volume* v) { + wait_for_device(v->device); FILE* f = fopen(v->device, "wb"); if (f == NULL) { LOGE("Can't open %s\n(%s)\n", v->device, strerror(errno)); |