X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fparser.c;h=9fe1925d94c44a283f0065f89f550401373b8347;hp=21b48debcb31d52e4f788040c1ce391e4ded7fc6;hb=17d9d54a46beab44db751b9bcf7f289b9bf101cf;hpb=b8e53cb4b96eb17dc7fa0ffc505dfebae37e6cbf diff --git a/discover/parser.c b/discover/parser.c index 21b48de..9fe1925 100644 --- a/discover/parser.c +++ b/discover/parser.c @@ -1,10 +1,9 @@ #include #include -#include -#include #include "types/types.h" +#include #include #include @@ -12,7 +11,6 @@ #include "parser.h" #include "parser-utils.h" #include "paths.h" -#include "file.h" struct p_item { struct list_item list; @@ -25,7 +23,7 @@ static char *local_path(struct discover_context *ctx, struct discover_device *dev, const char *filename) { - return join_paths(ctx, dev->mount_path, filename); + return join_paths(ctx, dev->root_path, filename); } int parser_request_file(struct discover_context *ctx, @@ -49,6 +47,32 @@ int parser_request_file(struct discover_context *ctx, return rc; } +int parser_stat_path(struct discover_context *ctx, + struct discover_device *dev, const char *path, + struct stat *statbuf) +{ + int rc = -1; + char *full_path; + + /* we only support local files at present */ + if (!dev->mount_path) + return -1; + + full_path = local_path(ctx, dev, path); + + rc = stat(full_path, statbuf); + if (rc) { + rc = -1; + goto out; + } + + rc = 0; +out: + talloc_free(full_path); + + return rc; +} + int parser_replace_file(struct discover_context *ctx, struct discover_device *dev, const char *filename, char *buf, int len) @@ -104,6 +128,22 @@ out: return -1; } +int parser_scandir(struct discover_context *ctx, const char *dirname, + struct dirent ***files, int (*filter)(const struct dirent *), + int (*comp)(const struct dirent **, const struct dirent **)) +{ + char *path; + int n; + + path = talloc_asprintf(ctx, "%s%s", ctx->device->mount_path, dirname); + if (!path) + return -1; + + n = scandir(path, files, filter, comp); + talloc_free(path); + return n; +} + void iterate_parsers(struct discover_context *ctx) { struct p_item* i;