Changeset 317 for trunk/kernel/vfs/vfs.c
- Timestamp:
- Aug 4, 2017, 2:03:44 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/vfs/vfs.c
r315 r317 662 662 } // end vfs_open() 663 663 664 ////////////////////////////////////////// 664 //////////////////////////////////////////// 665 665 error_t vfs_user_move( bool_t to_buffer, 666 666 xptr_t file_xp, … … 722 722 } // end vfs_user_move() 723 723 724 //////////////////////////////////////////// 725 error_t vfs_kernel_move( bool_t to_buffer, 726 xptr_t file_xp, 727 xptr_t buffer_xp, 728 uint32_t size ) 729 { 730 assert( ( file_xp != XPTR_NULL ) , __FUNCTION__ , "file_xp == XPTR_NULL" ); 731 732 cxy_t file_cxy; // remote file descriptor cluster 733 vfs_file_t * file_ptr; // remote file descriptor local pointer 734 vfs_inode_type_t inode_type; 735 uint32_t file_offset; // current offset in file 736 mapper_t * mapper; 737 error_t error; 738 739 // get cluster and local pointer on remote file descriptor 740 file_cxy = GET_CXY( file_xp ); 741 file_ptr = (vfs_file_t *)GET_PTR( file_xp ); 742 743 // get inode type from remote file descriptor 744 inode_type = hal_remote_lw( XPTR( file_cxy , &file_ptr->type ) ); 745 746 // action depends on inode type 747 if( inode_type == INODE_TYPE_FILE ) 748 { 749 // get mapper pointer and file offset from file descriptor 750 file_offset = hal_remote_lw( XPTR( file_cxy , &file_ptr->offset ) ); 751 mapper = (mapper_t *)hal_remote_lpt( XPTR( file_cxy , &file_ptr->mapper ) ); 752 753 // move data between mapper and buffer 754 if( file_cxy == local_cxy ) 755 { 756 error = mapper_move_kernel( mapper, 757 to_buffer, 758 file_offset, 759 buffer_xp, 760 size ); 761 } 762 else 763 { 764 rpc_mapper_move_buffer_client( file_cxy, 765 mapper, 766 to_buffer, 767 false, // kernel buffer 768 file_offset, 769 buffer_xp, 770 size, 771 &error ); 772 } 773 774 if( error ) return -1; 775 else return 0; 776 } 777 else 778 { 779 printk("\n[ERROR] in %s : inode is not a file", __FUNCTION__ ); 780 return -1; 781 } 782 } // end vfs_kernel_move() 783 724 784 ////////////////////////////////////// 725 785 error_t vfs_lseek( xptr_t file_xp,
Note: See TracChangeset
for help on using the changeset viewer.