svn commit: r292517 - head/bin/sh

Jilles Tjoelker jilles at FreeBSD.org
Sun Dec 20 16:40:38 UTC 2015


Author: jilles
Date: Sun Dec 20 16:40:36 2015
New Revision: 292517
URL: https://svnweb.freebsd.org/changeset/base/292517

Log:
  sh/mknodes: Close files and check for errors when writing.
  
  This is a build tool only and does not affect run time.
  
  PR:		204951
  MFC after:	1 week

Modified:
  head/bin/sh/mknodes.c

Modified: head/bin/sh/mknodes.c
==============================================================================
--- head/bin/sh/mknodes.c	Sun Dec 20 16:33:56 2015	(r292516)
+++ head/bin/sh/mknodes.c	Sun Dec 20 16:40:36 2015	(r292517)
@@ -89,7 +89,6 @@ static struct str *nodestr[MAXTYPES];	/*
 static int nstr;			/* number of structures */
 static struct str str[MAXTYPES];	/* the structures */
 static struct str *curstr;		/* current structure */
-static FILE *infp;
 static char line[1024];
 static int linno;
 static char *linep;
@@ -102,7 +101,7 @@ static void outfunc(FILE *, int);
 static void indent(int, FILE *);
 static int nextfield(char *);
 static void skipbl(void);
-static int readline(void);
+static int readline(FILE *);
 static void error(const char *, ...) __printf0like(1, 2) __dead2;
 static char *savestr(const char *);
 
@@ -110,17 +109,19 @@ static char *savestr(const char *);
 int
 main(int argc, char *argv[])
 {
+	FILE *infp;
+
 	if (argc != 3)
 		error("usage: mknodes file");
-	infp = stdin;
 	if ((infp = fopen(argv[1], "r")) == NULL)
 		error("Can't open %s: %s", argv[1], strerror(errno));
-	while (readline()) {
+	while (readline(infp)) {
 		if (line[0] == ' ' || line[0] == '\t')
 			parsefield();
 		else if (line[0] != '\0')
 			parsenode();
 	}
+	fclose(infp);
 	output(argv[2]);
 	exit(0);
 }
@@ -253,6 +254,10 @@ output(char *file)
 	fputs("union node *getfuncnode(struct funcdef *);\n", hfile);
 	fputs("void reffunc(struct funcdef *);\n", hfile);
 	fputs("void unreffunc(struct funcdef *);\n", hfile);
+	if (ferror(hfile))
+		error("Can't write to nodes.h");
+	if (fclose(hfile))
+		error("Can't close nodes.h");
 
 	fputs(writer, cfile);
 	while (fgets(line, sizeof line, patfile) != NULL) {
@@ -266,6 +271,11 @@ output(char *file)
 		else
 			fputs(line, cfile);
 	}
+	fclose(patfile);
+	if (ferror(cfile))
+		error("Can't write to nodes.c");
+	if (fclose(cfile))
+		error("Can't close nodes.c");
 }
 
 
@@ -401,7 +411,7 @@ skipbl(void)
 
 
 static int
-readline(void)
+readline(FILE *infp)
 {
 	char *p;
 


More information about the svn-src-head mailing list