- char buf[strlen (filename) + 64];
- snprintf (buf, strlen (filename) + 64, "/augeas/load//incl[. != \"%s\"]",
- filename);
- if (guestfs_aug_rm (g, buf) == -1)
+#define AUGEAS_LOAD "/augeas/load//incl[. != \""
+#define AUGEAS_LOAD_LEN (strlen(AUGEAS_LOAD))
+ size_t conflen = strlen(configfiles[0]);
+ size_t buflen = AUGEAS_LOAD_LEN + conflen + 1 /* Closing " */;
+ char *buf = safe_malloc(g, buflen + 2 /* Closing ] + null terminator */);
+
+ memcpy(buf, AUGEAS_LOAD, AUGEAS_LOAD_LEN);
+ memcpy(buf + AUGEAS_LOAD_LEN, configfiles[0], conflen);
+ buf[buflen - 1] = '"';
+#undef AUGEAS_LOAD_LEN
+#undef AUGEAS_LOAD
+
+#define EXCL " and . != \""
+#define EXCL_LEN (strlen(EXCL))
+ for (const char **i = &configfiles[1]; *i != NULL; i++) {
+ size_t orig_buflen = buflen;
+ conflen = strlen(*i);
+ buflen += EXCL_LEN + conflen + 1 /* Closing " */;
+ buf = safe_realloc(g, buf, buflen + 2 /* Closing ] + null terminator */);
+ char *s = buf + orig_buflen;
+
+ memcpy(s, EXCL, EXCL_LEN);
+ memcpy(s + EXCL_LEN, *i, conflen);
+ buf[buflen - 1] = '"';
+ }
+#undef EXCL_LEN
+#undef EXCL
+
+ buf[buflen] = ']';
+ buf[buflen + 1] = '\0';
+
+ if (guestfs_aug_rm (g, buf) == -1) {
+ free(buf);