X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fresource.c;h=25fff650db7fabc6bfe805525c38c379a3ce7708;hp=964c1a4d40f78b68ff922980a86c930e699cc3db;hb=556e622653c72de9b3eda70995e9f8619ee1c9a1;hpb=4e8b779626da98e2896efbb2df99b64f76e878f6 diff --git a/discover/resource.c b/discover/resource.c index 964c1a4..25fff65 100644 --- a/discover/resource.c +++ b/discover/resource.c @@ -6,6 +6,7 @@ #include #include +#include #include #include "device-handler.h" @@ -33,7 +34,8 @@ static struct discover_device *parse_device_string( return device_lookup_by_name(handler, devstr); } -static void resolve_devpath_against_device(struct resource *res, + +void resolve_resource_against_device(struct resource *res, struct discover_device *dev, const char *path) { char *resolved_path = join_paths(res, dev->mount_path, path); @@ -41,7 +43,7 @@ static void resolve_devpath_against_device(struct resource *res, res->resolved = true; } -struct resource *create_devpath_resource(void *ctx, +struct resource *create_devpath_resource(struct discover_boot_option *opt, struct discover_device *orig_device, const char *devpath) { @@ -50,7 +52,7 @@ struct resource *create_devpath_resource(void *ctx, struct resource *res; struct pb_url *url; - res = talloc(ctx, struct resource); + res = talloc(opt, struct resource); pos = strchr(devpath, ':'); @@ -66,7 +68,7 @@ struct resource *create_devpath_resource(void *ctx, /* we've been passed a file:// URL, which has no device * specifier. We can resolve against the original * device */ - resolve_devpath_against_device(res, orig_device, + resolve_resource_against_device(res, orig_device, url->path); talloc_free(url); } @@ -75,13 +77,15 @@ struct resource *create_devpath_resource(void *ctx, /* if there was no device specified, we can resolve now */ if (!pos) { - resolve_devpath_against_device(res, orig_device, devpath); + resolve_resource_against_device(res, orig_device, devpath); return res; } devstr = talloc_strndup(res, devpath, pos - devpath); path = talloc_strdup(res, pos + 1); + pb_log("%s: resource depends on device %s\n", __func__, devstr); + /* defer resolution until we can find a suitable matching device */ info = talloc(res, struct devpath_resource_info); info->dev = devstr; @@ -106,17 +110,18 @@ bool resolve_devpath_resource(struct device_handler *handler, if (!dev) return false; - resolve_devpath_against_device(res, dev, info->path); + resolve_resource_against_device(res, dev, info->path); talloc_free(info); return true; } -struct resource *create_url_resource(void *ctx, struct pb_url *url) +struct resource *create_url_resource(struct discover_boot_option *opt, + struct pb_url *url) { struct resource *res; - res = talloc(ctx, struct resource); + res = talloc(opt, struct resource); res->url = url; res->resolved = true;