@@ -19,7 +19,8 @@ import (
19
19
// A Writer provides methods for writing data to a TRAP file
20
20
type Writer struct {
21
21
zip * gzip.Writer
22
- w * bufio.Writer
22
+ wzip * bufio.Writer
23
+ wfile * bufio.Writer
23
24
file * os.File
24
25
Labeler * Labeler
25
26
path string
@@ -54,11 +55,13 @@ func NewWriter(path string, pkg *packages.Package) (*Writer, error) {
54
55
if err != nil {
55
56
return nil , err
56
57
}
57
- bufioWriter := bufio .NewWriter (tmpFile )
58
- zipWriter := gzip .NewWriter (bufioWriter )
58
+ bufioFileWriter := bufio .NewWriter (tmpFile )
59
+ zipWriter := gzip .NewWriter (bufioFileWriter )
60
+ bufioZipWriter := bufio .NewWriter (zipWriter )
59
61
tw := & Writer {
60
62
zipWriter ,
61
- bufioWriter ,
63
+ bufioZipWriter ,
64
+ bufioFileWriter ,
62
65
tmpFile ,
63
66
nil ,
64
67
path ,
@@ -88,13 +91,19 @@ func trapFolder() (string, error) {
88
91
89
92
// Close the underlying file writer
90
93
func (tw * Writer ) Close () error {
91
- err := tw .zip .Close ()
94
+ err := tw .wzip .Flush ()
95
+ if err != nil {
96
+ // throw away file close error
97
+ tw .file .Close ()
98
+ return err
99
+ }
100
+ err = tw .zip .Close ()
92
101
if err != nil {
93
102
// return zip-close error, but ignore file-close error
94
103
tw .file .Close ()
95
104
return err
96
105
}
97
- err = tw .w .Flush ()
106
+ err = tw .wfile .Flush ()
98
107
if err != nil {
99
108
// throw away close error because write errors are likely to be more important
100
109
tw .file .Close ()
@@ -145,24 +154,24 @@ func capStringLength(s string) string {
145
154
146
155
// Emit writes out a tuple of values for the given `table`
147
156
func (tw * Writer ) Emit (table string , values []interface {}) error {
148
- fmt .Fprintf (tw .zip , "%s(" , table )
157
+ fmt .Fprintf (tw .wzip , "%s(" , table )
149
158
for i , value := range values {
150
159
if i > 0 {
151
- fmt .Fprint (tw .zip , ", " )
160
+ fmt .Fprint (tw .wzip , ", " )
152
161
}
153
162
switch value := value .(type ) {
154
163
case Label :
155
- fmt .Fprint (tw .zip , value .id )
164
+ fmt .Fprint (tw .wzip , value .id )
156
165
case string :
157
- fmt .Fprintf (tw .zip , "\" %s\" " , escapeString (capStringLength (value )))
166
+ fmt .Fprintf (tw .wzip , "\" %s\" " , escapeString (capStringLength (value )))
158
167
case int :
159
- fmt .Fprintf (tw .zip , "%d" , value )
168
+ fmt .Fprintf (tw .wzip , "%d" , value )
160
169
case float64 :
161
- fmt .Fprintf (tw .zip , "%e" , value )
170
+ fmt .Fprintf (tw .wzip , "%e" , value )
162
171
default :
163
172
return errors .New ("Cannot emit value" )
164
173
}
165
174
}
166
- fmt .Fprintf (tw .zip , ")\n " )
175
+ fmt .Fprintf (tw .wzip , ")\n " )
167
176
return nil
168
177
}
0 commit comments