cms-static: Convert cms-static to use new config parser

Almost half of the logic here was about wrestling the silly config parser
API.
diff --git a/src/cms-static.c b/src/cms-static.c
index 782e22f..b3fbe5e 100644
--- a/src/cms-static.c
+++ b/src/cms-static.c
@@ -35,37 +35,30 @@
 	struct weston_compositor	*ec;
 	struct wl_listener		 destroy_listener;
 	struct wl_listener		 output_created_listener;
-	struct wl_list			 configured_output_list;
-};
-
-struct cms_configured_output {
-	char				*icc_profile;
-	char				*name;
-	struct wl_list			 link;
 };
 
 static void
 cms_output_created(struct cms_static *cms, struct weston_output *o)
 {
-	struct cms_configured_output *configured_output;
 	struct weston_color_profile *p;
+	struct weston_config_section *s;
+	char *profile;
 
 	weston_log("cms-static: output %i [%s] created\n", o->id, o->name);
 
-	/* find profile from configured list */
-	wl_list_for_each(configured_output, &cms->configured_output_list, link) {
-		if (strcmp (o->name, configured_output->name) == 0) {
-			p = weston_cms_load_profile(configured_output->icc_profile);
-			if (p == NULL) {
-				weston_log("cms-static: failed to load %s\n",
-					   configured_output->icc_profile);
-			} else {
-				       weston_log("cms-static: loading %s for %s\n",
-						  configured_output->icc_profile, o->name);
-				       weston_cms_set_color_profile(o, p);
-			}
-			break;
-		}
+	s = weston_config_get_section(cms->ec->config,
+				      "output", "name", o->name);
+	if (s == NULL)
+		return;
+	if (weston_config_section_get_string(s, "icc_profile", &profile, NULL) < 0)
+		return;
+	p = weston_cms_load_profile(profile);
+	if (p == NULL) {
+		weston_log("cms-static: failed to load %s\n", profile);
+	} else {
+		weston_log("cms-static: loading %s for %s\n",
+			   profile, o->name);
+		weston_cms_set_color_profile(o, p);
 	}
 }
 
@@ -81,14 +74,6 @@
 static void
 cms_module_destroy(struct cms_static *cms)
 {
-	struct cms_configured_output *configured_output, *next_co;
-
-	wl_list_for_each_safe(configured_output, next_co,
-			      &cms->configured_output_list, link) {
-		free(configured_output->name);
-		free(configured_output->icc_profile);
-		free(configured_output);
-	}
 	free(cms);
 }
 
@@ -99,36 +84,6 @@
 	cms_module_destroy(cms);
 }
 
-static char *output_icc_profile;
-static char *output_name;
-
-static void
-output_section_done(void *data)
-{
-	struct cms_configured_output *configured_output;
-	struct cms_static *cms = (struct cms_static *) data;
-
-	if (output_name == NULL || output_icc_profile == NULL) {
-		free(output_name);
-		free(output_icc_profile);
-		output_name = NULL;
-		output_icc_profile = NULL;
-		return;
-	}
-
-	weston_log("cms-static: output %s profile configured as %s\n",
-		   output_name, output_icc_profile);
-
-	/* create an object used to store name<->profile data to avoid parsing
-	 * the config file every time a new output is added */
-	configured_output = malloc(sizeof *configured_output);
-	memset(configured_output, 0, sizeof *configured_output);
-	configured_output->name = output_name;
-	configured_output->icc_profile = output_icc_profile;
-	wl_list_insert(&cms->configured_output_list, &configured_output->link);
-	output_name = NULL;
-	output_icc_profile = NULL;
-}
 
 WL_EXPORT int
 module_init(struct weston_compositor *ec,
@@ -145,22 +100,7 @@
 		return -1;
 	memset(cms, 0, sizeof *cms);
 
-	wl_list_init(&cms->configured_output_list);
-
-	/* parse config file */
-	const struct config_key drm_config_keys[] = {
-		{ "name", CONFIG_KEY_STRING, &output_name },
-		{ "icc_profile", CONFIG_KEY_STRING, &output_icc_profile },
-	};
-
-	const struct config_section config_section[] = {
-		{ "output", drm_config_keys,
-		ARRAY_LENGTH(drm_config_keys), output_section_done },
-	};
-
-	parse_config_file(ec->config_fd, config_section,
-			  ARRAY_LENGTH(config_section), cms);
-
+	cms->ec = ec;
 	cms->destroy_listener.notify = cms_notifier_destroy;
 	wl_signal_add(&ec->destroy_signal, &cms->destroy_listener);