diff options
author | Xin LI <delphij@FreeBSD.org> | 2006-06-03 15:10:24 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2006-06-03 15:10:24 +0000 |
commit | f85dc878cd7da5bfe06a79577f67fad98f23db80 (patch) | |
tree | e04915ed68d3ba45959b6f0d7b4b2d0c2f88e965 /zh_CN.GB2312/books | |
parent | bc82cefb7d05ce0f7a3609ad447db6c46f879c2a (diff) |
Notes
Diffstat (limited to 'zh_CN.GB2312/books')
-rw-r--r-- | zh_CN.GB2312/books/arch-handbook/driverbasics/chapter.sgml | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/zh_CN.GB2312/books/arch-handbook/driverbasics/chapter.sgml b/zh_CN.GB2312/books/arch-handbook/driverbasics/chapter.sgml index 299382ca32..15d27e76d6 100644 --- a/zh_CN.GB2312/books/arch-handbook/driverbasics/chapter.sgml +++ b/zh_CN.GB2312/books/arch-handbook/driverbasics/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.34 + Original Revision: 1.36 $FreeBSD$ --> @@ -240,14 +240,13 @@ static struct cdevsw echo_cdevsw = { -1 }; -struct s_echo { +typedef struct s_echo { char msg[BUFFERSIZE]; int len; } t_echo; /* 变量 */ static dev_t sdev; -static int len; static int count; static t_echo *echomsg; @@ -337,13 +336,13 @@ echo_write(dev_t dev, struct uio *uio, int ioflag) { int err = 0; - /* 将字符串从用户空间的内存拷贝到内核空间 */ + /* 将字符串从用户空间的内存复制到内核空间 */ err = copyin(uio->uio_iov->iov_base, echomsg->msg, - MIN(uio->uio_iov->iov_len,BUFFERSIZE - 1)); + MIN(uio->uio_iov->iov_len, BUFFERSIZE - 1)); /* 现在需要以null结束字符串,并记录长度 */ - *(echomsg->msg + MIN(uio->uio_iov->iov_len,BUFFERSIZE - 1)) = 0; - echomsg->len = MIN(uio->uio_iov->iov_len,BUFFERSIZE); + *(echomsg->msg + MIN(uio->uio_iov->iov_len, BUFFERSIZE - 1)) = 0; + echomsg->len = MIN(uio->uio_iov->iov_len, BUFFERSIZE); if (err != 0) { uprintf("Write failed: bad address!\n"); @@ -474,9 +473,9 @@ echo_read(struct cdev *dev, struct uio *uio, int ioflag) * 这个读操作有多大? * 等于用户请求的大小,或者等于剩余数据的大小。 */ - amt = MIN(uio->uio_resid, (echomsg->len - uio->uio_offset > 0) ? + amt = MIN(uio->uio_resid, (echomsg->len - uio->uio_offset > 0) ? echomsg->len - uio->uio_offset : 0); - if ((err = uiomove(echomsg->msg + uio->uio_offset,amt,uio)) != 0) { + if ((err = uiomove(echomsg->msg + uio->uio_offset, amt, uio)) != 0) { uprintf("uiomove failed!\n"); } return(err); @@ -491,13 +490,13 @@ echo_write(struct cdev *dev, struct uio *uio, int ioflag) { int err = 0; - /* 将字符串从用户空间的内存拷贝到内核空间 */ + /* 将字符串从用户空间的内存复制到内核空间 */ err = copyin(uio->uio_iov->iov_base, echomsg->msg, - MIN(uio->uio_iov->iov_len,BUFFERSIZE)); + MIN(uio->uio_iov->iov_len, BUFFERSIZE - 1)); /* 现在需要以null结束字符串,并记录长度 */ - *(echomsg->msg + MIN(uio->uio_iov->iov_len,BUFFERSIZE)) = 0; - echomsg->len = MIN(uio->uio_iov->iov_len,BUFFERSIZE); + *(echomsg->msg + MIN(uio->uio_iov->iov_len, BUFFERSIZE - 1)) = 0; + echomsg->len = MIN(uio->uio_iov->iov_len, BUFFERSIZE); if (err != 0) { uprintf("Write failed: bad address!\n"); |