ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/libeio/eio.c
(Generate patch)

Comparing cvsroot/libeio/eio.c (file contents):
Revision 1.65 by root, Mon May 30 12:56:50 2011 UTC vs.
Revision 1.67 by root, Sun Jun 5 20:25:00 2011 UTC

57#include <sys/stat.h> 57#include <sys/stat.h>
58#include <sys/statvfs.h> 58#include <sys/statvfs.h>
59#include <limits.h> 59#include <limits.h>
60#include <fcntl.h> 60#include <fcntl.h>
61#include <assert.h> 61#include <assert.h>
62
63/* intptr_t comes from unistd.h, says POSIX/UNIX/tradition */
64/* intptr_t only comes form stdint.h, says idiot openbsd coder */
65#if HAVE_STDINT_H
66# include <stdint.h>
67#endif
62 68
63#ifndef EIO_FINISH 69#ifndef EIO_FINISH
64# define EIO_FINISH(req) ((req)->finish) && !EIO_CANCELLED (req) ? (req)->finish (req) : 0 70# define EIO_FINISH(req) ((req)->finish) && !EIO_CANCELLED (req) ? (req)->finish (req) : 0
65#endif 71#endif
66 72
1517} 1523}
1518 1524
1519#endif 1525#endif
1520 1526
1521int 1527int
1522eio__mtouch (void *mem, size_t len, int flags) 1528eio__mtouch (eio_req *req)
1523{ 1529{
1530 void *mem = req->ptr2;
1531 size_t len = req->size;
1532 int flags = req->int1;
1533
1524 eio_page_align (&mem, &len); 1534 eio_page_align (&mem, &len);
1525 1535
1526 { 1536 {
1527 intptr_t addr = (intptr_t)mem; 1537 intptr_t addr = (intptr_t)mem;
1528 intptr_t end = addr + len; 1538 intptr_t end = addr + len;
1529 intptr_t page = eio_pagesize (); 1539 intptr_t page = eio_pagesize ();
1530 1540
1531 if (addr < end) 1541 if (addr < end)
1532 if (flags & EIO_MT_MODIFY) /* modify */ 1542 if (flags & EIO_MT_MODIFY) /* modify */
1533 do { *((volatile sig_atomic_t *)addr) |= 0; } while ((addr += page) < len); 1543 do { *((volatile sig_atomic_t *)addr) |= 0; } while ((addr += page) < len && !EIO_CANCELLED (req));
1534 else 1544 else
1535 do { *((volatile sig_atomic_t *)addr) ; } while ((addr += page) < len); 1545 do { *((volatile sig_atomic_t *)addr) ; } while ((addr += page) < len && !EIO_CANCELLED (req));
1536 } 1546 }
1537 1547
1538 return 0; 1548 return 0;
1539} 1549}
1540 1550
1714 1724
1715 case EIO_SYNC: req->result = 0; sync (); break; 1725 case EIO_SYNC: req->result = 0; sync (); break;
1716 case EIO_FSYNC: req->result = fsync (req->int1); break; 1726 case EIO_FSYNC: req->result = fsync (req->int1); break;
1717 case EIO_FDATASYNC: req->result = fdatasync (req->int1); break; 1727 case EIO_FDATASYNC: req->result = fdatasync (req->int1); break;
1718 case EIO_MSYNC: req->result = eio__msync (req->ptr2, req->size, req->int1); break; 1728 case EIO_MSYNC: req->result = eio__msync (req->ptr2, req->size, req->int1); break;
1719 case EIO_MTOUCH: req->result = eio__mtouch (req->ptr2, req->size, req->int1); break; 1729 case EIO_MTOUCH: req->result = eio__mtouch (req); break;
1720 case EIO_MLOCK: req->result = eio__mlock (req->ptr2, req->size); break; 1730 case EIO_MLOCK: req->result = eio__mlock (req->ptr2, req->size); break;
1721 case EIO_MLOCKALL: req->result = eio__mlockall (req->int1); break; 1731 case EIO_MLOCKALL: req->result = eio__mlockall (req->int1); break;
1722 case EIO_SYNC_FILE_RANGE: req->result = eio__sync_file_range (req->int1, req->offs, req->size, req->int2); break; 1732 case EIO_SYNC_FILE_RANGE: req->result = eio__sync_file_range (req->int1, req->offs, req->size, req->int2); break;
1723 1733
1724 case EIO_READDIR: eio__scandir (req, self); break; 1734 case EIO_READDIR: eio__scandir (req, self); break;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines