Skip to content

Commit

Permalink
Changed OSAL bindings to use OsalError
Browse files Browse the repository at this point in the history
This seems approrpriate, as OsalError is a type to represent OSAL error
return values.
  • Loading branch information
zec committed Sep 26, 2023
1 parent 017b248 commit 64f94f7
Show file tree
Hide file tree
Showing 6 changed files with 255 additions and 362 deletions.
3 changes: 2 additions & 1 deletion n2o4/src/cfe/es.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
//! Executive Services system.

use super::{ResourceId, Status};
use crate::osal::OsalError;
use crate::utils::CStrBuf;
use cfs_sys::*;
use core::ffi::{c_char, c_void, CStr};
Expand Down Expand Up @@ -548,7 +549,7 @@ macro_rules! get_shared_sem {

match Sem::new(&CStrBuf::<{MAX_NAME_LEN - 1}>::new(&name) $(, $constructor_arg)*) {
Ok(sem) => { break sem; }
Err(OS_ERR_NAME_TAKEN) => (), // go around for another attempt
Err(OsalError::OS_ERR_NAME_TAKEN) => (), // go around for another attempt
Err(_) => { return Err(Status::STATUS_EXTERNAL_RESOURCE_FAIL); }
}

Expand Down
54 changes: 20 additions & 34 deletions n2o4/src/osal/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,19 @@ impl File {
path: &S,
flags: FileFlags,
access_mode: AccessMode,
) -> Result<Self, i32> {
) -> Result<Self, OsalError> {
let mut id: osal_id_t = X_OS_OBJECT_ID_UNDEFINED;

let retval = unsafe {
unsafe {
OS_OpenCreate(&mut id, path.as_ref().as_ptr(), flags.flag as i32, access_mode as i32)
};
}
.as_osal_status()?;

if retval >= 0 && (ObjectId { id }).obj_type() == OS_OBJECT_TYPE_OS_STREAM {
// some sanity checking of our own:
if (ObjectId { id }).obj_type() == OS_OBJECT_TYPE_OS_STREAM {
Ok(File { id })
} else {
Err(retval)
Err(OsalError::OS_ERR_INVALID_ID)
}
}

Expand All @@ -52,15 +54,11 @@ impl File {
/// Wraps `OS_read`.
#[doc(alias = "OS_read")]
#[inline]
pub fn read(&mut self, buf: &mut [u8]) -> Result<usize, i32> {
pub fn read(&mut self, buf: &mut [u8]) -> Result<usize, OsalError> {
let buffer = buf.as_mut_ptr() as *mut c_void;
let retval = unsafe { OS_read(self.id, buffer, buf.len()) };
let retval = unsafe { OS_read(self.id, buffer, buf.len()) }.as_osal_status()?;

if retval >= 0 {
Ok(retval as usize)
} else {
Err(retval)
}
Ok(retval as usize)
}

/// Writes up to `buf.len()` bytes from `buf`
Expand All @@ -72,15 +70,11 @@ impl File {
/// Wraps `OS_write`.
#[doc(alias = "OS_write")]
#[inline]
pub fn write(&mut self, buf: &[u8]) -> Result<usize, i32> {
pub fn write(&mut self, buf: &[u8]) -> Result<usize, OsalError> {
let buffer = buf.as_ptr() as *const c_void;
let retval = unsafe { OS_write(self.id, buffer, buf.len()) };
let retval = unsafe { OS_write(self.id, buffer, buf.len()) }.as_osal_status()?;

if retval >= 0 {
Ok(retval as usize)
} else {
Err(retval)
}
Ok(retval as usize)
}

/// Seeks the file handle `self`
Expand All @@ -92,29 +86,21 @@ impl File {
/// Wraps `OS_lseek`.
#[doc(alias = "OS_lseek")]
#[inline]
pub fn lseek(&mut self, offset: i32, whence: SeekReference) -> Result<u32, i32> {
let retval = unsafe { OS_lseek(self.id, offset, whence as u32) };
pub fn lseek(&mut self, offset: i32, whence: SeekReference) -> Result<u32, OsalError> {
let retval = unsafe { OS_lseek(self.id, offset, whence as u32) }.as_osal_status()?;

if retval >= 0 {
Ok(retval as u32)
} else {
Err(retval)
}
Ok(retval as u32)
}

/// Closes the file handle `self`.
///
/// Wraps `OS_close`.
#[doc(alias = "OS_close")]
#[inline]
pub fn close(self) -> Result<(), i32> {
let retval = unsafe { OS_close(self.id) };
pub fn close(self) -> Result<(), OsalError> {
unsafe { OS_close(self.id) }.as_osal_status()?;

if retval >= 0 {
Ok(())
} else {
Err(retval)
}
Ok(())
}

/// Returns the [`ObjectId`] for the file.
Expand Down Expand Up @@ -152,7 +138,7 @@ impl OwnedFile {
path: &S,
flags: FileFlags,
access_mode: AccessMode,
) -> Result<Self, i32> {
) -> Result<Self, OsalError> {
File::open_create(path, flags, access_mode).map(|f| OwnedFile { f })
}
}
Expand Down
3 changes: 1 addition & 2 deletions n2o4/src/osal/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use cfs_sys::*;
use core::ffi::c_ulong;

use crate::utils::NegativeI32;
pub(crate) use error::I32Ext;

pub(crate) mod error;
pub mod file;
Expand All @@ -21,8 +22,6 @@ pub mod task;
/// The length includes the null terminator.
pub const MAX_NAME_LEN: usize = OS_MAX_API_NAME as usize;

const I_OS_SUCCESS: i32 = OS_SUCCESS as i32;

/// An error code, as returned by many OSAL API functions.
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub struct OsalError {
Expand Down
Loading

0 comments on commit 64f94f7

Please sign in to comment.