code.gitea.io/gitea@v1.19.3/modules/util/io.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package util 5 6 import ( 7 "errors" 8 "io" 9 ) 10 11 // ReadAtMost reads at most len(buf) bytes from r into buf. 12 // It returns the number of bytes copied. n is only less than len(buf) if r provides fewer bytes. 13 // If EOF occurs while reading, err will be nil. 14 func ReadAtMost(r io.Reader, buf []byte) (n int, err error) { 15 n, err = io.ReadFull(r, buf) 16 if err == io.EOF || err == io.ErrUnexpectedEOF { 17 err = nil 18 } 19 return n, err 20 } 21 22 // ErrNotEmpty is an error reported when there is a non-empty reader 23 var ErrNotEmpty = errors.New("not-empty") 24 25 // IsEmptyReader reads a reader and ensures it is empty 26 func IsEmptyReader(r io.Reader) (err error) { 27 var buf [1]byte 28 29 for { 30 n, err := r.Read(buf[:]) 31 if err != nil { 32 if err == io.EOF { 33 return nil 34 } 35 return err 36 } 37 if n > 0 { 38 return ErrNotEmpty 39 } 40 } 41 }