summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2010-05-31 19:36:53 +0200
committerGravatar Nikias Bassen2010-05-31 19:36:53 +0200
commitb5b838a771c4b62023ee109d507fe83041001d27 (patch)
tree5fbe3b082932b105843d51dae6e2e2fe12cde6f4
parentc072273de30d458d7288df36f21770b2421a8408 (diff)
downloadlibimobiledevice-b5b838a771c4b62023ee109d507fe83041001d27.tar.gz
libimobiledevice-b5b838a771c4b62023ee109d507fe83041001d27.tar.bz2
idevicebackup: correctly handle removal of existing .mddata + .mdinfo files
This commit fixes the problem that the .mddata and .mdinfo files were not removed due to an incorrect check for the result of stat(). Since the file data is sent in chunks we have to check for existing files only when the first chunk of a file is received. That's why we now reset hunk_index each time a file has been completely received.
-rw-r--r--tools/idevicebackup.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/tools/idevicebackup.c b/tools/idevicebackup.c
index a8b37d9..1eb12b0 100644
--- a/tools/idevicebackup.c
+++ b/tools/idevicebackup.c
@@ -690,7 +690,7 @@ int main(int argc, char *argv[])
690 node_tmp = plist_array_get_item(message, 2); 690 node_tmp = plist_array_get_item(message, 2);
691 691
692 /* first message hunk contains total backup size */ 692 /* first message hunk contains total backup size */
693 if (hunk_index == 0) { 693 if ((hunk_index == 0) && (file_index == 0)) {
694 node = plist_dict_get_item(node_tmp, "BackupTotalSizeKey"); 694 node = plist_dict_get_item(node_tmp, "BackupTotalSizeKey");
695 if (node) { 695 if (node) {
696 plist_get_uint_val(node, &backup_total_size); 696 plist_get_uint_val(node, &backup_total_size);
@@ -747,7 +747,7 @@ int main(int argc, char *argv[])
747 filename_mdinfo = mobilebackup_build_path(backup_directory, file_path, ".mdinfo"); 747 filename_mdinfo = mobilebackup_build_path(backup_directory, file_path, ".mdinfo");
748 748
749 /* remove any existing file */ 749 /* remove any existing file */
750 if (stat(filename_mdinfo, &st) != 0) 750 if (stat(filename_mdinfo, &st) == 0)
751 remove(filename_mdinfo); 751 remove(filename_mdinfo);
752 752
753 node = plist_dict_get_item(node_tmp, "BackupFileInfo"); 753 node = plist_dict_get_item(node_tmp, "BackupFileInfo");
@@ -768,7 +768,7 @@ int main(int argc, char *argv[])
768 filename_mddata = mobilebackup_build_path(backup_directory, file_path, is_manifest ? NULL: ".mddata"); 768 filename_mddata = mobilebackup_build_path(backup_directory, file_path, is_manifest ? NULL: ".mddata");
769 769
770 /* if this is the first hunk, remove any existing file */ 770 /* if this is the first hunk, remove any existing file */
771 if (stat(filename_mddata, &st) != 0) 771 if ((hunk_index == 0) && (stat(filename_mddata, &st) == 0))
772 remove(filename_mddata); 772 remove(filename_mddata);
773 773
774 /* get file data hunk */ 774 /* get file data hunk */
@@ -803,6 +803,8 @@ int main(int argc, char *argv[])
803 803
804 /* acknowlegdge that we received the file */ 804 /* acknowlegdge that we received the file */
805 mobilebackup_send_backup_file_received(mobilebackup); 805 mobilebackup_send_backup_file_received(mobilebackup);
806 /* reset hunk_index */
807 hunk_index = 0;
806 } 808 }
807 809
808 if (quit_flag > 0) { 810 if (quit_flag > 0) {