summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2020-02-03 12:03:15 +0100
committerEmilio Cobos Álvarez <emilio@crisal.io>2020-02-03 13:20:21 +0100
commitf96dcf97f09182093bc7b82cd5f9b388e89afc44 (patch)
tree2b9aebbbf0d7efdc0acf2cb8f1b042855df333fe /src
parent1d86a83a8767343528c283a1f6ac9f673bb4eb1a (diff)
options: Add an opt-in to recover the size_t behavior removed in 5d38f2ac.
Diffstat (limited to 'src')
-rw-r--r--src/codegen/mod.rs6
-rw-r--r--src/lib.rs14
-rw-r--r--src/options.rs7
3 files changed, 27 insertions, 0 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index ab62b135..9a3b10d7 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -4126,8 +4126,14 @@ mod utils {
"int64_t" => primitive_ty(ctx, "i64"),
"uint64_t" => primitive_ty(ctx, "u64"),
+ "size_t" if ctx.options().size_t_is_usize => {
+ primitive_ty(ctx, "usize")
+ }
"uintptr_t" => primitive_ty(ctx, "usize"),
+ "ssize_t" if ctx.options().size_t_is_usize => {
+ primitive_ty(ctx, "isize")
+ }
"intptr_t" | "ptrdiff_t" => primitive_ty(ctx, "isize"),
_ => return None,
})
diff --git a/src/lib.rs b/src/lib.rs
index 97fbdf01..4a8b8d8a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -604,6 +604,10 @@ impl Builder {
output_vector.push("--no-record-matches".into());
}
+ if self.options.size_t_is_usize {
+ output_vector.push("--size_t-is-usize".into());
+ }
+
if !self.options.rustfmt_bindings {
output_vector.push("--no-rustfmt-bindings".into());
}
@@ -1350,6 +1354,12 @@ impl Builder {
self
}
+ /// Set whether `size_t` should be translated to `usize` automatically.
+ pub fn size_t_is_usize(mut self, is: bool) -> Self {
+ self.options.size_t_is_usize = is;
+ self
+ }
+
/// Set whether rustfmt should format the generated bindings.
pub fn rustfmt_bindings(mut self, doit: bool) -> Self {
self.options.rustfmt_bindings = doit;
@@ -1776,6 +1786,9 @@ struct BindgenOptions {
/// items via the `error!` log.
record_matches: bool,
+ /// Whether `size_t` should be translated to `usize` automatically.
+ size_t_is_usize: bool,
+
/// Whether rustfmt should format the generated bindings.
rustfmt_bindings: bool,
@@ -1917,6 +1930,7 @@ impl Default for BindgenOptions {
time_phases: false,
record_matches: true,
rustfmt_bindings: true,
+ size_t_is_usize: false,
rustfmt_configuration_file: None,
no_partialeq_types: Default::default(),
no_copy_types: Default::default(),
diff --git a/src/options.rs b/src/options.rs
index 01982f13..b630bb4b 100644
--- a/src/options.rs
+++ b/src/options.rs
@@ -383,6 +383,9 @@ where
"Do not record matching items in the regex sets. \
This disables reporting of unused items.",
),
+ Arg::with_name("size_t-is-usize")
+ .long("size_t-is-usize")
+ .help("Translate size_t to usize."),
Arg::with_name("no-rustfmt-bindings")
.long("no-rustfmt-bindings")
.help("Do not format the generated bindings with rustfmt."),
@@ -763,6 +766,10 @@ where
builder = builder.record_matches(false);
}
+ if matches.is_present("size_t-is-usize") {
+ builder = builder.size_t_is_usize(true);
+ }
+
let no_rustfmt_bindings = matches.is_present("no-rustfmt-bindings");
if no_rustfmt_bindings {
builder = builder.rustfmt_bindings(false);