X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=devices%2Fparser-test.c;h=9622d4d31463e0268207483507f1b990fddaa42c;hp=9b106b6b2cdf43a2119a63bbf72ee246b96a2d62;hb=7d7c328016aca3e14aee6268a2e7881d3440e226;hpb=678dbd282f917c68c4fd6badfc14fcf464796f5d diff --git a/devices/parser-test.c b/devices/parser-test.c index 9b106b6..9622d4d 100644 --- a/devices/parser-test.c +++ b/devices/parser-test.c @@ -1,8 +1,10 @@ +#define _GNU_SOURCE #include #include #include #include +#include #include "parser.h" @@ -11,15 +13,15 @@ void pb_log(const char *fmt, ...) va_list ap; va_start(ap, fmt); - fprintf(stderr, fmt, ap); + vfprintf(stderr, fmt, ap); va_end(ap); } -int mount_device(const char *dev_path, char *mount_path) +int mount_device(const char *dev_path) { pb_log("attempt to mount device (%s) not supported\n", dev_path); - return -1; + return 0; } int add_device(const struct device *dev) @@ -48,16 +50,49 @@ enum generic_icon_type guess_device_type(void) return ICON_TYPE_UNKNOWN; } +static char *mountpoint; + +const char *mountpoint_for_device(const char *dev_path) +{ + char *tmp, *dev; + dev = strrchr(dev_path, '/'); + if (dev) + dev_path = dev + 1; + asprintf(&tmp, "%s/%s", mountpoint, dev_path); + return tmp; +} + +char *resolve_path(const char *path, const char *default_mountpoint) +{ + char *sep, *ret; + const char *devpath; + + sep = strchr(path, ':'); + if (!sep) { + devpath = default_mountpoint; + asprintf(&ret, "%s/%s", devpath, path); + } else { + char *tmp = strndup(path, sep - path); + devpath = mountpoint_for_device(path); + asprintf(&ret, "%s/%s", devpath, sep + 1); + free(tmp); + } + + return ret; +} + int main(int argc, char **argv) { - const char *dev = "/dev/null"; + const char *dev = "sda1"; if (argc != 2) { fprintf(stderr, "usage: %s \n", argv[0]); return EXIT_FAILURE; } - iterate_parsers(dev, argv[1]); + mountpoint = argv[1]; + + iterate_parsers(dev, mountpoint); return EXIT_SUCCESS; }