From e9a06bb9a2802a5ae6011fcd96cf54e1cfc7d311 Mon Sep 17 00:00:00 2001 From: Robin Krahl Date: Sun, 20 Sep 2020 05:01:06 +0200 Subject: Derive Default for libnitrokey structs This patch adds the --with-derive-default option to the bindgen invocation so that it derives Default implementations for all libnitrokey structs. This allows us to simplify code in nitrokey-rs, for example the initialization of structs that are used in nitrokey-sys functions with output parameters. --- CHANGELOG.md | 3 +++ Makefile | 1 + patches/deprecated.diff | 4 ++-- src/ffi.rs | 15 ++++++++++----- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a440ca1..a7af9fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# Unreleased +- Derive `Debug` for all structs generated by `bindgen`. + # v3.5.0 (2019-07-04) - Mark deprecated functions using the `deprecated` attribute. - Update to libnitrokey 3.5, causing all following changes. diff --git a/Makefile b/Makefile index bf47813..9d04632 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ src/ffi.rs: ${LIBNITROKEY}/NK_C_API.h --whitelist-function "NK_.*" \ --whitelist-var "NK_.*" \ --whitelist-var "MAXIMUM_STR_REPLY_LENGTH" \ + --with-derive-default \ --output "$@" \ "$<" \ -- "-I${LIBNITROKEY}/libnitrokey" diff --git a/patches/deprecated.diff b/patches/deprecated.diff index a7d2359..c814812 100644 --- a/patches/deprecated.diff +++ b/patches/deprecated.diff @@ -6,7 +6,7 @@ Index: nitrokey-sys-rs/src/ffi.rs =================================================================== --- nitrokey-sys-rs.orig/src/ffi.rs +++ nitrokey-sys-rs/src/ffi.rs -@@ -762,6 +762,7 @@ extern "C" { +@@ -767,6 +767,7 @@ extern "C" { #[doc = " deprecated in favor of NK_get_status_as_string."] #[doc = " @return string representation of the status or an empty string"] #[doc = " if the command failed"] @@ -14,7 +14,7 @@ Index: nitrokey-sys-rs/src/ffi.rs pub fn NK_status() -> *mut ::std::os::raw::c_char; } extern "C" { -@@ -1017,6 +1018,7 @@ extern "C" { +@@ -1022,6 +1023,7 @@ extern "C" { pub fn NK_totp_set_time_soft(time: u64) -> ::std::os::raw::c_int; } extern "C" { diff --git a/src/ffi.rs b/src/ffi.rs index 810660f..f81982e 100644 --- a/src/ffi.rs +++ b/src/ffi.rs @@ -79,9 +79,14 @@ fn bindgen_test_layout_NK_device_info() { ) ); } +impl Default for NK_device_info { + fn default() -> Self { + unsafe { ::std::mem::zeroed() } + } +} #[doc = " Stores the common device status for all Nitrokey devices."] #[repr(C)] -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone)] pub struct NK_status { #[doc = " The major firmware version, e. g. 0 in v0.40."] pub firmware_version_major: u8, @@ -196,7 +201,7 @@ fn bindgen_test_layout_NK_status() { } #[doc = " Stores the status of a Storage device."] #[repr(C)] -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone)] pub struct NK_storage_status { #[doc = " Indicates whether the unencrypted volume is read-only."] pub unencrypted_volume_read_only: bool, @@ -447,7 +452,7 @@ fn bindgen_test_layout_NK_storage_status() { } #[doc = " Data about the usage of the SD card."] #[repr(C)] -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone)] pub struct NK_SD_usage_data { #[doc = " The minimum write level, as a percentage of the total card"] #[doc = " size."] @@ -494,7 +499,7 @@ fn bindgen_test_layout_NK_SD_usage_data() { ); } #[repr(C)] -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone)] pub struct NK_storage_ProductionTest { pub FirmwareVersion_au8: [u8; 2usize], pub FirmwareVersionInternal_u8: u8, @@ -1416,7 +1421,7 @@ extern "C" { ) -> ::std::os::raw::c_int; } #[repr(C)] -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone)] pub struct ReadSlot_t { pub slot_name: [u8; 15usize], pub _slot_config: u8, -- cgit v1.2.1