Generate appropriate IO functions for Android
diff --git a/func.go b/func.go
index bf1dafa..982b615 100644
--- a/func.go
+++ b/func.go
@@ -424,12 +424,15 @@
func (f *funcWildcard) Arity() int { return 1 }
func (f *funcWildcard) Eval(w io.Writer, ev *Evaluator) {
assertArity("wildcard", 1, len(f.args))
- if ev.avoidIO {
- ev.hasIO = true
- return
- }
abuf := newBuf()
f.args[1].Eval(abuf, ev)
+ if ev.avoidIO {
+ ev.hasIO = true
+ w.Write([]byte("$(/bin/ls "))
+ w.Write(abuf.Bytes())
+ w.Write([]byte(" 2> /dev/null)"))
+ return
+ }
ws := newWordScanner(abuf.Bytes())
sw := ssvWriter{w: w}
for ws.Scan() {
@@ -449,10 +452,6 @@
func (f *funcDir) Arity() int { return 1 }
func (f *funcDir) Eval(w io.Writer, ev *Evaluator) {
assertArity("dir", 1, len(f.args))
- if ev.avoidIO {
- ev.hasIO = true
- return
- }
abuf := newBuf()
f.args[1].Eval(abuf, ev)
ws := newWordScanner(abuf.Bytes())
@@ -473,10 +472,6 @@
func (f *funcNotdir) Arity() int { return 1 }
func (f *funcNotdir) Eval(w io.Writer, ev *Evaluator) {
assertArity("notdir", 1, len(f.args))
- if ev.avoidIO {
- ev.hasIO = true
- return
- }
abuf := newBuf()
f.args[1].Eval(abuf, ev)
ws := newWordScanner(abuf.Bytes())
@@ -570,6 +565,7 @@
func (f *funcRealpath) Eval(w io.Writer, ev *Evaluator) {
assertArity("realpath", 1, len(f.args))
if ev.avoidIO {
+ w.Write([]byte("KATI_TODO(realpath)"))
ev.hasIO = true
return
}
@@ -599,10 +595,6 @@
func (f *funcAbspath) Arity() int { return 1 }
func (f *funcAbspath) Eval(w io.Writer, ev *Evaluator) {
assertArity("abspath", 1, len(f.args))
- if ev.avoidIO {
- ev.hasIO = true
- return
- }
abuf := newBuf()
f.args[1].Eval(abuf, ev)
ws := newWordScanner(abuf.Bytes())
@@ -686,12 +678,15 @@
func (f *funcShell) Eval(w io.Writer, ev *Evaluator) {
assertArity("shell", 1, len(f.args))
- if ev.avoidIO {
- ev.hasIO = true
- return
- }
abuf := newBuf()
f.args[1].Eval(abuf, ev)
+ if ev.avoidIO {
+ ev.hasIO = true
+ w.Write([]byte("$("))
+ w.Write(abuf.Bytes())
+ w.Write([]byte{')'})
+ return
+ }
arg := abuf.String()
freeBuf(abuf)
shellVar := ev.LookupVar("SHELL")
@@ -985,6 +980,7 @@
func (f *funcInfo) Eval(w io.Writer, ev *Evaluator) {
assertArity("info", 1, len(f.args))
if ev.avoidIO {
+ w.Write([]byte("KATI_TODO(info)"))
ev.hasIO = true
return
}
@@ -1000,6 +996,7 @@
func (f *funcWarning) Eval(w io.Writer, ev *Evaluator) {
assertArity("warning", 1, len(f.args))
if ev.avoidIO {
+ w.Write([]byte("KATI_TODO(warning)"))
ev.hasIO = true
return
}
@@ -1015,6 +1012,7 @@
func (f *funcError) Eval(w io.Writer, ev *Evaluator) {
assertArity("error", 1, len(f.args))
if ev.avoidIO {
+ w.Write([]byte("KATI_TODO(error)"))
ev.hasIO = true
return
}