From 1890a5d3fae4969fe74062eaebcd48586f633acf Mon Sep 17 00:00:00 2001 From: KAAAsS Date: Thu, 21 Apr 2022 01:34:15 +0800 Subject: [PATCH] =?UTF-8?q?fix=20tmpfs=20=E8=AF=BB=E5=86=99=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=A4=84=E7=90=86=E7=BC=93=E5=86=B2=E5=8C=BA=E5=81=8F?= =?UTF-8?q?=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab5/user/lab5/tmpfs/tmpfs.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lab5/user/lab5/tmpfs/tmpfs.c b/lab5/user/lab5/tmpfs/tmpfs.c index 4595064..d37c383 100644 --- a/lab5/user/lab5/tmpfs/tmpfs.c +++ b/lab5/user/lab5/tmpfs/tmpfs.c @@ -334,6 +334,7 @@ ssize_t tfs_file_write(struct inode * inode, off_t offset, const char *data, u64 page_no, page_off; u64 cur_off = offset; + u64 buf_off = 0; size_t to_write, cur_to_write; void *page; @@ -359,10 +360,11 @@ ssize_t tfs_file_write(struct inode * inode, off_t offset, const char *data, radix_add(&inode->data, page_no, page); } // 写数据 - memcpy(page + page_off, data + cur_off, cur_to_write); + memcpy(page + page_off, data + buf_off, cur_to_write); to_write -= cur_to_write; cur_off += cur_to_write; + buf_off += cur_to_write; } if (cur_off > inode->size) { @@ -385,6 +387,7 @@ ssize_t tfs_file_read(struct inode * inode, off_t offset, char *buff, u64 page_no, page_off; u64 cur_off = offset; + u64 buf_off = 0; size_t to_read, cur_to_read; void *page; @@ -406,12 +409,13 @@ ssize_t tfs_file_read(struct inode * inode, off_t offset, char *buff, } // 读取数据 if (page == NULL) { - memset(buff + cur_off, 0, cur_to_read); + memset(buff + buf_off, 0, cur_to_read); } else { - memcpy(buff + cur_off, page + page_off, cur_to_read); + memcpy(buff + buf_off, page + page_off, cur_to_read); } to_read -= cur_to_read; cur_off += cur_to_read; + buf_off += cur_to_read; } return cur_off - offset;