summaryrefslogtreecommitdiffstats
path: root/bootloader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader.cpp')
-rw-r--r--bootloader.cpp29
1 files changed, 7 insertions, 22 deletions
diff --git a/bootloader.cpp b/bootloader.cpp
index 1c2097983..600d238f5 100644
--- a/bootloader.cpp
+++ b/bootloader.cpp
@@ -21,12 +21,9 @@
#include "roots.h"
#include <errno.h>
-#include <fcntl.h>
-#include <inttypes.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
-#include <sys/types.h>
#include <unistd.h>
static int get_bootloader_message_mtd(struct bootloader_message *out, const Volume* v);
@@ -188,30 +185,18 @@ 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);
- int fd = open(v->blk_device, O_WRONLY | O_SYNC);
- if (fd == -1) {
+ FILE* f = fopen(v->blk_device, "wb");
+ if (f == NULL) {
LOGE("Can't open %s\n(%s)\n", v->blk_device, strerror(errno));
return -1;
}
- size_t written = 0;
- const uint8_t* start = reinterpret_cast<const uint8_t*>(in);
- size_t total = sizeof(*in);
- while (written < total) {
- ssize_t wrote = TEMP_FAILURE_RETRY(write(fd, start + written, total - written));
- if (wrote == -1) {
- LOGE("failed to write %" PRId64 " bytes: %s\n",
- static_cast<off64_t>(written), strerror(errno));
- return -1;
- }
- written += wrote;
- }
-
- if (fsync(fd) == -1) {
- LOGE("failed to fsync \"%s\": %s\n", v->blk_device, strerror(errno));
+ int count = fwrite(in, sizeof(*in), 1, f);
+ if (count != 1) {
+ LOGE("Failed writing %s\n(%s)\n", v->blk_device, strerror(errno));
return -1;
}
- if (close(fd) == -1) {
- LOGE("failed to close %s: %s\n", v->blk_device, strerror(errno));
+ if (fclose(f) != 0) {
+ LOGE("Failed closing %s\n(%s)\n", v->blk_device, strerror(errno));
return -1;
}
return 0;