summaryrefslogtreecommitdiff
path: root/cc/compdb.go
diff options
context:
space:
mode:
author Tamir Duberstein <tamird@gmail.com> 2024-08-09 08:50:57 -0700
committer Tamir Duberstein <tamird@gmail.com> 2024-08-09 08:52:26 -0700
commitcc5ce659fc69c2483d1621be14b7c0968c863579 (patch)
tree46c8eb4db846f64deb293aa9080b15f1fef713f3 /cc/compdb.go
parentc8b6feba4c21e079a833a5781a0c22a7d75b5011 (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.go19
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)