+ bool match = FALSE;
+ char *lang, *package, *pos;
+ enumerator_t *enumerator;
+ int i, len;
+
+ if (!this->count_bad)
+ {
+ return FALSE;
+ }
+
+ /* set the default language */
+ *lang_code = instructions[0].lang;
+ *string = instructions[0].string;
+
+ while (language_enumerator->enumerate(language_enumerator, &lang))
+ {
+ for (i = 0; i < countof(instructions); i++)
+ {
+ if (streq(lang, instructions[i].lang))
+ {
+ match = TRUE;
+ *lang_code = instructions[i].lang;
+ *string = instructions[i].string;
+ break;
+ }
+ }
+ if (match)
+ {
+ break;
+ }
+ }
+
+ /* Compute the size of the remediation string */
+ len = strlen(*string);
+
+ enumerator = this->bad_packages->create_enumerator(this->bad_packages);
+ while (enumerator->enumerate(enumerator, &package))
+ {
+ len += strlen(package);
+ }
+ enumerator->destroy(enumerator);
+
+ pos = this->instructions = malloc(len + 1);
+ strcopy(pos, *string);
+ pos += strlen(*string);
+
+ enumerator = this->bad_packages->create_enumerator(this->bad_packages);
+ while (enumerator->enumerate(enumerator, &package))
+ {
+ strcpy(pos, package);
+ pos += strlen(package);
+ }
+ enumerator->destroy(enumerator);
+
+ *string = this->instructions;
+ *uri = lib->settings->get_str(lib->settings,
+ "libimcv.plugins.imv-os.remediation_uri", NULL);
+
+ return TRUE;