summaryrefslogtreecommitdiff
path: root/runner/settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'runner/settings.c')
-rw-r--r--runner/settings.c41
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;
+}