summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorGravatar Martin Szulecki2010-01-25 04:56:45 +0100
committerGravatar Martin Szulecki2010-01-25 04:56:45 +0100
commit57d2586abd946b019095841038afb323026bfc16 (patch)
tree648b8a299b7bf203b35d45d592939488e10fcccd /tools
parentd25503b6a865d78eba373e7a71ba84f3e6a5a8cb (diff)
downloadlibimobiledevice-57d2586abd946b019095841038afb323026bfc16.tar.gz
libimobiledevice-57d2586abd946b019095841038afb323026bfc16.tar.bz2
Rename each received atomic temporary manifest to active one on backups
Diffstat (limited to 'tools')
-rw-r--r--tools/iphonebackup.c72
1 files changed, 42 insertions, 30 deletions
diff --git a/tools/iphonebackup.c b/tools/iphonebackup.c
index 5124ea5..c5ac49d 100644
--- a/tools/iphonebackup.c
+++ b/tools/iphonebackup.c
@@ -430,6 +430,7 @@ int main(int argc, char *argv[])
430 char *filename_source = NULL; 430 char *filename_source = NULL;
431 char *format_size = NULL; 431 char *format_size = NULL;
432 gboolean is_manifest = FALSE; 432 gboolean is_manifest = FALSE;
433 uint8_t b = 0;
433 do { 434 do {
434 mobilebackup_receive(mobilebackup, &message); 435 mobilebackup_receive(mobilebackup, &message);
435 node = plist_array_get_item(message, 0); 436 node = plist_array_get_item(message, 0);
@@ -452,32 +453,36 @@ int main(int argc, char *argv[])
452 plist_get_uint_val(node, &c); 453 plist_get_uint_val(node, &c);
453 454
454 /* get source filename */ 455 /* get source filename */
455 node = plist_dict_get_item(node_tmp, "DLFileSource"); 456 node = plist_dict_get_item(node_tmp, "BackupManifestKey");
456 plist_get_string_val(node, &filename_source); 457 b = 0;
457 458 if (node) {
458 if (!strcmp(filename_source, "/tmp/Manifest.plist")) 459 plist_get_bool_val(node, &b);
459 is_manifest = TRUE; 460 }
460 else 461 is_manifest = (b == 1) ? TRUE: FALSE;
461 is_manifest = FALSE; 462
462 463 /* increased received size for each completed file */
463 if (c == 2) { 464 if ((c == 2) && (!is_manifest)) {
464 /* increased received size for each completed file */ 465 /* get source filename */
465 if (!is_manifest) { 466 node = plist_dict_get_item(node_tmp, "DLFileSource");
466 node = plist_dict_get_item(node_tmp, "DLFileAttributesKey"); 467 plist_get_string_val(node, &filename_source);
467 node = plist_dict_get_item(node, "FileSize"); 468
468 plist_get_uint_val(node, &length); 469 node = plist_dict_get_item(node_tmp, "DLFileAttributesKey");
469 470 node = plist_dict_get_item(node, "FileSize");
470 backup_real_size += length; 471 plist_get_uint_val(node, &length);
471 file_index++; 472
472 473 backup_real_size += length;
473 format_size = g_format_size_for_display(backup_real_size); 474 file_index++;
474 printf("(%s", format_size); 475
475 g_free(format_size); 476 format_size = g_format_size_for_display(backup_real_size);
476 format_size = g_format_size_for_display(backup_total_size); 477 printf("(%s", format_size);
477 printf("/%s): ", format_size); 478 g_free(format_size);
478 g_free(format_size); 479 format_size = g_format_size_for_display(backup_total_size);
479 printf("Received file %s... ", filename_source); 480 printf("/%s): ", format_size);
480 } 481 g_free(format_size);
482 printf("Received file %s... ", filename_source);
483
484 if (filename_source)
485 free(filename_source);
481 } 486 }
482 487
483 /* save <hash>.mdinfo */ 488 /* save <hash>.mdinfo */
@@ -498,11 +503,21 @@ int main(int argc, char *argv[])
498 if (node_tmp && file_path) { 503 if (node_tmp && file_path) {
499 node = plist_dict_get_item(node_tmp, "DLFileDest"); 504 node = plist_dict_get_item(node_tmp, "DLFileDest");
500 plist_get_string_val(node, &file_path); 505 plist_get_string_val(node, &file_path);
501 file_ext = (char *)g_strconcat(file_path, ".mddata", NULL); 506
507 if (!is_manifest)
508 file_ext = (char *)g_strconcat(file_path, ".mddata", NULL);
509 else
510 file_ext = g_strdup(file_path);
511
502 filename_mddata = g_build_path(G_DIR_SEPARATOR_S, backup_directory, file_ext, NULL); 512 filename_mddata = g_build_path(G_DIR_SEPARATOR_S, backup_directory, file_ext, NULL);
503 node_tmp = plist_array_get_item(message, 1); 513 node_tmp = plist_array_get_item(message, 1);
504 plist_get_data_val(node_tmp, &buffer, &length); 514 plist_get_data_val(node_tmp, &buffer, &length);
515
516 /* activate currently sent manifest */
505 buffer_to_filename(filename_mddata, buffer, length); 517 buffer_to_filename(filename_mddata, buffer, length);
518 if ((c == 2) && (is_manifest)) {
519 rename(filename_mddata, manifest_path);
520 }
506 free(buffer); 521 free(buffer);
507 buffer = NULL; 522 buffer = NULL;
508 g_free(filename_mddata); 523 g_free(filename_mddata);
@@ -512,9 +527,6 @@ int main(int argc, char *argv[])
512 printf("DONE\n"); 527 printf("DONE\n");
513 } 528 }
514 529
515 if (filename_source)
516 free(filename_source);
517
518 if (file_ext) 530 if (file_ext)
519 free(file_ext); 531 free(file_ext);
520 532