(p *Process, isMethod bool)
| 119 | } |
| 120 | |
| 121 | func createProcess(p *Process, isMethod bool) { |
| 122 | GlobalFIDs.Register(p) // This also registers the variables process |
| 123 | p.CreationTime = time.Now() |
| 124 | |
| 125 | parseRedirection(p) |
| 126 | |
| 127 | name := p.Name.String() |
| 128 | |
| 129 | if name[0] == '!' { |
| 130 | p.IsNot = true |
| 131 | } |
| 132 | |
| 133 | p.IsMethod = isMethod |
| 134 | |
| 135 | // We do stderr first so we can log errors in the stdout pipe to stderr |
| 136 | switch p.NamedPipeErr { |
| 137 | case "": |
| 138 | p.NamedPipeErr = "err" |
| 139 | case "err": |
| 140 | //p.Stderr.Writeln([]byte("Invalid usage of named pipes: stderr defaults to <err>.")) |
| 141 | case "out": |
| 142 | p.Stderr = p.Next.Stdin |
| 143 | default: |
| 144 | pipe, err := GlobalPipes.Get(p.NamedPipeErr) |
| 145 | if err == nil { |
| 146 | p.Stderr = pipe |
| 147 | } else { |
| 148 | p.Stderr.Writeln([]byte("invalid usage of named pipes: " + err.Error())) |
| 149 | } |
| 150 | } |
| 151 | |
| 152 | // We do stdout last so we can log errors in the stdout pipe to stderr |
| 153 | switch p.NamedPipeOut { |
| 154 | case "": |
| 155 | p.NamedPipeOut = "out" |
| 156 | case "err": |
| 157 | p.Stdout.SetDataType(types.Generic) |
| 158 | p.Stdout = p.Next.Stderr |
| 159 | case "out": |
| 160 | //p.Stderr.Writeln([]byte("Invalid usage of named pipes: stdout defaults to <out>.")) |
| 161 | default: |
| 162 | pipe, err := GlobalPipes.Get(p.NamedPipeOut) |
| 163 | if err == nil { |
| 164 | p.stdoutOldPtr = p.Stdout |
| 165 | p.Stdout = pipe |
| 166 | } else { |
| 167 | p.Stderr.Writeln([]byte("invalid usage of named pipes: " + err.Error())) |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | // Test cases |
| 172 | if p.NamedPipeTest != "" { |
| 173 | var stdout2, stderr2 *streams.Stdin |
| 174 | p.Stdout, stdout2 = streams.NewTee(p.Stdout) |
| 175 | p.Stderr, stderr2 = streams.NewTee(p.Stderr) |
| 176 | err := p.Tests.SetStreams(p.NamedPipeTest, stdout2, stderr2, &p.ExitNum) |
| 177 | if err != nil { |
| 178 | p.Stderr.Writeln([]byte("invalid usage of named pipes: " + err.Error())) |
no test coverage detected