const char *overlay_src_dir;
const char *dt_overlays_dir;
const char *error_file = NULL;
+int dry_run = 0;
int main(int argc, const char **argv)
{
usage();
opt = OPT_REMOVE_FROM;
}
+ else if (strcmp(arg, "-D") == 0)
+ {
+ if (opt != OPT_ADD)
+ usage();
+ dry_run = 1;
+ work_dir = ".";
+ }
else if ((strcmp(arg, "-l") == 0) ||
(strcmp(arg, "--list") == 0))
{
error_file = sprintf_dup("%s/%s", work_dir, "error.dtb");
cfg_dir = CFG_DIR_1 DT_SUBDIR;
- if (!dir_exists(cfg_dir))
+ if (!dry_run && !dir_exists(cfg_dir))
{
root_check();
if (!dir_exists(dt_overlays_dir))
fatal_error("configfs overlays folder not found - incompatible kernel");
- state = read_state(work_dir);
- if (!state)
- fatal_error("Failed to read state");
+ if (!dry_run)
+ {
+ state = read_state(work_dir);
+ if (!state)
+ fatal_error("Failed to read state");
+ }
switch (opt)
{
case OPT_ADD:
case OPT_REMOVE:
case OPT_REMOVE_FROM:
- root_check();
- run_cmd("which dtoverlay-pre >/dev/null 2>&1 && dtoverlay-pre");
- break;
+ if (!dry_run)
+ {
+ root_check();
+ run_cmd("which dtoverlay-pre >/dev/null 2>&1 && dtoverlay-pre");
+ }
+ break;
default:
break;
}
case OPT_ADD:
case OPT_REMOVE:
case OPT_REMOVE_FROM:
- run_cmd("which dtoverlay-post >/dev/null 2>&1 && dtoverlay-post");
+ if (!dry_run)
+ run_cmd("which dtoverlay-post >/dev/null 2>&1 && dtoverlay-post");
break;
default:
break;
overlay_file = sprintf_dup("%s/%s.dtbo", overlay_src_dir, overlay);
}
- overlay_name = sprintf_dup("%d_%s", state->count, overlay);
+ if (dry_run)
+ overlay_name = "dry_run";
+ else
+ overlay_name = sprintf_dup("%d_%s", state->count, overlay);
overlay_dtb = dtoverlay_load_dtb(overlay_file, DTOVERLAY_PADDING(4096));
if (!overlay_dtb)
return error("Failed to read '%s'", overlay_file);
dtoverlay_save_dtb(overlay_dtb, overlay_file);
dtoverlay_free_dtb(overlay_dtb);
- if (!apply_overlay(overlay_file, overlay_name))
+ if (!dry_run && !apply_overlay(overlay_file, overlay_name))
{
if (error_file)
{
printf(" %s Display help on all parameters\n", cmd_name);
printf(" %s <param>=<val>...\n", cmd_name);
printf(" %*s Add an overlay (with parameters)\n", (int)strlen(cmd_name), "");
+ printf(" %s -D [<idx>] Dry-run (prepare overlay, but don't apply -\n",
+ cmd_name);
+ printf(" %*s save it as dry-run.dtbo)\n", (int)strlen(cmd_name), "");
printf(" %s -r [<idx>] Remove an overlay (by index, or the last)\n", cmd_name);
printf(" %s -R [<idx>] Remove from an overlay (by index, or all)\n",
cmd_name);
{
printf(" %s <overlay> [<param>=<val>...]\n", cmd_name);
printf(" %*s Add an overlay (with parameters)\n", (int)strlen(cmd_name), "");
+ printf(" %s -D [<idx>] Dry-run (prepare overlay, but don't apply -\n",
+ cmd_name);
+ printf(" %*s save it as dry-run.dtbo)\n", (int)strlen(cmd_name), "");
printf(" %s -r [<overlay>] Remove an overlay (by name, index or the last)\n", cmd_name);
printf(" %s -R [<overlay>] Remove from an overlay (by name, index or all)\n",
cmd_name);