Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja> git-svn-id: file:///srv/svn/repo/marisa/trunk@67 d6811dac-2434-b64a-9ddc-f563ab233461
39 lines
879 B
Go
39 lines
879 B
Go
package main
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
func writefile(f *os.File, s io.ReadCloser, contentlength int64) error {
|
|
buffer := make([]byte, 4096)
|
|
eof := false
|
|
sz := int64(0)
|
|
|
|
defer f.Sync()
|
|
|
|
for !eof {
|
|
n, err := s.Read(buffer)
|
|
if err != nil && err != io.EOF {
|
|
return err
|
|
} else if err == io.EOF {
|
|
eof = true
|
|
}
|
|
|
|
/* ensure we don't write more than expected */
|
|
r := int64(n)
|
|
if sz+r > contentlength {
|
|
r = contentlength - sz
|
|
eof = true
|
|
}
|
|
|
|
_, err = f.Write(buffer[:r])
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sz += r
|
|
}
|
|
|
|
return nil
|
|
}
|