Skip to content

Commit

Permalink
uboot: move system uEnv merge to new function, clean up
Browse files Browse the repository at this point in the history
Split the code that merge the system uEnv to new function. While we're here,
clean up the logic to e.g. use `ot_openat_ignore_enoent()`.
  • Loading branch information
Guy Shapiro authored and cgwalters committed Sep 7, 2017
1 parent 3f476ac commit 1f6dbf2
Showing 1 changed file with 39 additions and 35 deletions.
74 changes: 39 additions & 35 deletions src/libostree/ostree-bootloader-uboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,44 @@ _ostree_bootloader_uboot_get_name (OstreeBootloader *bootloader)
return "U-Boot";
}

/* Append system's uEnv.txt, if it exists in $deployment/usr/lib/ostree-boot/ */
static gboolean
append_system_uenv (OstreeBootloaderUboot *self,
const char *bootargs,
GPtrArray *new_lines,
GCancellable *cancellable,
GError **error)
{
glnx_fd_close int uenv_fd = -1;
__attribute__((cleanup(_ostree_kernel_args_cleanup))) OstreeKernelArgs *kargs = NULL;
const char *uenv_path = NULL;
const char *ostree_arg = NULL;

kargs = _ostree_kernel_args_from_string (bootargs);
ostree_arg = _ostree_kernel_args_get_last_value (kargs, "ostree");
if (!ostree_arg)
{
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"No ostree= kernel argument found in boot loader configuration file");
return FALSE;
}
ostree_arg += 1;
uenv_path = glnx_strjoina (ostree_arg, "/usr/lib/ostree-boot/uEnv.txt");
if (!ot_openat_ignore_enoent (self->sysroot->sysroot_fd, uenv_path, &uenv_fd, error))
return FALSE;
if (uenv_fd != -1)
{
char *uenv = glnx_fd_readall_utf8 (uenv_fd, NULL, cancellable, error);
if (!uenv)
{
g_prefix_error (error, "Reading %s: ", uenv_path);
return FALSE;
}
g_ptr_array_add (new_lines, uenv);
}
return TRUE;
}

static gboolean
create_config_from_boot_loader_entries (OstreeBootloaderUboot *self,
int bootversion,
Expand Down Expand Up @@ -96,43 +134,9 @@ create_config_from_boot_loader_entries (OstreeBootloaderUboot *self,
val = ostree_bootconfig_parser_get (config, "options");
if (val)
{
glnx_fd_close int uenv_fd = -1;
__attribute__((cleanup(_ostree_kernel_args_cleanup))) OstreeKernelArgs *kargs = NULL;
const char *uenv_path = NULL;
const char *ostree_arg = NULL;

g_ptr_array_add (new_lines, g_strdup_printf ("bootargs=%s", val));

/* Append system's uEnv.txt, if it exists in $deployment/usr/lib/ostree-boot/ */
kargs = _ostree_kernel_args_from_string (val);
ostree_arg = _ostree_kernel_args_get_last_value (kargs, "ostree");
if (!ostree_arg)
{
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"No ostree= kernel argument found in boot loader configuration file");
if (!append_system_uenv (self, val, new_lines, cancellable, error))
return FALSE;
}
ostree_arg += 1;
uenv_path = glnx_strjoina (ostree_arg, "/usr/lib/ostree-boot/uEnv.txt");
uenv_fd = openat (self->sysroot->sysroot_fd, uenv_path, O_CLOEXEC | O_RDONLY);
if (uenv_fd != -1)
{
char *uenv = glnx_fd_readall_utf8 (uenv_fd, NULL, cancellable, error);
if (!uenv)
{
g_prefix_error (error, "Reading %s: ", uenv_path);
return FALSE;
}
g_ptr_array_add (new_lines, uenv);
}
else
{
if (errno != ENOENT)
{
g_prefix_error (error, "openat %s: ", uenv_path);
return FALSE;
}
}
}

return TRUE;
Expand Down

0 comments on commit 1f6dbf2

Please sign in to comment.