diff options
author | 2010-07-09 16:35:17 +0200 | |
---|---|---|
committer | 2010-07-09 16:35:17 +0200 | |
commit | bfcd784574ace78f9923213e3d260302d28b54c8 (patch) | |
tree | 26c6f91d1add193cbb5fac33338b6113a8879f00 /src/ipsw.c | |
parent | d80d5b462061022fac7e1a57d6a05c54499e042d (diff) | |
download | idevicerestore-bfcd784574ace78f9923213e3d260302d28b54c8.tar.gz idevicerestore-bfcd784574ace78f9923213e3d260302d28b54c8.tar.bz2 |
Refactor manifest extraction
Diffstat (limited to 'src/ipsw.c')
-rw-r--r-- | src/ipsw.c | 22 |
1 files changed, 22 insertions, 0 deletions
@@ -173,6 +173,28 @@ int ipsw_extract_to_memory(const char* ipsw, const char* infile, char** pbuffer, return 0; } +int ipsw_extract_build_manifest(const char* ipsw, plist_t* buildmanifest) { + int size = 0; + char* data = NULL; + + /* older devices don't require personalized firmwares and use a BuildManifesto.plist */ + if (ipsw_extract_to_memory(ipsw, "BuildManifesto.plist", &data, &size) == 0) { + plist_from_xml(data, size, buildmanifest); + return 0; + } + + data = NULL; + size = 0; + + /* whereas newer devices do not require personalized firmwares and use a BuildManifest.plist */ + if (ipsw_extract_to_memory(ipsw, "BuildManifest.plist", &data, &size) == 0) { + plist_from_xml(data, size, buildmanifest); + return 0; + } + + return -1; +} + void ipsw_close(ipsw_archive* archive) { if (archive != NULL) { zip_unchange_all(archive->zip); |