#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

#2311 in Rust patterns

Download history 155/week @ 2024-04-08 148/week @ 2024-04-15 116/week @ 2024-04-22 161/week @ 2024-04-29 182/week @ 2024-05-06 202/week @ 2024-05-13 202/week @ 2024-05-20 209/week @ 2024-05-27 201/week @ 2024-06-03 161/week @ 2024-06-10 181/week @ 2024-06-17 110/week @ 2024-06-24 121/week @ 2024-07-01 113/week @ 2024-07-08 77/week @ 2024-07-15 362/week @ 2024-07-22

691 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