shithub: scc

Download patch

ref: f936212f32ab267649630db5c5f14ce47d7aacc6
parent: 0b9315d8793629874b3b4542164ccfec6f244413
author: Quentin Rameau <quinq@fifth.space>
date: Tue Jun 7 11:17:49 EDT 2016

Revert "[driver] use pointers in tools lookup table"

This reverts commit 86e6d58d2e1059bb493df922bc89a1cc2b92ee83.

This was a leftover from a test I forgot to drop before pushing.
Sorry for the noise.

--- a/driver/posix/scc.c
+++ b/driver/posix/scc.c
@@ -28,8 +28,7 @@
 	LAST_TOOL,
 };
 
-typedef struct tool Tool;
-struct tool {
+static struct tool {
 	char  cmd[PATH_MAX];
 	char *args[NARGS];
 	char  bin[16];
@@ -36,19 +35,17 @@
 	char *outfile;
 	int   nargs, in, out, error;
 	pid_t pid;
+} tools[] = {
+	[CC1]    = { .bin = "cc1", .cmd = PREFIX "/libexec/scc/", },
+	[TEEIR]  = { .bin = "tee", .cmd = "tee", },
+	[CC2]    = { .bin = "cc2", .cmd = PREFIX "/libexec/scc/", },
+	[TEEQBE] = { .bin = "tee", .cmd = "tee", },
+	[QBE]    = { .bin = "qbe", .cmd = "qbe", },
+	[TEEAS]  = { .bin = "tee", .cmd = "tee", },
+	[AS]     = { .bin = "as",  .cmd = "as", },
+	[LD]     = { .bin = "gcc", .cmd = "gcc", }, /* TODO replace with ld */
 };
 
-static Tool *tools[] = {
-	[CC1]    = &(Tool){ .bin = "cc1", .cmd = PREFIX "/libexec/scc/", },
-	[TEEIR]  = &(Tool){ .bin = "tee", .cmd = "tee", },
-	[CC2]    = &(Tool){ .bin = "cc2", .cmd = PREFIX "/libexec/scc/", },
-	[TEEQBE] = &(Tool){ .bin = "tee", .cmd = "tee", },
-	[QBE]    = &(Tool){ .bin = "qbe", .cmd = "qbe", },
-	[TEEAS]  = &(Tool){ .bin = "tee", .cmd = "tee", },
-	[AS]     = &(Tool){ .bin = "as",  .cmd = "as", },
-	[LD]     = &(Tool){ .bin = "gcc", .cmd = "gcc", }, /* TODO replace with ld */
-};
-
 char *argv0;
 static char *arch;
 static char *tmpobjs[NARGS - 2];
@@ -58,11 +55,11 @@
 static void
 terminate(void)
 {
-	Tool *t;
+	struct tool *t;
 	int tool, failed;
 
 	for (tool = 0; tool < LAST_TOOL; ++tool) {
-		t = tools[tool];
+		t = &tools[tool];
 		if (t->pid) {
 			kill(t->pid, SIGTERM);
 			if (t->error)
@@ -76,7 +73,7 @@
 static int
 inittool(int tool)
 {
-	Tool *t = tools[tool];
+	struct tool *t = &tools[tool];
 	size_t binln;
 	int n;
 
@@ -147,7 +144,7 @@
 
 static void
 addarg(int tool, char *arg) {
-	Tool *t = tools[tool];
+	struct tool *t = &tools[tool];
 
 	if (!(t->nargs < NARGS - 2)) /* 2: argv0, NULL terminator */
 		die("scc: too many parameters given");
@@ -158,7 +155,7 @@
 static int
 settool(int tool, char *infile, int nexttool)
 {
-	Tool *t = tools[tool];
+	struct tool *t = &tools[tool];
 	int fds[2];
 	static int fdin;
 
@@ -208,7 +205,7 @@
 static void
 spawn(int tool)
 {
-	Tool *t = tools[tool];
+	struct tool *t = &tools[tool];
 
 	switch (t->pid = fork()) {
 	case -1:
@@ -254,10 +251,10 @@
 static void
 validatetools(void)
 {
-	Tool *t;
+	struct tool *t;
 	int tool, st;
 	for (tool = 0; tool < LAST_TOOL; ++tool) {
-		t = tools[tool];
+		t = &tools[tool];
 		if (t->pid) {
 			if (waitpid(t->pid, &st, 0) < 0 ||
 			    !WIFEXITED(st) || WEXITSTATUS(st) != 0) {
@@ -331,7 +328,7 @@
 			if (argfile)
 				addarg(LD, file);
 			else
-				tmpobjs[nobjs++] = xstrdup(tools[AS]->outfile);
+				tmpobjs[nobjs++] = xstrdup(tools[AS].outfile);
 		default:
 			nexttool = LAST_TOOL;
 			continue;
@@ -380,7 +377,7 @@
 		arch = EARGF(usage());
 		break;
 	case 'o':
-		tools[LD]->outfile = EARGF(usage());
+		tools[LD].outfile = EARGF(usage());
 		break;
 	case 'w':
 		addarg(CC1, "-w");