diff options
Diffstat (limited to 'adb/services.cpp')
| -rw-r--r-- | adb/services.cpp | 29 | 
1 files changed, 12 insertions, 17 deletions
| diff --git a/adb/services.cpp b/adb/services.cpp index e24b4705e9..19a6726f8c 100644 --- a/adb/services.cpp +++ b/adb/services.cpp @@ -184,15 +184,18 @@ void reboot_service(int fd, void* arg)      adb_close(fd);  } -void reverse_service(int fd, void* arg) -{ -    const char* command = reinterpret_cast<const char*>(arg); - -    if (handle_forward_request(command, kTransportAny, NULL, fd) < 0) { -        SendFail(fd, "not a reverse forwarding command"); +int reverse_service(const char* command) { +    int s[2]; +    if (adb_socketpair(s)) { +        PLOG(ERROR) << "cannot create service socket pair."; +        return -1;      } -    free(arg); -    adb_close(fd); +    VLOG(SERVICES) << "service socketpair: " << s[0] << ", " << s[1]; +    if (handle_forward_request(command, kTransportAny, nullptr, s[1]) < 0) { +        SendFail(s[1], "not a reverse forwarding command"); +    } +    adb_close(s[1]); +    return s[0];  }  // Shell service string can look like: @@ -335,15 +338,7 @@ int service_to_fd(const char* name, const atransport* transport) {      } else if(!strncmp(name, "usb:", 4)) {          ret = create_service_thread(restart_usb_service, NULL);      } else if (!strncmp(name, "reverse:", 8)) { -        char* cookie = strdup(name + 8); -        if (cookie == NULL) { -            ret = -1; -        } else { -            ret = create_service_thread(reverse_service, cookie); -            if (ret < 0) { -                free(cookie); -            } -        } +        ret = reverse_service(name + 8);      } else if(!strncmp(name, "disable-verity:", 15)) {          ret = create_service_thread(set_verity_enabled_state_service, (void*)0);      } else if(!strncmp(name, "enable-verity:", 15)) { | 
