Кажется, что он копирует до len
байтов данных из data
в кольцевой буфер bp
.
bp->len
- это длина циклического буфера и должна быть степенью двойки, а bp->in
- это индекс в циклическом буфере, в который должен записываться следующий байт. buff_freelen(bp)
возвращает количество свободного места в циклическом буфере, а minw()
возвращает минимум двух аргументов.
n
устанавливается на количество копируемых байтов, минимум предоставленного len
или объем свободного места в целевом буфере. Затем он разбивает это на два фрагмента - n1
, который копируется, начиная с bp->data[in]
и заканчивая на или до bp->data[bp->len - 1]
, и n2
(возможно, нулевой длины), который копируется, начиная с bp->data[0]
.
Опережает bp->in
и возвращает n
, количество скопированных байтов.