Quote glob exclude options

Put quotes around the glob exclude options to avoid accidentally
expanding globs during execution.

Change-Id: Ia6fc7fa7dbe1d75e97d6039642e1c89be027689a
This commit is contained in:
Colin Cross
2015-04-10 15:47:33 -07:00
parent 24679676ca
commit 9b6826f7cf
2 changed files with 28 additions and 6 deletions

View File

@@ -17,7 +17,6 @@ package common
import (
"fmt"
"path/filepath"
"strings"
"github.com/google/blueprint"
"github.com/google/blueprint/bootstrap"
@@ -113,10 +112,6 @@ func Glob(ctx AndroidModuleContext, globPattern string, excludes []string) []str
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 @@ func GlobRule(ctx AndroidModuleContext, globPattern string, excludes []string,
Implicits: []string{globCmd},
Args: map[string]string{
"glob": globPattern,
"excludes": strings.Join(excludeArgs, " "),
"excludes": JoinWithPrefixAndQuote(excludes, "-e "),
},
})

View File

@@ -38,3 +38,30 @@ func JoinWithPrefix(strs []string, prefix string) string {
}
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)
}