src/server/daemon/vfs.c

branch
aio
changeset 189
a2438f6d1e73
parent 187
4384bfbb7e26
child 190
1f73302461e0
equal deleted inserted replaced
188:0e6a05c779e0 189:a2438f6d1e73
58 }; 58 };
59 59
60 static VFS_IO sys_file_io = { 60 static VFS_IO sys_file_io = {
61 sys_file_read, 61 sys_file_read,
62 sys_file_write, 62 sys_file_write,
63 sys_file_pread,
64 sys_file_pwrite,
63 sys_file_seek, 65 sys_file_seek,
64 sys_file_close, 66 sys_file_close,
65 //sys_file_aioread, 67 //sys_file_aioread,
66 //sys_file_aiowrite, 68 //sys_file_aiowrite,
67 NULL, 69 NULL,
492 return read(fd->fd, buf, nbyte); 494 return read(fd->fd, buf, nbyte);
493 } 495 }
494 496
495 ssize_t sys_file_write(SYS_FILE fd, const void *buf, size_t nbyte) { 497 ssize_t sys_file_write(SYS_FILE fd, const void *buf, size_t nbyte) {
496 return write(fd->fd, buf, nbyte); 498 return write(fd->fd, buf, nbyte);
499 }
500
501 ssize_t sys_file_pread(SYS_FILE fd, void *buf, size_t nbyte, off_t offset) {
502 return pread(fd->fd, buf, nbyte, offset);
503 }
504
505 ssize_t sys_file_pwrite(SYS_FILE fd, const void *buf, size_t nbyte, off_t offset) {
506 return pwrite(fd->fd, buf, nbyte, offset);
497 } 507 }
498 508
499 off_t sys_file_seek(SYS_FILE fd, off_t offset, int whence) { 509 off_t sys_file_seek(SYS_FILE fd, off_t offset, int whence) {
500 return lseek(fd->fd, offset, whence); 510 return lseek(fd->fd, offset, whence);
501 } 511 }
582 592
583 NSAPI_PUBLIC int system_fwrite(SYS_FILE fd, const void *buf, int nbyte) { 593 NSAPI_PUBLIC int system_fwrite(SYS_FILE fd, const void *buf, int nbyte) {
584 return fd->io->write(fd, buf, nbyte); 594 return fd->io->write(fd, buf, nbyte);
585 } 595 }
586 596
597 NSAPI_PUBLIC int system_pread(SYS_FILE fd, void *buf, int nbyte, off_t offset) {
598 return fd->io->pread(fd, buf, nbyte, offset);
599 }
600
601 NSAPI_PUBLIC int system_pwrite(SYS_FILE fd, const void *buf, int nbyte, off_t offset) {
602 return fd->io->pwrite(fd, buf, nbyte, offset);
603 }
604
587 NSAPI_PUBLIC off_t system_lseek(SYS_FILE fd, off_t offset, int whence) { 605 NSAPI_PUBLIC off_t system_lseek(SYS_FILE fd, off_t offset, int whence) {
588 return fd->io->seek(fd, offset, whence); 606 return fd->io->seek(fd, offset, whence);
589 } 607 }
590 608
591 NSAPI_PUBLIC int system_fclose(SYS_FILE fd) { 609 NSAPI_PUBLIC int system_fclose(SYS_FILE fd) {
624 return 0; 642 return 0;
625 } 643 }
626 } 644 }
627 645
628 static void* vfs_aio_read(aiocb_s *aiocb) { 646 static void* vfs_aio_read(aiocb_s *aiocb) {
629 system_lseek(aiocb->filedes, aiocb->offset, SEEK_SET); 647 int result = system_pread(aiocb->filedes, aiocb->buf, aiocb->nbytes, aiocb->offset);
630 int result = system_fread(aiocb->filedes, aiocb->buf, aiocb->nbytes);
631 aiocb->result = result; 648 aiocb->result = result;
632 if(result < 0) { 649 if(result < 0) {
633 aiocb->result_errno = errno; 650 aiocb->result_errno = errno;
634 } 651 }
635 event_send(aiocb->evhandler, aiocb->event); 652 event_send(aiocb->evhandler, aiocb->event);
636 return NULL; 653 return NULL;
637 } 654 }
638 655
639 static void* vfs_aio_write(aiocb_s *aiocb) { 656 static void* vfs_aio_write(aiocb_s *aiocb) {
640 system_lseek(aiocb->filedes, aiocb->offset, SEEK_SET); 657 int result = system_pwrite(aiocb->filedes, aiocb->buf, aiocb->nbytes, aiocb->offset);
641 int result = system_fwrite(aiocb->filedes, aiocb->buf, aiocb->nbytes);
642 aiocb->result = result; 658 aiocb->result = result;
643 if(result < 0) { 659 if(result < 0) {
644 aiocb->result_errno = errno; 660 aiocb->result_errno = errno;
645 } 661 }
646 event_send(aiocb->evhandler, aiocb->event); 662 event_send(aiocb->evhandler, aiocb->event);

mercurial