Blob Blame History Raw
From 6c0cca42baebb5c681f5ee7f940da8d0a1b2613d Mon Sep 17 00:00:00 2001
From: "Thomas E. Dickey" <dickey@invisible-island.net>
Date: Fri, 15 Mar 2019 20:06:26 -0400
Subject: [PATCH 5/9] fix bug introduced by 	commit
 57c8b133bbcf38a9a1e345eabeeabe2a3e07c1c8, which modified util/makestrs.c to
 avoid a shadowing warning of a function parameter versus global variable, but
 overlooked use of the parameter within the functions.  That caused all of the
 resource strings in Shell.h to have the same value.

Signed-off-by: Thomas E. Dickey <dickey@invisible-island.net>
---
 util/makestrs.c | 122 ++++++++++++++++++++++++++++++------------------
 1 file changed, 76 insertions(+), 46 deletions(-)

diff --git a/util/makestrs.c b/util/makestrs.c
index 488c9bb..e626dee 100644
--- a/util/makestrs.c
+++ b/util/makestrs.c
@@ -35,7 +35,7 @@ typedef struct _TableEnt {
     struct _TableEnt* next;
     char* left;
     char* right;
-    int offset;
+    size_t offset;
 } TableEnt;
 
 typedef struct _Table {
@@ -44,7 +44,7 @@ typedef struct _Table {
     TableEnt* tableentcurrent;
     TableEnt** tableenttail;
     char* name;
-    int offset;
+    size_t offset;
 } Table;
 
 typedef struct _File {
@@ -108,7 +108,7 @@ static FILE *ifopen(const char *myfile, const char *mode)
     if (buffer == NULL)
         return NULL;
 
-    snprintf(buffer, len + 1, "%s/%s", includedir, file);
+    snprintf(buffer, len + 1, "%s/%s", includedir, myfile);
 #endif
 
     ret = fopen(buffer, mode);
@@ -123,7 +123,7 @@ static void WriteHeaderProlog (FILE *f, File *phile)
     TableEnt* te;
 
     (void) fprintf (f, "#ifdef %s\n", featurestr);
-    for (t = phile->table; t; t = t->next)
+    for (t = phile->table; t; t = t->next) {
 	for (te = t->tableent; te; te = te->next) {
 	    if (strcmp (te->left, "RAtom") == 0) {
 		(void) fprintf (f,
@@ -135,6 +135,7 @@ static void WriteHeaderProlog (FILE *f, File *phile)
 			prefixstr, te->left, te->right);
 	    }
 	}
+    }
     (void) fprintf (f, "%s", "#else\n");
 }
 
@@ -148,10 +149,12 @@ static void IntelABIWriteHeader (FILE *f, File *phile)
     for (t = phile->table; t; t = t->next) {
       (void) fprintf (f, "%s %sConst char %s[];\n",
 		      externrefstr, conststr ? conststr : fileprotstr, t->name);
-	for (te = t->tableent; te; te = te->next)
+	for (te = t->tableent; te; te = te->next) {
 	    (void) fprintf (f,
-		"#ifndef %s%s\n#define %s%s ((char*)&%s[%d])\n#endif\n",
-		prefixstr, te->left, prefixstr, te->left, t->name, te->offset);
+		"#ifndef %s%s\n#define %s%s ((char*)&%s[%lu])\n#endif\n",
+		prefixstr, te->left, prefixstr, te->left, t->name,
+		(unsigned long) te->offset);
+	}
     }
 
     (void) fprintf (f, "#endif /* %s */\n", featurestr);
@@ -162,10 +165,12 @@ static void SPARCABIWriteHeader (FILE *f, File *phile)
     Table* t;
     TableEnt* te;
 
-    for (t = phile->table; t; t = t->next)
-	for (te = t->tableent; te; te = te->next)
+    for (t = phile->table; t; t = t->next) {
+	for (te = t->tableent; te; te = te->next) {
 	    (void) fprintf (f, "#define %s%s \"%s\"\n",
 			    prefixstr, te->left, te->right);
+	}
+    }
 }
 
 static void FunctionWriteHeader (FILE *f, File *phile)
@@ -179,12 +184,14 @@ static void FunctionWriteHeader (FILE *f, File *phile)
 		    externrefstr, conststr ? conststr : fileprotstr,
 		    phile->table->name);
 
-    for (t = phile->table; t; t = t->next)
-	for (te = t->tableent; te; te = te->next)
+    for (t = phile->table; t; t = t->next) {
+	for (te = t->tableent; te; te = te->next) {
 	    (void) fprintf (f,
-		"#ifndef %s%s\n#define %s%s (%s(%d))\n#endif\n",
+		"#ifndef %s%s\n#define %s%s (%s(%lu))\n#endif\n",
 		prefixstr, te->left, prefixstr, te->left, phile->table->name,
-		te->offset);
+		(unsigned long) te->offset);
+	}
+    }
 
     (void) fprintf (f, "#endif /* %s */\n", featurestr);
 }
