Hi, thanks for your patch.
On 25-11-14, [email protected] wrote: > From: Chali Anis <[email protected]> > > Add get_prefix_path() to compute the filesystem prefix of a BLSpec > entry by locating the deepest /loader/entries/ component in the What exactly do you mean by "deepest"? The specification says that the entries should be under /loader/entries of $BOOT or $EFI partition [1]. There is also a note: """"""""" In all cases the /loader/entries/ directory should be located directly in the root of the ESP or XBOOTLDR filesystem. Specifically, the /loader/entries/ directory should not be located under the /EFI/ subdirectory on the ESP. """"""""" So searching in subdirs seems not to be spec compatible. May I ask why your loader entries are within some subdir in the first place? Regards, Marco [1] https://uapi-group.org/specifications/specs/boot_loader_specification/#type-1-boot-loader-specification-entries > configuration path. This ensures correct rootpath extraction for > nested loader directories, mixed path layouts, duplicate segments, > and paths without valid loader entries. If no prefix is found, > fall back to get_mounted_path(). > > Signed-off-by: Chali Anis <[email protected]> > --- > common/blspec.c | 25 ++++++++++++++++++++++++- > 1 file changed, 24 insertions(+), 1 deletion(-) > > diff --git a/common/blspec.c b/common/blspec.c > index 80ebe256ceaf..ad94d4d6be64 100644 > --- a/common/blspec.c > +++ b/common/blspec.c > @@ -391,6 +391,29 @@ static bool entry_is_match_machine_id(struct > blspec_entry *entry) > return ret; > } > > +/* > + * Return the path prefix before the deepest "/loader/entries/" component > + * in @configname. Falls back to the mounted path if none is found. > + */ > +static char *get_blspec_prefix_path(char *configname) > +{ > + char *p; > + char *scfg = configname; > + char *save = NULL; > + > + while ((p = strstr(scfg, "/loader/entries/")) != NULL) { > + if (p - configname > 0) > + save = p; > + > + scfg = p + 1; > + } > + > + if (save && save - configname > 0) > + return xstrndup(configname, save - configname); > + > + return get_mounted_path(configname); > +} > + > static int __blspec_scan_file(struct bootentries *bootentries, const char > *root, > const char *configname) > { > @@ -404,7 +427,7 @@ static int __blspec_scan_file(struct bootentries > *bootentries, const char *root, > if (IS_ERR(entry)) > return PTR_ERR(entry); > > - root = root ?: get_mounted_path(configname); > + root = root ?: get_blspec_prefix_path(configname); > entry->rootpath = xstrdup_const(root); > entry->configpath = xstrdup_const(configname); > entry->cdev = get_cdev_by_mountpath(root); > -- > 2.49.0 > > > -- #gernperDu #CallMeByMyFirstName Pengutronix e.K. | | Steuerwalder Str. 21 | https://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
