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.50 by root, Thu Jan 7 17:18:08 2010 UTC vs.
Revision 1.52 by root, Fri Jan 8 09:29:56 2010 UTC

49#include <stdlib.h> 49#include <stdlib.h>
50#include <string.h> 50#include <string.h>
51#include <errno.h> 51#include <errno.h>
52#include <sys/types.h> 52#include <sys/types.h>
53#include <sys/stat.h> 53#include <sys/stat.h>
54#include <sys/statvfs.h>
54#include <limits.h> 55#include <limits.h>
55#include <fcntl.h> 56#include <fcntl.h>
56#include <assert.h> 57#include <assert.h>
57 58
58#ifndef EIO_FINISH 59#ifndef EIO_FINISH
918 */ 919 */
919 { 920 {
920 off_t sbytes; 921 off_t sbytes;
921 res = sendfile (ifd, ofd, offset, count, 0, &sbytes, 0); 922 res = sendfile (ifd, ofd, offset, count, 0, &sbytes, 0);
922 923
923 /* freebsd' sendfile will return 0 when success */ 924 /* freebsd' sendfile will return 0 on success */
924 if (res == 0 && sbytes) 925 /* freebsd 8 documents it as only setting *sbytes on EINTR and EAGAIN, but */
925 /* maybe only on EAGAIN: as usual, the manpage leaves you guessing */ 926 /* not on e.g. EIO or EPIPE - sounds broken */
927 if ((res < 0 && (errno == EAGAIN || errno == EINTR) && sbytes) || res == 0)
926 res = sbytes; 928 res = sbytes;
927 } 929 }
928 930
929# elif defined (__APPLE__) 931# elif defined (__APPLE__)
930 932
931 { 933 {
932 off_t sbytes = count; 934 off_t sbytes = count;
933 res = sendfile (ifd, ofd, offset, &sbytes, 0, 0); 935 res = sendfile (ifd, ofd, offset, &sbytes, 0, 0);
934 936
935 if (res == 0 && errno == EAGAIN && sbytes) 937 /* according to the manpage, sbytes is always valid */
938 if (sbytes)
936 res = sbytes; 939 res = sbytes;
937 } 940 }
938 941
939# elif __hpux 942# elif __hpux
940 res = sendfile (ofd, ifd, offset, count, 0, 0); 943 res = sendfile (ofd, ifd, offset, count, 0, 0);
1576 case EIO_LSTAT: ALLOC (sizeof (EIO_STRUCT_STAT)); 1579 case EIO_LSTAT: ALLOC (sizeof (EIO_STRUCT_STAT));
1577 req->result = lstat (req->ptr1, (EIO_STRUCT_STAT *)req->ptr2); break; 1580 req->result = lstat (req->ptr1, (EIO_STRUCT_STAT *)req->ptr2); break;
1578 case EIO_FSTAT: ALLOC (sizeof (EIO_STRUCT_STAT)); 1581 case EIO_FSTAT: ALLOC (sizeof (EIO_STRUCT_STAT));
1579 req->result = fstat (req->int1, (EIO_STRUCT_STAT *)req->ptr2); break; 1582 req->result = fstat (req->int1, (EIO_STRUCT_STAT *)req->ptr2); break;
1580 1583
1584 case EIO_STATVFS: ALLOC (sizeof (EIO_STRUCT_STATVFS));
1585 req->result = statvfs (req->ptr1, (EIO_STRUCT_STATVFS *)req->ptr2); break;
1586 case EIO_FSTATVFS: ALLOC (sizeof (EIO_STRUCT_STATVFS));
1587 req->result = fstatvfs (req->int1, (EIO_STRUCT_STATVFS *)req->ptr2); break;
1588
1581 case EIO_CHOWN: req->result = chown (req->ptr1, req->int2, req->int3); break; 1589 case EIO_CHOWN: req->result = chown (req->ptr1, req->int2, req->int3); break;
1582 case EIO_FCHOWN: req->result = fchown (req->int1, req->int2, req->int3); break; 1590 case EIO_FCHOWN: req->result = fchown (req->int1, req->int2, req->int3); break;
1583 case EIO_CHMOD: req->result = chmod (req->ptr1, (mode_t)req->int2); break; 1591 case EIO_CHMOD: req->result = chmod (req->ptr1, (mode_t)req->int2); break;
1584 case EIO_FCHMOD: req->result = fchmod (req->int1, (mode_t)req->int2); break; 1592 case EIO_FCHMOD: req->result = fchmod (req->int1, (mode_t)req->int2); break;
1585 case EIO_TRUNCATE: req->result = truncate (req->ptr1, req->offs); break; 1593 case EIO_TRUNCATE: req->result = truncate (req->ptr1, req->offs); break;
1732eio_req *eio_fstat (int fd, int pri, eio_cb cb, void *data) 1740eio_req *eio_fstat (int fd, int pri, eio_cb cb, void *data)
1733{ 1741{
1734 REQ (EIO_FSTAT); req->int1 = fd; SEND; 1742 REQ (EIO_FSTAT); req->int1 = fd; SEND;
1735} 1743}
1736 1744
1745eio_req *eio_fstatvfs (int fd, int pri, eio_cb cb, void *data)
1746{
1747 REQ (EIO_FSTATVFS); req->int1 = fd; SEND;
1748}
1749
1737eio_req *eio_futime (int fd, double atime, double mtime, int pri, eio_cb cb, void *data) 1750eio_req *eio_futime (int fd, double atime, double mtime, int pri, eio_cb cb, void *data)
1738{ 1751{
1739 REQ (EIO_FUTIME); req->int1 = fd; req->nv1 = atime; req->nv2 = mtime; SEND; 1752 REQ (EIO_FUTIME); req->int1 = fd; req->nv1 = atime; req->nv2 = mtime; SEND;
1740} 1753}
1741 1754
1811} 1824}
1812 1825
1813eio_req *eio_lstat (const char *path, int pri, eio_cb cb, void *data) 1826eio_req *eio_lstat (const char *path, int pri, eio_cb cb, void *data)
1814{ 1827{
1815 return eio__1path (EIO_LSTAT, path, pri, cb, data); 1828 return eio__1path (EIO_LSTAT, path, pri, cb, data);
1829}
1830
1831eio_req *eio_statvfs (const char *path, int pri, eio_cb cb, void *data)
1832{
1833 return eio__1path (EIO_STATVFS, path, pri, cb, data);
1816} 1834}
1817 1835
1818eio_req *eio_unlink (const char *path, int pri, eio_cb cb, void *data) 1836eio_req *eio_unlink (const char *path, int pri, eio_cb cb, void *data)
1819{ 1837{
1820 return eio__1path (EIO_UNLINK, path, pri, cb, data); 1838 return eio__1path (EIO_UNLINK, path, pri, cb, data);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines