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

Comparing libeio/eio.c (file contents):
Revision 1.6 by root, Sun May 11 19:11:05 2008 UTC vs.
Revision 1.7 by root, Sun May 11 19:19:05 2008 UTC

768} 768}
769 769
770/*****************************************************************************/ 770/*****************************************************************************/
771 771
772#define ALLOC(len) \ 772#define ALLOC(len) \
773 X_LOCK (wrklock); \
774 req->flags |= EIO_FLAG_PTR2_FREE; \
775 X_UNLOCK (wrklock); \
776 req->ptr2 = malloc (len); \
777 if (!req->ptr2) \ 773 if (!req->ptr2) \
778 { \ 774 { \
775 X_LOCK (wrklock); \
776 req->flags |= EIO_FLAG_PTR2_FREE; \
777 X_UNLOCK (wrklock); \
778 req->ptr2 = malloc (len); \
779 if (!req->ptr2) \
780 { \
779 errno = ENOMEM; \ 781 errno = ENOMEM; \
780 req->result = -1; \ 782 req->result = -1; \
781 break; \ 783 break; \
784 } \
782 } 785 }
783 786
784X_THREAD_PROC (eio_proc) 787X_THREAD_PROC (eio_proc)
785{ 788{
786 eio_req *req; 789 eio_req *req;
832 errno = 0; /* strictly unnecessary */ 835 errno = 0; /* strictly unnecessary */
833 836
834 if (!EIO_CANCELLED (req)) 837 if (!EIO_CANCELLED (req))
835 switch (req->type) 838 switch (req->type)
836 { 839 {
840 case EIO_READ: ALLOC (req->size);
837 case EIO_READ: req->result = req->offs >= 0 841 req->result = req->offs >= 0
838 ? pread (req->int1, req->ptr2, req->size, req->offs) 842 ? pread (req->int1, req->ptr2, req->size, req->offs)
839 : read (req->int1, req->ptr2, req->size); break; 843 : read (req->int1, req->ptr2, req->size); break;
840 case EIO_WRITE: req->result = req->offs >= 0 844 case EIO_WRITE: req->result = req->offs >= 0
841 ? pwrite (req->int1, req->ptr2, req->size, req->offs) 845 ? pwrite (req->int1, req->ptr2, req->size, req->offs)
842 : write (req->int1, req->ptr2, req->size); break; 846 : write (req->int1, req->ptr2, req->size); break;
866 case EIO_MKDIR: req->result = mkdir (req->ptr1, (mode_t)req->int2); break; 870 case EIO_MKDIR: req->result = mkdir (req->ptr1, (mode_t)req->int2); break;
867 case EIO_RENAME: req->result = rename (req->ptr1, req->ptr2); break; 871 case EIO_RENAME: req->result = rename (req->ptr1, req->ptr2); break;
868 case EIO_LINK: req->result = link (req->ptr1, req->ptr2); break; 872 case EIO_LINK: req->result = link (req->ptr1, req->ptr2); break;
869 case EIO_SYMLINK: req->result = symlink (req->ptr1, req->ptr2); break; 873 case EIO_SYMLINK: req->result = symlink (req->ptr1, req->ptr2); break;
870 case EIO_MKNOD: req->result = mknod (req->ptr1, (mode_t)req->int2, (dev_t)req->offs); break; 874 case EIO_MKNOD: req->result = mknod (req->ptr1, (mode_t)req->int2, (dev_t)req->offs); break;
875
871 case EIO_READLINK: ALLOC (NAME_MAX); 876 case EIO_READLINK: ALLOC (NAME_MAX);
872 req->result = readlink (req->ptr1, req->ptr2, NAME_MAX); break; 877 req->result = readlink (req->ptr1, req->ptr2, NAME_MAX); break;
873 878
874 case EIO_SYNC: req->result = 0; sync (); break; 879 case EIO_SYNC: req->result = 0; sync (); break;
875 case EIO_FSYNC: req->result = fsync (req->int1); break; 880 case EIO_FSYNC: req->result = fsync (req->int1); break;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines