Let wuffs-c take a no-op C formatter

Reinforcing the previous commit's (e5cc4a42) observation, over 93% of
compilation time (converting foo.wuffs into foo.c) is spent piping the
generated C code through clang-format.

----
$ time wuffs gen -cformatter=clang-format-5.0 > /dev/null
real	0m2.855s
user	0m2.680s
sys	0m0.286s

$ time wuffs gen -cformatter=                 > /dev/null
real	0m0.175s
user	0m0.172s
sys	0m0.050s
----
diff --git a/cmd/wuffs-c/release.go b/cmd/wuffs-c/release.go
index 1b435c6..382d359 100644
--- a/cmd/wuffs-c/release.go
+++ b/cmd/wuffs-c/release.go
@@ -137,6 +137,11 @@
 		now = time.Now()
 	}
 
+	if *cformatterFlag == "" {
+		os.Stdout.Write(unformatted.Bytes())
+		return nil
+	}
+
 	cmd := exec.Command(*cformatterFlag, "-style=Chromium")
 	cmd.Stdin = unformatted
 	cmd.Stdout = os.Stdout
diff --git a/cmd/wuffs/gen.go b/cmd/wuffs/gen.go
index 5bb1619..61133e6 100644
--- a/cmd/wuffs/gen.go
+++ b/cmd/wuffs/gen.go
@@ -110,7 +110,7 @@
 	if genlib {
 		return h.genlibAffected()
 	}
-	return genrelease(wuffsRoot, langs, v)
+	return genrelease(wuffsRoot, langs, v, *cformatterFlag)
 }
 
 type genHelper struct {
diff --git a/cmd/wuffs/release.go b/cmd/wuffs/release.go
index ada21ac..902555b 100644
--- a/cmd/wuffs/release.go
+++ b/cmd/wuffs/release.go
@@ -24,13 +24,13 @@
 	cf "github.com/google/wuffs/cmd/commonflags"
 )
 
-func genrelease(wuffsRoot string, langs []string, v cf.Version) error {
+func genrelease(wuffsRoot string, langs []string, v cf.Version, cformatter string) error {
 	revision := runGitCommand(wuffsRoot, "rev-parse", "HEAD")
 	commitDate := runGitCommand(wuffsRoot, "show",
 		"--quiet", "--date=format-local:%Y-%m-%d", "--format=%cd")
 	gitRevListCount := runGitCommand(wuffsRoot, "rev-list", "--count", "HEAD")
 	for _, lang := range langs {
-		filename, contents, err := genreleaseLang(wuffsRoot, revision, commitDate, gitRevListCount, v, lang)
+		filename, contents, err := genreleaseLang(wuffsRoot, revision, commitDate, gitRevListCount, v, cformatter, lang)
 		if err != nil {
 			return err
 		}
@@ -41,7 +41,7 @@
 	return nil
 }
 
-func genreleaseLang(wuffsRoot string, revision string, commitDate, gitRevListCount string, v cf.Version, lang string) (filename string, contents []byte, err error) {
+func genreleaseLang(wuffsRoot string, revision string, commitDate, gitRevListCount string, v cf.Version, cformatter string, lang string) (filename string, contents []byte, err error) {
 	qualFilenames, err := findFiles(filepath.Join(wuffsRoot, "gen", lang), "."+lang)
 	if err != nil {
 		return "", nil, err
@@ -57,6 +57,9 @@
 	if gitRevListCount != "" {
 		args = append(args, "-gitrevlistcount", gitRevListCount)
 	}
+	if lang == "c" {
+		args = append(args, "-cformatter", cformatter)
+	}
 	args = append(args, qualFilenames...)
 	stdout := &bytes.Buffer{}
 
diff --git a/cmd/wuffs/test.go b/cmd/wuffs/test.go
index fd85e3d..bb4725f 100644
--- a/cmd/wuffs/test.go
+++ b/cmd/wuffs/test.go
@@ -116,7 +116,7 @@
 				return err
 			}
 		}
-		if err := genrelease(wuffsRoot, langs, cf.Version{}); err != nil {
+		if err := genrelease(wuffsRoot, langs, cf.Version{}, *cformatterFlag); err != nil {
 			return err
 		}
 	}
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index f910e97..0a580a5 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -194,6 +194,10 @@
 			now = time.Now()
 		}
 
+		if *cformatterFlag == "" {
+			return unformatted, nil
+		}
+
 		stdout := &bytes.Buffer{}
 		cmd := exec.Command(*cformatterFlag, "-style=Chromium")
 		cmd.Stdin = bytes.NewReader(unformatted)