From 2fec60a5dcc5e83818d68b3266ebfb0198f6dfbf Mon Sep 17 00:00:00 2001 From: Matt Mower Date: Wed, 9 Jul 2014 11:50:05 -0500 Subject: Do not wipe block misc on bootloader msg update When set_bootloader_message_block() is called, it fopens /misc in write binary mode, wiping all contents other than what is being written. The bootloader msg structure is only 1024+32+32 bytes, so some manufacturers store more than just a bootloader msg on /misc. fopen in read+append mode so that only the bootloader msg is written and the rest of the partition is left untouched. Change-Id: I2d2fbdf067282744864a19d404ca7dc12f688a98 --- bootloader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bootloader.cpp b/bootloader.cpp index fbb31e060..033591274 100644 --- a/bootloader.cpp +++ b/bootloader.cpp @@ -275,7 +275,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->blk_device); - FILE* f = fopen(v->blk_device, "wb"); + FILE* f = fopen(v->blk_device, "rb+"); if (f == NULL) { LOGE("Can't open %s\n(%s)\n", v->blk_device, strerror(errno)); return -1; @@ -317,7 +317,7 @@ int get_bootloader_message_block_name(struct bootloader_message *out) { int set_bootloader_message_block_name(const struct bootloader_message *in, const char* block_name) { wait_for_device(block_name); - FILE* f = fopen(block_name, "wb"); + FILE* f = fopen(block_name, "rb+"); if (f == NULL) { printf("Can't open %s\n(%s)\n", block_name, strerror(errno)); return -1; -- cgit v1.2.3