diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-12-16 15:27:48 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-12-16 15:27:48 +0300 |
| commit | 6fed9dd0dd62718f78eca11e30a71c2712636fbd (patch) | |
| tree | 8d1f90b96efbe8ea8aea350c283325adc216ef9d /cmd/tunneld/main.go | |
| parent | 050ea053dd549f0dd01beddfcd74989858391fd7 (diff) | |
hook and socket args check fix, tests
Diffstat (limited to 'cmd/tunneld/main.go')
| -rw-r--r-- | cmd/tunneld/main.go | 37 |
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 |
