Remove -cformatter flag
diff --git a/cmd/commonflags/commonflags.go b/cmd/commonflags/commonflags.go
index 4aa5abe..daf41ae 100644
--- a/cmd/commonflags/commonflags.go
+++ b/cmd/commonflags/commonflags.go
@@ -28,10 +28,6 @@
 	CcompilersDefault = "clang-5.0,gcc"
 	CcompilersUsage   = `comma-separated list of C compilers`
 
-	// TODO: remove the -cformatter flag entirely.
-	CformatterDefault = "dumbindent"
-	CformatterUsage   = `C formatter`
-
 	FocusDefault = ""
 	FocusUsage   = `comma-separated list of tests or benchmarks (name prefixes) to focus on, e.g. "wuffs_gif_decode"`
 
diff --git a/cmd/wuffs/gen.go b/cmd/wuffs/gen.go
index 5bb1619..522f22b 100644
--- a/cmd/wuffs/gen.go
+++ b/cmd/wuffs/gen.go
@@ -38,7 +38,6 @@
 
 func doGenGenlib(wuffsRoot string, args []string, genlib bool) error {
 	flags := flag.NewFlagSet("gen", flag.ExitOnError)
-	cformatterFlag := flags.String("cformatter", cf.CformatterDefault, cf.CformatterUsage)
 	genlinenumFlag := flags.Bool("genlinenum", cf.GenlinenumDefault, cf.GenlinenumUsage)
 	langsFlag := flags.String("langs", langsDefault, langsUsage)
 	skipgendepsFlag := flags.Bool("skipgendeps", skipgendepsDefault, skipgendepsUsage)
@@ -61,9 +60,6 @@
 			return fmt.Errorf("bad -ccompilers flag value %q", *ccompilersFlag)
 		}
 	}
