diff options
author | Martin Szulecki | 2014-10-02 16:15:48 +0200 |
---|---|---|
committer | Martin Szulecki | 2014-10-02 16:15:48 +0200 |
commit | 4a9f1c098cdc0e96ceac5bc3bbf6566cad32d7bd (patch) | |
tree | b0a124bbb2af20bb51f7c05bf25e3094572adf1b | |
parent | 3b1e983a519d0b4d820109e953d62bebd181c47c (diff) | |
download | libimobiledevice-4a9f1c098cdc0e96ceac5bc3bbf6566cad32d7bd.tar.gz libimobiledevice-4a9f1c098cdc0e96ceac5bc3bbf6566cad32d7bd.tar.bz2 |
afc: Implement afc_remove_path_and_contents() for recursive deletion
Only available on iOS 6 and later.
-rw-r--r-- | include/libimobiledevice/afc.h | 12 | ||||
-rw-r--r-- | src/afc.c | 24 |
2 files changed, 36 insertions, 0 deletions
diff --git a/include/libimobiledevice/afc.h b/include/libimobiledevice/afc.h index 667fd63..b045554 100644 --- a/include/libimobiledevice/afc.h +++ b/include/libimobiledevice/afc.h @@ -338,6 +338,18 @@ afc_error_t afc_make_link(afc_client_t client, afc_link_type_t linktype, const c */ afc_error_t afc_set_file_time(afc_client_t client, const char *path, uint64_t mtime); +/** + * Deletes a file or directory including possible contents. + * + * @param client The client to use. + * @param path The path to delete. (must be a fully-qualified path) + * @since libimobiledevice 1.1.7 + * @note Only available in iOS 6 and later. + * + * @return AFC_E_SUCCESS on success or an AFC_E_* error value. + */ +afc_error_t afc_remove_path_and_contents(afc_client_t client, const char *path); + /* Helper functions */ /** @@ -998,6 +998,30 @@ afc_error_t afc_set_file_time(afc_client_t client, const char *path, uint64_t mt return ret; } +afc_error_t afc_remove_path_and_contents(afc_client_t client, const char *path) +{ + uint32_t bytes = 0; + afc_error_t ret = AFC_E_UNKNOWN_ERROR; + + if (!client || !path || !client->afc_packet || !client->parent) + return AFC_E_INVALID_ARG; + + afc_lock(client); + + /* Send command */ + ret = afc_dispatch_packet(client, AFC_OP_REMOVE_PATH_AND_CONTENTS, path, strlen(path)+1, NULL, 0, &bytes); + if (ret != AFC_E_SUCCESS) { + afc_unlock(client); + return AFC_E_NOT_ENOUGH_DATA; + } + /* Receive response */ + ret = afc_receive_data(client, NULL, &bytes); + + afc_unlock(client); + + return ret; +} + afc_error_t afc_dictionary_free(char **dictionary) { int i = 0; |