summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2022-08-06 09:48:30 -0300
committermrb0nk500 <b0nk@b0nk.xyz>2022-08-06 09:48:30 -0300
commita185caea7fbc0969829b96af3f43e8ae980df000 (patch)
tree63654541f5e435c25b70761698814f641d800235
parent2555a7caaab3d5dba812940575129fd808e9e3dc (diff)
keyword: Make use of `delimiter` struct in `create_key_value_file()`,
and `create_key_value_str()`
-rw-r--r--keyword.c36
-rw-r--r--keyword.h4
2 files changed, 27 insertions, 13 deletions
diff --git a/keyword.c b/keyword.c
index 917f93a..c20f560 100644
--- a/keyword.c
+++ b/keyword.c
@@ -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) {
diff --git a/keyword.h b/keyword.h
index a45854b..57397ee 100644
--- a/keyword.h
+++ b/keyword.h
@@ -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