diff options
author | mrb0nk500 <b0nk@b0nk.xyz> | 2022-08-06 09:48:30 -0300 |
---|---|---|
committer | mrb0nk500 <b0nk@b0nk.xyz> | 2022-08-06 09:48:30 -0300 |
commit | a185caea7fbc0969829b96af3f43e8ae980df000 (patch) | |
tree | 63654541f5e435c25b70761698814f641d800235 | |
parent | 2555a7caaab3d5dba812940575129fd808e9e3dc (diff) |
keyword: Make use of `delimiter` struct in `create_key_value_file()`,
and `create_key_value_str()`
-rw-r--r-- | keyword.c | 36 | ||||
-rw-r--r-- | keyword.h | 4 |
2 files changed, 27 insertions, 13 deletions
@@ -178,9 +178,19 @@ static int has_delm(const keyword *key, keyword_val val, const char *delm) { return is_string_type && !is_empty(str) && !is_empty(delm) && !is_empty(find_delm((char *)str, delm, 0)); } -static int key_value_strlen(const keyword *key, keyword_val val, const char *start_delm, const char *end_delm, int leading_whitespace, int trailing_whitespace) { - const char *quote = (has_delm(key, val, end_delm)) ? "\"" : ""; - int len = format_len("%s%*s%*s", key->key, (int)strlen(start_delm)+leading_whitespace, start_delm, (int)strlen(quote)+trailing_whitespace, quote); +static int delimiter_strlen(const delimiter *delim) { + return format_len("%*s%*s", (int)strlen(delim->delm)+delim->lead_space, delim->delm, delim->trail_space, ""); +} + +static char *delimiter_str(const delimiter *delim) { + char *str = calloc(delimiter_strlen(delim)+1, sizeof(char)); + sprintf(str, "%*s%*s", (int)strlen(delim->delm)+delim->lead_space, delim->delm, delim->trail_space, ""); + return str; +} + +static int key_value_strlen(const keyword *key, keyword_val val, const delimiter *start_delm, const delimiter *end_delm) { + const char *quote = (has_delm(key, val, end_delm->delm)) ? "\"" : ""; + int len = strlen(key->key)+delimiter_strlen(start_delm)+strlen(quote); struct tm tm; switch (key->type) { case TYPE_INT : @@ -190,14 +200,16 @@ static int key_value_strlen(const keyword *key, keyword_val val, const char *sta case TYPE_FLOAT : len += format_len("%f", val.f); break; default : break; } - len += format_len("%s%s", quote, end_delm); + len += strlen(quote)+delimiter_strlen(end_delm); return len; } -char *create_key_value_str(const keyword *key, keyword_val val, const char *start_delm, const char *end_delm, int leading_whitespace, int trailing_whitespace) { - char *key_value = calloc(key_value_strlen(key, val, start_delm, end_delm, leading_whitespace, trailing_whitespace)+1, sizeof(char)); - const char *quote = (has_delm(key, val, end_delm)) ? "\"" : ""; - int j = sprintf(key_value, "%s%*s%*s", key->key, (int)strlen(start_delm)+leading_whitespace, start_delm, (int)strlen(quote)+trailing_whitespace, quote); +char *create_key_value_str(const keyword *key, keyword_val val, const delimiter *start_delm, const delimiter *end_delm) { + char *start_delim = delimiter_str(start_delm); + char *end_delim = delimiter_str(end_delm); + char *key_value = calloc(key_value_strlen(key, val, start_delm, end_delm)+1, sizeof(char)); + const char *quote = (has_delm(key, val, end_delm->delm)) ? "\"" : ""; + int j = sprintf(key_value, "%s%s%s", key->key, start_delim, quote); struct tm tm; switch (key->type) { case TYPE_INT : @@ -207,11 +219,13 @@ char *create_key_value_str(const keyword *key, keyword_val val, const char *star case TYPE_FLOAT : j += sprintf(key_value+j, "%f", val.f); break; default : break; } - j += sprintf(key_value+j, "%s%s", quote, end_delm); + j += sprintf(key_value+j, "%s%s", quote, end_delim); + free(start_delim); + free(end_delim); return key_value; } -char *create_key_value_file(void *data, void *ctx, const keyword **keywords, const char *start_delm, const char *end_delm, int leading_whitespace, int trailing_whitespace) { +char *create_key_value_file(void *data, void *ctx, const keyword **keywords, const delimiter *start_delm, const delimiter *end_delm) { if (data != NULL && keywords != NULL) { int buf_len = 0; char *key_value_buf; @@ -221,7 +235,7 @@ char *create_key_value_file(void *data, void *ctx, const keyword **keywords, con int error; keyword_val val = get_keyword(keywords[i], data, ctx, &error); if (!error || error < 0) { - char *key_value = create_key_value_str(keywords[i], val, start_delm, end_delm, leading_whitespace, trailing_whitespace); + char *key_value = create_key_value_str(keywords[i], val, start_delm, end_delm); buf_len += strlen(key_value); key_values = add_node(&key_values, key_value); if (keywords[i]->type == TYPE_STRING && error == -2) { @@ -51,6 +51,6 @@ extern int set_keyword(const keyword *key, keyword_val val, void *ret, void *ctx extern keyword_val parse_keyword(const keyword *key, char *key_str, char *value, int *error); extern int parse_keywords(const keyword **keys, char *key, char *value, void *ret, void *ctx); extern int parse_key_value_file(void *ret, void *ctx, const keyword **keywords, char *buf, const char *delm, parse_callback *parse_cb); -extern char *create_key_value_str(const keyword *key, keyword_val val, const char *start_delm, const char *end_delm, int leading_whitespace, int trailing_whitespace); -extern char *create_key_value_file(void *data, void *ctx, const keyword **keywords, const char *start_delm, const char *end_delm, int leading_whitespace, int trailing_whitespace); +extern char *create_key_value_str(const keyword *key, keyword_val val, const delimiter *start_delm, const delimiter *end_delm); +extern char *create_key_value_file(void *data, void *ctx, const keyword **keywords, const delimiter *start_delm, const delimiter *end_delm); #endif |