From ff8f0b74527469d890710f8771c0e5180528d893 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 2 Mar 2024 18:12:36 +0100 Subject: [PATCH] get value without trim --- src/kds_s2000w_config.c | 35 +++++++++++++++++++--------- tests/kds_s2000w_read_config_tests.c | 2 ++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/kds_s2000w_config.c b/src/kds_s2000w_config.c index 0b1789f..c9951a5 100644 --- a/src/kds_s2000w_config.c +++ b/src/kds_s2000w_config.c @@ -27,24 +27,30 @@ void get_line(const char* config_stream, config_line* line) line->line[line->length - 1] = '\0'; } -void get_key(const char* line, config_value* value) +void get_key(config_line* line, config_value* value) { - value->key_length = 0; - while(line[value->key_length] != '=') { - value->key_length++; + int delimiter = 0; + while(line->line[delimiter] != '=') { + delimiter++; } + value->key_length = delimiter; value->key = malloc(sizeof(char) * value->key_length); - memcpy(value->key, line, value->key_length - 1); + memcpy(value->key, line->line, value->key_length - 1); value->key[value->key_length - 1] = '\0'; } -void get_value(char* line, config_value* value) +void get_value(config_line* line, config_value* value) { - int i = 0; - while (line[i] != '=') { - i++; + int delimiter = 0; + while(line->line[delimiter] != '=') { + delimiter++; } + + value->value_length = line->length - delimiter; + value->value = malloc(sizeof(char) * value->value_length + 1); + memcpy(value->value, line->line + delimiter + 1, value->value_length); + value->value[value->value_length] = '\0'; } void loadConfig(program_config* config, const char* config_stream) @@ -59,12 +65,19 @@ void loadConfig(program_config* config, const char* config_stream) value.value = NULL; get_line(config_stream, &line); - get_key(line.line, &value); + get_key(&line, &value); + get_value(&line, &value); config->scanner_url = malloc(sizeof(char) * value.key_length); - memcpy(config->scanner_url, value.key, value.key_length); + memcpy(config->scanner_url, value.value, value.value_length); free(line.line); line.line = NULL; line.length = 0; + free(value.value); + value.value = NULL; + value.value_length = 0; + free(value.key); + value.key = NULL; + value.key_length = 0; } \ No newline at end of file diff --git a/tests/kds_s2000w_read_config_tests.c b/tests/kds_s2000w_read_config_tests.c index 75bdd83..b0fd420 100644 --- a/tests/kds_s2000w_read_config_tests.c +++ b/tests/kds_s2000w_read_config_tests.c @@ -10,6 +10,8 @@ START_TEST(kds_s2000w_config_read_parameter) ck_assert_str_eq(config->scanner_url, "http://scanner.example.com"); + free(config->scanner_url); + config->scanner_url = NULL; free(config); config = NULL; } -- 2.39.5