-#define _GNU_SOURCE
+#if defined(HAVE_CONFIG_H)
+#include "config.h"
+#endif
#include <assert.h>
#include <stdbool.h>
#include <string.h>
#include <url/url.h>
+#include <log/log.h>
#include <talloc/talloc.h>
#include "device-handler.h"
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);
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)
{
struct resource *res;
struct pb_url *url;
- res = talloc(ctx, struct resource);
+ res = talloc(opt, struct resource);
pos = strchr(devpath, ':');
/* 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);
}
/* 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;
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(struct discover_boot_option *opt,
+ struct pb_url *url)
+{
+ struct resource *res;
+
+ res = talloc(opt, struct resource);
+ talloc_steal(res, url);
+ res->url = url;
+ res->resolved = true;
+
+ return res;
+}