diff options
author | Nikias Bassen | 2019-09-26 06:54:24 +0200 |
---|---|---|
committer | Nikias Bassen | 2019-09-26 06:54:24 +0200 |
commit | 2578b8c6c152a88a21931596cd0055d6607ecdcf (patch) | |
tree | 1a588d95123014b875a55f616d9e731dff1d61b7 /src/idevicerestore.c | |
parent | 83087efe7197dcae77d94a8ff56e1eb70907aa9e (diff) | |
download | idevicerestore-2578b8c6c152a88a21931596cd0055d6607ecdcf.tar.gz idevicerestore-2578b8c6c152a88a21931596cd0055d6607ecdcf.tar.bz2 |
Add more cancellation points to handle CTRL+C
Diffstat (limited to 'src/idevicerestore.c')
-rw-r--r-- | src/idevicerestore.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/idevicerestore.c b/src/idevicerestore.c index edb977c..9dc6ce8 100644 --- a/src/idevicerestore.c +++ b/src/idevicerestore.c @@ -1000,6 +1000,9 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } } + if (client->flags & FLAG_QUIT) { + return -1; + } if (get_tss_response(client, build_identity, &client->tss) < 0) { error("ERROR: Unable to get SHSH blobs for this device\n"); return -1; @@ -1019,6 +1022,11 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } } + if (client->flags & FLAG_QUIT) { + if (delete_fs && filesystem) + unlink(filesystem); + return -1; + } if (client->flags & FLAG_SHSHONLY) { if (!tss_enabled) { info("This device does not require a TSS record\n"); @@ -1073,6 +1081,11 @@ int idevicerestore_start(struct idevicerestore_client_t* client) fixup_tss(client->tss); } idevicerestore_progress(client, RESTORE_STEP_PREPARE, 0.25); + if (client->flags & FLAG_QUIT) { + if (delete_fs && filesystem) + unlink(filesystem); + return -1; + } // if the device is in normal mode, place device into recovery mode if (client->mode->index == MODE_NORMAL) { @@ -1087,6 +1100,11 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } idevicerestore_progress(client, RESTORE_STEP_PREPARE, 0.3); + if (client->flags & FLAG_QUIT) { + if (delete_fs && filesystem) + unlink(filesystem); + return -1; + } // if the device is in DFU mode, place device into recovery mode if (client->mode->index == MODE_DFU) { @@ -1148,6 +1166,11 @@ int idevicerestore_start(struct idevicerestore_client_t* client) sleep(7); } idevicerestore_progress(client, RESTORE_STEP_PREPARE, 0.5); + if (client->flags & FLAG_QUIT) { + if (delete_fs && filesystem) + unlink(filesystem); + return -1; + } if (!client->image4supported && (client->build_major > 8)) { // we need another tss request with nonce. @@ -1192,6 +1215,11 @@ int idevicerestore_start(struct idevicerestore_client_t* client) } } idevicerestore_progress(client, RESTORE_STEP_PREPARE, 0.7); + if (client->flags & FLAG_QUIT) { + if (delete_fs && filesystem) + unlink(filesystem); + return -1; + } // now finally do the magic to put the device into restore mode if (client->mode->index == MODE_RECOVERY) { |