- verbose("Found %s\n", names[2]);
- add_replace(repl, names[2]);
+static char *get_statement(const void *ctx, char **p)
+{
+ unsigned brackets = 0;
+ bool seen_brackets = false;
+ char *answer = talloc_strdup(ctx, "");
+
+ for (;;) {
+ if ((*p)[0] == '/' && (*p)[1] == '/')
+ *p += strcspn(*p, "\n");
+ else if ((*p)[0] == '/' && (*p)[1] == '*')
+ *p = strstr(*p, "*/") + 1;
+ else {
+ char c = **p;
+ if (c == ';' && !brackets) {
+ (*p)++;
+ return answer;
+ }
+ /* Compress whitespace into a single ' ' */
+ if (isspace(c)) {
+ c = ' ';
+ while (isspace((*p)[1]))
+ (*p)++;
+ } else if (c == '{' || c == '(' || c == '[') {
+ if (c == '(')
+ seen_brackets = true;
+ brackets++;
+ } else if (c == '}' || c == ')' || c == ']')
+ brackets--;
+
+ if (answer[0] != '\0' || c != ' ') {
+ answer = talloc_realloc(NULL, answer, char,
+ strlen(answer) + 2);
+ answer[strlen(answer)+1] = '\0';
+ answer[strlen(answer)] = c;
+ }
+ if (c == '}' && seen_brackets && brackets == 0) {
+ (*p)++;
+ return answer;
+ }
+ }
+ (*p)++;
+ if (**p == '\0')
+ return NULL;