(b *SharedBuffer)
| 133 | } |
| 134 | |
| 135 | func (wf wrappedFile) Write(b *SharedBuffer) (int, error) { |
| 136 | file := bufio.NewWriter(transform.NewWriter(wf.writeCloser, b.encoding.NewEncoder())) |
| 137 | |
| 138 | b.Lock() |
| 139 | defer b.Unlock() |
| 140 | |
| 141 | if len(b.lines) == 0 { |
| 142 | return 0, nil |
| 143 | } |
| 144 | |
| 145 | // end of line |
| 146 | var eol []byte |
| 147 | if b.Endings == FFDos { |
| 148 | eol = []byte{'\r', '\n'} |
| 149 | } else { |
| 150 | eol = []byte{'\n'} |
| 151 | } |
| 152 | |
| 153 | err := wf.Truncate() |
| 154 | if err != nil { |
| 155 | return 0, err |
| 156 | } |
| 157 | |
| 158 | // write lines |
| 159 | size, err := file.Write(b.lines[0].data) |
| 160 | if err != nil { |
| 161 | return 0, err |
| 162 | } |
| 163 | |
| 164 | for _, l := range b.lines[1:] { |
| 165 | if _, err = file.Write(eol); err != nil { |
| 166 | return 0, err |
| 167 | } |
| 168 | if _, err = file.Write(l.data); err != nil { |
| 169 | return 0, err |
| 170 | } |
| 171 | size += len(eol) + len(l.data) |
| 172 | } |
| 173 | |
| 174 | err = file.Flush() |
| 175 | if err == nil && !wf.withSudo { |
| 176 | // Call Sync() on the file to make sure the content is safely on disk. |
| 177 | f := wf.writeCloser.(*os.File) |
| 178 | err = f.Sync() |
| 179 | } |
| 180 | return size, err |
| 181 | } |
| 182 | |
| 183 | func (wf wrappedFile) Close() error { |
| 184 | err := wf.writeCloser.Close() |
no test coverage detected