diff options
author | Arkadiusz Hiler <arkadiusz.hiler@intel.com> | 2019-04-01 09:32:34 +0300 |
---|---|---|
committer | Arkadiusz Hiler <arkadiusz.hiler@intel.com> | 2019-04-01 14:52:01 +0300 |
commit | 93cbe569582626793f79e5626970703059f88933 (patch) | |
tree | 8cb706c5a9c38e853424a1019aab1dfc089e2094 /runner/settings.c | |
parent | 7cadc6105b00f8d8ef166929118a95ce69221603 (diff) |
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 <arkadiusz.hiler@intel.com>
Reviewed-by: Petri Latvala <petri.latvala@intel.com>
Diffstat (limited to 'runner/settings.c')
-rw-r--r-- | runner/settings.c | 41 |
1 files changed, 27 insertions, 14 deletions
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; +} |