Loading adb/adb.c +16 −18 Original line number Diff line number Diff line Loading @@ -318,6 +318,15 @@ static size_t fill_connect_data(char *buf, size_t bufsize) #endif } static void send_msg_with_okay(int fd, char* msg, size_t msglen) { char header[9]; if (msglen > 0xffff) msglen = 0xffff; snprintf(header, sizeof(header), "OKAY%04x", (unsigned)msglen); writex(fd, header, 8); writex(fd, msg, msglen); } static void send_connect(atransport *t) { D("Calling send_connect \n"); Loading Loading @@ -1421,7 +1430,6 @@ int adb_main(int is_daemon, int server_port) int handle_host_request(char *service, transport_type ttype, char* serial, int reply_fd, asocket *s) { atransport *transport = NULL; char buf[4096]; if(!strcmp(service, "kill")) { fprintf(stderr,"adb server killed by remote request\n"); Loading Loading @@ -1467,13 +1475,11 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r char buffer[4096]; int use_long = !strcmp(service+7, "-l"); if (use_long || service[7] == 0) { memset(buf, 0, sizeof(buf)); memset(buffer, 0, sizeof(buffer)); D("Getting device list \n"); list_transports(buffer, sizeof(buffer), use_long); snprintf(buf, sizeof(buf), "OKAY%04x%s",(unsigned)strlen(buffer),buffer); D("Wrote device list \n"); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, buffer, strlen(buffer)); return 0; } } Loading Loading @@ -1502,8 +1508,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r } } snprintf(buf, sizeof(buf), "OKAY%04x%s",(unsigned)strlen(buffer), buffer); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, buffer, strlen(buffer)); return 0; } Loading @@ -1511,8 +1516,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if (!strcmp(service, "version")) { char version[12]; snprintf(version, sizeof version, "%04x", ADB_SERVER_VERSION); snprintf(buf, sizeof buf, "OKAY%04x%s", (unsigned)strlen(version), version); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, version, strlen(version)); return 0; } Loading @@ -1522,8 +1526,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if (transport && transport->serial) { out = transport->serial; } snprintf(buf, sizeof buf, "OKAY%04x%s",(unsigned)strlen(out),out); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, out, strlen(out)); return 0; } if(!strncmp(service,"get-devpath",strlen("get-devpath"))) { Loading @@ -1532,8 +1535,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if (transport && transport->devpath) { out = transport->devpath; } snprintf(buf, sizeof buf, "OKAY%04x%s",(unsigned)strlen(out),out); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, out, strlen(out)); return 0; } // indicates a new emulator instance has started Loading @@ -1547,14 +1549,11 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if(!strcmp(service,"list-forward")) { // Create the list of forward redirections. char header[9]; int buffer_size = format_listeners(NULL, 0); // Add one byte for the trailing zero. char* buffer = malloc(buffer_size+1); (void) format_listeners(buffer, buffer_size+1); snprintf(header, sizeof header, "OKAY%04x", buffer_size); writex(reply_fd, header, 8); writex(reply_fd, buffer, buffer_size); send_msg_with_okay(reply_fd, buffer, buffer_size); free(buffer); return 0; } Loading Loading @@ -1643,8 +1642,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if(!strncmp(service,"get-state",strlen("get-state"))) { transport = acquire_one_transport(CS_ANY, ttype, serial, NULL); char *state = connection_state_name(transport); snprintf(buf, sizeof buf, "OKAY%04x%s",(unsigned)strlen(state),state); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, state, strlen(state)); return 0; } return -1; Loading adb/adb_client.c +4 −1 Original line number Diff line number Diff line Loading @@ -324,7 +324,10 @@ char *adb_query(const char *service) buf[4] = 0; n = strtoul(buf, 0, 16); if(n > 1024) goto oops; if(n >= 0xffff) { strcpy(__adb_error, "reply is too long (>= 64kB)"); goto oops; } tmp = malloc(n + 1); if(tmp == 0) goto oops; Loading adb/transport.c +4 −0 Original line number Diff line number Diff line Loading @@ -1188,6 +1188,10 @@ int writex(int fd, const void *ptr, size_t len) D("writex: fd=%d error %d: %s\n", fd, errno, strerror(errno)); if (errno == EINTR) continue; if (errno == EAGAIN || errno == EWOULDBLOCK) { adb_sleep_ms(1); // just yield some cpu time continue; } } else { D("writex: fd=%d disconnected\n", fd); } Loading Loading
adb/adb.c +16 −18 Original line number Diff line number Diff line Loading @@ -318,6 +318,15 @@ static size_t fill_connect_data(char *buf, size_t bufsize) #endif } static void send_msg_with_okay(int fd, char* msg, size_t msglen) { char header[9]; if (msglen > 0xffff) msglen = 0xffff; snprintf(header, sizeof(header), "OKAY%04x", (unsigned)msglen); writex(fd, header, 8); writex(fd, msg, msglen); } static void send_connect(atransport *t) { D("Calling send_connect \n"); Loading Loading @@ -1421,7 +1430,6 @@ int adb_main(int is_daemon, int server_port) int handle_host_request(char *service, transport_type ttype, char* serial, int reply_fd, asocket *s) { atransport *transport = NULL; char buf[4096]; if(!strcmp(service, "kill")) { fprintf(stderr,"adb server killed by remote request\n"); Loading Loading @@ -1467,13 +1475,11 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r char buffer[4096]; int use_long = !strcmp(service+7, "-l"); if (use_long || service[7] == 0) { memset(buf, 0, sizeof(buf)); memset(buffer, 0, sizeof(buffer)); D("Getting device list \n"); list_transports(buffer, sizeof(buffer), use_long); snprintf(buf, sizeof(buf), "OKAY%04x%s",(unsigned)strlen(buffer),buffer); D("Wrote device list \n"); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, buffer, strlen(buffer)); return 0; } } Loading Loading @@ -1502,8 +1508,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r } } snprintf(buf, sizeof(buf), "OKAY%04x%s",(unsigned)strlen(buffer), buffer); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, buffer, strlen(buffer)); return 0; } Loading @@ -1511,8 +1516,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if (!strcmp(service, "version")) { char version[12]; snprintf(version, sizeof version, "%04x", ADB_SERVER_VERSION); snprintf(buf, sizeof buf, "OKAY%04x%s", (unsigned)strlen(version), version); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, version, strlen(version)); return 0; } Loading @@ -1522,8 +1526,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if (transport && transport->serial) { out = transport->serial; } snprintf(buf, sizeof buf, "OKAY%04x%s",(unsigned)strlen(out),out); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, out, strlen(out)); return 0; } if(!strncmp(service,"get-devpath",strlen("get-devpath"))) { Loading @@ -1532,8 +1535,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if (transport && transport->devpath) { out = transport->devpath; } snprintf(buf, sizeof buf, "OKAY%04x%s",(unsigned)strlen(out),out); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, out, strlen(out)); return 0; } // indicates a new emulator instance has started Loading @@ -1547,14 +1549,11 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if(!strcmp(service,"list-forward")) { // Create the list of forward redirections. char header[9]; int buffer_size = format_listeners(NULL, 0); // Add one byte for the trailing zero. char* buffer = malloc(buffer_size+1); (void) format_listeners(buffer, buffer_size+1); snprintf(header, sizeof header, "OKAY%04x", buffer_size); writex(reply_fd, header, 8); writex(reply_fd, buffer, buffer_size); send_msg_with_okay(reply_fd, buffer, buffer_size); free(buffer); return 0; } Loading Loading @@ -1643,8 +1642,7 @@ int handle_host_request(char *service, transport_type ttype, char* serial, int r if(!strncmp(service,"get-state",strlen("get-state"))) { transport = acquire_one_transport(CS_ANY, ttype, serial, NULL); char *state = connection_state_name(transport); snprintf(buf, sizeof buf, "OKAY%04x%s",(unsigned)strlen(state),state); writex(reply_fd, buf, strlen(buf)); send_msg_with_okay(reply_fd, state, strlen(state)); return 0; } return -1; Loading
adb/adb_client.c +4 −1 Original line number Diff line number Diff line Loading @@ -324,7 +324,10 @@ char *adb_query(const char *service) buf[4] = 0; n = strtoul(buf, 0, 16); if(n > 1024) goto oops; if(n >= 0xffff) { strcpy(__adb_error, "reply is too long (>= 64kB)"); goto oops; } tmp = malloc(n + 1); if(tmp == 0) goto oops; Loading
adb/transport.c +4 −0 Original line number Diff line number Diff line Loading @@ -1188,6 +1188,10 @@ int writex(int fd, const void *ptr, size_t len) D("writex: fd=%d error %d: %s\n", fd, errno, strerror(errno)); if (errno == EINTR) continue; if (errno == EAGAIN || errno == EWOULDBLOCK) { adb_sleep_ms(1); // just yield some cpu time continue; } } else { D("writex: fd=%d disconnected\n", fd); } Loading