diff options
author | Terence Haddock <thaddock@google.com> | 2011-03-16 09:43:56 +0100 |
---|---|---|
committer | Terence Haddock <thaddock@google.com> | 2011-04-06 16:18:25 +0200 |
commit | e994f18c53673cac42ed45ccb3d427bd40000948 (patch) | |
tree | cb01ae3746f135bef7de3f47cd26f4549aedb55d /adb | |
parent | 7c556549079dbcc3f6f7ef4376978cd8c598aa62 (diff) | |
download | system_core-e994f18c53673cac42ed45ccb3d427bd40000948.zip system_core-e994f18c53673cac42ed45ccb3d427bd40000948.tar.gz system_core-e994f18c53673cac42ed45ccb3d427bd40000948.tar.bz2 |
In serial, skip over port as well if numbers found after colon.
Change-Id: Icd45f570a9527790eb0cd614a3f77da1a72375b1
Diffstat (limited to 'adb')
-rw-r--r-- | adb/sockets.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/adb/sockets.c b/adb/sockets.c index 43925e4..aa4d5fc 100644 --- a/adb/sockets.c +++ b/adb/sockets.c @@ -569,6 +569,32 @@ unsigned unhex(unsigned char *s, int len) return n; } +/* skip_host_serial return the position in a string + skipping over the 'serial' parameter in the ADB protocol, + where parameter string may be a host:port string containing + the protocol delimiter (colon). */ +char *skip_host_serial(char *service) { + char *first_colon, *serial_end; + + first_colon = strchr(service, ':'); + if (!first_colon) { + /* No colon in service string. */ + return NULL; + } + serial_end = first_colon; + if (isdigit(serial_end[1])) { + serial_end++; + while ((*serial_end) && isdigit(*serial_end)) { + serial_end++; + } + if ((*serial_end) != ':') { + // Something other than numbers was found, reset the end. + serial_end = first_colon; + } + } + return serial_end; +} + static int smart_socket_enqueue(asocket *s, apacket *p) { unsigned len; @@ -624,8 +650,8 @@ static int smart_socket_enqueue(asocket *s, apacket *p) char* serial_end; service += strlen("host-serial:"); - // serial number should follow "host:" - serial_end = strchr(service, ':'); + // serial number should follow "host:" and could be a host:port string. + serial_end = skip_host_serial(service); if (serial_end) { *serial_end = 0; // terminate string serial = service; |