Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Allow to set list config from env the expected format is "val1,val2,val3"
Baptiste Daroussin committed 13 years ago
commit d70063b1e300e3911819d45455b7e4592bd9858e
parent e2c6cb536b26815260daef3376fa8d588ce5bdd3
1 file changed +25 -4
modified libpkg/pkg_config.c
@@ -355,11 +355,13 @@ pkg_config_parse(yaml_document_t *doc, yaml_node_t *node, struct pkg_config *con
				parse_config_mapping(doc, val, conf);
				break;
			case PKG_CONFIG_LIST:
-
				if (val->type != YAML_SEQUENCE_NODE) {
-
					pkg_emit_error("Expecting a string list for key %s,"
-
					    " ignoring...", key->data.scalar.value);
+
				if (!conf->fromenv) {
+
					if (val->type != YAML_SEQUENCE_NODE) {
+
						pkg_emit_error("Expecting a string list for key %s,"
+
						    " ignoring...", key->data.scalar.value);
+
					}
+
					parse_config_sequence(doc, val, conf);
				}
-
				parse_config_sequence(doc, val, conf);
				break;
			}
		}
@@ -566,10 +568,12 @@ pkg_init(const char *path)
	yaml_node_t *node;
	size_t i;
	const char *val = NULL;
+
	const char *buf, *walk;
	const char *errstr = NULL;
	const char *proxy = NULL;
	const char *nsname = NULL;
	struct pkg_config *conf;
+
	struct pkg_config_value *v;

	pkg_get_myarch(myabi, BUFSIZ);
	if (parsed != false) {
@@ -630,6 +634,23 @@ pkg_init(const char *path)
			break;
		case PKG_CONFIG_LIST:
			conf->list = NULL;
+
			if (val == NULL)
+
				val = c[i].def;
+
			else
+
				conf->fromenv = true;
+
			if (val != NULL) {
+
				walk = buf = val;
+
				while ((buf = strchr(buf, ',')) != NULL) {
+
					v = malloc(sizeof(struct pkg_config_value));
+
					v->value = strndup(walk, buf - walk);
+
					HASH_ADD_STR(conf->list, value, v);
+
					buf++;
+
					walk = buf;
+
				}
+
				v = malloc(sizeof(struct pkg_config_value));
+
				v->value = strdup(walk);
+
				HASH_ADD_STR(conf->list, value, v);
+
			}
			break;
		}