Add a Scheme supertrait for kernel-only methods.
This commit is contained in:
@@ -288,3 +288,4 @@ impl Scheme for AcpiScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for AcpiScheme {}
|
||||
|
||||
@@ -165,3 +165,4 @@ impl Scheme for DebugScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for DebugScheme {}
|
||||
|
||||
@@ -71,3 +71,4 @@ impl Scheme for EventScheme {
|
||||
queues_mut().remove(&id).ok_or(Error::new(EBADF)).and(Ok(0))
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for EventScheme {}
|
||||
|
||||
@@ -273,3 +273,4 @@ impl Scheme for InitFsScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for InitFsScheme {}
|
||||
|
||||
@@ -371,3 +371,4 @@ impl Scheme for IrqScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for IrqScheme {}
|
||||
|
||||
@@ -106,3 +106,4 @@ impl Scheme for ITimerScheme {
|
||||
self.handles.write().remove(&id).ok_or(Error::new(EBADF)).and(Ok(0))
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for ITimerScheme {}
|
||||
|
||||
@@ -202,3 +202,4 @@ impl Scheme for DiskScheme {
|
||||
self.handles.write().remove(&id).ok_or(Error::new(EBADF)).and(Ok(0))
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for DiskScheme {}
|
||||
|
||||
@@ -85,3 +85,4 @@ impl Scheme for MemoryScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for MemoryScheme {}
|
||||
|
||||
@@ -107,7 +107,7 @@ impl<'a> Iterator for SchemeIter<'a> {
|
||||
|
||||
/// Scheme list type
|
||||
pub struct SchemeList {
|
||||
map: BTreeMap<SchemeId, Arc<dyn Scheme + Send + Sync>>,
|
||||
map: BTreeMap<SchemeId, Arc<dyn KernelScheme + Send + Sync>>,
|
||||
names: BTreeMap<SchemeNamespace, BTreeMap<Box<str>, SchemeId>>,
|
||||
next_ns: usize,
|
||||
next_id: usize
|
||||
@@ -201,7 +201,7 @@ impl SchemeList {
|
||||
Ok(to)
|
||||
}
|
||||
|
||||
pub fn iter(&self) -> ::alloc::collections::btree_map::Iter<SchemeId, Arc<dyn Scheme + Send + Sync>> {
|
||||
pub fn iter(&self) -> ::alloc::collections::btree_map::Iter<SchemeId, Arc<dyn KernelScheme + Send + Sync>> {
|
||||
self.map.iter()
|
||||
}
|
||||
|
||||
@@ -212,11 +212,11 @@ impl SchemeList {
|
||||
}
|
||||
|
||||
/// Get the nth scheme.
|
||||
pub fn get(&self, id: SchemeId) -> Option<&Arc<dyn Scheme + Send + Sync>> {
|
||||
pub fn get(&self, id: SchemeId) -> Option<&Arc<dyn KernelScheme + Send + Sync>> {
|
||||
self.map.get(&id)
|
||||
}
|
||||
|
||||
pub fn get_name(&self, ns: SchemeNamespace, name: &str) -> Option<(SchemeId, &Arc<dyn Scheme + Send + Sync>)> {
|
||||
pub fn get_name(&self, ns: SchemeNamespace, name: &str) -> Option<(SchemeId, &Arc<dyn KernelScheme + Send + Sync>)> {
|
||||
if let Some(names) = self.names.get(&ns) {
|
||||
if let Some(&id) = names.get(name) {
|
||||
return self.get(id).map(|scheme| (id, scheme));
|
||||
@@ -227,7 +227,7 @@ impl SchemeList {
|
||||
|
||||
/// Create a new scheme.
|
||||
pub fn insert<F>(&mut self, ns: SchemeNamespace, name: &str, scheme_fn: F) -> Result<SchemeId>
|
||||
where F: Fn(SchemeId) -> Arc<dyn Scheme + Send + Sync>
|
||||
where F: Fn(SchemeId) -> Arc<dyn KernelScheme + Send + Sync>
|
||||
{
|
||||
if let Some(names) = self.names.get(&ns) {
|
||||
if names.contains_key(name) {
|
||||
@@ -298,3 +298,5 @@ pub fn schemes() -> RwLockReadGuard<'static, SchemeList> {
|
||||
pub fn schemes_mut() -> RwLockWriteGuard<'static, SchemeList> {
|
||||
SCHEMES.call_once(init_schemes).write()
|
||||
}
|
||||
|
||||
pub trait KernelScheme: Scheme + Send + Sync + 'static {}
|
||||
|
||||
@@ -264,3 +264,4 @@ impl Drop for PipeWrite {
|
||||
self.condition.notify();
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for PipeScheme {}
|
||||
|
||||
@@ -824,3 +824,4 @@ impl Scheme for ProcScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for ProcScheme {}
|
||||
|
||||
@@ -344,3 +344,4 @@ impl Scheme for RootScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for RootScheme {}
|
||||
|
||||
@@ -162,3 +162,4 @@ impl Scheme for SerioScheme {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for SerioScheme {}
|
||||
|
||||
@@ -170,3 +170,4 @@ impl Scheme for SysScheme {
|
||||
self.handles.write().remove(&id).ok_or(Error::new(EBADF)).and(Ok(0))
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for SysScheme {}
|
||||
|
||||
@@ -117,3 +117,4 @@ impl Scheme for TimeScheme {
|
||||
self.handles.write().remove(&id).ok_or(Error::new(EBADF)).and(Ok(0))
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for TimeScheme {}
|
||||
|
||||
@@ -528,3 +528,4 @@ impl Scheme for UserScheme {
|
||||
inner.call(SYS_CLOSE, file, 0, 0)
|
||||
}
|
||||
}
|
||||
impl crate::scheme::KernelScheme for UserScheme {}
|
||||
|
||||
Reference in New Issue
Block a user