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.66 by root, Sun Jun 5 19:58:37 2011 UTC vs.
Revision 1.68 by root, Sun Jun 5 22:44:30 2011 UTC

1523} 1523}
1524 1524
1525#endif 1525#endif
1526 1526
1527int 1527int
1528eio__mtouch (void *mem, size_t len, int flags) 1528eio__mtouch (eio_req *req)
1529{ 1529{
1530 void *mem = req->ptr2;
1531 size_t len = req->size;
1532 int flags = req->int1;
1533
1530 eio_page_align (&mem, &len); 1534 eio_page_align (&mem, &len);
1531 1535
1532 { 1536 {
1533 intptr_t addr = (intptr_t)mem; 1537 intptr_t addr = (intptr_t)mem;
1534 intptr_t end = addr + len; 1538 intptr_t end = addr + len;
1535 intptr_t page = eio_pagesize (); 1539 intptr_t page = eio_pagesize ();
1536 1540
1537 if (addr < end) 1541 if (addr < end)
1538 if (flags & EIO_MT_MODIFY) /* modify */ 1542 if (flags & EIO_MT_MODIFY) /* modify */
1539 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));
1540 else 1544 else
1541 do { *((volatile sig_atomic_t *)addr) ; } while ((addr += page) < len); 1545 do { *((volatile sig_atomic_t *)addr) ; } while ((addr += page) < len && !EIO_CANCELLED (req));
1542 } 1546 }
1543 1547
1544 return 0; 1548 return 0;
1545} 1549}
1546 1550
1720 1724
1721 case EIO_SYNC: req->result = 0; sync (); break; 1725 case EIO_SYNC: req->result = 0; sync (); break;
1722 case EIO_FSYNC: req->result = fsync (req->int1); break; 1726 case EIO_FSYNC: req->result = fsync (req->int1); break;
1723 case EIO_FDATASYNC: req->result = fdatasync (req->int1); break; 1727 case EIO_FDATASYNC: req->result = fdatasync (req->int1); break;
1724 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;
1725 case EIO_MTOUCH: req->result = eio__mtouch (req->ptr2, req->size, req->int1); break; 1729 case EIO_MTOUCH: req->result = eio__mtouch (req); break;
1726 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;
1727 case EIO_MLOCKALL: req->result = eio__mlockall (req->int1); break; 1731 case EIO_MLOCKALL: req->result = eio__mlockall (req->int1); break;
1728 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;
1729 1733
1730 case EIO_READDIR: eio__scandir (req, self); break; 1734 case EIO_READDIR: eio__scandir (req, self); break;
1774 case EIO_NOP: 1778 case EIO_NOP:
1775 req->result = 0; 1779 req->result = 0;
1776 break; 1780 break;
1777 1781
1778 case EIO_CUSTOM: 1782 case EIO_CUSTOM:
1779 ((void (*)(eio_req *))req->feed) (req); 1783 req->feed (req);
1780 break; 1784 break;
1781 1785
1782 default: 1786 default:
1783 errno = ENOSYS; 1787 errno = ENOSYS;
1784 req->result = -1; 1788 req->result = -1;
2005eio_req *eio_rename (const char *path, const char *new_path, int pri, eio_cb cb, void *data) 2009eio_req *eio_rename (const char *path, const char *new_path, int pri, eio_cb cb, void *data)
2006{ 2010{
2007 return eio__2path (EIO_RENAME, path, new_path, pri, cb, data); 2011 return eio__2path (EIO_RENAME, path, new_path, pri, cb, data);
2008} 2012}
2009 2013
2010eio_req *eio_custom (eio_cb execute, int pri, eio_cb cb, void *data) 2014eio_req *eio_custom (void (*)(eio_req *) execute, int pri, eio_cb cb, void *data);
2011{ 2015{
2012 REQ (EIO_CUSTOM); req->feed = (void (*)(eio_req *))execute; SEND; 2016 REQ (EIO_CUSTOM); req->feed = execute; SEND;
2013} 2017}
2014 2018
2015#endif 2019#endif
2016 2020
2017eio_req *eio_grp (eio_cb cb, void *data) 2021eio_req *eio_grp (eio_cb cb, void *data)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines