diff options
| author | 2023-05-13 03:37:38 +0200 | |
|---|---|---|
| committer | 2023-05-13 03:37:38 +0200 | |
| commit | 0360cdc603abbfbce76c4c10d20cf80d98c0b1d6 (patch) | |
| tree | 6771cee2c78aeb43f0bb900384e299b745b8284c | |
| parent | 3b4ef6a3d109702694435087311258355df1b63a (diff) | |
| download | libirecovery-0360cdc603abbfbce76c4c10d20cf80d98c0b1d6.tar.gz libirecovery-0360cdc603abbfbce76c4c10d20cf80d98c0b1d6.tar.bz2 | |
Coding style changes
| -rw-r--r-- | src/libirecovery.c | 229 | ||||
| -rw-r--r-- | tools/irecovery.c | 61 |
2 files changed, 174 insertions, 116 deletions
diff --git a/src/libirecovery.c b/src/libirecovery.c index a91a742..6e7647b 100644 --- a/src/libirecovery.c +++ b/src/libirecovery.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * libirecovery.c | 2 | * libirecovery.c |
| 3 | * Communication to iBoot/iBSS on Apple iOS devices via USB | 3 | * Communication to iBoot/iBSS on Apple iOS devices via USB |
| 4 | * | 4 | * |
| 5 | * Copyright (c) 2011-2020 Nikias Bassen <nikias@gmx.li> | 5 | * Copyright (c) 2011-2023 Nikias Bassen <nikias@gmx.li> |
| 6 | * Copyright (c) 2012-2020 Martin Szulecki <martin.szulecki@libimobiledevice.org> | 6 | * Copyright (c) 2012-2020 Martin Szulecki <martin.szulecki@libimobiledevice.org> |
| 7 | * Copyright (c) 2010 Chronic-Dev Team | 7 | * Copyright (c) 2010 Chronic-Dev Team |
| 8 | * Copyright (c) 2010 Joshua Hill | 8 | * Copyright (c) 2010 Joshua Hill |
| @@ -94,7 +94,7 @@ struct irecv_client_private { | |||
| 94 | #define APPLE_VENDOR_ID 0x05AC | 94 | #define APPLE_VENDOR_ID 0x05AC |
| 95 | 95 | ||
| 96 | #define BUFFER_SIZE 0x1000 | 96 | #define BUFFER_SIZE 0x1000 |
| 97 | #define debug(...) if(libirecovery_debug) fprintf(stderr, __VA_ARGS__) | 97 | #define debug(...) if (libirecovery_debug) fprintf(stderr, __VA_ARGS__) |
| 98 | 98 | ||
| 99 | static int libirecovery_debug = 0; | 99 | static int libirecovery_debug = 0; |
| 100 | #ifndef USE_DUMMY | 100 | #ifndef USE_DUMMY |
| @@ -506,8 +506,8 @@ BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) | |||
| 506 | #endif | 506 | #endif |
| 507 | 507 | ||
| 508 | #ifdef HAVE_IOKIT | 508 | #ifdef HAVE_IOKIT |
| 509 | static int iokit_get_string_descriptor_ascii(irecv_client_t client, uint8_t desc_index, unsigned char * buffer, int size) { | 509 | static int iokit_get_string_descriptor_ascii(irecv_client_t client, uint8_t desc_index, unsigned char * buffer, int size) |
| 510 | 510 | { | |
| 511 | IOReturn result; | 511 | IOReturn result; |
| 512 | IOUSBDevRequest request; | 512 | IOUSBDevRequest request; |
| 513 | unsigned char descriptor[256]; | 513 | unsigned char descriptor[256]; |
| @@ -554,7 +554,8 @@ static int iokit_get_string_descriptor_ascii(irecv_client_t client, uint8_t desc | |||
| 554 | } | 554 | } |
| 555 | #endif | 555 | #endif |
| 556 | 556 | ||
| 557 | static int irecv_get_string_descriptor_ascii(irecv_client_t client, uint8_t desc_index, unsigned char * buffer, int size) { | 557 | static int irecv_get_string_descriptor_ascii(irecv_client_t client, uint8_t desc_index, unsigned char * buffer, int size) |
| 558 | { | ||
| 558 | #ifndef WIN32 | 559 | #ifndef WIN32 |
| 559 | #ifdef HAVE_IOKIT | 560 | #ifdef HAVE_IOKIT |
| 560 | return iokit_get_string_descriptor_ascii(client, desc_index, buffer, size); | 561 | return iokit_get_string_descriptor_ascii(client, desc_index, buffer, size); |
| @@ -640,10 +641,10 @@ static void irecv_load_device_info_from_iboot_string(irecv_client_t client, cons | |||
| 640 | char tmp[256]; | 641 | char tmp[256]; |
| 641 | tmp[0] = '\0'; | 642 | tmp[0] = '\0'; |
| 642 | ptr = strstr(iboot_string, "SRNM:["); | 643 | ptr = strstr(iboot_string, "SRNM:["); |
| 643 | if(ptr != NULL) { | 644 | if (ptr != NULL) { |
| 644 | sscanf(ptr, "SRNM:[%s]", tmp); | 645 | sscanf(ptr, "SRNM:[%s]", tmp); |
| 645 | ptr = strrchr(tmp, ']'); | 646 | ptr = strrchr(tmp, ']'); |
| 646 | if(ptr != NULL) { | 647 | if (ptr != NULL) { |
| 647 | *ptr = '\0'; | 648 | *ptr = '\0'; |
| 648 | } | 649 | } |
| 649 | client->device_info.srnm = strdup(tmp); | 650 | client->device_info.srnm = strdup(tmp); |
| @@ -651,10 +652,10 @@ static void irecv_load_device_info_from_iboot_string(irecv_client_t client, cons | |||
| 651 | 652 | ||
| 652 | tmp[0] = '\0'; | 653 | tmp[0] = '\0'; |
| 653 | ptr = strstr(iboot_string, "IMEI:["); | 654 | ptr = strstr(iboot_string, "IMEI:["); |
| 654 | if(ptr != NULL) { | 655 | if (ptr != NULL) { |
| 655 | sscanf(ptr, "IMEI:[%s]", tmp); | 656 | sscanf(ptr, "IMEI:[%s]", tmp); |
| 656 | ptr = strrchr(tmp, ']'); | 657 | ptr = strrchr(tmp, ']'); |
| 657 | if(ptr != NULL) { | 658 | if (ptr != NULL) { |
| 658 | *ptr = '\0'; | 659 | *ptr = '\0'; |
| 659 | } | 660 | } |
| 660 | client->device_info.imei = strdup(tmp); | 661 | client->device_info.imei = strdup(tmp); |
| @@ -662,10 +663,10 @@ static void irecv_load_device_info_from_iboot_string(irecv_client_t client, cons | |||
| 662 | 663 | ||
| 663 | tmp[0] = '\0'; | 664 | tmp[0] = '\0'; |
| 664 | ptr = strstr(iboot_string, "SRTG:["); | 665 | ptr = strstr(iboot_string, "SRTG:["); |
| 665 | if(ptr != NULL) { | 666 | if (ptr != NULL) { |
| 666 | sscanf(ptr, "SRTG:[%s]", tmp); | 667 | sscanf(ptr, "SRTG:[%s]", tmp); |
| 667 | ptr = strrchr(tmp, ']'); | 668 | ptr = strrchr(tmp, ']'); |
| 668 | if(ptr != NULL) { | 669 | if (ptr != NULL) { |
| 669 | *ptr = '\0'; | 670 | *ptr = '\0'; |
| 670 | } | 671 | } |
| 671 | client->device_info.srtg = strdup(tmp); | 672 | client->device_info.srtg = strdup(tmp); |
| @@ -774,7 +775,8 @@ irecv_error_t mobiledevice_openpipes(irecv_client_t client); | |||
| 774 | void mobiledevice_closepipes(irecv_client_t client); | 775 | void mobiledevice_closepipes(irecv_client_t client); |
| 775 | irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid); | 776 | irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid); |
| 776 | 777 | ||
| 777 | irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid) { | 778 | irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid) |
| 779 | { | ||
| 778 | int found = 0; | 780 | int found = 0; |
| 779 | SP_DEVICE_INTERFACE_DATA currentInterface; | 781 | SP_DEVICE_INTERFACE_DATA currentInterface; |
| 780 | HDEVINFO usbDevices; | 782 | HDEVINFO usbDevices; |
| @@ -786,7 +788,7 @@ irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid) { | |||
| 786 | usbDevices = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DFU, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); | 788 | usbDevices = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DFU, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); |
| 787 | memset(¤tInterface, '\0', sizeof(SP_DEVICE_INTERFACE_DATA)); | 789 | memset(¤tInterface, '\0', sizeof(SP_DEVICE_INTERFACE_DATA)); |
| 788 | currentInterface.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); | 790 | currentInterface.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); |
| 789 | for(i = 0; usbDevices && SetupDiEnumDeviceInterfaces(usbDevices, NULL, &GUID_DEVINTERFACE_DFU, i, ¤tInterface); i++) { | 791 | for (i = 0; usbDevices && SetupDiEnumDeviceInterfaces(usbDevices, NULL, &GUID_DEVINTERFACE_DFU, i, ¤tInterface); i++) { |
| 790 | free(_client->DfuPath); | 792 | free(_client->DfuPath); |
| 791 | _client->DfuPath = NULL; | 793 | _client->DfuPath = NULL; |
| 792 | _client->handle = NULL; | 794 | _client->handle = NULL; |
| @@ -795,7 +797,7 @@ irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid) { | |||
| 795 | SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, NULL, 0, &requiredSize, NULL); | 797 | SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, NULL, 0, &requiredSize, NULL); |
| 796 | details = (PSP_DEVICE_INTERFACE_DETAIL_DATA_A) malloc(requiredSize); | 798 | details = (PSP_DEVICE_INTERFACE_DETAIL_DATA_A) malloc(requiredSize); |
| 797 | details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); | 799 | details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); |
| 798 | if(!SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, details, requiredSize, NULL, NULL)) { | 800 | if (!SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, details, requiredSize, NULL, NULL)) { |
| 799 | free(details); | 801 | free(details); |
| 800 | continue; | 802 | continue; |
| 801 | } else { | 803 | } else { |
| @@ -879,7 +881,7 @@ irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid) { | |||
| 879 | usbDevices = SetupDiGetClassDevs(&GUID_DEVINTERFACE_IBOOT, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); | 881 | usbDevices = SetupDiGetClassDevs(&GUID_DEVINTERFACE_IBOOT, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); |
| 880 | memset(¤tInterface, '\0', sizeof(SP_DEVICE_INTERFACE_DATA)); | 882 | memset(¤tInterface, '\0', sizeof(SP_DEVICE_INTERFACE_DATA)); |
| 881 | currentInterface.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); | 883 | currentInterface.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); |
| 882 | for(i = 0; usbDevices && SetupDiEnumDeviceInterfaces(usbDevices, NULL, &GUID_DEVINTERFACE_IBOOT, i, ¤tInterface); i++) { | 884 | for (i = 0; usbDevices && SetupDiEnumDeviceInterfaces(usbDevices, NULL, &GUID_DEVINTERFACE_IBOOT, i, ¤tInterface); i++) { |
| 883 | free(_client->iBootPath); | 885 | free(_client->iBootPath); |
| 884 | _client->iBootPath = NULL; | 886 | _client->iBootPath = NULL; |
| 885 | _client->handle = NULL; | 887 | _client->handle = NULL; |
| @@ -888,7 +890,7 @@ irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid) { | |||
| 888 | SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, NULL, 0, &requiredSize, NULL); | 890 | SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, NULL, 0, &requiredSize, NULL); |
| 889 | details = (PSP_DEVICE_INTERFACE_DETAIL_DATA_A) malloc(requiredSize); | 891 | details = (PSP_DEVICE_INTERFACE_DETAIL_DATA_A) malloc(requiredSize); |
| 890 | details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); | 892 | details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); |
| 891 | if(!SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, details, requiredSize, NULL, NULL)) { | 893 | if (!SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, details, requiredSize, NULL, NULL)) { |
| 892 | free(details); | 894 | free(details); |
| 893 | continue; | 895 | continue; |
| 894 | } else { | 896 | } else { |
| @@ -964,7 +966,8 @@ irecv_error_t mobiledevice_connect(irecv_client_t* client, uint64_t ecid) { | |||
| 964 | return IRECV_E_SUCCESS; | 966 | return IRECV_E_SUCCESS; |
| 965 | } | 967 | } |
| 966 | 968 | ||
| 967 | irecv_error_t mobiledevice_openpipes(irecv_client_t client) { | 969 | irecv_error_t mobiledevice_openpipes(irecv_client_t client) |
| 970 | { | ||
| 968 | if (client->iBootPath && !(client->hIB = CreateFileA(client->iBootPath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL))) { | 971 | if (client->iBootPath && !(client->hIB = CreateFileA(client->iBootPath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL))) { |
| 969 | irecv_close(client); | 972 | irecv_close(client); |
| 970 | return IRECV_E_UNABLE_TO_CONNECT; | 973 | return IRECV_E_UNABLE_TO_CONNECT; |
| @@ -996,7 +999,8 @@ irecv_error_t mobiledevice_openpipes(irecv_client_t client) { | |||
| 996 | return IRECV_E_SUCCESS; | 999 | return IRECV_E_SUCCESS; |
| 997 | } | 1000 | } |
| 998 | 1001 | ||
| 999 | void mobiledevice_closepipes(irecv_client_t client) { | 1002 | void mobiledevice_closepipes(irecv_client_t client) |
| 1003 | { | ||
| 1000 | if (client->hDFU!=NULL) { | 1004 | if (client->hDFU!=NULL) { |
| 1001 | CloseHandle(client->hDFU); | 1005 | CloseHandle(client->hDFU); |
| 1002 | client->hDFU = NULL; | 1006 | client->hDFU = NULL; |
| @@ -1021,7 +1025,8 @@ static void iokit_cfdictionary_set_short(CFMutableDictionaryRef dict, const void | |||
| 1021 | } | 1025 | } |
| 1022 | #endif | 1026 | #endif |
| 1023 | 1027 | ||
| 1024 | static int check_context(irecv_client_t client) { | 1028 | static int check_context(irecv_client_t client) |
| 1029 | { | ||
| 1025 | if (client == NULL || client->handle == NULL) { | 1030 | if (client == NULL || client->handle == NULL) { |
| 1026 | return IRECV_E_NO_DEVICE; | 1031 | return IRECV_E_NO_DEVICE; |
| 1027 | } | 1032 | } |
| @@ -1079,7 +1084,8 @@ static int iokit_usb_control_transfer(irecv_client_t client, uint8_t bm_request_ | |||
| 1079 | #endif | 1084 | #endif |
| 1080 | #endif | 1085 | #endif |
| 1081 | 1086 | ||
| 1082 | int irecv_usb_control_transfer(irecv_client_t client, uint8_t bm_request_type, uint8_t b_request, uint16_t w_value, uint16_t w_index, unsigned char *data, uint16_t w_length, unsigned int timeout) { | 1087 | int irecv_usb_control_transfer(irecv_client_t client, uint8_t bm_request_type, uint8_t b_request, uint16_t w_value, uint16_t w_index, unsigned char *data, uint16_t w_length, unsigned int timeout) |
| 1088 | { | ||
| 1083 | #ifdef USE_DUMMY | 1089 | #ifdef USE_DUMMY |
| 1084 | return IRECV_E_UNSUPPORTED; | 1090 | return IRECV_E_UNSUPPORTED; |
| 1085 | #else | 1091 | #else |
| @@ -1140,8 +1146,8 @@ static int iokit_usb_bulk_transfer(irecv_client_t client, | |||
| 1140 | unsigned char *data, | 1146 | unsigned char *data, |
| 1141 | int length, | 1147 | int length, |
| 1142 | int *transferred, | 1148 | int *transferred, |
| 1143 | unsigned int timeout) { | 1149 | unsigned int timeout) |
| 1144 | 1150 | { | |
| 1145 | IOReturn result; | 1151 | IOReturn result; |
| 1146 | IOUSBInterfaceInterface300 **intf = client->usbInterface; | 1152 | IOUSBInterfaceInterface300 **intf = client->usbInterface; |
| 1147 | UInt32 size = length; | 1153 | UInt32 size = length; |
| @@ -1194,7 +1200,8 @@ int irecv_usb_bulk_transfer(irecv_client_t client, | |||
| 1194 | unsigned char *data, | 1200 | unsigned char *data, |
| 1195 | int length, | 1201 | int length, |
| 1196 | int *transferred, | 1202 | int *transferred, |
| 1197 | unsigned int timeout) { | 1203 | unsigned int timeout) |
| 1204 | { | ||
| 1198 | #ifdef USE_DUMMY | 1205 | #ifdef USE_DUMMY |
| 1199 | return IRECV_E_UNSUPPORTED; | 1206 | return IRECV_E_UNSUPPORTED; |
| 1200 | #else | 1207 | #else |
| @@ -1224,8 +1231,8 @@ int irecv_usb_bulk_transfer(irecv_client_t client, | |||
| 1224 | 1231 | ||
| 1225 | #ifndef USE_DUMMY | 1232 | #ifndef USE_DUMMY |
| 1226 | #ifdef HAVE_IOKIT | 1233 | #ifdef HAVE_IOKIT |
| 1227 | static irecv_error_t iokit_usb_open_service(irecv_client_t *pclient, io_service_t service) { | 1234 | static irecv_error_t iokit_usb_open_service(irecv_client_t *pclient, io_service_t service) |
| 1228 | 1235 | { | |
| 1229 | IOReturn result; | 1236 | IOReturn result; |
| 1230 | irecv_error_t error; | 1237 | irecv_error_t error; |
| 1231 | irecv_client_t client; | 1238 | irecv_client_t client; |
| @@ -1315,8 +1322,8 @@ static irecv_error_t iokit_usb_open_service(irecv_client_t *pclient, io_service_ | |||
| 1315 | return IRECV_E_SUCCESS; | 1322 | return IRECV_E_SUCCESS; |
| 1316 | } | 1323 | } |
| 1317 | 1324 | ||
| 1318 | static io_iterator_t iokit_usb_get_iterator_for_pid(UInt16 pid) { | 1325 | static io_iterator_t iokit_usb_get_iterator_for_pid(UInt16 pid) |
| 1319 | 1326 | { | |
| 1320 | IOReturn result; | 1327 | IOReturn result; |
| 1321 | io_iterator_t iterator; | 1328 | io_iterator_t iterator; |
| 1322 | CFMutableDictionaryRef matchingDict; | 1329 | CFMutableDictionaryRef matchingDict; |
| @@ -1332,8 +1339,8 @@ static io_iterator_t iokit_usb_get_iterator_for_pid(UInt16 pid) { | |||
| 1332 | return iterator; | 1339 | return iterator; |
| 1333 | } | 1340 | } |
| 1334 | 1341 | ||
| 1335 | static irecv_error_t iokit_open_with_ecid(irecv_client_t* pclient, uint64_t ecid) { | 1342 | static irecv_error_t iokit_open_with_ecid(irecv_client_t* pclient, uint64_t ecid) |
| 1336 | 1343 | { | |
| 1337 | io_service_t service, ret_service; | 1344 | io_service_t service, ret_service; |
| 1338 | io_iterator_t iterator; | 1345 | io_iterator_t iterator; |
| 1339 | CFStringRef usbSerial = NULL; | 1346 | CFStringRef usbSerial = NULL; |
| @@ -1410,13 +1417,14 @@ static irecv_error_t iokit_open_with_ecid(irecv_client_t* pclient, uint64_t ecid | |||
| 1410 | #endif | 1417 | #endif |
| 1411 | #endif | 1418 | #endif |
| 1412 | 1419 | ||
| 1413 | irecv_error_t irecv_open_with_ecid(irecv_client_t* pclient, uint64_t ecid) { | 1420 | irecv_error_t irecv_open_with_ecid(irecv_client_t* pclient, uint64_t ecid) |
| 1421 | { | ||
| 1414 | #ifdef USE_DUMMY | 1422 | #ifdef USE_DUMMY |
| 1415 | return IRECV_E_UNSUPPORTED; | 1423 | return IRECV_E_UNSUPPORTED; |
| 1416 | #else | 1424 | #else |
| 1417 | int ret = IRECV_E_UNABLE_TO_CONNECT; | 1425 | int ret = IRECV_E_UNABLE_TO_CONNECT; |
| 1418 | 1426 | ||
| 1419 | if(libirecovery_debug) { | 1427 | if (libirecovery_debug) { |
| 1420 | irecv_set_debug_level(libirecovery_debug); | 1428 | irecv_set_debug_level(libirecovery_debug); |
| 1421 | } | 1429 | } |
| 1422 | #ifndef WIN32 | 1430 | #ifndef WIN32 |
| @@ -1563,7 +1571,8 @@ irecv_error_t irecv_open_with_ecid(irecv_client_t* pclient, uint64_t ecid) { | |||
| 1563 | #endif | 1571 | #endif |
| 1564 | } | 1572 | } |
| 1565 | 1573 | ||
| 1566 | irecv_error_t irecv_usb_set_configuration(irecv_client_t client, int configuration) { | 1574 | irecv_error_t irecv_usb_set_configuration(irecv_client_t client, int configuration) |
| 1575 | { | ||
| 1567 | #ifdef USE_DUMMY | 1576 | #ifdef USE_DUMMY |
| 1568 | return IRECV_E_UNSUPPORTED; | 1577 | return IRECV_E_UNSUPPORTED; |
| 1569 | #else | 1578 | #else |
| @@ -1599,8 +1608,8 @@ irecv_error_t irecv_usb_set_configuration(irecv_client_t client, int configurati | |||
| 1599 | 1608 | ||
| 1600 | #ifndef USE_DUMMY | 1609 | #ifndef USE_DUMMY |
| 1601 | #ifdef HAVE_IOKIT | 1610 | #ifdef HAVE_IOKIT |
| 1602 | static IOReturn iokit_usb_get_interface(IOUSBDeviceInterface320 **device, uint8_t ifc, io_service_t *usbInterfacep) { | 1611 | static IOReturn iokit_usb_get_interface(IOUSBDeviceInterface320 **device, uint8_t ifc, io_service_t *usbInterfacep) |
| 1603 | 1612 | { | |
| 1604 | IOUSBFindInterfaceRequest request; | 1613 | IOUSBFindInterfaceRequest request; |
| 1605 | uint8_t current_interface; | 1614 | uint8_t current_interface; |
| 1606 | kern_return_t kresult; | 1615 | kern_return_t kresult; |
| @@ -1627,7 +1636,8 @@ static IOReturn iokit_usb_get_interface(IOUSBDeviceInterface320 **device, uint8_ | |||
| 1627 | return kIOReturnSuccess; | 1636 | return kIOReturnSuccess; |
| 1628 | } | 1637 | } |
| 1629 | 1638 | ||
| 1630 | static irecv_error_t iokit_usb_set_interface(irecv_client_t client, int usb_interface, int usb_alt_interface) { | 1639 | static irecv_error_t iokit_usb_set_interface(irecv_client_t client, int usb_interface, int usb_alt_interface) |
| 1640 | { | ||
| 1631 | IOReturn result; | 1641 | IOReturn result; |
| 1632 | io_service_t interface_service = IO_OBJECT_NULL; | 1642 | io_service_t interface_service = IO_OBJECT_NULL; |
| 1633 | IOCFPlugInInterface **plugInInterface = NULL; | 1643 | IOCFPlugInInterface **plugInInterface = NULL; |
| @@ -1679,7 +1689,8 @@ static irecv_error_t iokit_usb_set_interface(irecv_client_t client, int usb_inte | |||
| 1679 | #endif | 1689 | #endif |
| 1680 | #endif | 1690 | #endif |
| 1681 | 1691 | ||
| 1682 | irecv_error_t irecv_usb_set_interface(irecv_client_t client, int usb_interface, int usb_alt_interface) { | 1692 | irecv_error_t irecv_usb_set_interface(irecv_client_t client, int usb_interface, int usb_alt_interface) |
| 1693 | { | ||
| 1683 | #ifdef USE_DUMMY | 1694 | #ifdef USE_DUMMY |
| 1684 | return IRECV_E_UNSUPPORTED; | 1695 | return IRECV_E_UNSUPPORTED; |
| 1685 | #else | 1696 | #else |
| @@ -1715,7 +1726,8 @@ irecv_error_t irecv_usb_set_interface(irecv_client_t client, int usb_interface, | |||
| 1715 | #endif | 1726 | #endif |
| 1716 | } | 1727 | } |
| 1717 | 1728 | ||
| 1718 | irecv_error_t irecv_reset(irecv_client_t client) { | 1729 | irecv_error_t irecv_reset(irecv_client_t client) |
| 1730 | { | ||
| 1719 | #ifdef USE_DUMMY | 1731 | #ifdef USE_DUMMY |
| 1720 | return IRECV_E_UNSUPPORTED; | 1732 | return IRECV_E_UNSUPPORTED; |
| 1721 | #else | 1733 | #else |
| @@ -1748,14 +1760,15 @@ irecv_error_t irecv_reset(irecv_client_t client) { | |||
| 1748 | #endif | 1760 | #endif |
| 1749 | } | 1761 | } |
| 1750 | 1762 | ||
| 1751 | irecv_error_t irecv_open_with_ecid_and_attempts(irecv_client_t* pclient, uint64_t ecid, int attempts) { | 1763 | irecv_error_t irecv_open_with_ecid_and_attempts(irecv_client_t* pclient, uint64_t ecid, int attempts) |
| 1764 | { | ||
| 1752 | #ifdef USE_DUMMY | 1765 | #ifdef USE_DUMMY |
| 1753 | return IRECV_E_UNSUPPORTED; | 1766 | return IRECV_E_UNSUPPORTED; |
| 1754 | #else | 1767 | #else |
| 1755 | int i; | 1768 | int i; |
| 1756 | 1769 | ||
| 1757 | for (i = 0; i < attempts; i++) { | 1770 | for (i = 0; i < attempts; i++) { |
| 1758 | if(*pclient) { | 1771 | if (*pclient) { |
| 1759 | irecv_close(*pclient); | 1772 | irecv_close(*pclient); |
| 1760 | *pclient = NULL; | 1773 | *pclient = NULL; |
| 1761 | } | 1774 | } |
| @@ -1771,7 +1784,8 @@ irecv_error_t irecv_open_with_ecid_and_attempts(irecv_client_t* pclient, uint64_ | |||
| 1771 | #endif | 1784 | #endif |
| 1772 | } | 1785 | } |
| 1773 | 1786 | ||
| 1774 | irecv_error_t irecv_event_subscribe(irecv_client_t client, irecv_event_type type, irecv_event_cb_t callback, void* user_data) { | 1787 | irecv_error_t irecv_event_subscribe(irecv_client_t client, irecv_event_type type, irecv_event_cb_t callback, void* user_data) |
| 1788 | { | ||
| 1775 | #ifdef USE_DUMMY | 1789 | #ifdef USE_DUMMY |
| 1776 | return IRECV_E_UNSUPPORTED; | 1790 | return IRECV_E_UNSUPPORTED; |
| 1777 | #else | 1791 | #else |
| @@ -1808,7 +1822,8 @@ irecv_error_t irecv_event_subscribe(irecv_client_t client, irecv_event_type type | |||
| 1808 | #endif | 1822 | #endif |
| 1809 | } | 1823 | } |
| 1810 | 1824 | ||
| 1811 | irecv_error_t irecv_event_unsubscribe(irecv_client_t client, irecv_event_type type) { | 1825 | irecv_error_t irecv_event_unsubscribe(irecv_client_t client, irecv_event_type type) |
| 1826 | { | ||
| 1812 | #ifdef USE_DUMMY | 1827 | #ifdef USE_DUMMY |
| 1813 | return IRECV_E_UNSUPPORTED; | 1828 | return IRECV_E_UNSUPPORTED; |
| 1814 | #else | 1829 | #else |
| @@ -2230,7 +2245,7 @@ static void *_irecv_event_handler(void* data) | |||
| 2230 | details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); | 2245 | details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A); |
| 2231 | SP_DEVINFO_DATA devinfodata; | 2246 | SP_DEVINFO_DATA devinfodata; |
| 2232 | devinfodata.cbSize = sizeof(SP_DEVINFO_DATA); | 2247 | devinfodata.cbSize = sizeof(SP_DEVINFO_DATA); |
| 2233 | if(!SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, details, requiredSize, NULL, &devinfodata)) { | 2248 | if (!SetupDiGetDeviceInterfaceDetailA(usbDevices, ¤tInterface, details, requiredSize, NULL, &devinfodata)) { |
| 2234 | free(details); | 2249 | free(details); |
| 2235 | continue; | 2250 | continue; |
| 2236 | } | 2251 | } |
| @@ -2528,12 +2543,13 @@ irecv_error_t irecv_device_event_unsubscribe(irecv_device_event_context_t contex | |||
| 2528 | #endif | 2543 | #endif |
| 2529 | } | 2544 | } |
| 2530 | 2545 | ||
| 2531 | irecv_error_t irecv_close(irecv_client_t client) { | 2546 | irecv_error_t irecv_close(irecv_client_t client) |
| 2547 | { | ||
| 2532 | #ifdef USE_DUMMY | 2548 | #ifdef USE_DUMMY |
| 2533 | return IRECV_E_UNSUPPORTED; | 2549 | return IRECV_E_UNSUPPORTED; |
| 2534 | #else | 2550 | #else |
| 2535 | if (client != NULL) { | 2551 | if (client != NULL) { |
| 2536 | if(client->disconnected_callback != NULL) { | 2552 | if (client->disconnected_callback != NULL) { |
| 2537 | irecv_event_t event; | 2553 | irecv_event_t event; |
| 2538 | event.size = 0; | 2554 | event.size = 0; |
| 2539 | event.data = NULL; | 2555 | event.data = NULL; |
| @@ -2584,12 +2600,13 @@ irecv_error_t irecv_close(irecv_client_t client) { | |||
| 2584 | #endif | 2600 | #endif |
| 2585 | } | 2601 | } |
| 2586 | 2602 | ||
| 2587 | void irecv_set_debug_level(int level) { | 2603 | void irecv_set_debug_level(int level) |
| 2604 | { | ||
| 2588 | libirecovery_debug = level; | 2605 | libirecovery_debug = level; |
| 2589 | #ifndef USE_DUMMY | 2606 | #ifndef USE_DUMMY |
| 2590 | #ifndef WIN32 | 2607 | #ifndef WIN32 |
| 2591 | #ifndef HAVE_IOKIT | 2608 | #ifndef HAVE_IOKIT |
| 2592 | if(libirecovery_context) { | 2609 | if (libirecovery_context) { |
| 2593 | #if LIBUSB_API_VERSION >= 0x01000106 | 2610 | #if LIBUSB_API_VERSION >= 0x01000106 |
| 2594 | libusb_set_option(libirecovery_context, LIBUSB_OPTION_LOG_LEVEL, libirecovery_debug > 2 ? 1: 0); | 2611 | libusb_set_option(libirecovery_context, LIBUSB_OPTION_LOG_LEVEL, libirecovery_debug > 2 ? 1: 0); |
| 2595 | #else | 2612 | #else |
| @@ -2602,7 +2619,8 @@ void irecv_set_debug_level(int level) { | |||
| 2602 | } | 2619 | } |
| 2603 | 2620 | ||
| 2604 | #ifndef USE_DUMMY | 2621 | #ifndef USE_DUMMY |
| 2605 | static irecv_error_t irecv_send_command_raw(irecv_client_t client, const char* command, uint8_t b_request) { | 2622 | static irecv_error_t irecv_send_command_raw(irecv_client_t client, const char* command, uint8_t b_request) |
| 2623 | { | ||
| 2606 | unsigned int length = strlen(command); | 2624 | unsigned int length = strlen(command); |
| 2607 | if (length >= 0x100) { | 2625 | if (length >= 0x100) { |
| 2608 | return IRECV_E_INVALID_INPUT; | 2626 | return IRECV_E_INVALID_INPUT; |
| @@ -2616,7 +2634,8 @@ static irecv_error_t irecv_send_command_raw(irecv_client_t client, const char* c | |||
| 2616 | } | 2634 | } |
| 2617 | #endif | 2635 | #endif |
| 2618 | 2636 | ||
| 2619 | irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command, uint8_t b_request) { | 2637 | irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command, uint8_t b_request) |
| 2638 | { | ||
| 2620 | #ifdef USE_DUMMY | 2639 | #ifdef USE_DUMMY |
| 2621 | return IRECV_E_UNSUPPORTED; | 2640 | return IRECV_E_UNSUPPORTED; |
| 2622 | #else | 2641 | #else |
| @@ -2631,11 +2650,11 @@ irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command | |||
| 2631 | } | 2650 | } |
| 2632 | 2651 | ||
| 2633 | irecv_event_t event; | 2652 | irecv_event_t event; |
| 2634 | if(client->precommand_callback != NULL) { | 2653 | if (client->precommand_callback != NULL) { |
| 2635 | event.size = length; | 2654 | event.size = length; |
| 2636 | event.data = command; | 2655 | event.data = command; |
| 2637 | event.type = IRECV_PRECOMMAND; | 2656 | event.type = IRECV_PRECOMMAND; |
| 2638 | if(client->precommand_callback(client, &event)) { | 2657 | if (client->precommand_callback(client, &event)) { |
| 2639 | return IRECV_E_SUCCESS; | 2658 | return IRECV_E_SUCCESS; |
| 2640 | } | 2659 | } |
| 2641 | } | 2660 | } |
| @@ -2647,11 +2666,11 @@ irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command | |||
| 2647 | return error; | 2666 | return error; |
| 2648 | } | 2667 | } |
| 2649 | 2668 | ||
| 2650 | if(client->postcommand_callback != NULL) { | 2669 | if (client->postcommand_callback != NULL) { |
| 2651 | event.size = length; | 2670 | event.size = length; |
| 2652 | event.data = command; | 2671 | event.data = command; |
| 2653 | event.type = IRECV_POSTCOMMAND; | 2672 | event.type = IRECV_POSTCOMMAND; |
| 2654 | if(client->postcommand_callback(client, &event)) { | 2673 | if (client->postcommand_callback(client, &event)) { |
| 2655 | return IRECV_E_SUCCESS; | 2674 | return IRECV_E_SUCCESS; |
| 2656 | } | 2675 | } |
| 2657 | } | 2676 | } |
| @@ -2660,11 +2679,13 @@ irecv_error_t irecv_send_command_breq(irecv_client_t client, const char* command | |||
| 2660 | #endif | 2679 | #endif |
| 2661 | } | 2680 | } |
| 2662 | 2681 | ||
| 2663 | irecv_error_t irecv_send_command(irecv_client_t client, const char* command) { | 2682 | irecv_error_t irecv_send_command(irecv_client_t client, const char* command) |
| 2683 | { | ||
| 2664 | return irecv_send_command_breq(client, command, 0); | 2684 | return irecv_send_command_breq(client, command, 0); |
| 2665 | } | 2685 | } |
| 2666 | 2686 | ||
| 2667 | irecv_error_t irecv_send_file(irecv_client_t client, const char* filename, int dfu_notify_finished) { | 2687 | irecv_error_t irecv_send_file(irecv_client_t client, const char* filename, int dfu_notify_finished) |
| 2688 | { | ||
| 2668 | #ifdef USE_DUMMY | 2689 | #ifdef USE_DUMMY |
| 2669 | return IRECV_E_UNSUPPORTED; | 2690 | return IRECV_E_UNSUPPORTED; |
| 2670 | #else | 2691 | #else |
| @@ -2704,7 +2725,8 @@ irecv_error_t irecv_send_file(irecv_client_t client, const char* filename, int d | |||
| 2704 | } | 2725 | } |
| 2705 | 2726 | ||
| 2706 | #ifndef USE_DUMMY | 2727 | #ifndef USE_DUMMY |
| 2707 | static irecv_error_t irecv_get_status(irecv_client_t client, unsigned int* status) { | 2728 | static irecv_error_t irecv_get_status(irecv_client_t client, unsigned int* status) |
| 2729 | { | ||
| 2708 | if (check_context(client) != IRECV_E_SUCCESS) { | 2730 | if (check_context(client) != IRECV_E_SUCCESS) { |
| 2709 | *status = 0; | 2731 | *status = 0; |
| 2710 | return IRECV_E_NO_DEVICE; | 2732 | return IRECV_E_NO_DEVICE; |
| @@ -2723,7 +2745,8 @@ static irecv_error_t irecv_get_status(irecv_client_t client, unsigned int* statu | |||
| 2723 | } | 2745 | } |
| 2724 | #endif | 2746 | #endif |
| 2725 | 2747 | ||
| 2726 | irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char* buffer, unsigned long length, int dfu_notify_finished) { | 2748 | irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char* buffer, unsigned long length, int dfu_notify_finished) |
| 2749 | { | ||
| 2727 | #ifdef USE_DUMMY | 2750 | #ifdef USE_DUMMY |
| 2728 | return IRECV_E_UNSUPPORTED; | 2751 | return IRECV_E_UNSUPPORTED; |
| 2729 | #else | 2752 | #else |
| @@ -2856,7 +2879,7 @@ irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char* buffer, un | |||
| 2856 | } | 2879 | } |
| 2857 | 2880 | ||
| 2858 | count += size; | 2881 | count += size; |
| 2859 | if(client->progress_callback != NULL) { | 2882 | if (client->progress_callback != NULL) { |
| 2860 | irecv_event_t event; | 2883 | irecv_event_t event; |
| 2861 | event.progress = ((double) count/ (double) length) * 100.0; | 2884 | event.progress = ((double) count/ (double) length) * 100.0; |
| 2862 | event.type = IRECV_PROGRESS; | 2885 | event.type = IRECV_PROGRESS; |
| @@ -2896,7 +2919,8 @@ irecv_error_t irecv_send_buffer(irecv_client_t client, unsigned char* buffer, un | |||
| 2896 | #endif | 2919 | #endif |
| 2897 | } | 2920 | } |
| 2898 | 2921 | ||
| 2899 | irecv_error_t irecv_receive(irecv_client_t client) { | 2922 | irecv_error_t irecv_receive(irecv_client_t client) |
| 2923 | { | ||
| 2900 | #ifdef USE_DUMMY | 2924 | #ifdef USE_DUMMY |
| 2901 | return IRECV_E_UNSUPPORTED; | 2925 | return IRECV_E_UNSUPPORTED; |
| 2902 | #else | 2926 | #else |
| @@ -2930,7 +2954,8 @@ irecv_error_t irecv_receive(irecv_client_t client) { | |||
| 2930 | #endif | 2954 | #endif |
| 2931 | } | 2955 | } |
| 2932 | 2956 | ||
| 2933 | irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** value) { | 2957 | irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** value) |
| 2958 | { | ||
| 2934 | #ifdef USE_DUMMY | 2959 | #ifdef USE_DUMMY |
| 2935 | return IRECV_E_UNSUPPORTED; | 2960 | return IRECV_E_UNSUPPORTED; |
| 2936 | #else | 2961 | #else |
| @@ -2941,18 +2966,18 @@ irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** v | |||
| 2941 | 2966 | ||
| 2942 | *value = NULL; | 2967 | *value = NULL; |
| 2943 | 2968 | ||
| 2944 | if(variable == NULL) { | 2969 | if (variable == NULL) { |
| 2945 | return IRECV_E_INVALID_INPUT; | 2970 | return IRECV_E_INVALID_INPUT; |
| 2946 | } | 2971 | } |
| 2947 | 2972 | ||
| 2948 | memset(command, '\0', sizeof(command)); | 2973 | memset(command, '\0', sizeof(command)); |
| 2949 | snprintf(command, sizeof(command)-1, "getenv %s", variable); | 2974 | snprintf(command, sizeof(command)-1, "getenv %s", variable); |
| 2950 | irecv_error_t error = irecv_send_command_raw(client, command, 0); | 2975 | irecv_error_t error = irecv_send_command_raw(client, command, 0); |
| 2951 | if(error == IRECV_E_PIPE) { | 2976 | if (error == IRECV_E_PIPE) { |
| 2952 | return IRECV_E_SUCCESS; | 2977 | return IRECV_E_SUCCESS; |
| 2953 | } | 2978 | } |
| 2954 | 2979 | ||
| 2955 | if(error != IRECV_E_SUCCESS) { | 2980 | if (error != IRECV_E_SUCCESS) { |
| 2956 | return error; | 2981 | return error; |
| 2957 | } | 2982 | } |
| 2958 | 2983 | ||
| @@ -2970,7 +2995,8 @@ irecv_error_t irecv_getenv(irecv_client_t client, const char* variable, char** v | |||
| 2970 | #endif | 2995 | #endif |
| 2971 | } | 2996 | } |
| 2972 | 2997 | ||
| 2973 | irecv_error_t irecv_getret(irecv_client_t client, unsigned int* value) { | 2998 | irecv_error_t irecv_getret(irecv_client_t client, unsigned int* value) |
| 2999 | { | ||
| 2974 | #ifdef USE_DUMMY | 3000 | #ifdef USE_DUMMY |
| 2975 | return IRECV_E_UNSUPPORTED; | 3001 | return IRECV_E_UNSUPPORTED; |
| 2976 | #else | 3002 | #else |
| @@ -2993,7 +3019,8 @@ irecv_error_t irecv_getret(irecv_client_t client, unsigned int* value) { | |||
| 2993 | #endif | 3019 | #endif |
| 2994 | } | 3020 | } |
| 2995 | 3021 | ||
| 2996 | irecv_error_t irecv_get_mode(irecv_client_t client, int* mode) { | 3022 | irecv_error_t irecv_get_mode(irecv_client_t client, int* mode) |
| 3023 | { | ||
| 2997 | #ifdef USE_DUMMY | 3024 | #ifdef USE_DUMMY |
| 2998 | return IRECV_E_UNSUPPORTED; | 3025 | return IRECV_E_UNSUPPORTED; |
| 2999 | #else | 3026 | #else |
| @@ -3020,7 +3047,8 @@ const struct irecv_device_info* irecv_get_device_info(irecv_client_t client) | |||
| 3020 | 3047 | ||
| 3021 | #ifndef USE_DUMMY | 3048 | #ifndef USE_DUMMY |
| 3022 | #ifdef HAVE_IOKIT | 3049 | #ifdef HAVE_IOKIT |
| 3023 | static void *iokit_limera1n_usb_submit_request(void *argv) { | 3050 | static void *iokit_limera1n_usb_submit_request(void *argv) |
| 3051 | { | ||
| 3024 | void **args = argv; | 3052 | void **args = argv; |
| 3025 | IOUSBDeviceInterface320 **dev = args[0]; | 3053 | IOUSBDeviceInterface320 **dev = args[0]; |
| 3026 | IOUSBDevRequest *req = args[1]; | 3054 | IOUSBDevRequest *req = args[1]; |
| @@ -3034,7 +3062,8 @@ static void *iokit_limera1n_usb_submit_request(void *argv) { | |||
| 3034 | #endif | 3062 | #endif |
| 3035 | #endif | 3063 | #endif |
| 3036 | 3064 | ||
| 3037 | irecv_error_t irecv_trigger_limera1n_exploit(irecv_client_t client) { | 3065 | irecv_error_t irecv_trigger_limera1n_exploit(irecv_client_t client) |
| 3066 | { | ||
| 3038 | #ifdef USE_DUMMY | 3067 | #ifdef USE_DUMMY |
| 3039 | return IRECV_E_UNSUPPORTED; | 3068 | return IRECV_E_UNSUPPORTED; |
| 3040 | #else | 3069 | #else |
| @@ -3085,7 +3114,8 @@ irecv_error_t irecv_trigger_limera1n_exploit(irecv_client_t client) { | |||
| 3085 | #endif | 3114 | #endif |
| 3086 | } | 3115 | } |
| 3087 | 3116 | ||
| 3088 | irecv_error_t irecv_execute_script(irecv_client_t client, const char* script) { | 3117 | irecv_error_t irecv_execute_script(irecv_client_t client, const char* script) |
| 3118 | { | ||
| 3089 | #ifdef USE_DUMMY | 3119 | #ifdef USE_DUMMY |
| 3090 | return IRECV_E_UNSUPPORTED; | 3120 | return IRECV_E_UNSUPPORTED; |
| 3091 | #else | 3121 | #else |
| @@ -3096,15 +3126,15 @@ irecv_error_t irecv_execute_script(irecv_client_t client, const char* script) { | |||
| 3096 | char* body = strdup(script); | 3126 | char* body = strdup(script); |
| 3097 | char* line = strtok(body, "\n"); | 3127 | char* line = strtok(body, "\n"); |
| 3098 | 3128 | ||
| 3099 | while(line != NULL) { | 3129 | while (line != NULL) { |
| 3100 | if(line[0] != '#') { | 3130 | if (line[0] != '#') { |
| 3101 | error = irecv_send_command(client, line); | 3131 | error = irecv_send_command(client, line); |
| 3102 | if(error != IRECV_E_SUCCESS) { | 3132 | if (error != IRECV_E_SUCCESS) { |
| 3103 | break; | 3133 | break; |
| 3104 | } | 3134 | } |
| 3105 | 3135 | ||
| 3106 | error = irecv_receive(client); | 3136 | error = irecv_receive(client); |
| 3107 | if(error != IRECV_E_SUCCESS) { | 3137 | if (error != IRECV_E_SUCCESS) { |
| 3108 | break; | 3138 | break; |
| 3109 | } | 3139 | } |
| 3110 | } | 3140 | } |
| @@ -3117,12 +3147,13 @@ irecv_error_t irecv_execute_script(irecv_client_t client, const char* script) { | |||
| 3117 | #endif | 3147 | #endif |
| 3118 | } | 3148 | } |
| 3119 | 3149 | ||
| 3120 | irecv_error_t irecv_saveenv(irecv_client_t client) { | 3150 | irecv_error_t irecv_saveenv(irecv_client_t client) |
| 3151 | { | ||
| 3121 | #ifdef USE_DUMMY | 3152 | #ifdef USE_DUMMY |
| 3122 | return IRECV_E_UNSUPPORTED; | 3153 | return IRECV_E_UNSUPPORTED; |
| 3123 | #else | 3154 | #else |
| 3124 | irecv_error_t error = irecv_send_command_raw(client, "saveenv", 0); | 3155 | irecv_error_t error = irecv_send_command_raw(client, "saveenv", 0); |
| 3125 | if(error != IRECV_E_SUCCESS) { | 3156 | if (error != IRECV_E_SUCCESS) { |
| 3126 | return error; | 3157 | return error; |
| 3127 | } | 3158 | } |
| 3128 | 3159 | ||
| @@ -3130,7 +3161,8 @@ irecv_error_t irecv_saveenv(irecv_client_t client) { | |||
| 3130 | #endif | 3161 | #endif |
| 3131 | } | 3162 | } |
| 3132 | 3163 | ||
| 3133 | irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const char* value) { | 3164 | irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const char* value) |
| 3165 | { | ||
| 3134 | #ifdef USE_DUMMY | 3166 | #ifdef USE_DUMMY |
| 3135 | return IRECV_E_UNSUPPORTED; | 3167 | return IRECV_E_UNSUPPORTED; |
| 3136 | #else | 3168 | #else |
| @@ -3139,14 +3171,14 @@ irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const ch | |||
| 3139 | if (check_context(client) != IRECV_E_SUCCESS) | 3171 | if (check_context(client) != IRECV_E_SUCCESS) |
| 3140 | return IRECV_E_NO_DEVICE; | 3172 | return IRECV_E_NO_DEVICE; |
| 3141 | 3173 | ||
| 3142 | if(variable == NULL || value == NULL) { | 3174 | if (variable == NULL || value == NULL) { |
| 3143 | return IRECV_E_UNKNOWN_ERROR; | 3175 | return IRECV_E_UNKNOWN_ERROR; |
| 3144 | } | 3176 | } |
| 3145 | 3177 | ||
| 3146 | memset(command, '\0', sizeof(command)); | 3178 | memset(command, '\0', sizeof(command)); |
| 3147 | snprintf(command, sizeof(command)-1, "setenv %s %s", variable, value); | 3179 | snprintf(command, sizeof(command)-1, "setenv %s %s", variable, value); |
| 3148 | irecv_error_t error = irecv_send_command_raw(client, command, 0); | 3180 | irecv_error_t error = irecv_send_command_raw(client, command, 0); |
| 3149 | if(error != IRECV_E_SUCCESS) { | 3181 | if (error != IRECV_E_SUCCESS) { |
| 3150 | return error; | 3182 | return error; |
| 3151 | } | 3183 | } |
| 3152 | 3184 | ||
| @@ -3154,7 +3186,8 @@ irecv_error_t irecv_setenv(irecv_client_t client, const char* variable, const ch | |||
| 3154 | #endif | 3186 | #endif |
| 3155 | } | 3187 | } |
| 3156 | 3188 | ||
| 3157 | irecv_error_t irecv_setenv_np(irecv_client_t client, const char* variable, const char* value) { | 3189 | irecv_error_t irecv_setenv_np(irecv_client_t client, const char* variable, const char* value) |
| 3190 | { | ||
| 3158 | #ifdef USE_DUMMY | 3191 | #ifdef USE_DUMMY |
| 3159 | return IRECV_E_UNSUPPORTED; | 3192 | return IRECV_E_UNSUPPORTED; |
| 3160 | #else | 3193 | #else |
| @@ -3163,14 +3196,14 @@ irecv_error_t irecv_setenv_np(irecv_client_t client, const char* variable, const | |||
| 3163 | if (check_context(client) != IRECV_E_SUCCESS) | 3196 | if (check_context(client) != IRECV_E_SUCCESS) |
| 3164 | return IRECV_E_NO_DEVICE; | 3197 | return IRECV_E_NO_DEVICE; |
| 3165 | 3198 | ||
| 3166 | if(variable == NULL || value == NULL) { | 3199 | if (variable == NULL || value == NULL) { |
| 3167 | return IRECV_E_UNKNOWN_ERROR; | 3200 | return IRECV_E_UNKNOWN_ERROR; |
| 3168 | } | 3201 | } |
| 3169 | 3202 | ||
| 3170 | memset(command, '\0', sizeof(command)); | 3203 | memset(command, '\0', sizeof(command)); |
| 3171 | snprintf(command, sizeof(command)-1, "setenvnp %s %s", variable, value); | 3204 | snprintf(command, sizeof(command)-1, "setenvnp %s %s", variable, value); |
| 3172 | irecv_error_t error = irecv_send_command_raw(client, command, 0); | 3205 | irecv_error_t error = irecv_send_command_raw(client, command, 0); |
| 3173 | if(error != IRECV_E_SUCCESS) { | 3206 | if (error != IRECV_E_SUCCESS) { |
| 3174 | return error; | 3207 | return error; |
| 3175 | } | 3208 | } |
| 3176 | 3209 | ||
| @@ -3178,12 +3211,13 @@ irecv_error_t irecv_setenv_np(irecv_client_t client, const char* variable, const | |||
| 3178 | #endif | 3211 | #endif |
| 3179 | } | 3212 | } |
| 3180 | 3213 | ||
| 3181 | irecv_error_t irecv_reboot(irecv_client_t client) { | 3214 | irecv_error_t irecv_reboot(irecv_client_t client) |
| 3215 | { | ||
| 3182 | #ifdef USE_DUMMY | 3216 | #ifdef USE_DUMMY |
| 3183 | return IRECV_E_UNSUPPORTED; | 3217 | return IRECV_E_UNSUPPORTED; |
| 3184 | #else | 3218 | #else |
| 3185 | irecv_error_t error = irecv_send_command_raw(client, "reboot", 0); | 3219 | irecv_error_t error = irecv_send_command_raw(client, "reboot", 0); |
| 3186 | if(error != IRECV_E_SUCCESS) { | 3220 | if (error != IRECV_E_SUCCESS) { |
| 3187 | return error; | 3221 | return error; |
| 3188 | } | 3222 | } |
| 3189 | 3223 | ||
| @@ -3191,7 +3225,8 @@ irecv_error_t irecv_reboot(irecv_client_t client) { | |||
| 3191 | #endif | 3225 | #endif |
| 3192 | } | 3226 | } |
| 3193 | 3227 | ||
| 3194 | const char* irecv_strerror(irecv_error_t error) { | 3228 | const char* irecv_strerror(irecv_error_t error) |
| 3229 | { | ||
| 3195 | switch (error) { | 3230 | switch (error) { |
| 3196 | case IRECV_E_SUCCESS: | 3231 | case IRECV_E_SUCCESS: |
| 3197 | return "Command completed successfully"; | 3232 | return "Command completed successfully"; |
| @@ -3239,7 +3274,8 @@ const char* irecv_strerror(irecv_error_t error) { | |||
| 3239 | return NULL; | 3274 | return NULL; |
| 3240 | } | 3275 | } |
| 3241 | 3276 | ||
| 3242 | irecv_error_t irecv_reset_counters(irecv_client_t client) { | 3277 | irecv_error_t irecv_reset_counters(irecv_client_t client) |
| 3278 | { | ||
| 3243 | #ifdef USE_DUMMY | 3279 | #ifdef USE_DUMMY |
| 3244 | return IRECV_E_UNSUPPORTED; | 3280 | return IRECV_E_UNSUPPORTED; |
| 3245 | #else | 3281 | #else |
| @@ -3254,7 +3290,8 @@ irecv_error_t irecv_reset_counters(irecv_client_t client) { | |||
| 3254 | #endif | 3290 | #endif |
| 3255 | } | 3291 | } |
| 3256 | 3292 | ||
| 3257 | irecv_error_t irecv_recv_buffer(irecv_client_t client, char* buffer, unsigned long length) { | 3293 | irecv_error_t irecv_recv_buffer(irecv_client_t client, char* buffer, unsigned long length) |
| 3294 | { | ||
| 3258 | #ifdef USE_DUMMY | 3295 | #ifdef USE_DUMMY |
| 3259 | return IRECV_E_UNSUPPORTED; | 3296 | return IRECV_E_UNSUPPORTED; |
| 3260 | #else | 3297 | #else |
| @@ -3284,7 +3321,7 @@ irecv_error_t irecv_recv_buffer(irecv_client_t client, char* buffer, unsigned lo | |||
| 3284 | } | 3321 | } |
| 3285 | 3322 | ||
| 3286 | count += size; | 3323 | count += size; |
| 3287 | if(client->progress_callback != NULL) { | 3324 | if (client->progress_callback != NULL) { |
| 3288 | irecv_event_t event; | 3325 | irecv_event_t event; |
| 3289 | event.progress = ((double) count/ (double) length) * 100.0; | 3326 | event.progress = ((double) count/ (double) length) * 100.0; |
| 3290 | event.type = IRECV_PROGRESS; | 3327 | event.type = IRECV_PROGRESS; |
| @@ -3300,7 +3337,8 @@ irecv_error_t irecv_recv_buffer(irecv_client_t client, char* buffer, unsigned lo | |||
| 3300 | #endif | 3337 | #endif |
| 3301 | } | 3338 | } |
| 3302 | 3339 | ||
| 3303 | irecv_error_t irecv_finish_transfer(irecv_client_t client) { | 3340 | irecv_error_t irecv_finish_transfer(irecv_client_t client) |
| 3341 | { | ||
| 3304 | #ifdef USE_DUMMY | 3342 | #ifdef USE_DUMMY |
| 3305 | return IRECV_E_UNSUPPORTED; | 3343 | return IRECV_E_UNSUPPORTED; |
| 3306 | #else | 3344 | #else |
| @@ -3312,7 +3350,7 @@ irecv_error_t irecv_finish_transfer(irecv_client_t client) { | |||
| 3312 | 3350 | ||
| 3313 | irecv_usb_control_transfer(client, 0x21, 1, 0, 0, 0, 0, USB_TIMEOUT); | 3351 | irecv_usb_control_transfer(client, 0x21, 1, 0, 0, 0, 0, USB_TIMEOUT); |
| 3314 | 3352 | ||
| 3315 | for(i = 0; i < 3; i++){ | 3353 | for (i = 0; i < 3; i++){ |
| 3316 | irecv_get_status(client, &status); | 3354 | irecv_get_status(client, &status); |
| 3317 | } | 3355 | } |
| 3318 | 3356 | ||
| @@ -3322,11 +3360,13 @@ irecv_error_t irecv_finish_transfer(irecv_client_t client) { | |||
| 3322 | #endif | 3360 | #endif |
| 3323 | } | 3361 | } |
| 3324 | 3362 | ||
| 3325 | irecv_device_t irecv_devices_get_all(void) { | 3363 | irecv_device_t irecv_devices_get_all(void) |
| 3364 | { | ||
| 3326 | return irecv_devices; | 3365 | return irecv_devices; |
| 3327 | } | 3366 | } |
| 3328 | 3367 | ||
| 3329 | irecv_error_t irecv_devices_get_device_by_client(irecv_client_t client, irecv_device_t* device) { | 3368 | irecv_error_t irecv_devices_get_device_by_client(irecv_client_t client, irecv_device_t* device) |
| 3369 | { | ||
| 3330 | #ifdef USE_DUMMY | 3370 | #ifdef USE_DUMMY |
| 3331 | return IRECV_E_UNSUPPORTED; | 3371 | return IRECV_E_UNSUPPORTED; |
| 3332 | #else | 3372 | #else |
| @@ -3352,7 +3392,8 @@ irecv_error_t irecv_devices_get_device_by_client(irecv_client_t client, irecv_de | |||
| 3352 | #endif | 3392 | #endif |
| 3353 | } | 3393 | } |
| 3354 | 3394 | ||
| 3355 | irecv_error_t irecv_devices_get_device_by_product_type(const char* product_type, irecv_device_t* device) { | 3395 | irecv_error_t irecv_devices_get_device_by_product_type(const char* product_type, irecv_device_t* device) |
| 3396 | { | ||
| 3356 | int i = 0; | 3397 | int i = 0; |
| 3357 | 3398 | ||
| 3358 | if (!product_type || !device) | 3399 | if (!product_type || !device) |
| @@ -3370,7 +3411,8 @@ irecv_error_t irecv_devices_get_device_by_product_type(const char* product_type, | |||
| 3370 | return IRECV_E_NO_DEVICE; | 3411 | return IRECV_E_NO_DEVICE; |
| 3371 | } | 3412 | } |
| 3372 | 3413 | ||
| 3373 | irecv_error_t irecv_devices_get_device_by_hardware_model(const char* hardware_model, irecv_device_t* device) { | 3414 | irecv_error_t irecv_devices_get_device_by_hardware_model(const char* hardware_model, irecv_device_t* device) |
| 3415 | { | ||
| 3374 | int i = 0; | 3416 | int i = 0; |
| 3375 | 3417 | ||
| 3376 | if (!hardware_model || !device) | 3418 | if (!hardware_model || !device) |
| @@ -3388,7 +3430,8 @@ irecv_error_t irecv_devices_get_device_by_hardware_model(const char* hardware_mo | |||
| 3388 | return IRECV_E_NO_DEVICE; | 3430 | return IRECV_E_NO_DEVICE; |
| 3389 | } | 3431 | } |
| 3390 | 3432 | ||
| 3391 | irecv_client_t irecv_reconnect(irecv_client_t client, int initial_pause) { | 3433 | irecv_client_t irecv_reconnect(irecv_client_t client, int initial_pause) |
| 3434 | { | ||
| 3392 | #ifdef USE_DUMMY | 3435 | #ifdef USE_DUMMY |
| 3393 | return NULL; | 3436 | return NULL; |
| 3394 | #else | 3437 | #else |
| @@ -3413,7 +3456,7 @@ irecv_client_t irecv_reconnect(irecv_client_t client, int initial_pause) { | |||
| 3413 | } | 3456 | } |
| 3414 | 3457 | ||
| 3415 | error = irecv_open_with_ecid_and_attempts(&new_client, ecid, 10); | 3458 | error = irecv_open_with_ecid_and_attempts(&new_client, ecid, 10); |
| 3416 | if(error != IRECV_E_SUCCESS) { | 3459 | if (error != IRECV_E_SUCCESS) { |
| 3417 | return NULL; | 3460 | return NULL; |
| 3418 | } | 3461 | } |
| 3419 | 3462 | ||
diff --git a/tools/irecovery.c b/tools/irecovery.c index faf0a92..34e80bf 100644 --- a/tools/irecovery.c +++ b/tools/irecovery.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * irecovery.c | 2 | * irecovery.c |
| 3 | * Software frontend for iBoot/iBSS communication with iOS devices | 3 | * Software frontend for iBoot/iBSS communication with iOS devices |
| 4 | * | 4 | * |
| 5 | * Copyright (c) 2012-2020 Nikias Bassen <nikias@gmx.li> | 5 | * Copyright (c) 2012-2023 Nikias Bassen <nikias@gmx.li> |
| 6 | * Copyright (c) 2012-2015 Martin Szulecki <martin.szulecki@libimobiledevice.org> | 6 | * Copyright (c) 2012-2015 Martin Szulecki <martin.szulecki@libimobiledevice.org> |
| 7 | * Copyright (c) 2010-2011 Chronic-Dev Team | 7 | * Copyright (c) 2010-2011 Chronic-Dev Team |
| 8 | * Copyright (c) 2010-2011 Joshua Hill | 8 | * Copyright (c) 2010-2011 Joshua Hill |
| @@ -43,7 +43,7 @@ | |||
| 43 | #endif | 43 | #endif |
| 44 | 44 | ||
| 45 | #define FILE_HISTORY_PATH ".irecovery" | 45 | #define FILE_HISTORY_PATH ".irecovery" |
| 46 | #define debug(...) if(verbose) fprintf(stderr, __VA_ARGS__) | 46 | #define debug(...) if (verbose) fprintf(stderr, __VA_ARGS__) |
| 47 | 47 | ||
| 48 | enum { | 48 | enum { |
| 49 | kNoAction, | 49 | kNoAction, |
| @@ -68,7 +68,8 @@ int progress_cb(irecv_client_t client, const irecv_event_t* event); | |||
| 68 | int precommand_cb(irecv_client_t client, const irecv_event_t* event); | 68 | int precommand_cb(irecv_client_t client, const irecv_event_t* event); |
| 69 | int postcommand_cb(irecv_client_t client, const irecv_event_t* event); | 69 | int postcommand_cb(irecv_client_t client, const irecv_event_t* event); |
| 70 | 70 | ||
| 71 | static void shell_usage() { | 71 | static void shell_usage() |
| 72 | { | ||
| 72 | printf("Usage:\n"); | 73 | printf("Usage:\n"); |
| 73 | printf(" /upload FILE\t\tsend FILE to device\n"); | 74 | printf(" /upload FILE\t\tsend FILE to device\n"); |
| 74 | printf(" /limera1n [FILE]\trun limera1n exploit and send optional payload from FILE\n"); | 75 | printf(" /limera1n [FILE]\trun limera1n exploit and send optional payload from FILE\n"); |
| @@ -77,7 +78,8 @@ static void shell_usage() { | |||
| 77 | printf(" /exit\t\t\texit interactive shell\n"); | 78 | printf(" /exit\t\t\texit interactive shell\n"); |
| 78 | } | 79 | } |
| 79 | 80 | ||
| 80 | static const char* mode_to_str(int mode) { | 81 | static const char* mode_to_str(int mode) |
| 82 | { | ||
| 81 | switch (mode) { | 83 | switch (mode) { |
| 82 | case IRECV_K_RECOVERY_MODE_1: | 84 | case IRECV_K_RECOVERY_MODE_1: |
| 83 | case IRECV_K_RECOVERY_MODE_2: | 85 | case IRECV_K_RECOVERY_MODE_2: |
| @@ -97,7 +99,8 @@ static const char* mode_to_str(int mode) { | |||
| 97 | } | 99 | } |
| 98 | } | 100 | } |
| 99 | 101 | ||
| 100 | static void buffer_read_from_filename(const char *filename, char **buffer, uint64_t *length) { | 102 | static void buffer_read_from_filename(const char *filename, char **buffer, uint64_t *length) |
| 103 | { | ||
| 101 | FILE *f; | 104 | FILE *f; |
| 102 | uint64_t size; | 105 | uint64_t size; |
| 103 | 106 | ||
| @@ -187,7 +190,8 @@ static void print_device_info(irecv_client_t client) | |||
| 187 | } | 190 | } |
| 188 | } | 191 | } |
| 189 | 192 | ||
| 190 | static void print_devices() { | 193 | static void print_devices() |
| 194 | { | ||
| 191 | struct irecv_device *devices = irecv_devices_get_all(); | 195 | struct irecv_device *devices = irecv_devices_get_all(); |
| 192 | struct irecv_device *device = NULL; | 196 | struct irecv_device *device = NULL; |
| 193 | int i = 0; | 197 | int i = 0; |
| @@ -209,7 +213,8 @@ static int _is_breq_command(const char* cmd) | |||
| 209 | ); | 213 | ); |
| 210 | } | 214 | } |
| 211 | 215 | ||
| 212 | static void parse_command(irecv_client_t client, unsigned char* command, unsigned int size) { | 216 | static void parse_command(irecv_client_t client, unsigned char* command, unsigned int size) |
| 217 | { | ||
| 213 | char* cmd = strdup((char*)command); | 218 | char* cmd = strdup((char*)command); |
| 214 | char* action = strtok(cmd, " "); | 219 | char* action = strtok(cmd, " "); |
| 215 | 220 | ||
| @@ -254,16 +259,19 @@ static void parse_command(irecv_client_t client, unsigned char* command, unsigne | |||
| 254 | free(action); | 259 | free(action); |
| 255 | } | 260 | } |
| 256 | 261 | ||
| 257 | static void load_command_history() { | 262 | static void load_command_history() |
| 263 | { | ||
| 258 | read_history(FILE_HISTORY_PATH); | 264 | read_history(FILE_HISTORY_PATH); |
| 259 | } | 265 | } |
| 260 | 266 | ||
| 261 | static void append_command_to_history(char* cmd) { | 267 | static void append_command_to_history(char* cmd) |
| 268 | { | ||
| 262 | add_history(cmd); | 269 | add_history(cmd); |
| 263 | write_history(FILE_HISTORY_PATH); | 270 | write_history(FILE_HISTORY_PATH); |
| 264 | } | 271 | } |
| 265 | 272 | ||
| 266 | static void init_shell(irecv_client_t client) { | 273 | static void init_shell(irecv_client_t client) |
| 274 | { | ||
| 267 | irecv_error_t error = 0; | 275 | irecv_error_t error = 0; |
| 268 | load_command_history(); | 276 | load_command_history(); |
| 269 | irecv_event_subscribe(client, IRECV_PROGRESS, &progress_cb, NULL); | 277 | irecv_event_subscribe(client, IRECV_PROGRESS, &progress_cb, NULL); |
| @@ -294,7 +302,8 @@ static void init_shell(irecv_client_t client) { | |||
| 294 | } | 302 | } |
| 295 | } | 303 | } |
| 296 | 304 | ||
| 297 | int received_cb(irecv_client_t client, const irecv_event_t* event) { | 305 | int received_cb(irecv_client_t client, const irecv_event_t* event) |
| 306 | { | ||
| 298 | if (event->type == IRECV_RECEIVED) { | 307 | if (event->type == IRECV_RECEIVED) { |
| 299 | int i = 0; | 308 | int i = 0; |
| 300 | int size = event->size; | 309 | int size = event->size; |
| @@ -307,7 +316,8 @@ int received_cb(irecv_client_t client, const irecv_event_t* event) { | |||
| 307 | return 0; | 316 | return 0; |
| 308 | } | 317 | } |
| 309 | 318 | ||
| 310 | int precommand_cb(irecv_client_t client, const irecv_event_t* event) { | 319 | int precommand_cb(irecv_client_t client, const irecv_event_t* event) |
| 320 | { | ||
| 311 | if (event->type == IRECV_PRECOMMAND) { | 321 | if (event->type == IRECV_PRECOMMAND) { |
| 312 | if (event->data[0] == '/') { | 322 | if (event->data[0] == '/') { |
| 313 | parse_command(client, (unsigned char*)event->data, event->size); | 323 | parse_command(client, (unsigned char*)event->data, event->size); |
| @@ -318,7 +328,8 @@ int precommand_cb(irecv_client_t client, const irecv_event_t* event) { | |||
| 318 | return 0; | 328 | return 0; |
| 319 | } | 329 | } |
| 320 | 330 | ||
| 321 | int postcommand_cb(irecv_client_t client, const irecv_event_t* event) { | 331 | int postcommand_cb(irecv_client_t client, const irecv_event_t* event) |
| 332 | { | ||
| 322 | char* value = NULL; | 333 | char* value = NULL; |
| 323 | char* action = NULL; | 334 | char* action = NULL; |
| 324 | char* command = NULL; | 335 | char* command = NULL; |
| @@ -350,7 +361,8 @@ int postcommand_cb(irecv_client_t client, const irecv_event_t* event) { | |||
| 350 | return 0; | 361 | return 0; |
| 351 | } | 362 | } |
| 352 | 363 | ||
| 353 | int progress_cb(irecv_client_t client, const irecv_event_t* event) { | 364 | int progress_cb(irecv_client_t client, const irecv_event_t* event) |
| 365 | { | ||
| 354 | if (event->type == IRECV_PROGRESS) { | 366 | if (event->type == IRECV_PROGRESS) { |
| 355 | print_progress_bar(event->progress); | 367 | print_progress_bar(event->progress); |
| 356 | } | 368 | } |
| @@ -358,21 +370,22 @@ int progress_cb(irecv_client_t client, const irecv_event_t* event) { | |||
| 358 | return 0; | 370 | return 0; |
| 359 | } | 371 | } |
| 360 | 372 | ||
| 361 | void print_progress_bar(double progress) { | 373 | void print_progress_bar(double progress) |
| 374 | { | ||
| 362 | int i = 0; | 375 | int i = 0; |
| 363 | 376 | ||
| 364 | if(progress < 0) { | 377 | if (progress < 0) { |
| 365 | return; | 378 | return; |
| 366 | } | 379 | } |
| 367 | 380 | ||
| 368 | if(progress > 100) { | 381 | if (progress > 100) { |
| 369 | progress = 100; | 382 | progress = 100; |
| 370 | } | 383 | } |
| 371 | 384 | ||
| 372 | printf("\r["); | 385 | printf("\r["); |
| 373 | 386 | ||
| 374 | for(i = 0; i < 50; i++) { | 387 | for (i = 0; i < 50; i++) { |
| 375 | if(i < progress / 2) { | 388 | if (i < progress / 2) { |
| 376 | printf("="); | 389 | printf("="); |
| 377 | } else { | 390 | } else { |
| 378 | printf(" "); | 391 | printf(" "); |
| @@ -383,12 +396,13 @@ void print_progress_bar(double progress) { | |||
| 383 | 396 | ||
| 384 | fflush(stdout); | 397 | fflush(stdout); |
| 385 | 398 | ||
| 386 | if(progress == 100) { | 399 | if (progress == 100) { |
| 387 | printf("\n"); | 400 | printf("\n"); |
| 388 | } | 401 | } |
| 389 | } | 402 | } |
| 390 | 403 | ||
| 391 | static void print_usage(int argc, char **argv) { | 404 | static void print_usage(int argc, char **argv) |
| 405 | { | ||
| 392 | char *name = NULL; | 406 | char *name = NULL; |
| 393 | name = strrchr(argv[0], '/'); | 407 | name = strrchr(argv[0], '/'); |
| 394 | printf("Usage: %s [OPTIONS]\n", (name ? name + 1: argv[0])); | 408 | printf("Usage: %s [OPTIONS]\n", (name ? name + 1: argv[0])); |
| @@ -415,7 +429,8 @@ static void print_usage(int argc, char **argv) { | |||
| 415 | printf("Bug Reports: <" PACKAGE_BUGREPORT ">\n"); | 429 | printf("Bug Reports: <" PACKAGE_BUGREPORT ">\n"); |
| 416 | } | 430 | } |
| 417 | 431 | ||
| 418 | int main(int argc, char* argv[]) { | 432 | int main(int argc, char* argv[]) |
| 433 | { | ||
| 419 | static struct option longopts[] = { | 434 | static struct option longopts[] = { |
| 420 | { "ecid", required_argument, NULL, 'i' }, | 435 | { "ecid", required_argument, NULL, 'i' }, |
| 421 | { "command", required_argument, NULL, 'c' }, | 436 | { "command", required_argument, NULL, 'c' }, |
| @@ -605,7 +620,7 @@ int main(int argc, char* argv[]) { | |||
| 605 | buffer[buffer_length] = '\0'; | 620 | buffer[buffer_length] = '\0'; |
| 606 | 621 | ||
| 607 | error = irecv_execute_script(client, buffer); | 622 | error = irecv_execute_script(client, buffer); |
| 608 | if(error != IRECV_E_SUCCESS) { | 623 | if (error != IRECV_E_SUCCESS) { |
| 609 | debug("%s\n", irecv_strerror(error)); | 624 | debug("%s\n", irecv_strerror(error)); |
| 610 | } | 625 | } |
| 611 | 626 | ||
