(p []byte)
| 125 | } |
| 126 | |
| 127 | func (cw *logChanWriter) Write(p []byte) (n int, err error) { |
| 128 | // Both cmd.Stdout and cmd.Stderr are writing to cw |
| 129 | cw.m.Lock() |
| 130 | defer cw.m.Unlock() |
| 131 | |
| 132 | n, err = cw.buf.Write(p) |
| 133 | if err != nil { |
| 134 | return n, err |
| 135 | } |
| 136 | for { |
| 137 | line, err := cw.buf.ReadString('\n') |
| 138 | cw.prev = cw.prev + line |
| 139 | // ReadString returns err != nil if and only if the returned Data |
| 140 | // does not end in delim. |
| 141 | if err != nil { |
| 142 | break |
| 143 | } |
| 144 | if err := cw.wr.Write(cw.prev); err != nil { |
| 145 | return len(cw.prev), err |
| 146 | } |
| 147 | cw.prev = "" |
| 148 | } |
| 149 | return n, nil |
| 150 | } |
| 151 | |
| 152 | func (cw *logChanWriter) Close() { |
| 153 | if len(cw.prev) > 0 { |
no outgoing calls