X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=test%2Fparser%2Futils.c;h=d8499a47689ab2115065a005aca6d5b957755603;hb=ab6a8ba7eed7b53c9fc6366edc3215f9ec1c3a68;hp=9d40d2b1e17bf123326e263c0307e60e92206fc6;hpb=1abc62990a5817de56a55470fb2c62e966134722;p=petitboot diff --git a/test/parser/utils.c b/test/parser/utils.c index 9d40d2b..d8499a4 100644 --- a/test/parser/utils.c +++ b/test/parser/utils.c @@ -285,7 +285,7 @@ int parser_replace_file(struct discover_context *ctx, char *buf, int len) { struct parser_test *test = ctx->test_data; - struct test_file *f, *file; + struct test_file *f, *file = NULL; list_for_each_entry(&test->files, f, list) { if (f->dev != dev) @@ -309,8 +309,83 @@ int parser_replace_file(struct discover_context *ctx, return 0; } +int parser_scandir(struct discover_context *ctx, const char *dirname, + struct dirent ***files, int (*filter)(const struct dirent *) + __attribute__((unused)), + int (*comp)(const struct dirent **, const struct dirent **) + __attribute__((unused))) +{ + struct parser_test *test = ctx->test_data; + struct test_file *f; + char *filename; + struct dirent **dirents = NULL, **new_dirents; + int n = 0, namelen; + + list_for_each_entry(&test->files, f, list) { + if (f->dev != ctx->device) + continue; + + if (strlen(f->name) <= strlen(dirname)) + continue; + + filename = strrchr(f->name, '/'); + if (!filename) + continue; + + namelen = strlen(filename); + + if (strncmp(f->name, dirname, strlen(f->name) - namelen)) + continue; + + if (!dirents) { + dirents = malloc(sizeof(struct dirent *)); + } else { + new_dirents = realloc(dirents, sizeof(struct dirent *) + * (n + 1)); + if (!new_dirents) + goto err_cleanup; + + dirents = new_dirents; + } + + dirents[n] = malloc(sizeof(struct dirent) + namelen + 1); + + if (!dirents[n]) + goto err_cleanup; + + strcpy(dirents[n]->d_name, filename + 1); + n++; + } + + *files = dirents; + + return n; + +err_cleanup: + do { + free(dirents[n]); + } while (n-- > 0); + + free(dirents); + + return -1; +} + +bool parser_is_unique(struct discover_context *ctx, struct discover_device *dev, + const char *filename, struct list *found_list) +{ + (void)ctx; + (void)dev; + (void)filename; + (void)found_list; + + /* Just let the parser process everything. */ + return true; +} + struct load_url_result *load_url_async(void *ctx, struct pb_url *url, - load_url_complete async_cb, void *async_data) + load_url_complete async_cb, void *async_data, + waiter_cb stdout_cb, void *stdout_data) { struct conf_context *conf = async_data; struct parser_test *test = conf->dc->test_data; @@ -320,6 +395,10 @@ struct load_url_result *load_url_async(void *ctx, struct pb_url *url, struct test_file *file; int fd; + /* Ignore the stdout callback for tests */ + (void)stdout_cb; + (void)stdout_data; + fd = mkstemp(tmp); if (fd < 0)