Closed momo3159 closed 8 months ago
osbook_day10d に含まれるこちらのコミット https://github.com/uchan-nos/mikanos/commit/e4c0690d4a17350e3fd8edc52240d2f94091ffeb によって、修正されています。
確かに @momo3159 さんのご指摘の通り、osbook_day09c の時点においてはバグがある気がします。
基本的にタグの内容は変更しない方針のため、ご指摘のバグは修正しません。 お手元で、src の左端が画面外になるような状況でバグが発現するかを確かめ、修正案がうまく動くかを検証するなどして、バグをお楽しみください。
FrameBuffer::Copyの実装 において、コピー元のアドレスの初期が
const uint8_t* src_buf = src.config_.frame_buffer;
と設定されています。 この場合、1回目のmemcpyでは、常にsrc.config_.frame_buffer
の先頭からbytes_per_copy_line
だけコピーされる形になると思います。一方で、図9.15(FrameBuffer::Copy()で範囲外だった場合の動作)にもあるように、先頭からコピーされない場合もあるかと思います。
そのため、
dst_buf
と同様にコピー元のアドレスについても計算が必要かと考えましたがいかがでしょうか。 (私の思い違いであれば申し訳ないです。)修正前
修正後