Improve error handling for writefile()

git-svn-id: file:///srv/svn/repo/marisa/trunk@19 d6811dac-2434-b64a-9ddc-f563ab233461
This commit is contained in:
dev
2021-10-18 15:41:56 +00:00
parent 2cafec6f80
commit c52f95e5c5

View File

@@ -44,7 +44,7 @@ func contenttype(f *os.File) string {
return mime return mime
} }
func writefile(f *os.File, s io.ReadCloser, contentlength int64) int64 { func writefile(f *os.File, s io.ReadCloser, contentlength int64) error {
buffer := make([]byte, 4096) buffer := make([]byte, 4096)
eof := false eof := false
sz := int64(0) sz := int64(0)
@@ -54,8 +54,7 @@ func writefile(f *os.File, s io.ReadCloser, contentlength int64) int64 {
for !eof { for !eof {
n, err := s.Read(buffer) n, err := s.Read(buffer)
if err != nil && err != io.EOF { if err != nil && err != io.EOF {
fmt.Println(err) return err
return -1
} else if err == io.EOF { } else if err == io.EOF {
eof = true eof = true
} }
@@ -69,12 +68,12 @@ func writefile(f *os.File, s io.ReadCloser, contentlength int64) int64 {
_, err = f.Write(buffer[:r]) _, err = f.Write(buffer[:r])
if err != nil { if err != nil {
fmt.Println(err) return err
} }
sz += r sz += r
} }
return sz return nil
} }
func servetemplate(w http.ResponseWriter, f string, d templatedata) { func servetemplate(w http.ResponseWriter, f string, d templatedata) {
@@ -105,8 +104,9 @@ func uploaderPut(w http.ResponseWriter, r *http.Request) {
} }
defer f.Close() defer f.Close()
if writefile(f, r.Body, r.ContentLength) < 0 { if err = writefile(f, r.Body, r.ContentLength); err != nil {
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
defer os.Remove(tmp.Name())
return return
} }
@@ -141,8 +141,9 @@ func uploaderPost(w http.ResponseWriter, r *http.Request) {
} }
defer f.Close() defer f.Close()
if writefile(f, post, h.Size) < 0 { if err = writefile(f, post, h.Size); err != nil {
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
defer os.Remove(tmp.Name())
return return
} }