aboutsummaryrefslogtreecommitdiff
path: root/updater/dynamic_partitions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'updater/dynamic_partitions.cpp')
-rw-r--r--updater/dynamic_partitions.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/updater/dynamic_partitions.cpp b/updater/dynamic_partitions.cpp
index a340116f..b94bd0e5 100644
--- a/updater/dynamic_partitions.cpp
+++ b/updater/dynamic_partitions.cpp
@@ -88,8 +88,10 @@ static constexpr char kMetadataUpdatedMarker[] = "/dynamic_partition_metadata.UP
Value* UpdateDynamicPartitionsFn(const char* name, State* state,
const std::vector<std::unique_ptr<Expr>>& argv) {
- if (argv.size() != 1) {
- ErrorAbort(state, kArgsParsingFailure, "%s expects 1 arguments, got %zu", name, argv.size());
+ const std::string_view empty_string_view{};
+ if (argv.size() != 1 && argv.size() != 2) {
+ ErrorAbort(state, kArgsParsingFailure, "%s expects 1 or 2 arguments, got %zu", name,
+ argv.size());
return StringValue("");
}
std::vector<std::unique_ptr<Value>> args;
@@ -102,6 +104,14 @@ Value* UpdateDynamicPartitionsFn(const char* name, State* state,
return StringValue("");
}
+ const std::unique_ptr<Value>& super_empty_value = args[1];
+ if (argv.size() > 1) {
+ if (super_empty_value->type != Value::Type::BLOB) {
+ ErrorAbort(state, kArgsParsingFailure, "super_empty argument to %s must be blob", name);
+ return StringValue("");
+ }
+ }
+
std::string updated_marker = Paths::Get().stash_directory_base() + kMetadataUpdatedMarker;
if (state->is_retry) {
struct stat sb;
@@ -121,7 +131,8 @@ Value* UpdateDynamicPartitionsFn(const char* name, State* state,
}
auto updater_runtime = state->updater->GetRuntime();
- if (!updater_runtime->UpdateDynamicPartitions(op_list_value->data)) {
+ if (!updater_runtime->UpdateDynamicPartitions(
+ op_list_value->data, argv.size() > 1 ? super_empty_value->data : empty_string_view)) {
return StringValue("");
}