aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/delivery.c14
-rw-r--r--src/ini.c24
2 files changed, 30 insertions, 8 deletions
diff --git a/src/delivery.c b/src/delivery.c
index b1997f6..a55171a 100644
--- a/src/delivery.c
+++ b/src/delivery.c
@@ -54,7 +54,15 @@ static void conv_strlist(struct StrList **x, char *tok, union INIVal val) {
if (val.as_char_p) {
char *tplop = tpl_render(val.as_char_p);
if (tplop) {
+ lstrip(tplop);
strip(tplop);
+ // Special handler for space delimited lists
+ if (strpbrk(tok, " ")) {
+ // crunch all spaces
+ normalize_space(tplop);
+ // replace spaces with line feeds
+ replace_text(tplop, " ", "\n", 0);
+ }
strlist_append_tokenize((*x), tplop, tok);
guard_free(tplop);
}
@@ -548,7 +556,7 @@ static int populate_delivery_ini(struct Delivery *ctx) {
conv_str(&ctx->conda.installer_baseurl, val);
ini_getval(ini, "conda", "conda_packages", INIVAL_TYPE_STR_ARRAY, &val);
- conv_strlist(&ctx->conda.conda_packages, LINE_SEP, val);
+ conv_strlist(&ctx->conda.conda_packages, " "LINE_SEP, val);
for (size_t i = 0; i < strlist_count(ctx->conda.conda_packages); i++) {
char *pkg = strlist_item(ctx->conda.conda_packages, i);
@@ -558,7 +566,7 @@ static int populate_delivery_ini(struct Delivery *ctx) {
}
ini_getval(ini, "conda", "pip_packages", INIVAL_TYPE_STR_ARRAY, &val);
- conv_strlist(&ctx->conda.pip_packages, LINE_SEP, val);
+ conv_strlist(&ctx->conda.pip_packages, " "LINE_SEP, val);
for (size_t i = 0; i < strlist_count(ctx->conda.pip_packages); i++) {
char *pkg = strlist_item(ctx->conda.pip_packages, i);
@@ -1201,7 +1209,7 @@ static const struct Test *requirement_from_test(struct Delivery *ctx, const char
result = NULL;
for (size_t i = 0; i < sizeof(ctx->tests) / sizeof(ctx->tests[0]); i++) {
- if (strstr(name, ctx->tests[i].name)) {
+ if (ctx->tests[i].name && strstr(name, ctx->tests[i].name)) {
result = &ctx->tests[i];
break;
}
diff --git a/src/ini.c b/src/ini.c
index 6ce54ac..9f3b8f7 100644
--- a/src/ini.c
+++ b/src/ini.c
@@ -292,13 +292,18 @@ int ini_write(struct INIFILE *ini, FILE **stream, unsigned mode) {
char *render = NULL;
if (mode == INI_WRITE_PRESERVE) {
render = tpl_render(parts[p]);
+ replace_text(render, "\n", "\n ", 0);
} else {
render = parts[p];
}
if (p == 0) {
sprintf(outvalue, "%s" LINE_SEP, render);
} else {
- sprintf(outvalue + strlen(outvalue), " %s" LINE_SEP, render);
+ if (!isspace(render[0])) {
+ sprintf(outvalue + strlen(outvalue), " %s" LINE_SEP, render);
+ } else {
+ sprintf(outvalue + strlen(outvalue), "%s" LINE_SEP, render);
+ }
}
if (mode == INI_WRITE_PRESERVE) {
guard_free(render);
@@ -307,9 +312,9 @@ int ini_write(struct INIFILE *ini, FILE **stream, unsigned mode) {
GENERIC_ARRAY_FREE(parts);
strip(outvalue);
strcat(outvalue, LINE_SEP);
- fprintf(*stream, "%s=%s%s", ini->section[x]->data[y]->key, parts_total > 1 ? LINE_SEP " " : "", outvalue);
+ fprintf(*stream, "%s = %s%s", ini->section[x]->data[y]->key, ini->section[x]->data[y]->type_hint || parts_total > 1 ? LINE_SEP " " : "", outvalue);
} else {
- fprintf(*stream, "%s=%s", ini->section[x]->data[y]->key, ini->section[x]->data[y]->value);
+ fprintf(*stream, "%s = %s", ini->section[x]->data[y]->key, ini->section[x]->data[y]->value);
}
}
fprintf(*stream, LINE_SEP);
@@ -352,6 +357,13 @@ void ini_free(struct INIFILE **ini) {
guard_free((*ini));
}
+static void ini_data_set_hint(struct INIFILE **ini, char *section_name, char *key, int hint) {
+ struct INIData *data = ini_data_get(*ini, section_name, key);
+ if (data) {
+ data->type_hint = hint;
+ }
+}
+
struct INIFILE *ini_open(const char *filename) {
FILE *fp;
char line[STASIS_BUFSIZ] = {0};
@@ -440,8 +452,10 @@ struct INIFILE *ini_open(const char *filename) {
ini_section_create(&ini, section_name);
// Record the name of the section. This is used until another section is found.
+ memset(current_section, 0, sizeof(current_section));
strcpy(current_section, section_name);
guard_free(section_name);
+ memset(line, 0, sizeof(line));
continue;
}
@@ -473,6 +487,7 @@ struct INIFILE *ini_open(const char *filename) {
}
if (isempty(value)) {
//printf("%s is probably long raw data\n", key);
+ ini_data_set_hint(&ini, current_section, key, INIVAL_TYPE_STR_ARRAY);
multiline_data = 1;
no_data = 1;
} else {
@@ -484,15 +499,14 @@ struct INIFILE *ini_open(const char *filename) {
strcpy(key, key_last);
strcpy(value, line);
}
+ memset(line, 0, sizeof(line));
// Store key value pair in section's data array
if (strlen(key)) {
lstrip(key);
strip(key);
unquote(value);
- lstrip(value);
if (!multiline_data) {
- strip(value);
reading_value = 0;
ini_data_append(&ini, current_section, key, value);
continue;