121 lines
2.0 KiB
Go
121 lines
2.0 KiB
Go
package lua
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
lua "github.com/yuin/gopher-lua"
|
|
)
|
|
|
|
func LRemove(L *lua.LState) int {
|
|
filename := L.CheckString(1)
|
|
|
|
err := os.RemoveAll(filename)
|
|
if err != nil {
|
|
L.Push(lua.LFalse)
|
|
L.Push(lua.LString(err.Error()))
|
|
return 2
|
|
}
|
|
L.Push(lua.LTrue)
|
|
L.Push(lua.LNil)
|
|
return 2
|
|
}
|
|
|
|
func LRename(L *lua.LState) int {
|
|
oldname := L.CheckString(1)
|
|
newname := L.CheckString(2)
|
|
|
|
if err := os.Rename(oldname, newname); err != nil {
|
|
L.Push(lua.LFalse)
|
|
L.Push(lua.LString(err.Error()))
|
|
return 2
|
|
}
|
|
|
|
L.Push(lua.LTrue)
|
|
return 1
|
|
}
|
|
func LCopy(L *lua.LState) int {
|
|
oldname := L.CheckString(1)
|
|
newname := L.CheckString(2)
|
|
|
|
if err := copyDir(oldname, newname); err != nil {
|
|
L.Push(lua.LFalse)
|
|
L.Push(lua.LString(err.Error()))
|
|
return 2
|
|
}
|
|
|
|
L.Push(lua.LTrue)
|
|
L.Push(lua.LNil)
|
|
return 2
|
|
|
|
}
|
|
|
|
func LSymlink(L *lua.LState) int {
|
|
fileName := L.CheckString(1)
|
|
destination := L.CheckString(2)
|
|
|
|
_ = os.RemoveAll(destination)
|
|
if err := os.Symlink(fileName, destination); err != nil {
|
|
L.Push(lua.LFalse)
|
|
L.Push(lua.LString(err.Error()))
|
|
return 2
|
|
}
|
|
|
|
L.Push(lua.LTrue)
|
|
L.Push(lua.LNil)
|
|
return 2
|
|
}
|
|
|
|
func Ljoin(L *lua.LState) int {
|
|
|
|
n := L.GetTop()
|
|
parts := make([]string, 0, n)
|
|
|
|
for i := 1; i <= n; i++ {
|
|
val := L.Get(i)
|
|
parts = append(parts, val.String())
|
|
}
|
|
|
|
result := filepath.Join(parts...)
|
|
L.Push(lua.LString(result))
|
|
return 1
|
|
}
|
|
|
|
func LMkdir(L *lua.LState) int {
|
|
path := L.CheckString(1)
|
|
perm := L.CheckInt(2)
|
|
|
|
if err := os.MkdirAll(path, os.FileMode(perm)); err != nil {
|
|
L.Push(lua.LFalse)
|
|
L.Push(lua.LString(err.Error()))
|
|
return 2
|
|
}
|
|
|
|
L.Push(lua.LTrue)
|
|
L.Push(lua.LNil)
|
|
return 2
|
|
}
|
|
|
|
func LError(L *lua.LState) int {
|
|
n := L.GetTop()
|
|
parts := make([]any, 0, n)
|
|
|
|
for i := 1; i <= n; i++ {
|
|
val := L.Get(i)
|
|
parts = append(parts, val.String())
|
|
}
|
|
|
|
llogger().Panic(parts...)
|
|
return 0
|
|
}
|
|
|
|
func LSetEnv(L *lua.LState) int {
|
|
env := L.CheckString(1)
|
|
value := L.CheckString(2)
|
|
os.Setenv(env, value)
|
|
return 0
|
|
}
|
|
|
|
func llogger() *log.Logger { return log.New(os.Stderr, "script error: ", 0) }
|