diff --git a/.gitignore b/.gitignore index f5383ee..9a67810 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ Image.dmg.trustcache .DS_Store *.pcap idevice.h +plist.h /ffi/examples/build /.cache /ffi/examples/.cache diff --git a/Cargo.lock b/Cargo.lock index 0d67243..fa93e66 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1153,6 +1153,7 @@ dependencies = [ "plist_ffi", "simplelog", "tokio", + "ureq", ] [[package]] diff --git a/ffi/Cargo.toml b/ffi/Cargo.toml index 29756ab..f9fc7a9 100644 --- a/ffi/Cargo.toml +++ b/ffi/Cargo.toml @@ -72,6 +72,7 @@ default = ["full", "aws-lc"] [build-dependencies] cbindgen = "0.29.0" +ureq = "3" [lib] crate-type = ["staticlib"] diff --git a/ffi/build.rs b/ffi/build.rs index b777e71..bbf09be 100644 --- a/ffi/build.rs +++ b/ffi/build.rs @@ -12,10 +12,20 @@ fn main() { ) .with_language(cbindgen::Language::C) .with_sys_include("sys/socket.h") - .with_sys_include("plist/plist.h") + .with_include("plist.h") .generate() .expect("Unable to generate bindings") .write_to_file("idevice.h"); + // download plist.h + let h = ureq::get("https://raw.githubusercontent.com/libimobiledevice/libplist/refs/heads/master/include/plist/plist.h") + .call() + .expect("failed to download plist.h"); + let h = h + .into_body() + .read_to_string() + .expect("failed to get string content"); + std::fs::write("plist.h", h).expect("failed to save to string"); + println!("cargo:rustc-link-arg=-lplist-2.0"); } diff --git a/ffi/examples/lockdownd.c b/ffi/examples/lockdownd.c index ad92b39..6658d15 100644 --- a/ffi/examples/lockdownd.c +++ b/ffi/examples/lockdownd.c @@ -1,7 +1,7 @@ // Jackson Coxson #include "idevice.h" -#include "plist/plist.h" +#include "plist.h" #include #include #include @@ -122,7 +122,7 @@ int main() { // Get all values plist_t all_values = NULL; - err = lockdownd_get_all_values(client, NULL, &all_values); + err = lockdownd_get_value(client, NULL, NULL, &all_values); if (err != NULL) { fprintf(stderr, "Failed to get all values: [%d] %s", err->code, err->message);