-	if !cf.IsAlphaNumericIsh(*cformatterFlag) {
-		return fmt.Errorf("bad -cformatter flag value %q", *cformatterFlag)
-	}
 	langs, err := parseLangs(*langsFlag)
 	if err != nil {
 		return err
@@ -84,7 +80,6 @@
 	h := genHelper{
 		wuffsRoot:   wuffsRoot,
 		langs:       langs,
-		cformatter:  *cformatterFlag,
 		genlinenum:  *genlinenumFlag,
 		skipgen:     genlib && *skipgenFlag,
 		skipgendeps: *skipgendepsFlag,
@@ -117,7 +112,6 @@
 	wuffsRoot   string
 	langs       []string
 	ccompilers  string
-	cformatter  string
 	genlinenum  bool
 	skipgen     bool
 	skipgendeps bool
@@ -193,9 +187,6 @@
 	for _, lang := range h.langs {
 		command := "wuffs-" + lang
 		cmdArgs := []string{"gen", "-package_name", packageName}
-		if (lang == "c") && (h.cformatter != cf.CformatterDefault) {
-			cmdArgs = append(cmdArgs, fmt.Sprintf("-cformatter=%s", h.cformatter))
-		}
 		if h.genlinenum != cf.GenlinenumDefault {
 			cmdArgs = append(cmdArgs, fmt.Sprintf("-genlinenum=%t", h.genlinenum))
 		}
diff --git a/cmd/wuffs/test.go b/cmd/wuffs/test.go
index fd85e3d..23efe45 100644
--- a/cmd/wuffs/test.go
+++ b/cmd/wuffs/test.go
@@ -31,7 +31,6 @@
 func doBenchTest(wuffsRoot string, args []string, bench bool) error {
 	flags := flag.NewFlagSet("test", flag.ExitOnError)
 	ccompilersFlag := flags.String("ccompilers", cf.CcompilersDefault, cf.CcompilersUsage)
-	cformatterFlag := flags.String("cformatter", cf.CformatterDefault, cf.CformatterUsage)
 	focusFlag := flags.String("focus", cf.FocusDefault, cf.FocusUsage)
 	iterscaleFlag := flags.Int("iterscale", cf.IterscaleDefault, cf.IterscaleUsage)
 	langsFlag := flags.String("langs", langsDefault, langsUsage)
@@ -51,9 +50,6 @@
 	if !cf.IsAlphaNumericIsh(*ccompilersFlag) {
 		return fmt.Errorf("bad -ccompilers flag value %q", *ccompilersFlag)
 	}
-	if !cf.IsAlphaNumericIsh(*cformatterFlag) {
-		return fmt.Errorf("bad -cformatter flag value %q", *cformatterFlag)
-	}
 	if !cf.IsAlphaNumericIsh(*focusFlag) {
 		return fmt.Errorf("bad -focus flag value %q", *focusFlag)
 	}
@@ -99,7 +95,6 @@
 		gh := genHelper{
 			wuffsRoot:   wuffsRoot,
 			langs:       langs,
-			cformatter:  *cformatterFlag,
 			skipgen:     *skipgenFlag,
 			skipgendeps: *skipgendepsFlag,
 		}
diff --git a/doc/changelog.md b/doc/changelog.md
index da62589..92e63fd 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -3,9 +3,9 @@
 
 ## Work In Progress
 
-- Added `WUFFS_CONFIG__MODULE__BASE__ETC` sub-modules.
 - Added `WUFFS_BASE__PIXEL_BLEND__SRC_OVER`.
 - Added `WUFFS_BASE__PIXEL_FORMAT__BGR_565`.
+- Added `WUFFS_CONFIG__MODULE__BASE__ETC` sub-modules.
 - Added `base` library support for UTF-8.
 - Added `base` library support for `atoi`-like string conversion.
 - Added `endwhile` syntax.
@@ -30,6 +30,7 @@
 - Made `wuffs_base__pixel_format` a struct.
 - Made `wuffs_base__pixel_subsampling` a struct.
 - Made `wuffs_base__status` a struct.
+- Removed `-cformatter` flag.
 - Removed `ack_metadata_chunk?`.
 - Removed `wuffs_base__frame_config__blend`.
 - Renamed `decode_io_writer?` methods to `transform_io?`.
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index 0c51f32..07f6d61 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -17,16 +17,12 @@
 package cgen
 
 import (
-	"bytes"
 	"errors"
 	"flag"
 	"fmt"
 	"math/big"
-	"os"
-	"os/exec"
 	"sort"
 	"strings"
-	"time"
 
 	"github.com/google/wuffs/lang/builtin"
 	"github.com/google/wuffs/lang/generate"
@@ -114,19 +110,9 @@
 // The generated program is written to stdout.
 func Do(args []string) error {
 	flags := flag.FlagSet{}
-	cformatterFlag := flags.String("cformatter", cf.CformatterDefault, cf.CformatterUsage)
 	genlinenumFlag := flags.Bool("genlinenum", cf.GenlinenumDefault, cf.GenlinenumUsage)
 
 	return generate.Do(&flags, args, func(pkgName string, tm *t.Map, files []*a.File) ([]byte, error) {
-		// printTimings set true will print the time taken for the cformatter
-		// and other work.
-		const printTimings = false
-		now := time.Now()
-
-		if !cf.IsAlphaNumericIsh(*cformatterFlag) {
-			return nil, fmt.Errorf("bad -cformatter flag value %q", *cformatterFlag)
-		}
-
 		unformatted := []byte(nil)
 		if pkgName == "base" {
 			if len(files) != 0 {
@@ -189,35 +175,15 @@
 			}
 		}
 
-		if printTimings {
-			fmt.Fprintf(os.Stderr, "%8d milliseconds generating the C code\n",
-				time.Since(now).Milliseconds())
-			now = time.Now()
-		}
-
 		// The base package is largely hand-written C, not transpiled from
 		// Wuffs, and that part is presumably already formatted. The rest is
 		// generated by this package. We take care here to print well indented
-		// C code, so further C formatting is unnecessary (and not costless).
-		if (*cformatterFlag == "") || (pkgName == "base") {
+		// C code, so further C formatting is unnecessary.
+		if pkgName == "base" {
 			return unformatted, nil
-		} else if *cformatterFlag == "dumbindent" {
-			return dumbindent.Format(unformatted)
 		}
 
-		stdout := &bytes.Buffer{}
-		cmd := exec.Command(*cformatterFlag, "-style=Chromium")
-		cmd.Stdin = bytes.NewReader(unformatted)
-		cmd.Stdout = stdout
-		cmd.Stderr = os.Stderr
-		if err := cmd.Run(); err != nil {
-			return nil, err
-		}
-		if printTimings {
-			fmt.Fprintf(os.Stderr, "%8d milliseconds formatting the C code via %q\n",
-				time.Since(now).Milliseconds(), *cformatterFlag)
-		}
-		return stdout.Bytes(), nil
+		return dumbindent.Format(unformatted)
 	})
 }