pkg/tool/file: allow OS-independent filenames

More or less. Absolute paths are still different.

Change-Id: I4198184bd323e7ab02feaa53560a29eff5fb306c
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2283
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/pkg/tool/file/file.go b/pkg/tool/file/file.go
index 29bf6d9..b64a64d 100644
--- a/pkg/tool/file/file.go
+++ b/pkg/tool/file/file.go
@@ -64,6 +64,7 @@
 
 func (c *cmdAppend) Run(ctx *task.Context, v cue.Value) (res interface{}, err error) {
 	filename := lookupStr(v, "filename")
+	filename = filepath.FromSlash(filename)
 	mode, err := v.Lookup("permissions").Int64()
 	if err != nil {
 		return nil, err
@@ -84,6 +85,7 @@
 
 func (c *cmdCreate) Run(ctx *task.Context, v cue.Value) (res interface{}, err error) {
 	filename := lookupStr(v, "filename")
+	filename = filepath.FromSlash(filename)
 	mode, err := v.Lookup("permissions").Int64()
 	if err != nil {
 		return nil, err
@@ -94,6 +96,10 @@
 }
 
 func (c *cmdGlob) Run(ctx *task.Context, v cue.Value) (res interface{}, err error) {
-	m, err := filepath.Glob(lookupStr(v, "glob"))
+	glob := filepath.FromSlash(lookupStr(v, "glob"))
+	m, err := filepath.Glob(glob)
+	for i, s := range m {
+		m[i] = filepath.ToSlash(s)
+	}
 	return m, err
 }