https://github.com/toku-sa-n/aligned_ptr
A Rust library that ensures a pointer is aligned correctly for dereferencing
https://github.com/toku-sa-n/aligned_ptr
pointer rust
Last synced: 9 months ago
JSON representation
A Rust library that ensures a pointer is aligned correctly for dereferencing
- Host: GitHub
- URL: https://github.com/toku-sa-n/aligned_ptr
- Owner: toku-sa-n
- License: apache-2.0
- Created: 2021-06-08T09:49:02.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-06-10T01:25:34.000Z (over 4 years ago)
- Last Synced: 2025-02-28T04:30:09.993Z (10 months ago)
- Topics: pointer, rust
- Language: Rust
- Homepage: https://crates.io/crates/aligned_ptr
- Size: 49.8 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# `aligned_ptr`
A Rust library that ensures a pointer is aligned correctly before dereferencing it.
This library contains unsafe functions defined in `core::ptr` and `core::slice` (except `read_unaligned` and `write_unaligned`). All functions defined in this crate check whether the passed pointers are aligned correctly and not null.
This crate is intended to prevent from dereferencing to the unaligned address. For example the below code example panics because `p` points to an unaligned address. If we import `core::ptr` instead of `aligned_ptr::ptr`, this code may run successfully. However, reading a value from unaligned pointer causes *undefined behaviors* (except `read_unaligned`).
```rust
use aligned_ptr::ptr;
fn main() {
let x = 0xdeadbeaf_u32;
let p = (&x as *const u32 as usize + 1) as *const u16;
unsafe { ptr::read(p) };
}
```
This crate supports the `no_std` environment.
## License
Licensed under either of
* Apache License, Version 2.0
([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license
([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.
## Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.