Changes in / [59f74a2:365e423]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/iocall.cfa

    r59f74a2 r365e423  
    108108
    109109        extern ssize_t read (int fd, void *buf, size_t count);
     110
     111        extern ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags);
     112        extern ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);
    110113}
    111114
     
    342345}
    343346
    344 
    345347ssize_t cfa_read(int fd, void *buf, size_t count) {
    346348        #if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_READ)
     
    362364
    363365                (*sqe){ IORING_OP_WRITE, fd, buf, count, 0 };
     366
     367                __submit_wait
     368        #endif
     369}
     370
     371ssize_t cfa_splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags) {
     372        #if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_SPLICE)
     373                return splice( fd_in, off_in, fd_out, off_out, len, flags );
     374        #else
     375                __submit_prelude
     376
     377                (*sqe){ IORING_OP_SPLICE, fd_out, 0p, len, off_out };
     378                sqe->splice_fd_in  = fd_in;
     379                sqe->splice_off_in = off_in;
     380                sqe->splice_flags  = flags;
     381
     382                __submit_wait
     383        #endif
     384}
     385
     386ssize_t cfa_tee(int fd_in, int fd_out, size_t len, unsigned int flags) {
     387        #if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_TEE)
     388                return tee( fd_in, fd_out, len, flags );
     389        #else
     390                __submit_prelude
     391
     392                (*sqe){ IORING_OP_TEE, fd_out, 0p, len, 0 };
     393                sqe->splice_fd_in = fd_in;
     394                sqe->splice_flags = flags;
    364395
    365396                __submit_wait
     
    466497                        #define _CFA_IO_FEATURE_IORING_OP_WRITE ,
    467498                        return IS_DEFINED(IORING_OP_WRITE);
     499
     500                if( /*func == (fptr_t)splice || */
     501                        func == (fptr_t)cfa_splice )
     502                        #define _CFA_IO_FEATURE_IORING_OP_SPLICE ,
     503                        return IS_DEFINED(IORING_OP_SPLICE);
     504
     505                if( /*func == (fptr_t)tee || */
     506                        func == (fptr_t)cfa_tee )
     507                        #define _CFA_IO_FEATURE_IORING_OP_TEE ,
     508                        return IS_DEFINED(IORING_OP_TEE);
    468509        #endif
    469510
Note: See TracChangeset for help on using the changeset viewer.