/* Copyright (c) 2021 Bram Vandenbogaerde And Contributors
 * You may use, distribute or modify this code under the
 * terms of the Mozilla Public License 2.0, which is distributed
 * along with the source code.
 */

package scp

import "io"

// An adaptation of io.CopyN that keeps reading if it did not return 
// a sufficient amount of bytes.
func CopyN(writer io.Writer, src io.Reader, size int64) (int64, error) {
        var total int64
        total = 0
        for total < size {
           n, err := io.CopyN(writer, src, size)
           if err != nil {
              return 0, err
           }
           total += n
        }

        return total, nil
}
