Skip to content

Update bindgen to 0.69 #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{ nixpkgs ? import <nixpkgs> {} }:

nixpkgs.mkShell {
buildInputs = [
nixpkgs.pkg-config
nixpkgs.clang
nixpkgs.libclang
nixpkgs.libvncserver
nixpkgs.libvncserver.dev
];

LIBCLANG_PATH = "${nixpkgs.libclang.lib}/lib";
LIBVNCSERVER_HEADER_FILE = "${nixpkgs.libvncserver.dev}/include/rfb/rfb.h";
}
3 changes: 1 addition & 2 deletions examples/sample/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ fn main() {
println!("Hello, world!");

let server = rfb_get_screen(400, 300, 8, 3, 4);
rfb_framebuffer_malloc(server, 400*300*4);
rfb_framebuffer_malloc(server, 400 * 300 * 4);
rfb_init_server(server);
rfb_run_event_loop(server, -1, 0);
}

5 changes: 2 additions & 3 deletions examples/sample16/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ use vncserver::*;

fn main() {
let server = rfb_get_screen(400, 300, 5, 3, 2);
rfb_framebuffer_malloc(server, 400*300*2);
rfb_framebuffer_malloc(server, 400 * 300 * 2);

let mut j = 0;
let mut j = 0;
while j < 100 {
for i in 0..400 {
rfb_framebuffer_set_rgb16(server, i, j, 0xF800);
Expand All @@ -30,4 +30,3 @@ fn main() {
rfb_framebuffer_free(server);
rfb_screen_cleanup(server);
}

2 changes: 1 addition & 1 deletion vncserver/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ name = "vncserver"
[dependencies]

[build-dependencies]
bindgen = "0.58"
bindgen = "0.69"
pkg-config = "0.3"
cc = "1.0"
20 changes: 14 additions & 6 deletions vncserver/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,30 @@ use std::env;
use std::path::PathBuf;

fn bindgen_vncserver() {
let libvncserver= pkg_config::probe_library("libvncserver").unwrap();
let libvncserver = pkg_config::probe_library("libvncserver").unwrap();

let link_paths = format!("{}", libvncserver.link_paths[0].to_str().unwrap());
let lib_path = PathBuf::from(env::current_dir().unwrap().join(link_paths));
let link_paths = libvncserver.link_paths[0].to_str().unwrap();
let lib_path = env::current_dir().unwrap().join(link_paths);

println!("cargo:rustc-link-search={}", lib_path.display());
println!("cargo:rustc-link-lib=dylib=vncserver");

let header = format!("{}/{}", libvncserver.include_paths[0].to_str().unwrap(), "rfb/rfb.h");
let header_file = match env::var("LIBVNCSERVER_HEADER_FILE") {
Ok(header_file) => header_file,
Err(_) => format!(
"{}/rfb/rfb.h",
libvncserver.include_paths[0].to_str().unwrap(),
),
};

let bindings = bindgen::Builder::default()
.header(header)
.header(header_file)
.generate()
.expect("unable to generate rfb bindings");

let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings.write_to_file(out_path.join("rfb.rs"))
bindings
.write_to_file(out_path.join("rfb.rs"))
.expect("couldn't write bindings!");
}

Expand Down
30 changes: 20 additions & 10 deletions vncserver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@
//!
//! ```no_run
//! use vncserver::*;
//! fn main() {
//! let server = rfb_get_screen(400, 300, 8, 3, 4);
//! rfb_framebuffer_malloc(server, 400*300*4);
//! rfb_init_server(server);
//! rfb_run_event_loop(server, -1, 0);
//! }
//!
//! let server = rfb_get_screen(400, 300, 8, 3, 4);
//! rfb_framebuffer_malloc(server, 400 * 300 * 4);
//! rfb_init_server(server);
//! rfb_run_event_loop(server, -1, 0);
//! ```

mod rfb;
Expand All @@ -31,7 +30,7 @@ pub const RFB_TRUE: i8 = 1;
/// depth: ::std::os::raw::c_int,
/// bitsPerPixel: ::std::os::raw::c_int,
/// sizeInBytes: ::std::os::raw::c_int,
/// ...
/// // ...
/// }
/// ```
pub type RfbScreenInfoPtr = rfb::rfbScreenInfoPtr;
Expand All @@ -40,9 +39,20 @@ pub type RfbBool = rfb::rfbBool;
pub type RfbKeySym = rfb::rfbKeySym;
pub type RfbClientRec = rfb::rfbClientRec;


pub fn rfb_get_screen(width: i32, height: i32, bits_per_sample: i32, samples_per_pixel: i32, bytes_per_pixel: i32) -> RfbScreenInfoPtr {
rfb::rfb_get_screen(width, height, bits_per_sample, samples_per_pixel, bytes_per_pixel)
pub fn rfb_get_screen(
width: i32,
height: i32,
bits_per_sample: i32,
samples_per_pixel: i32,
bytes_per_pixel: i32,
) -> RfbScreenInfoPtr {
rfb::rfb_get_screen(
width,
height,
bits_per_sample,
samples_per_pixel,
bytes_per_pixel,
)
}

pub fn rfb_screen_cleanup(ptr: RfbScreenInfoPtr) {
Expand Down
53 changes: 32 additions & 21 deletions vncserver/src/rfb/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,32 @@
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(clippy::upper_case_acronyms)]

use std;
use core::slice;

include!(concat!(std::env!("OUT_DIR"), "/rfb.rs"));


pub fn rfb_get_screen(width: i32, height: i32, bits_per_sample: i32, samples_per_pixel: i32, bytes_per_pixel: i32) -> rfbScreenInfoPtr {
let mut arg_len = 0 as i32;
let mut arg_ptr: *mut i8 = std::ptr::null_mut();
pub fn rfb_get_screen(
width: i32,
height: i32,
bits_per_sample: i32,
samples_per_pixel: i32,
bytes_per_pixel: i32,
) -> rfbScreenInfoPtr {
let mut arg_len = 0;
let mut arg_ptr: *mut ::std::os::raw::c_char = std::ptr::null_mut();

unsafe {
let server = rfbGetScreen(&mut arg_len, &mut arg_ptr, width, height, bits_per_sample, samples_per_pixel, bytes_per_pixel);
server
rfbGetScreen(
&mut arg_len,
&mut arg_ptr,
width,
height,
bits_per_sample,
samples_per_pixel,
bytes_per_pixel,
)
}
}

Expand All @@ -28,7 +40,8 @@ pub fn rfb_screen_cleanup(ptr: rfbScreenInfoPtr) {

pub fn rfb_framebuffer_malloc(ptr: rfbScreenInfoPtr, fb_size: u64) {
unsafe {
(*ptr).frameBuffer = malloc(fb_size as ::std::os::raw::c_ulong) as *mut i8;
(*ptr).frameBuffer =
malloc(fb_size as ::std::os::raw::c_ulong) as *mut ::std::os::raw::c_char;
}
}

Expand All @@ -39,21 +52,19 @@ pub fn rfb_framebuffer_free(ptr: rfbScreenInfoPtr) {
}

pub fn rfb_framebuffer_set_rgb16(ptr: rfbScreenInfoPtr, x: i32, y: i32, rgb16: u16) {
unsafe {
unsafe {
let addr = (*ptr).frameBuffer as *mut u16;
let fb_size = (*ptr).height * (*ptr).width * (*ptr).bitsPerPixel / 2;
let slice: &mut [u16] = slice::from_raw_parts_mut(addr, fb_size as usize);
let pos = (*ptr).width*y + x;
let pos = (*ptr).width * y + x;
if pos < fb_size {
slice[pos as usize] = rgb16;
}
}
}
}

pub fn rfb_process_events(ptr: rfbScreenInfoPtr, usec: i64) -> rfbBool {
unsafe {
rfbProcessEvents(ptr, usec as ::std::os::raw::c_long)
}
unsafe { rfbProcessEvents(ptr, usec as ::std::os::raw::c_long) }
}

pub fn rfb_kbd_add_event(ptr: rfbScreenInfoPtr, cb: rfbKbdAddEventProcPtr) {
Expand All @@ -63,19 +74,19 @@ pub fn rfb_kbd_add_event(ptr: rfbScreenInfoPtr, cb: rfbKbdAddEventProcPtr) {
}

pub fn rfb_mark_rect_as_modified(ptr: rfbScreenInfoPtr, x1: i32, y1: i32, x2: i32, y2: i32) {
unsafe {
rfbMarkRectAsModified(ptr,
unsafe {
rfbMarkRectAsModified(
ptr,
x1 as ::std::os::raw::c_int,
y1 as ::std::os::raw::c_int,
x2 as ::std::os::raw::c_int,
y2 as ::std::os::raw::c_int);
}
y2 as ::std::os::raw::c_int,
);
}
}

pub fn rfb_is_active(ptr: rfbScreenInfoPtr) -> rfbBool {
unsafe {
rfbIsActive(ptr)
}
unsafe { rfbIsActive(ptr) }
}

pub fn rfb_init_server(ptr: rfbScreenInfoPtr) {
Expand Down