diff options
Diffstat (limited to 'tools/idevicebackup.c')
| -rw-r--r-- | tools/idevicebackup.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tools/idevicebackup.c b/tools/idevicebackup.c index 58301f5..04e633e 100644 --- a/tools/idevicebackup.c +++ b/tools/idevicebackup.c | |||
| @@ -269,6 +269,30 @@ static void mobilebackup_write_status(const char *path, int status) | |||
| 269 | g_free(file_path); | 269 | g_free(file_path); |
| 270 | } | 270 | } |
| 271 | 271 | ||
| 272 | static int mobilebackup_read_status(const char *path) | ||
| 273 | { | ||
| 274 | int ret = -1; | ||
| 275 | plist_t status_plist = NULL; | ||
| 276 | gchar *file_path = mobilebackup_build_path(path, "Status", ".plist"); | ||
| 277 | |||
| 278 | plist_read_from_filename(&status_plist, file_path); | ||
| 279 | g_free(file_path); | ||
| 280 | if (!status_plist) { | ||
| 281 | printf("Could not read Status.plist!\n"); | ||
| 282 | return ret; | ||
| 283 | } | ||
| 284 | plist_t node = plist_dict_get_item(status_plist, "Backup Success"); | ||
| 285 | if (node && (plist_get_node_type(node) == PLIST_BOOLEAN)) { | ||
| 286 | uint8_t bval = 0; | ||
| 287 | plist_get_bool_val(node, &bval); | ||
| 288 | ret = bval; | ||
| 289 | } else { | ||
| 290 | printf("%s: ERROR could not get Backup Success key from Status.plist!\n", __func__); | ||
| 291 | } | ||
| 292 | plist_free(status_plist); | ||
| 293 | return ret; | ||
| 294 | } | ||
| 295 | |||
| 272 | static int mobilebackup_info_is_current_device(plist_t info) | 296 | static int mobilebackup_info_is_current_device(plist_t info) |
| 273 | { | 297 | { |
| 274 | plist_t value_node = NULL; | 298 | plist_t value_node = NULL; |
| @@ -874,6 +898,10 @@ int main(int argc, char *argv[]) | |||
| 874 | case CMD_RESTORE: | 898 | case CMD_RESTORE: |
| 875 | /* TODO: verify battery on AC enough battery remaining */ | 899 | /* TODO: verify battery on AC enough battery remaining */ |
| 876 | /* verify if Status.plist says we read from an successful backup */ | 900 | /* verify if Status.plist says we read from an successful backup */ |
| 901 | if (mobilebackup_read_status(backup_directory) <= 0) { | ||
| 902 | printf("ERROR: Cannot ensure we restore from a successful backup. Aborting.\n"); | ||
| 903 | break; | ||
| 904 | } | ||
| 877 | /* now make sure backup integrity is ok! verify all files */ | 905 | /* now make sure backup integrity is ok! verify all files */ |
| 878 | /* loop over Files entries in Manifest data plist */ | 906 | /* loop over Files entries in Manifest data plist */ |
| 879 | /* make sure both .mddata/.mdinfo files are available for each entry */ | 907 | /* make sure both .mddata/.mdinfo files are available for each entry */ |
