Fix up make_errors.go.

We broke C++ file scanning. It also was silently failing on Windows
because os.Rename's error was ignored. Also make it work on Windows; we
just need to close the files early.

Change-Id: I1aa976ef67a1feaf574c41cf07d2202c245f027a
Reviewed-on: https://boringssl-review.googlesource.com/22466
Commit-Queue: Steven Valdez <svaldez@google.com>
Reviewed-by: Steven Valdez <svaldez@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/util/make_errors.go b/util/make_errors.go
index 22fbd6a..2525a69 100644
--- a/util/make_errors.go
+++ b/util/make_errors.go
@@ -110,7 +110,7 @@
 	}
 
 	for _, name := range filenames {
-		if !strings.HasSuffix(name, ".c") {
+		if !strings.HasSuffix(name, ".c") && !strings.HasSuffix(name, ".cc") {
 			continue
 		}
 
@@ -136,7 +136,12 @@
 	if err := writeHeaderFile(newHeaderFile, headerFile, prefix, reasons); err != nil {
 		return err
 	}
-	os.Rename(headerPath+".tmp", headerPath)
+	// Windows forbids renaming an open file.
+	headerFile.Close()
+	newHeaderFile.Close()
+	if err := os.Rename(headerPath+".tmp", headerPath); err != nil {
+		return err
+	}
 
 	dataFile, err := os.OpenFile(dataPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
 	if err != nil {