diff options
author | 2024-08-09 08:50:57 -0700 | |
---|---|---|
committer | 2024-08-09 08:52:26 -0700 | |
commit | cc5ce659fc69c2483d1621be14b7c0968c863579 (patch) | |
tree | 46c8eb4db846f64deb293aa9080b15f1fef713f3 /cc/compdb.go | |
parent | c8b6feba4c21e079a833a5781a0c22a7d75b5011 (diff) |
Encode directly into file
This avoids allocating an intermediate buffer in memory *and* avoids an
unchecked error on `(*File).Write` which can mask partial writes.
Check error on `(*File).Close` while I'm here.
Change-Id: I9f7c70f1eb267155c080e44c50a99bdca62dea05
Diffstat (limited to 'cc/compdb.go')
-rw-r--r-- | cc/compdb.go | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/cc/compdb.go b/cc/compdb.go index da2818324..b33f490f7 100644 --- a/cc/compdb.go +++ b/cc/compdb.go @@ -85,23 +85,24 @@ func (c *compdbGeneratorSingleton) GenerateBuildActions(ctx android.SingletonCon if err != nil { log.Fatalf("Could not create file %s: %s", compDBFile, err) } - defer f.Close() + defer func() { + if err := f.Close(); err != nil { + log.Fatalf("Could not close file %s: %s", compDBFile, err) + } + }() v := make([]compDbEntry, 0, len(m)) - for _, value := range m { v = append(v, value) } - var dat []byte + + w := json.NewEncoder(f) if outputCompdbDebugInfo { - dat, err = json.MarshalIndent(v, "", " ") - } else { - dat, err = json.Marshal(v) + w.SetIndent("", " ") } - if err != nil { - log.Fatalf("Failed to marshal: %s", err) + if err := w.Encode(v); err != nil { + log.Fatalf("Failed to encode: %s", err) } - f.Write(dat) if finalLinkDir := ctx.Config().Getenv(envVariableCompdbLink); finalLinkDir != "" { finalLinkPath := filepath.Join(finalLinkDir, compdbFilename) |