int Cache:: write(const void* src, int count, long long offset) { int len; int n; if (size < offset + count) { setSize(offset + count); } for (len = 0; len < count && offset < size; len += n, offset += n, src = (u8*) src + n) { Page* page = getPage(offset); if (!page) { break; } n = Page::SIZE - Page::pageOffset(offset); if (count - len < n) { n = count - len; } if (size - offset < n) { n = size - offset; } if (n < Page::SIZE) { page->fill(backingStore); } n = page->write(src, n, Page::pageOffset(offset)); page->filled = true; // XXX page->change(); } return len; }