#ioctl #numbers #encode #control #linux

ioctl-gen

Simple macros for generating ioctl numbers

2 releases

Uses old Rust 2015

0.1.1 Jan 7, 2017
0.1.0 Jan 7, 2017

#2288 in Rust patterns

Download history 126/week @ 2023-12-18 63/week @ 2023-12-25 110/week @ 2024-01-01 145/week @ 2024-01-08 158/week @ 2024-01-15 223/week @ 2024-01-22 137/week @ 2024-01-29 86/week @ 2024-02-05 174/week @ 2024-02-12 171/week @ 2024-02-19 221/week @ 2024-02-26 186/week @ 2024-03-04 151/week @ 2024-03-11 243/week @ 2024-03-18 237/week @ 2024-03-25 194/week @ 2024-04-01

839 downloads per month
Used in 4 crates (3 directly)

MIT license

5KB
64 lines

#6 ioctl-gen

Documentation

Making those magic ioctl numbers is really annoying without macros, so here are some macros. And if you were wondering, yes, they work in constants.

Example

#[macro_use]
extern crate ioctlify;

// Taken from <linux/videodev2.h>
const VIDIOC_RESERVED:   u32 = io!(b'V', 1);
const VIDIOC_STREAMON:   u32 = iow!(b'V', 18, 4);
const VIDIOC_LOG_STATUS: u32 = io!(b'V', 70);

assert_eq!(ioc_type!(VIDIOC_RESERVED), b'V' as u32);
assert_eq!(VIDIOC_STREAMON, 1074026002);
assert_eq!(ioc_nr!(VIDIOC_LOG_STATUS), 70);

Installation

In Cargo.toml:

[dependencies]
ioctl-gen = "0.1.0"

License

The MIT license.


lib.rs:

This crate lets you encode and decode ioctl numbers. It's pretty much just a port of ioctl.h.

Here are some examples:

#[macro_use]
extern crate ioctlify;

// Taken from <linux/videodev2.h>
const VIDIOC_RESERVED:   u32 = io!(b'V', 1);
const VIDIOC_STREAMON:   u32 = iow!(b'V', 18, 4);
const VIDIOC_LOG_STATUS: u32 = io!(b'V', 70);

assert_eq!(ioc_type!(VIDIOC_RESERVED), b'V' as u32);
assert_eq!(VIDIOC_STREAMON, 1074026002);
assert_eq!(ioc_nr!(VIDIOC_LOG_STATUS), 70);

No runtime deps