summaryrefslogtreecommitdiffstats
path: root/src/libirecovery.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2018-09-11 00:15:41 +0200
committerGravatar Nikias Bassen2018-09-11 00:15:41 +0200
commit96b0c2eb571498749c9e8b926c02559f6956e273 (patch)
treeb1bd7b1d81390d05f8b8735c58f91a653090ed2d /src/libirecovery.c
parentf1d7ac2ba8f598fce0135af4894b2f7cf3c03a9d (diff)
downloadlibirecovery-96b0c2eb571498749c9e8b926c02559f6956e273.tar.gz
libirecovery-96b0c2eb571498749c9e8b926c02559f6956e273.tar.bz2
win32: REALLY Fix parsing of usb device path so it works again with older drivers
Diffstat (limited to 'src/libirecovery.c')
-rw-r--r--src/libirecovery.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/libirecovery.c b/src/libirecovery.c
index 5fc07ba..df9fde6 100644
--- a/src/libirecovery.c
+++ b/src/libirecovery.c
@@ -569,9 +569,14 @@ irecv_error_t mobiledevice_connect(irecv_client_t* client, unsigned long long ec
569 } 569 }
570 570
571 char serial_str[256]; 571 char serial_str[256];
572 char *p = strrchr(result, '\\'); 572 char *p = result + strlen(result) - 1;
573 while (p-- && p > result) {
574 if (*p == '\\' && (strncmp(p, "\\usb", 4) == 0)) {
575 break;
576 }
577 }
573 serial_str[0] = '\0'; 578 serial_str[0] = '\0';
574 if (!p && (sscanf(p, "\\usb#vid_%*04x&pid_%*04x#%s", serial_str) != 1) || (serial_str[0] == '\0')) { 579 if (!p || (sscanf(p, "\\usb#vid_%*04x&pid_%*04x#%s", serial_str) != 1) || (serial_str[0] == '\0')) {
575 mobiledevice_closepipes(_client); 580 mobiledevice_closepipes(_client);
576 continue; 581 continue;
577 } 582 }
@@ -646,7 +651,12 @@ irecv_error_t mobiledevice_connect(irecv_client_t* client, unsigned long long ec
646 } 651 }
647 652
648 char serial_str[256]; 653 char serial_str[256];
649 char *p = strrchr(result, '\\'); 654 char *p = result + strlen(result) - 1;
655 while (p-- && p > result) {
656 if (*p == '\\' && (strncmp(p, "\\usb", 4) == 0)) {
657 break;
658 }
659 }
650 serial_str[0] = '\0'; 660 serial_str[0] = '\0';
651 if (!p || (sscanf(p, "\\usb#vid_%*04x&pid_%*04x#%s", serial_str) != 1) || (serial_str[0] == '\0')) { 661 if (!p || (sscanf(p, "\\usb#vid_%*04x&pid_%*04x#%s", serial_str) != 1) || (serial_str[0] == '\0')) {
652 mobiledevice_closepipes(_client); 662 mobiledevice_closepipes(_client);