static int verbose = 0;
struct subst {
- const char *key;
- char *value;
+ const char *key;
+ char *value;
};
static struct subst subst[2];
}
static int outline(char *buf, int start, int force) {
- char *from = buf + start;
- char *next = strchr(buf + start, '\n');
-
- if (!next && !force) /* not a complete line yet... */
- return start;
-
- if (!next)
- next = from + strlen(from);
- else
- ++next;
-
- if (!strncmp(from, "@TESTDIR=", 9)) {
- subst[0].key = "@TESTDIR@";
- subst[0].value = strndup(from + 9, next - from - 9 - 1);
- } else if (!strncmp(from, "@PREFIX=", 8)) {
- subst[1].key = "@PREFIX@";
- subst[1].value = strndup(from + 8, next - from - 8 - 1);
- } else {
- char *line = strndup(from, next - from);
- char *a = line, *b;
- do {
- int idx = -1;
- int i;
- b = line + strlen(line);
- for ( i = 0; i < 2; ++i ) {
- if (subst[i].key) {
- // printf("trying: %s -> %s\n", subst[i].value, subst[i].key);
- char *stop = strstr(a, subst[i].value);
- if (stop && stop < b) {
- idx = i;
- b = stop;
- }
- }
- }
- fwrite(a, 1, b - a, stdout);
- a = b;
-
- if ( idx >= 0 ) {
- fprintf(stdout, "%s", subst[idx].key);
- a += strlen(subst[idx].value);
- }
- } while (b < line + strlen(line));
- free(line);
- }
-
- return next - buf + (force ? 0 : 1);
+ char *from = buf + start;
+ char *next = strchr(buf + start, '\n');
+
+ if (!next && !force) /* not a complete line yet... */
+ return start;
+
+ if (!next)
+ next = from + strlen(from);
+ else
+ ++next;
+
+ if (!strncmp(from, "@TESTDIR=", 9)) {
+ subst[0].key = "@TESTDIR@";
+ subst[0].value = strndup(from + 9, next - from - 9 - 1);
+ } else if (!strncmp(from, "@PREFIX=", 8)) {
+ subst[1].key = "@PREFIX@";
+ subst[1].value = strndup(from + 8, next - from - 8 - 1);
+ } else {
+ char *line = strndup(from, next - from);
+ char *a = line, *b;
+ do {
+ int idx = -1;
+ int i;
+ b = line + strlen(line);
+ for ( i = 0; i < 2; ++i ) {
+ if (subst[i].key) {
+ // printf("trying: %s -> %s\n", subst[i].value, subst[i].key);
+ char *stop = strstr(a, subst[i].value);
+ if (stop && stop < b) {
+ idx = i;
+ b = stop;
+ }
+ }
+ }
+ fwrite(a, 1, b - a, stdout);
+ a = b;
+
+ if ( idx >= 0 ) {
+ fprintf(stdout, "%s", subst[idx].key);
+ a += strlen(subst[idx].value);
+ }
+ } while (b < line + strlen(line));
+ free(line);
+ }
+
+ return next - buf + (force ? 0 : 1);
}
static void dump(void) {
static void drain(void) {
int sz;
char buf[2048];
- memset(buf, 0, 2048);
+ memset(buf, 0, 2048);
while (1) {
sz = read(fds[1], buf, 2047);
close(0);
dup2(fds[0], 1);
dup2(fds[0], 2);
- close(fds[0]);
- close(fds[1]);
+ close(fds[0]);
+ close(fds[1]);
execlp("bash", "bash", f, NULL);
perror("execlp");
fflush(stderr);
}
/* set up signal handlers */
- for (i = 0; i <= 32; ++i) {
- if (i == SIGCHLD || i == SIGWINCH || i == SIGURG)
- continue;
- signal(i, handler);
- }
+ for (i = 0; i <= 32; ++i) {
+ if (i == SIGCHLD || i == SIGWINCH || i == SIGURG)
+ continue;
+ signal(i, handler);
+ }
/* run the tests */
for (i = 1; i < argc; ++ i) {