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/settings.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) (limited to 'runner/settings.c') 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; +} -- cgit v1.2.3