package util
import (
"github.com/hwittenborn/husk/ctypes"
"strings"
"unsafe"
"runtime/cgo"
shSyntax "mvdan.cc/sh/v3/syntax"
)
func HuskError(errorString string, huskDefined bool) *ctypes.Char {
var huskErrorString string
if huskDefined {
huskErrorString = "husk-err:"
} else {
huskErrorString = "err:"
}
huskErrorString += errorString
return ctypes.CString(huskErrorString)
}
func BuildStringArray(stringArray **ctypes.Char, stringArraySize ctypes.Int) []string {
var goCStringArray []*ctypes.Char = unsafe.Slice(stringArray, stringArraySize)
var goStringArray []string
for _, item := range goCStringArray {
goStringArray = append(goStringArray, ctypes.GoString(item))
}
return goStringArray
}
func EnvListToEnvMap(envList []string) map[string]string {
envMap := make(map[string]string)
for _, keyValue := range envList {
parts := strings.Split(keyValue, "=")
key := parts[0]
value := strings.Join(parts[1:], "=")
envMap[key] = value
}
return envMap
}
func HuskDeleteGoItem(ptr ctypes.UintptrT) {
handle := cgo.Handle(ptr)
handle.Delete()
}
func HuskGetCStringFromArray(goArray ctypes.UintptrT, itemPosition ctypes.Int) (cString *ctypes.Char) {
arrayHandle := cgo.Handle(goArray)
array := arrayHandle.Value().([]string)
goItemPosition := int(itemPosition)
if !(goItemPosition > (len(array) - 1)) {
cString = ctypes.CString(array[goItemPosition])
}
return
}
func GetLangVariant(langVariantInt ctypes.Int) shSyntax.LangVariant {
var langVariant shSyntax.LangVariant
switch langVariant {
case 0:
langVariant = shSyntax.LangBash
case 1:
langVariant = shSyntax.LangPOSIX
case 2:
langVariant = shSyntax.LangMirBSDKorn
case 3:
langVariant = shSyntax.LangBats
case 4:
langVariant = shSyntax.LangAuto
default:
panic("Invalid language variant supplied: " + string(langVariant))
}
return langVariant
}