package shell
import (
"runtime/cgo"
"github.com/hwittenborn/husk/ctypes"
"github.com/hwittenborn/husk/util"
"mvdan.cc/sh/v3/shell"
)
func Expand(shellString *ctypes.Char, envVarsArray **ctypes.Char, envVarsArrayLength ctypes.Int) (outputString *ctypes.Char, isError bool) {
goShellString := ctypes.GoString(shellString)
goEnvVars := util.BuildStringArray(envVarsArray, envVarsArrayLength)
goEnvMap := util.EnvListToEnvMap(goEnvVars)
goQuotedString, err := shell.Expand(goShellString, func(envVar string) string {
return goEnvMap[envVar]
})
if err != nil {
outputString = util.HuskError(err.Error(), false)
isError = true
} else {
outputString = ctypes.CString(goQuotedString)
isError = false
}
return
}
func Fields(shellString *ctypes.Char, envVarsArray **ctypes.Char, envVarsArrayLength ctypes.Int) (goArray ctypes.UintptrT, errorString *ctypes.Char) {
goShellString := ctypes.GoString(shellString)
goEnvVars := util.BuildStringArray(envVarsArray, envVarsArrayLength)
goEnvMap := util.EnvListToEnvMap(goEnvVars)
goStrings, err := shell.Fields(goShellString, func(envVar string) string {
return goEnvMap[envVar]
})
if err != nil {
errorString = ctypes.CString(err.Error())
} else {
goArray = ctypes.UintptrT(cgo.NewHandle(goStrings))
}
return
}