@@ -196,13 +203,15 @@ static void ArrayperWriteHeader (FILE *f, File *phile)
 
     WriteHeaderProlog (f, phile);
 
-    for (t = phile->table; t; t = t->next)
-        for (te = t->tableent; te; te = te->next)
+    for (t = phile->table; t; t = t->next) {
+        for (te = t->tableent; te; te = te->next) {
 	    (void) fprintf (f,
 			    "#ifndef %s%s\n%s %sConst char %s%s[];\n#endif\n",
 			    prefixstr, te->left,
 			    externrefstr, conststr ? conststr : fileprotstr,
 			    prefixstr, te->left);
+	}
+    }
 
     (void) fprintf (f, "#endif /* %s */\n", featurestr);
 }
@@ -218,12 +227,14 @@ static void DefaultWriteHeader (FILE *f, File *phile)
 		    externrefstr, conststr ? conststr : fileprotstr,
 		    phile->table->name);
 
-    for (t = phile->table; t; t = t->next)
-	for (te = t->tableent; te; te = te->next)
+    for (t = phile->table; t; t = t->next) {
+	for (te = t->tableent; te; te = te->next) {
 	    (void) fprintf (f,
-		"#ifndef %s%s\n#define %s%s ((char*)&%s[%d])\n#endif\n",
+		"#ifndef %s%s\n#define %s%s ((char*)&%s[%lu])\n#endif\n",
 		prefixstr, te->left, prefixstr, te->left, phile->table->name,
-		te->offset);
+		(unsigned long) te->offset);
+	}
+    }
 
     (void) fprintf (f, "#endif /* %s */\n", featurestr);
 }
@@ -232,7 +243,7 @@ static void CopyTmplProlog (FILE *tmpl, FILE *f)
 {
     char buf[1024];
     static const char* magic_string = X_MAGIC_STRING;
-    int magic_string_len = strlen (magic_string);
+    size_t magic_string_len = strlen (magic_string);
 
     while (fgets (buf, sizeof buf, tmpl)) {
 	if (strncmp (buf, magic_string, magic_string_len) == 0) {
@@ -316,7 +327,7 @@ static void WriteSourceLine (TableEnt *te, int abi, int fudge)
     (void) printf ("%s", "\n");
 }
 
-static const char* const_string = "%s %sConst char %s[] = {\n";
+#define const_string "%s %sConst char %s[] = {\n"
 
 static void IntelABIWriteSource (int abi)
 {
@@ -329,8 +340,9 @@ static void IntelABIWriteSource (int abi)
 	for (t = phile->table; t; t = t->next) {
 	    (void) printf (const_string, externdefstr,
 			   conststr ? conststr : "", t->name);
-	    for (te = t->tableent; te; te = te->next)
+	    for (te = t->tableent; te; te = te->next) {
 		WriteSourceLine (te, abi, 0);
+	    }
 	    (void) printf ("%s\n\n", "};");
 	}
     }
@@ -347,17 +359,21 @@ static void IntelABIBCWriteSource (int abi)
 	(void) printf (const_string, externdefstr,
 		       conststr ? conststr : "", phile->table->name);
 
-	for (t = phile->table; t; t = t->next)
-	    for (te = t->tableent; te; te = te->next)
+	for (t = phile->table; t; t = t->next) {
+	    for (te = t->tableent; te; te = te->next) {
 		WriteSourceLine (te, abi, t->next ? 1 : 0);
+	    }
+	}
 	(void) printf ("%s\n\n", "};");
 
 	if (phile->table->next) {
 	    (void) printf (const_string, externdefstr,
 			   conststr ? conststr : "", phile->table->next->name);
-	    for (t = phile->table->next; t; t = t->next)
-		for (te = t->tableent; te; te = te->next)
+	    for (t = phile->table->next; t; t = t->next) {
+		for (te = t->tableent; te; te = te->next) {
 		    WriteSourceLine (te, abi, 0);
+		}
+	    }
 	    (void) printf ("%s\n\n", "};");
 	}
     }
@@ -374,9 +390,11 @@ static void FunctionWriteSource (int abi)
 	(void) printf ("static %sConst char _%s[] = {\n",
 		       conststr ? conststr : "", phile->table->name);
 
-	for (t = phile->table; t; t = t->next)
-	    for (te = t->tableent; te; te = te->next)
+	for (t = phile->table; t; t = t->next) {
+	    for (te = t->tableent; te; te = te->next) {
 		WriteSourceLine (te, abi, t->next ? 1 : 0);
+	    }
+	}
 	(void) printf ("%s\n\n", "};");
 
 	(void) printf ("%sConst char* %s(index)\n    int index;\n{\n    return &_%s[index];\n}\n\n",
@@ -394,7 +412,7 @@ static void ArrayperWriteSource (int abi)
 	Table* t;
 	TableEnt* te;
 
-	for (t = phile->table; t; t = t->next)
+	for (t = phile->table; t; t = t->next) {
 	    for (te = t->tableent; te; te = te->next) {
 		if (strcmp (te->left, "RAtom") == 0) {
 		    if (done_atom) return;
@@ -405,6 +423,7 @@ static void ArrayperWriteSource (int abi)
 			       prefixstr,
 			       te->left, te->right);
 	    }
+	}
     }
 }
 
