From acf00bc5f8255910eb33181a430d244526e1de84 Mon Sep 17 00:00:00 2001 From: robogg133 Date: Fri, 31 Oct 2025 21:31:12 -0300 Subject: [PATCH] added lua functions from old version of packets --- internal/lua/luafunctions.go | 120 +++++++++++++++++++++++++++++++++++ internal/lua/utils.go | 95 +++++++++++++++++++++++++++ 2 files changed, 215 insertions(+) create mode 100644 internal/lua/luafunctions.go create mode 100644 internal/lua/utils.go diff --git a/internal/lua/luafunctions.go b/internal/lua/luafunctions.go new file mode 100644 index 0000000..8d6a421 --- /dev/null +++ b/internal/lua/luafunctions.go @@ -0,0 +1,120 @@ +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) } diff --git a/internal/lua/utils.go b/internal/lua/utils.go new file mode 100644 index 0000000..6907999 --- /dev/null +++ b/internal/lua/utils.go @@ -0,0 +1,95 @@ +package lua + +import ( + "io" + "os" + "path/filepath" +) + +func copyDir(src string, dest string) error { + if stats, err := os.Stat(src); err != nil { + return err + } else { + if stats.IsDir() { + files, err := os.ReadDir(src) + if err != nil { + return err + } + + if err := os.MkdirAll(dest, 0o755); err != nil { + return err + } + + for _, file := range files { + if file.IsDir() { + copyDir(filepath.Join(src, file.Name()), filepath.Join(dest, file.Name())) + continue + } + srcFile := filepath.Join(src, file.Name()) + + f, err := os.Create(filepath.Join(dest, file.Name())) + if err != nil { + return err + } + defer f.Close() + + opennedSrcFile, err := os.Open(srcFile) + if err != nil { + return err + } + defer opennedSrcFile.Close() + if _, err := io.Copy(f, opennedSrcFile); err != nil { + return err + } + + } + } else { + if err := copyFile(src, dest); err != nil { + return err + } + } + } + return nil +} + +func copyFile(source string, destination string) error { + src, err := os.Open(source) + if err != nil { + return err + } + defer src.Close() + + status, err := src.Stat() + if err != nil { + return err + } + + err = os.MkdirAll(filepath.Dir(destination), 0o755) + if err != nil { + return err + } + + dst, err := os.Create(destination) + if err != nil { + if !os.IsExist(err) { + dst, err = os.Open(destination) + if err != nil { + return err + } + } else { + return err + } + } + + defer dst.Close() + if err := dst.Chmod(status.Mode()); err != nil { + return err + } + + _, err = io.Copy(dst, src) + if err != nil { + return err + } + + return nil +}