tImprove error handling for writefile() - partage - File upload system
 (HTM) git clone git://git.z3bra.org/partage.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4a574cb7d02d0de66f68a18ba52f9b326886353f
 (DIR) parent 5b3b4556a520c790aa0cc1598cb2d2c9f5b2a0c9
 (HTM) Author: Willy Goiffon <dev@z3bra.org>
       Date:   Mon, 18 Oct 2021 17:41:56 +0200
       
       Improve error handling for writefile()
       
       Diffstat:
         M partage.go                          |      15 ++++++++-------
       
       1 file changed, 8 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/partage.go b/partage.go
       t@@ -44,7 +44,7 @@ func contenttype(f *os.File) string {
                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)
                eof := false
                sz := int64(0)
       t@@ -54,8 +54,7 @@ func writefile(f *os.File, s io.ReadCloser, contentlength int64) int64 {
                for !eof {
                        n, err := s.Read(buffer)
                        if err != nil && err != io.EOF {
       -                        fmt.Println(err)
       -                        return -1
       +                        return err
                        } else if err == io.EOF {
                                eof = true
                        }
       t@@ -69,12 +68,12 @@ func writefile(f *os.File, s io.ReadCloser, contentlength int64) int64 {
        
                        _, err = f.Write(buffer[:r])
                        if err != nil {
       -                        fmt.Println(err)
       +                        return err
                        }
                        sz += r
                }
        
       -        return sz
       +        return nil
        }
        
        func servetemplate(w http.ResponseWriter, f string, d templatedata) {
       t@@ -105,8 +104,9 @@ func uploaderPut(w http.ResponseWriter, r *http.Request) {
                }
                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)
       +                defer os.Remove(tmp.Name())
                        return
                }
        
       t@@ -141,8 +141,9 @@ func uploaderPost(w http.ResponseWriter, r *http.Request) {
                        }
                        defer f.Close()
        
       -                if writefile(f, post, h.Size) < 0 {
       +                if err = writefile(f, post, h.Size); err != nil {
                                w.WriteHeader(http.StatusInternalServerError)
       +                        defer os.Remove(tmp.Name())
                                return
                        }