From 160eddddc4e265d5ee59a38797c30720bf46cd7c Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Sun, 27 May 2018 13:53:42 +0000
Subject: [PATCH] Minor fix
---
src/option_list.c | 88 ++++++++++++++++++++++++++++++++++++++++---
1 files changed, 81 insertions(+), 7 deletions(-)
diff --git a/src/option_list.c b/src/option_list.c
index 1b32ebb..3e835de 100644
--- a/src/option_list.c
+++ b/src/option_list.c
@@ -2,12 +2,72 @@
#include <stdio.h>
#include <string.h>
#include "option_list.h"
+#include "utils.h"
-typedef struct{
- char *key;
- char *val;
- int used;
-} kvp;
+list *read_data_cfg(char *filename)
+{
+ FILE *file = fopen(filename, "r");
+ if(file == 0) file_error(filename);
+ char *line;
+ int nu = 0;
+ list *options = make_list();
+ while((line=fgetl(file)) != 0){
+ ++nu;
+ strip(line);
+ switch(line[0]){
+ case '\0':
+ case '#':
+ case ';':
+ free(line);
+ break;
+ default:
+ if(!read_option(line, options)){
+ fprintf(stderr, "Config file error line %d, could parse: %s\n", nu, line);
+ free(line);
+ }
+ break;
+ }
+ }
+ fclose(file);
+ return options;
+}
+
+metadata get_metadata(char *file)
+{
+ metadata m = { 0 };
+ list *options = read_data_cfg(file);
+
+ char *name_list = option_find_str(options, "names", 0);
+ if (!name_list) name_list = option_find_str(options, "labels", 0);
+ if (!name_list) {
+ fprintf(stderr, "No names or labels found\n");
+ }
+ else {
+ m.names = get_labels(name_list);
+ }
+ m.classes = option_find_int(options, "classes", 2);
+ free_list(options);
+ printf("Loaded - names_list: %s, classes = %d \n", name_list, m.classes);
+ return m;
+}
+
+int read_option(char *s, list *options)
+{
+ size_t i;
+ size_t len = strlen(s);
+ char *val = 0;
+ for(i = 0; i < len; ++i){
+ if(s[i] == '='){
+ s[i] = '\0';
+ val = s+i+1;
+ break;
+ }
+ }
+ if(i == len-1) return 0;
+ char *key = s;
+ option_insert(options, key, val);
+ return 1;
+}
void option_insert(list *l, char *key, char *val)
{
@@ -47,7 +107,7 @@
{
char *v = option_find(l, key);
if(v) return v;
- fprintf(stderr, "%s: Using default '%s'\n", key, def);
+ if(def) fprintf(stderr, "%s: Using default '%s'\n", key, def);
return def;
}
@@ -59,7 +119,21 @@
return def;
}
-double option_find_double(list *l, char *key, double def)
+int option_find_int_quiet(list *l, char *key, int def)
+{
+ char *v = option_find(l, key);
+ if(v) return atoi(v);
+ return def;
+}
+
+float option_find_float_quiet(list *l, char *key, float def)
+{
+ char *v = option_find(l, key);
+ if(v) return atof(v);
+ return def;
+}
+
+float option_find_float(list *l, char *key, float def)
{
char *v = option_find(l, key);
if(v) return atof(v);
--
Gitblit v1.10.0