Reduce the FileRef type to Arc<dyn File>
The FileRef type was defined as Arc<Box<dyn File>>, where the use of Box is unnecessary. This commit reduces the type to Arc<dyn File>.
This commit is contained in:
		
							parent
							
								
									6e83595b74
								
							
						
					
					
						commit
						2ff4b1c776
					
				| @ -106,7 +106,7 @@ pub trait File: Debug + Sync + Send + Any { | |||||||
|     fn as_any(&self) -> &dyn Any; |     fn as_any(&self) -> &dyn Any; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| pub type FileRef = Arc<Box<dyn File>>; | pub type FileRef = Arc<dyn File>; | ||||||
| 
 | 
 | ||||||
| #[derive(Copy, Clone, Debug)] | #[derive(Copy, Clone, Debug)] | ||||||
| struct FileOpNotSupportedError { | struct FileOpNotSupportedError { | ||||||
|  | |||||||
| @ -10,8 +10,7 @@ pub fn do_openat(fs_path: &FsPath, flags: u32, mode: u32) -> Result<FileDesc> { | |||||||
|     let current = current!(); |     let current = current!(); | ||||||
|     let fs = current.fs().lock().unwrap(); |     let fs = current.fs().lock().unwrap(); | ||||||
| 
 | 
 | ||||||
|     let file = fs.open_file(&path, flags, mode)?; |     let file_ref: Arc<dyn File> = fs.open_file(&path, flags, mode)?; | ||||||
|     let file_ref: Arc<Box<dyn File>> = Arc::new(file); |  | ||||||
| 
 | 
 | ||||||
|     let fd = { |     let fd = { | ||||||
|         let creation_flags = CreationFlags::from_bits_truncate(flags); |         let creation_flags = CreationFlags::from_bits_truncate(flags); | ||||||
|  | |||||||
| @ -39,18 +39,18 @@ impl FsView { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// Open a file on the process. But DO NOT add it to file table.
 |     /// Open a file on the process. But DO NOT add it to file table.
 | ||||||
|     pub fn open_file(&self, path: &str, flags: u32, mode: u32) -> Result<Box<dyn File>> { |     pub fn open_file(&self, path: &str, flags: u32, mode: u32) -> Result<Arc<dyn File>> { | ||||||
|         if path == "/dev/null" { |         if path == "/dev/null" { | ||||||
|             return Ok(Box::new(DevNull)); |             return Ok(Arc::new(DevNull)); | ||||||
|         } |         } | ||||||
|         if path == "/dev/zero" { |         if path == "/dev/zero" { | ||||||
|             return Ok(Box::new(DevZero)); |             return Ok(Arc::new(DevZero)); | ||||||
|         } |         } | ||||||
|         if path == "/dev/random" || path == "/dev/urandom" || path == "/dev/arandom" { |         if path == "/dev/random" || path == "/dev/urandom" || path == "/dev/arandom" { | ||||||
|             return Ok(Box::new(DevRandom)); |             return Ok(Arc::new(DevRandom)); | ||||||
|         } |         } | ||||||
|         if path == "/dev/sgx" { |         if path == "/dev/sgx" { | ||||||
|             return Ok(Box::new(DevSgx)); |             return Ok(Arc::new(DevSgx)); | ||||||
|         } |         } | ||||||
|         let creation_flags = CreationFlags::from_bits_truncate(flags); |         let creation_flags = CreationFlags::from_bits_truncate(flags); | ||||||
|         let inode = if creation_flags.no_follow_symlink() { |         let inode = if creation_flags.no_follow_symlink() { | ||||||
| @ -113,7 +113,7 @@ impl FsView { | |||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
|         let abs_path = self.convert_to_abs_path(&path); |         let abs_path = self.convert_to_abs_path(&path); | ||||||
|         Ok(Box::new(INodeFile::open(inode, &abs_path, flags)?)) |         Ok(Arc::new(INodeFile::open(inode, &abs_path, flags)?)) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /// Recursively lookup the real path of giving path, dereference symlinks
 |     /// Recursively lookup the real path of giving path, dereference symlinks
 | ||||||
|  | |||||||
| @ -204,8 +204,8 @@ pub fn do_pipe2(flags: u32) -> Result<[FileDesc; 2]> { | |||||||
|     let close_on_spawn = creation_flags.must_close_on_spawn(); |     let close_on_spawn = creation_flags.must_close_on_spawn(); | ||||||
| 
 | 
 | ||||||
|     let current = current!(); |     let current = current!(); | ||||||
|     let reader_fd = current.add_file(Arc::new(Box::new(pipe_reader)), close_on_spawn); |     let reader_fd = current.add_file(Arc::new(pipe_reader), close_on_spawn); | ||||||
|     let writer_fd = current.add_file(Arc::new(Box::new(pipe_writer)), close_on_spawn); |     let writer_fd = current.add_file(Arc::new(pipe_writer), close_on_spawn); | ||||||
|     trace!("pipe2: reader_fd: {}, writer_fd: {}", reader_fd, writer_fd); |     trace!("pipe2: reader_fd: {}, writer_fd: {}", reader_fd, writer_fd); | ||||||
|     Ok([reader_fd, writer_fd]) |     Ok([reader_fd, writer_fd]) | ||||||
| } | } | ||||||
|  | |||||||
| @ -23,9 +23,9 @@ pub fn do_eventfd2(init_val: u32, flags: i32) -> Result<isize> { | |||||||
| 
 | 
 | ||||||
|     let inner_flags = |     let inner_flags = | ||||||
|         EventCreationFlags::from_bits(flags).ok_or_else(|| errno!(EINVAL, "invalid flags"))?; |         EventCreationFlags::from_bits(flags).ok_or_else(|| errno!(EINVAL, "invalid flags"))?; | ||||||
|     let file_ref: Arc<Box<dyn File>> = { |     let file_ref: Arc<dyn File> = { | ||||||
|         let event = EventFile::new(init_val, inner_flags)?; |         let event = EventFile::new(init_val, inner_flags)?; | ||||||
|         Arc::new(Box::new(event)) |         Arc::new(event) | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     let fd = current!().add_file( |     let fd = current!().add_file( | ||||||
|  | |||||||
| @ -13,14 +13,14 @@ pub fn do_socket(domain: c_int, socket_type: c_int, protocol: c_int) -> Result<i | |||||||
|     let file_flags = FileFlags::from_bits_truncate(socket_type); |     let file_flags = FileFlags::from_bits_truncate(socket_type); | ||||||
|     let sock_type = SocketType::try_from(socket_type & (!file_flags.bits()))?; |     let sock_type = SocketType::try_from(socket_type & (!file_flags.bits()))?; | ||||||
| 
 | 
 | ||||||
|     let file_ref: Arc<Box<dyn File>> = match sock_domain { |     let file_ref: Arc<dyn File> = match sock_domain { | ||||||
|         AddressFamily::LOCAL => { |         AddressFamily::LOCAL => { | ||||||
|             let unix_socket = UnixSocketFile::new(socket_type, protocol)?; |             let unix_socket = UnixSocketFile::new(socket_type, protocol)?; | ||||||
|             Arc::new(Box::new(unix_socket)) |             Arc::new(unix_socket) | ||||||
|         } |         } | ||||||
|         _ => { |         _ => { | ||||||
|             let socket = HostSocket::new(sock_domain, sock_type, file_flags, protocol)?; |             let socket = HostSocket::new(sock_domain, sock_type, file_flags, protocol)?; | ||||||
|             Arc::new(Box::new(socket)) |             Arc::new(socket) | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| @ -130,7 +130,7 @@ pub fn do_accept4( | |||||||
|     let file_ref = current!().file(fd as FileDesc)?; |     let file_ref = current!().file(fd as FileDesc)?; | ||||||
|     let new_fd = if let Ok(socket) = file_ref.as_host_socket() { |     let new_fd = if let Ok(socket) = file_ref.as_host_socket() { | ||||||
|         let (new_socket_file, sock_addr_option) = socket.accept(file_flags)?; |         let (new_socket_file, sock_addr_option) = socket.accept(file_flags)?; | ||||||
|         let new_file_ref: Arc<Box<dyn File>> = Arc::new(Box::new(new_socket_file)); |         let new_file_ref: Arc<dyn File> = Arc::new(new_socket_file); | ||||||
|         let new_fd = current!().add_file(new_file_ref, close_on_spawn); |         let new_fd = current!().add_file(new_file_ref, close_on_spawn); | ||||||
| 
 | 
 | ||||||
|         if addr_set && sock_addr_option.is_some() { |         if addr_set && sock_addr_option.is_some() { | ||||||
| @ -150,7 +150,7 @@ pub fn do_accept4( | |||||||
|         } |         } | ||||||
|         // TODO: handle addr
 |         // TODO: handle addr
 | ||||||
|         let new_socket = unix_socket.accept()?; |         let new_socket = unix_socket.accept()?; | ||||||
|         let new_file_ref: Arc<Box<dyn File>> = Arc::new(Box::new(new_socket)); |         let new_file_ref: Arc<dyn File> = Arc::new(new_socket); | ||||||
|         current!().add_file(new_file_ref, false) |         current!().add_file(new_file_ref, false) | ||||||
|     } else { |     } else { | ||||||
|         return_errno!(EBADF, "not a socket"); |         return_errno!(EBADF, "not a socket"); | ||||||
| @ -385,8 +385,8 @@ pub fn do_socketpair( | |||||||
| 
 | 
 | ||||||
|         let current = current!(); |         let current = current!(); | ||||||
|         let mut files = current.files().lock().unwrap(); |         let mut files = current.files().lock().unwrap(); | ||||||
|         sock_pair[0] = files.put(Arc::new(Box::new(client_socket)), close_on_spawn); |         sock_pair[0] = files.put(Arc::new(client_socket), close_on_spawn); | ||||||
|         sock_pair[1] = files.put(Arc::new(Box::new(server_socket)), close_on_spawn); |         sock_pair[1] = files.put(Arc::new(server_socket), close_on_spawn); | ||||||
| 
 | 
 | ||||||
|         debug!("socketpair: ({}, {})", sock_pair[0], sock_pair[1]); |         debug!("socketpair: ({}, {})", sock_pair[0], sock_pair[1]); | ||||||
|         Ok(0) |         Ok(0) | ||||||
| @ -616,7 +616,7 @@ pub fn do_epoll_create1(raw_flags: c_int) -> Result<isize> { | |||||||
|         .ok_or_else(|| errno!(EINVAL, "invalid flags"))? |         .ok_or_else(|| errno!(EINVAL, "invalid flags"))? | ||||||
|         & CreationFlags::O_CLOEXEC; |         & CreationFlags::O_CLOEXEC; | ||||||
|     let epoll_file = io_multiplexing::EpollFile::new(flags)?; |     let epoll_file = io_multiplexing::EpollFile::new(flags)?; | ||||||
|     let file_ref: Arc<Box<dyn File>> = Arc::new(Box::new(epoll_file)); |     let file_ref: Arc<dyn File> = Arc::new(epoll_file); | ||||||
|     let close_on_spawn = flags.contains(CreationFlags::O_CLOEXEC); |     let close_on_spawn = flags.contains(CreationFlags::O_CLOEXEC); | ||||||
|     let fd = current!().add_file(file_ref, close_on_spawn); |     let fd = current!().add_file(file_ref, close_on_spawn); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -244,13 +244,12 @@ fn init_files( | |||||||
|                     oflag, |                     oflag, | ||||||
|                     fd, |                     fd, | ||||||
|                 } => { |                 } => { | ||||||
|                     let file = |                     let file_ref = | ||||||
|                         current_ref |                         current_ref | ||||||
|                             .fs() |                             .fs() | ||||||
|                             .lock() |                             .lock() | ||||||
|                             .unwrap() |                             .unwrap() | ||||||
|                             .open_file(path.as_str(), oflag, mode)?; |                             .open_file(path.as_str(), oflag, mode)?; | ||||||
|                     let file_ref: Arc<Box<dyn File>> = Arc::new(file); |  | ||||||
|                     let creation_flags = CreationFlags::from_bits_truncate(oflag); |                     let creation_flags = CreationFlags::from_bits_truncate(oflag); | ||||||
|                     cloned_file_table.put_at(fd, file_ref, creation_flags.must_close_on_spawn()); |                     cloned_file_table.put_at(fd, file_ref, creation_flags.must_close_on_spawn()); | ||||||
|                 } |                 } | ||||||
| @ -273,15 +272,14 @@ fn init_files( | |||||||
| 
 | 
 | ||||||
|     // But, for init process, we initialize file table for it
 |     // But, for init process, we initialize file table for it
 | ||||||
|     let mut file_table = FileTable::new(); |     let mut file_table = FileTable::new(); | ||||||
|     let stdin: Arc<Box<dyn File>> = Arc::new(Box::new(StdinFile::new( |     let stdin: Arc<dyn File> = | ||||||
|         host_stdio_fds.unwrap().stdin_fd as FileDesc, |         Arc::new(StdinFile::new(host_stdio_fds.unwrap().stdin_fd as FileDesc)); | ||||||
|     ))); |     let stdout: Arc<dyn File> = Arc::new(StdoutFile::new( | ||||||
|     let stdout: Arc<Box<dyn File>> = Arc::new(Box::new(StdoutFile::new( |  | ||||||
|         host_stdio_fds.unwrap().stdout_fd as FileDesc, |         host_stdio_fds.unwrap().stdout_fd as FileDesc, | ||||||
|     ))); |     )); | ||||||
|     let stderr: Arc<Box<dyn File>> = Arc::new(Box::new(StdoutFile::new( |     let stderr: Arc<dyn File> = Arc::new(StdoutFile::new( | ||||||
|         host_stdio_fds.unwrap().stderr_fd as FileDesc, |         host_stdio_fds.unwrap().stderr_fd as FileDesc, | ||||||
|     ))); |     )); | ||||||
| 
 | 
 | ||||||
|     file_table.put(stdin, false); |     file_table.put(stdin, false); | ||||||
|     file_table.put(stdout, false); |     file_table.put(stdout, false); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user