diff options
author | Michael Runge <mrunge@google.com> | 2014-12-10 04:33:49 +0100 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-12-10 04:33:49 +0100 |
commit | 4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba (patch) | |
tree | 369280a6bdae76cb2a06572b38b3c91de3a9a0df | |
parent | am c43b17f0: Merge "Fix recovery image build for 32p" (diff) | |
parent | Merge "Force write to disk while doing uncrypt" into lmp-mr1-dev (diff) | |
download | android_bootable_recovery-4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba.tar android_bootable_recovery-4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba.tar.gz android_bootable_recovery-4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba.tar.bz2 android_bootable_recovery-4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba.tar.lz android_bootable_recovery-4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba.tar.xz android_bootable_recovery-4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba.tar.zst android_bootable_recovery-4f9fcffce7328b8f3f9a8384c51220f4a2cda8ba.zip |
-rw-r--r-- | uncrypt/uncrypt.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/uncrypt/uncrypt.c b/uncrypt/uncrypt.c index 189fa57e1..361c80483 100644 --- a/uncrypt/uncrypt.c +++ b/uncrypt/uncrypt.c @@ -164,7 +164,8 @@ char* parse_recovery_command_file() if (f == NULL) { return NULL; } - FILE* fo = fopen(RECOVERY_COMMAND_FILE_TMP, "w"); + int fd = open(RECOVERY_COMMAND_FILE_TMP, O_WRONLY | O_SYNC); + FILE* fo = fdopen(fd, "w"); while (fgets(temp, sizeof(temp), f)) { printf("read: %s", temp); @@ -175,6 +176,7 @@ char* parse_recovery_command_file() fputs(temp, fo); } fclose(f); + fsync(fd); fclose(fo); if (fn) { @@ -190,7 +192,8 @@ int produce_block_map(const char* path, const char* map_file, const char* blk_de struct stat sb; int ret; - FILE* mapf = fopen(map_file, "w"); + int mapfd = open(map_file, O_WRONLY | O_SYNC); + FILE* mapf = fdopen(mapfd, "w"); ret = stat(path, &sb); if (ret != 0) { @@ -232,7 +235,7 @@ int produce_block_map(const char* path, const char* map_file, const char* blk_de int wfd = -1; if (encrypted) { - wfd = open(blk_dev, O_WRONLY); + wfd = open(blk_dev, O_WRONLY | O_SYNC); if (wfd < 0) { ALOGE("failed to open fd for writing: %s\n", strerror(errno)); return -1; @@ -302,9 +305,11 @@ int produce_block_map(const char* path, const char* map_file, const char* blk_de fprintf(mapf, "%d %d\n", ranges[i*2], ranges[i*2+1]); } + fsync(mapfd); fclose(mapf); close(fd); if (encrypted) { + fsync(wfd); close(wfd); } @@ -318,7 +323,7 @@ void wipe_misc() { struct fstab_rec* v = &fstab->recs[i]; if (!v->mount_point) continue; if (strcmp(v->mount_point, "/misc") == 0) { - int fd = open(v->blk_device, O_WRONLY); + int fd = open(v->blk_device, O_WRONLY | O_SYNC); uint8_t zeroes[1088]; // sizeof(bootloader_message) from recovery memset(zeroes, 0, sizeof(zeroes)); @@ -333,7 +338,7 @@ void wipe_misc() { written += w; } } - + fsync(fd); close(fd); } } |