From 93cbe569582626793f79e5626970703059f88933 Mon Sep 17 00:00:00 2001 From: Arkadiusz Hiler Date: Mon, 1 Apr 2019 09:32:34 +0300 Subject: runner: Refactor metadata parsing To aid testing function parsing metadata.txt is split into outer helper that operates on dirfd and inner function that operates on FILE*. This allows us to test the parsing using fmemopen(), limiting the amount of necessary boilerplate. Signed-off-by: Arkadiusz Hiler Reviewed-by: Petri Latvala --- runner/executor.c | 2 +- runner/resultgen.c | 2 +- runner/runner_tests.c | 2 +- runner/settings.c | 41 +++++++++++++++++++++++++++-------------- runner/settings.h | 4 +++- 5 files changed, 33 insertions(+), 18 deletions(-) (limited to 'runner') diff --git a/runner/executor.c b/runner/executor.c index a40e2dd1..0e91b7ab 100644 --- a/runner/executor.c +++ b/runner/executor.c @@ -1112,7 +1112,7 @@ bool initialize_execute_state_from_resume(int dirfd, memset(state, 0, sizeof(*state)); state->resuming = true; - if (!read_settings(settings, dirfd) || + if (!read_settings_from_dir(settings, dirfd) || !read_job_list(list, dirfd)) { close(dirfd); return false; diff --git a/runner/resultgen.c b/runner/resultgen.c index 23eb8903..42297d8a 100644 --- a/runner/resultgen.c +++ b/runner/resultgen.c @@ -1085,7 +1085,7 @@ struct json_object *generate_results_json(int dirfd) init_settings(&settings); init_job_list(&job_list); - if (!read_settings(&settings, dirfd)) { + if (!read_settings_from_dir(&settings, dirfd)) { fprintf(stderr, "resultgen: Cannot parse settings\n"); return NULL; } diff --git a/runner/runner_tests.c b/runner/runner_tests.c index e46568ac..06725536 100644 --- a/runner/runner_tests.c +++ b/runner/runner_tests.c @@ -680,7 +680,7 @@ igt_main "Opening %s/metadata.txt failed\n", dirname); close(fd); - igt_assert_f(read_settings(&cmp_settings, dirfd), "Reading settings failed\n"); + igt_assert_f(read_settings_from_dir(&cmp_settings, dirfd), "Reading settings failed\n"); assert_settings_equal(&settings, &cmp_settings); } diff --git a/runner/settings.c b/runner/settings.c index e64244e6..95f74076 100644 --- a/runner/settings.c +++ b/runner/settings.c @@ -540,7 +540,7 @@ bool serialize_settings(struct settings *settings) #undef SERIALIZE_LINE } -bool read_settings(struct settings *settings, int dirfd) +bool read_settings_from_file(struct settings *settings, FILE *f) { #define PARSE_LINE(s, name, val, field, write) \ if (!strcmp(name, #field)) { \ @@ -551,20 +551,8 @@ bool read_settings(struct settings *settings, int dirfd) continue; \ } - int fd; - FILE *f; char *name = NULL, *val = NULL; - free_settings(settings); - - if ((fd = openat(dirfd, settings_filename, O_RDONLY)) < 0) - return false; - - f = fdopen(fd, "r"); - if (!f) { - close(fd); - return false; - } while (fscanf(f, "%ms : %ms", &name, &val) == 2) { int numval = atoi(val); @@ -592,9 +580,34 @@ bool read_settings(struct settings *settings, int dirfd) free(name); free(val); - fclose(f); return true; #undef PARSE_LINE } + +bool read_settings_from_dir(struct settings *settings, int dirfd) +{ + int fd; + FILE *f; + + free_settings(settings); + + if ((fd = openat(dirfd, settings_filename, O_RDONLY)) < 0) + return false; + + f = fdopen(fd, "r"); + if (!f) { + close(fd); + return false; + } + + if (!read_settings_from_file(settings, f)) { + fclose(f); + return false; + } + + fclose(f); + + return true; +} diff --git a/runner/settings.h b/runner/settings.h index 267d72cf..ae90897c 100644 --- a/runner/settings.h +++ b/runner/settings.h @@ -5,6 +5,7 @@ #include #include #include +#include enum { LOG_LEVEL_NORMAL = 0, @@ -114,6 +115,7 @@ char *absolute_path(char *path); */ bool serialize_settings(struct settings *settings); -bool read_settings(struct settings *settings, int dirfd); +bool read_settings_from_file(struct settings *settings, FILE* f); +bool read_settings_from_dir(struct settings *settings, int dirfd); #endif -- cgit v1.2.3