aboutsummaryrefslogtreecommitdiff
path: root/util/cbfstool/partitioned_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/cbfstool/partitioned_file.c')
-rw-r--r--util/cbfstool/partitioned_file.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/util/cbfstool/partitioned_file.c b/util/cbfstool/partitioned_file.c
index f019d71fe4..7b4b0035f6 100644
--- a/util/cbfstool/partitioned_file.c
+++ b/util/cbfstool/partitioned_file.c
@@ -49,11 +49,13 @@ static unsigned count_selected_fmap_entries(const struct fmap *fmap,
return count;
}
-static partitioned_file_t *reopen_flat_file(const char *filename)
+static partitioned_file_t *reopen_flat_file(const char *filename,
+ bool write_access)
{
assert(filename);
-
struct partitioned_file *file = calloc(1, sizeof(*file));
+ const char *access_mode;
+
if (!file) {
ERROR("Failed to allocate partitioned file structure\n");
return NULL;
@@ -64,7 +66,9 @@ static partitioned_file_t *reopen_flat_file(const char *filename)
return NULL;
}
- file->stream = fopen(filename, "rb+");
+ access_mode = write_access ? "rb+" : "rb";
+ file->stream = fopen(filename, access_mode);
+
if (!file->stream) {
perror(filename);
partitioned_file_close(file);
@@ -161,11 +165,12 @@ partitioned_file_t *partitioned_file_create(const char *filename,
return file;
}
-partitioned_file_t *partitioned_file_reopen(const char *filename)
+partitioned_file_t *partitioned_file_reopen(const char *filename,
+ bool write_access)
{
assert(filename);
- partitioned_file_t *file = reopen_flat_file(filename);
+ partitioned_file_t *file = reopen_flat_file(filename, write_access);
if (!file)
return NULL;