diff options
author | Michael Runge <mrunge@google.com> | 2014-12-10 22:56:32 +0100 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-12-10 22:56:32 +0100 |
commit | f849b0cc69b8c9d0dde25c0890a42709b55a9ac8 (patch) | |
tree | ff434cfbc07382b13f8b531027ea36a26c4fea7d /uncrypt | |
parent | am cdce7f7e: am c43b17f0: Merge "Fix recovery image build for 32p" (diff) | |
parent | am 37ad1f12: Merge "Force write to disk while doing uncrypt" into lmp-mr1-dev (diff) | |
download | android_bootable_recovery-f849b0cc69b8c9d0dde25c0890a42709b55a9ac8.tar android_bootable_recovery-f849b0cc69b8c9d0dde25c0890a42709b55a9ac8.tar.gz android_bootable_recovery-f849b0cc69b8c9d0dde25c0890a42709b55a9ac8.tar.bz2 android_bootable_recovery-f849b0cc69b8c9d0dde25c0890a42709b55a9ac8.tar.lz android_bootable_recovery-f849b0cc69b8c9d0dde25c0890a42709b55a9ac8.tar.xz android_bootable_recovery-f849b0cc69b8c9d0dde25c0890a42709b55a9ac8.tar.zst android_bootable_recovery-f849b0cc69b8c9d0dde25c0890a42709b55a9ac8.zip |
Diffstat (limited to '')
-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); } } |