@@ -47,11 +47,19 @@ return 0, err } // Delegate to the writer if the size is right if len(buffer) == 0 && len(input) >= size { - return writer.Write(input) + reduced := (len(input) / size) * size + count, err = writer.Write(input[:reduced]) + if count < reduced || err != nil { + return count, err + } + + // Stage any remaining data in the buffer + buffer = append(buffer, input[count:]...) + return len(input), nil } // Append data to the buffer count = copy(buffer[len(buffer):size], input) buffer = buffer[:len(buffer)+count]