efivar: support device paths as well as mounted paths in path_to_dp
In path_to_dp, allow passing in either the actual device path "eg /dev/foo/bar" or the path where the device is mounted (say /mnt/baz/bing). In the former case we'll assume the path within the device is nothing (the relpath). In the latter, we'll take from the mount point on down as the relpath. Sponsored by: Netflix Reviewed by: corvink, manu, asomers Differential Revision: https://reviews.freebsd.org/D38616
This commit is contained in:
parent
49fd6affdb
commit
57d5ca4eeb
@ -648,6 +648,7 @@ dev_path_to_dp(struct gmesh *mesh, char *path, efidp *dp)
|
||||
}
|
||||
|
||||
/* Handles /path/to/file */
|
||||
/* Handles /dev/foo/bar */
|
||||
static int
|
||||
path_to_dp(struct gmesh *mesh, char *path, efidp *dp)
|
||||
{
|
||||
@ -667,9 +668,19 @@ path_to_dp(struct gmesh *mesh, char *path, efidp *dp)
|
||||
}
|
||||
|
||||
dev = buf.f_mntfromname;
|
||||
/*
|
||||
* If we're fed a raw /dev/foo/bar, then devfs is returned from the
|
||||
* statfs call. In that case, use that dev and assume we have a path
|
||||
* of nothing.
|
||||
*/
|
||||
if (strcmp(dev, "devfs") == 0) {
|
||||
dev = rp + sizeof(_PATH_DEV) - 1;
|
||||
ep = NULL;
|
||||
} else {
|
||||
if (strncmp(dev, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0)
|
||||
dev += sizeof(_PATH_DEV) - 1;
|
||||
ep = rp + strlen(buf.f_mntonname);
|
||||
}
|
||||
|
||||
efimedia = find_geom_efimedia(mesh, dev);
|
||||
#ifdef notyet
|
||||
|
Loading…
Reference in New Issue
Block a user