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  }