@@ -9,19 +9,24 @@ import (
99)
1010
1111const (
12- StdWriterPrefixLen = 8
13- StdWriterFdIndex = 0
14- StdWriterSizeIndex = 4
12+ stdWriterPrefixLen = 8
13+ stdWriterFdIndex = 0
14+ stdWriterSizeIndex = 4
1515)
1616
17- type StdType [StdWriterPrefixLen ]byte
17+ // StdType prefixes type and length to standard stream.
18+ type StdType [stdWriterPrefixLen ]byte
1819
1920var (
20- Stdin StdType = StdType {0 : 0 }
21- Stdout StdType = StdType {0 : 1 }
22- Stderr StdType = StdType {0 : 2 }
21+ // Stdin represents standard input stream type.
22+ Stdin = StdType {0 : 0 }
23+ // Stdout represents standard output stream type.
24+ Stdout = StdType {0 : 1 }
25+ // Stderr represents standard error steam type.
26+ Stderr = StdType {0 : 2 }
2327)
2428
29+ // StdWriter is wrapper of io.Writer with extra customized info.
2530type StdWriter struct {
2631 io.Writer
2732 prefix StdType
@@ -36,10 +41,10 @@ func (w *StdWriter) Write(buf []byte) (n int, err error) {
3641 binary .BigEndian .PutUint32 (w .prefix [4 :], uint32 (len (buf )))
3742 n1 , err = w .Writer .Write (w .prefix [:])
3843 if err != nil {
39- n = n1 - StdWriterPrefixLen
44+ n = n1 - stdWriterPrefixLen
4045 } else {
4146 n2 , err = w .Writer .Write (buf )
42- n = n1 + n2 - StdWriterPrefixLen
47+ n = n1 + n2 - stdWriterPrefixLen
4348 }
4449 if n < 0 {
4550 n = 0
@@ -61,7 +66,7 @@ func NewStdWriter(w io.Writer, t StdType) *StdWriter {
6166 }
6267}
6368
64- var ErrInvalidStdHeader = errors .New ("Unrecognized input header" )
69+ var errInvalidStdHeader = errors .New ("Unrecognized input header" )
6570
6671// StdCopy is a modified version of io.Copy.
6772//
@@ -75,7 +80,7 @@ var ErrInvalidStdHeader = errors.New("Unrecognized input header")
7580// `written` will hold the total number of bytes written to `dstout` and `dsterr`.
7681func StdCopy (dstout , dsterr io.Writer , src io.Reader ) (written int64 , err error ) {
7782 var (
78- buf = make ([]byte , 32 * 1024 + StdWriterPrefixLen + 1 )
83+ buf = make ([]byte , 32 * 1024 + stdWriterPrefixLen + 1 )
7984 bufLen = len (buf )
8085 nr , nw int
8186 er , ew error
@@ -85,12 +90,12 @@ func StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, err error)
8590
8691 for {
8792 // Make sure we have at least a full header
88- for nr < StdWriterPrefixLen {
93+ for nr < stdWriterPrefixLen {
8994 var nr2 int
9095 nr2 , er = src .Read (buf [nr :])
9196 nr += nr2
9297 if er == io .EOF {
93- if nr < StdWriterPrefixLen {
98+ if nr < stdWriterPrefixLen {
9499 logrus .Debugf ("Corrupted prefix: %v" , buf [:nr ])
95100 return written , nil
96101 }
@@ -103,7 +108,7 @@ func StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, err error)
103108 }
104109
105110 // Check the first byte to know where to write
106- switch buf [StdWriterFdIndex ] {
111+ switch buf [stdWriterFdIndex ] {
107112 case 0 :
108113 fallthrough
109114 case 1 :
@@ -113,30 +118,30 @@ func StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, err error)
113118 // Write on stderr
114119 out = dsterr
115120 default :
116- logrus .Debugf ("Error selecting output fd: (%d)" , buf [StdWriterFdIndex ])
117- return 0 , ErrInvalidStdHeader
121+ logrus .Debugf ("Error selecting output fd: (%d)" , buf [stdWriterFdIndex ])
122+ return 0 , errInvalidStdHeader
118123 }
119124
120125 // Retrieve the size of the frame
121- frameSize = int (binary .BigEndian .Uint32 (buf [StdWriterSizeIndex : StdWriterSizeIndex + 4 ]))
126+ frameSize = int (binary .BigEndian .Uint32 (buf [stdWriterSizeIndex : stdWriterSizeIndex + 4 ]))
122127 logrus .Debugf ("framesize: %d" , frameSize )
123128
124129 // Check if the buffer is big enough to read the frame.
125130 // Extend it if necessary.
126- if frameSize + StdWriterPrefixLen > bufLen {
127- logrus .Debugf ("Extending buffer cap by %d (was %d)" , frameSize + StdWriterPrefixLen - bufLen + 1 , len (buf ))
128- buf = append (buf , make ([]byte , frameSize + StdWriterPrefixLen - bufLen + 1 )... )
131+ if frameSize + stdWriterPrefixLen > bufLen {
132+ logrus .Debugf ("Extending buffer cap by %d (was %d)" , frameSize + stdWriterPrefixLen - bufLen + 1 , len (buf ))
133+ buf = append (buf , make ([]byte , frameSize + stdWriterPrefixLen - bufLen + 1 )... )
129134 bufLen = len (buf )
130135 }
131136
132137 // While the amount of bytes read is less than the size of the frame + header, we keep reading
133- for nr < frameSize + StdWriterPrefixLen {
138+ for nr < frameSize + stdWriterPrefixLen {
134139 var nr2 int
135140 nr2 , er = src .Read (buf [nr :])
136141 nr += nr2
137142 if er == io .EOF {
138- if nr < frameSize + StdWriterPrefixLen {
139- logrus .Debugf ("Corrupted frame: %v" , buf [StdWriterPrefixLen :nr ])
143+ if nr < frameSize + stdWriterPrefixLen {
144+ logrus .Debugf ("Corrupted frame: %v" , buf [stdWriterPrefixLen :nr ])
140145 return written , nil
141146 }
142147 break
@@ -148,7 +153,7 @@ func StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, err error)
148153 }
149154
150155 // Write the retrieved frame (without header)
151- nw , ew = out .Write (buf [StdWriterPrefixLen : frameSize + StdWriterPrefixLen ])
156+ nw , ew = out .Write (buf [stdWriterPrefixLen : frameSize + stdWriterPrefixLen ])
152157 if ew != nil {
153158 logrus .Debugf ("Error writing frame: %s" , ew )
154159 return 0 , ew
@@ -161,8 +166,8 @@ func StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, err error)
161166 written += int64 (nw )
162167
163168 // Move the rest of the buffer to the beginning
164- copy (buf , buf [frameSize + StdWriterPrefixLen :])
169+ copy (buf , buf [frameSize + stdWriterPrefixLen :])
165170 // Move the index
166- nr -= frameSize + StdWriterPrefixLen
171+ nr -= frameSize + stdWriterPrefixLen
167172 }
168173}
0 commit comments