summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chomp.go73
-rw-r--r--shell.go6
2 files changed, 76 insertions, 3 deletions
diff --git a/chomp.go b/chomp.go
new file mode 100644
index 0000000..b452ff2
--- /dev/null
+++ b/chomp.go
@@ -0,0 +1,73 @@
+package shell
+
+/*
+ perl 'chomp'
+
+ send it anything, always get back a string
+*/
+
+import "log"
+import "reflect"
+import "strings"
+import "bytes"
+
+// import "github.com/davecgh/go-spew/spew"
+
+func chompBytesBuffer(buf *bytes.Buffer) string {
+ var bytesSplice []byte
+ bytesSplice = buf.Bytes()
+
+ return Chomp(string(bytesSplice))
+}
+
+//
+// TODO: obviously this is stupidly wrong
+// TODO: fix this to trim fucking everything
+// really world? 8 fucking years of this language
+// and I'm fucking writing this? jesus. how the
+// hell is everyone else doing this? Why isn't
+// this already in the strings package?
+//
+func perlChomp(s string) string {
+ // lots of stuff in go moves around the whole block of whatever it is so lots of things are padded with NULL values
+ s = strings.Trim(s, "\x00") // removes NULL (needed!)
+
+ // TODO: christ. make some fucking regex that takes out every NULL, \t, ' ", \n, and \r
+ s = strings.Trim(s, "\n")
+ s = strings.Trim(s, "\n")
+ s = strings.TrimSuffix(s, "\r")
+ s = strings.TrimSuffix(s, "\n")
+
+ s = strings.TrimSpace(s) // this is like 'chomp' in perl
+ s = strings.TrimSuffix(s, "\n") // this is like 'chomp' in perl
+ return s
+}
+
+// TODO: fix this to chomp \n \r NULL \t and ' '
+func Chomp(a interface{}) string {
+ // switch reflect.TypeOf(a) {
+ switch t := a.(type) {
+ case string:
+ var s string
+ s = a.(string)
+ return perlChomp(s)
+ case []uint8:
+ log.Printf("shell.Chomp() FOUND []uint8")
+ var u8s []uint8
+ u8s = a.([]uint8)
+
+ s := string(u8s)
+ return perlChomp(s)
+ case *bytes.Buffer:
+ log.Printf("shell.Chomp() FOUND *bytes.Buffer")
+ var tmp *bytes.Buffer
+ tmp = a.(*bytes.Buffer)
+
+ var bytesSplice []byte
+ bytesSplice = tmp.Bytes()
+ return Chomp(string(bytesSplice))
+ default:
+ log.Printf("shell.Chomp() NEED TO MAKE CONVERTER FOR type =", reflect.TypeOf(t))
+ }
+ return ""
+}
diff --git a/shell.go b/shell.go
index aaad099..ddc9a1f 100644
--- a/shell.go
+++ b/shell.go
@@ -44,7 +44,7 @@ func Script(cmds string) int {
lines := strings.Split(strings.Replace(cmds, "\r\n", "\n", -1), "\n")
for _, line := range lines {
- line = strings.TrimSpace(line) // this is like 'chomp' in perl
+ line = Chomp(line) // this is like 'chomp' in perl
log.Println("LINE:", line)
time.Sleep(1)
Run(line)
@@ -79,7 +79,7 @@ func SetStderr(newerr *os.File) {
func Run(cmdline string) string {
log.Println("shell.Run() START " + cmdline)
- cmd := strings.TrimSpace(cmdline) // this is like 'chomp' in perl
+ cmd := Chomp(cmdline) // this is like 'chomp' in perl
cmdArgs := strings.Fields(cmd)
if (len(cmdArgs) == 0) {
callback(fmt.Errorf("cmdline == ''"), 0)
@@ -191,7 +191,7 @@ func Run(cmdline string) string {
log.Println("shell.Run() END ", cmdline)
log.Println("shell.Run() calling callback() :")
callback(fmt.Errorf("no error"), 0)
- return string(b)
+ return Chomp(b)
}
func Daemon(cmdline string, timeout time.Duration) int {