@@ -419,9 +438,11 @@ static void DefaultWriteSource (int abi)
 	(void) printf (const_string, externdefstr, conststr ? conststr : "",
 		       phile->table->name);
 
-	for (t = phile->table; t; t = t->next)
-	    for (te = t->tableent; te; te = te->next)
+	for (t = phile->table; t; t = t->next) {
+	    for (te = t->tableent; te; te = te->next) {
 		WriteSourceLine (te, abi, t->next ? 1 : 0);
+	    }
+	}
 	(void) printf ("%s\n\n", "};");
     }
 }
@@ -457,7 +478,10 @@ static void WriteSource(char *tagline, int abi)
 
     (*sourceproc[abi])(abi);
 
-    if (tmpl) CopyTmplEpilog (tmpl, stdout);
+    if (tmpl) {
+	CopyTmplEpilog (tmpl, stdout);
+	fclose(tmpl);
+    }
 }
 
 static void DoLine(char *buf)
@@ -586,9 +610,9 @@ static void DoLine(char *buf)
 	{
 	    char* right;
 	    TableEnt* tableent;
-	    int llen;
-	    int rlen;
-	    int len;
+	    size_t llen;
+	    size_t rlen;
+	    size_t len;
 
 	    if ((right = strchr(buf, ' ')))
 		*right++ = 0;
@@ -602,7 +626,8 @@ static void DoLine(char *buf)
 	    llen = len = strlen(buf) + 1;
 	    rlen = strlen(right) + 1;
 	    if (right != buf + 1) len += rlen;
-	    if ((tableent = (TableEnt*)malloc(sizeof(TableEnt) + len)) == NULL)
+	    tableent = (TableEnt*)calloc(sizeof(TableEnt) + len, 1);
+	    if (tableent == NULL)
 		exit(1);
 	    tableent->left = (char *)(tableent + 1);
 	    strcpy(tableent->left, buf);
@@ -627,11 +652,12 @@ static void IntelABIIndexEntries (File *myfile)
     Table* t;
     TableEnt* te;
 
-    for (t = file->table; t; t = t->next)
+    for (t = myfile->table; t; t = t->next) {
 	for (te = t->tableent; te; te = te->next) {
 	    te->offset = t->offset;
 	    t->offset += strlen (te->right);
 	    t->offset++;
+	}
     }
 }
 
@@ -639,13 +665,14 @@ static void DefaultIndexEntries (File *myfile)
 {
     Table* t;
     TableEnt* te;
-    int offset = 0;
+    size_t offset = 0;
 
-    for (t = file->table; t; t = t->next)
+    for (t = myfile->table; t; t = t->next) {
 	for (te = t->tableent; te; te = te->next) {
 	    te->offset = offset;
 	    offset += strlen (te->right);
 	    offset++;
+	}
     }
 }
 
@@ -656,10 +683,10 @@ static void IndexEntries (File *myfile, int abi)
 	break;
     case X_INTEL_ABI:
     case X_INTEL_ABI_BC:
-	IntelABIIndexEntries (file);
+	IntelABIIndexEntries (myfile);
 	break;
     default:
-	DefaultIndexEntries (file);
+	DefaultIndexEntries (myfile);
 	break;
     }
 }
@@ -669,12 +696,12 @@ static char* DoComment (char *line)
     char* tag;
     char* eol;
     char* ret;
-    int len;
+    size_t len;
 
     /* assume that the first line with two '$' in it is the RCS tag line */
     if ((tag = strchr (line, '$')) == NULL) return NULL;
     if ((eol = strchr (tag + 1, '$')) == NULL) return NULL;
-    len = eol - tag;
+    len = (size_t)(eol - tag);
     if ((ret = malloc (len)) == NULL)
 	exit (1);
     (void) strncpy (ret, tag + 1, len - 1);
@@ -684,7 +711,7 @@ static char* DoComment (char *line)
 
 int main(int argc, char *argv[])
 {
-    int len, i;
+    size_t len;
     char* tagline = NULL;
     File* phile;
     FILE *f;
@@ -698,6 +725,7 @@ int main(int argc, char *argv[])
 
     f = stdin;
     if (argc > 1) {
+	int i;
 	for (i = 1; i < argc; i++) {
 	    if (strcmp (argv[i], "-f") == 0) {
 		if (++i < argc)
@@ -706,10 +734,12 @@ int main(int argc, char *argv[])
 		    return 1;
 	    }
 	    if (strcmp (argv[i], "-i") == 0) {
-		if (++i < argc)
+		if (++i < argc) {
 		    includedir = argv[i];
-		else
+		} else {
+		    if (f != 0 && f != stdin) fclose(f);
 		    return 1;
+		}
 	    }
 	    if (strcmp (argv[i], "-sparcabi") == 0)
 		abi = X_SPARC_ABI;
-- 
2.19.2