Fixes responseWriter.Size()
- "written" boolean is not longer needed - size is reseted - addition instead of assignation
This commit is contained in:
		@ -12,6 +12,10 @@ import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	NoWritten = -1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type (
 | 
			
		||||
	ResponseWriter interface {
 | 
			
		||||
		http.ResponseWriter
 | 
			
		||||
@ -27,30 +31,29 @@ type (
 | 
			
		||||
 | 
			
		||||
	responseWriter struct {
 | 
			
		||||
		http.ResponseWriter
 | 
			
		||||
		status  int
 | 
			
		||||
		size    int
 | 
			
		||||
		written bool
 | 
			
		||||
		status int
 | 
			
		||||
		size   int
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func (w *responseWriter) reset(writer http.ResponseWriter) {
 | 
			
		||||
	w.ResponseWriter = writer
 | 
			
		||||
	w.status = 200
 | 
			
		||||
	w.written = false
 | 
			
		||||
	w.size = NoWritten
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *responseWriter) WriteHeader(code int) {
 | 
			
		||||
	if code > 0 {
 | 
			
		||||
		w.status = code
 | 
			
		||||
		if w.written {
 | 
			
		||||
		if w.Written() {
 | 
			
		||||
			log.Println("[GIN] WARNING. Headers were already written!")
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *responseWriter) WriteHeaderNow() {
 | 
			
		||||
	if !w.written {
 | 
			
		||||
		w.written = true
 | 
			
		||||
	if !w.Written() {
 | 
			
		||||
		w.size = 0
 | 
			
		||||
		w.ResponseWriter.WriteHeader(w.status)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -58,7 +61,7 @@ func (w *responseWriter) WriteHeaderNow() {
 | 
			
		||||
func (w *responseWriter) Write(data []byte) (n int, err error) {
 | 
			
		||||
	w.WriteHeaderNow()
 | 
			
		||||
	n, err = w.ResponseWriter.Write(data)
 | 
			
		||||
	w.size = n
 | 
			
		||||
	w.size += n
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -71,7 +74,7 @@ func (w *responseWriter) Size() int {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (w *responseWriter) Written() bool {
 | 
			
		||||
	return w.written
 | 
			
		||||
	return w.size != NoWritten
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Implements the http.Hijacker interface
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user