summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-12-16 15:27:48 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-12-16 15:27:48 +0300
commit6fed9dd0dd62718f78eca11e30a71c2712636fbd (patch)
tree8d1f90b96efbe8ea8aea350c283325adc216ef9d /cmd
parent050ea053dd549f0dd01beddfcd74989858391fd7 (diff)
hook and socket args check fix, tests
Diffstat (limited to 'cmd')
-rw-r--r--cmd/tunneld/main.go37
1 files changed, 32 insertions, 5 deletions
diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go
index 8f9606a..71af6d4 100644
--- a/cmd/tunneld/main.go
+++ b/cmd/tunneld/main.go
@@ -128,14 +128,41 @@ func (p *parser) parse(file string, skip bool) error {
func (p *parser) read(fp *os.File) error {
scanner := bufio.NewScanner(fp)
- for nline := 1; scanner.Scan(); nline++ {
- s := strings.SplitN(scanner.Text(), "#", 2)
- t := strings.TrimSpace(s[0])
- args := strings.Fields(s[0])
+ var args []string
+ var line int
+ for n := 1; scanner.Scan(); n++ {
+ if line == 0 {
+ line = n
+ }
+
+ parts := strings.SplitN(scanner.Text(), "#", 2)
+ s := parts[0]
+
+ readahead := false
+
+ if len(parts) == 1 && strings.HasSuffix(s, "\\") {
+ s = s[:len(s)-1]
+ readahead = true
+ }
+
+ args = append(args, strings.Fields(s)...)
+
+ if readahead {
+ continue
+ }
+
+ t := strings.Join(args, " ")
if err := p.apply(args); err != nil {
- return fmt.Errorf("%s:%d: %s: %w", fp.Name(), nline, t, err)
+ return fmt.Errorf("%s:%d: %s: %w", fp.Name(), line, t, err)
}
+
+ args = []string{}
+ line = 0
+ }
+
+ if len(args) > 0 {
+ fmt.Errorf("%s:%d: uncomplete command", fp.Name(), line)
}
return nil