Quote glob exclude options
Put quotes around the glob exclude options to avoid accidentally
expanding globs during execution.
Change-Id: Ia6fc7fa7dbe1d75e97d6039642e1c89be027689a
diff --git a/common/glob.go b/common/glob.go
index 7bb623d..f4e083a 100644
--- a/common/glob.go
+++ b/common/glob.go
@@ -17,7 +17,6 @@
import (
"fmt"
"path/filepath"
- "strings"
"github.com/google/blueprint"
"github.com/google/blueprint/bootstrap"
@@ -113,10 +112,6 @@
func GlobRule(ctx AndroidModuleContext, globPattern string, excludes []string,
fileListFile, depFile string) {
- var excludeArgs []string
- for _, e := range excludes {
- excludeArgs = append(excludeArgs, "-e "+e)
- }
// Create a rule to rebuild fileListFile if a directory in depFile changes. fileListFile
// will only be rewritten if it has changed, preventing unnecesary build.ninja regenerations.
@@ -126,7 +121,7 @@
Implicits: []string{globCmd},
Args: map[string]string{
"glob": globPattern,
- "excludes": strings.Join(excludeArgs, " "),
+ "excludes": JoinWithPrefixAndQuote(excludes, "-e "),
},
})
diff --git a/common/util.go b/common/util.go
index 190e092..599b3b1 100644
--- a/common/util.go
+++ b/common/util.go
@@ -38,3 +38,30 @@
}
return string(ret)
}
+
+func JoinWithPrefixAndQuote(strs []string, prefix string) string {
+ if len(strs) == 0 {
+ return ""
+ }
+
+ if len(strs) == 1 {
+ return prefix + `"` + strs[0] + `"`
+ }
+
+ n := len(" ") * (len(strs) - 1)
+ for _, s := range strs {
+ n += len(prefix) + len(s) + len(`""`)
+ }
+
+ ret := make([]byte, 0, n)
+ for i, s := range strs {
+ if i != 0 {
+ ret = append(ret, ' ')
+ }
+ ret = append(ret, prefix...)
+ ret = append(ret, '"')
+ ret = append(ret, s...)
+ ret = append(ret, '"')
+ }
+ return string(ret)
+}