MCPcopy
hub / github.com/lmorg/murex / createProcess

Function createProcess

lang/process.go:121–216  ·  view source on GitHub ↗
(p *Process, isMethod bool)

Source from the content-addressed store, hash-verified

119}
120
121func 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()))

Callers 1

compileFunction · 0.85

Calls 15

NewTeeFunction · 0.92
parseRedirectionFunction · 0.85
writeErrorFunction · 0.85
RegisterMethod · 0.80
SetStreamsMethod · 0.80
DefineParsedMethod · 0.80
SetTerminatedStateMethod · 0.80
ttysFunction · 0.70
StringMethod · 0.65
WritelnMethod · 0.65
ErrorMethod · 0.65
SetDataTypeMethod · 0.65

Tested by

no test coverage detected