Current section
Files
Jump to
Current section
Files
lib/mix/tasks/uboot_env.delete.ex
defmodule Mix.Tasks.UbootEnv.Delete do
use Mix.Task
import Mix.UbootEnv.Utils
import UBootEnv.Config, only: [parse_int: 1]
@shortdoc "Delete a key-value pair from a U-Boot environment"
@moduledoc """
Delete a key-value pair from a U-Boot environment.
Pass either a path to a configuration file like `/etc/fw_env.config` or the
path to the file or device containing the U-Boot environment and its offset
and size.
Usage:
mix uboot_env.write PATH_TO_DEVICE DEV_OFFSET ENV_SIZE KEY
mix uboot_env.write PATH_TO_CONFIG_FILE KEY
"""
def run([config_path, key]) do
with {:ok, kv} <- UBootEnv.read(config_path),
%{} = kv <- Map.delete(kv, key),
:ok <- UBootEnv.write(kv, config_path) do
render_kv(kv)
else
{:error, reason} -> Mix.raise(reason)
end
end
def run([dev_name, dev_offset, env_size, key]) do
with dev_offset <- parse_int(dev_offset),
env_size <- parse_int(env_size),
{:ok, kv} <- UBootEnv.load(dev_name, dev_offset, env_size),
%{} = kv <- Map.delete(kv, key),
{:ok, fd} <- File.open(dev_name, [:raw, :binary, :write]),
uboot_env <- UBootEnv.encode(kv, env_size),
:ok <- :file.pwrite(fd, dev_offset, uboot_env),
:ok <- File.close(fd) do
render_kv(kv)
else
{:error, reason} -> Mix.raise(reason)
end
end
end