diff options
Diffstat (limited to 'cmds/dumpstate/utils.cpp')
-rw-r--r-- | cmds/dumpstate/utils.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/cmds/dumpstate/utils.cpp b/cmds/dumpstate/utils.cpp index 4bc0e1d838..2a5516d7f5 100644 --- a/cmds/dumpstate/utils.cpp +++ b/cmds/dumpstate/utils.cpp @@ -712,12 +712,12 @@ int open_socket(const char *service) { int s = android_get_control_socket(service); if (s < 0) { MYLOGE("android_get_control_socket(%s): %s\n", service, strerror(errno)); - exit(1); + return -1; } fcntl(s, F_SETFD, FD_CLOEXEC); if (listen(s, 4) < 0) { MYLOGE("listen(control socket): %s\n", strerror(errno)); - exit(1); + return -1; } struct sockaddr addr; @@ -725,18 +725,23 @@ int open_socket(const char *service) { int fd = accept(s, &addr, &alen); if (fd < 0) { MYLOGE("accept(control socket): %s\n", strerror(errno)); - exit(1); + return -1; } return fd; } /* redirect output to a service control socket */ -void redirect_to_socket(FILE *redirect, const char *service) { +bool redirect_to_socket(FILE* redirect, const char* service) { int fd = open_socket(service); + if (fd == -1) { + return false; + } fflush(redirect); - dup2(fd, fileno(redirect)); + // TODO: handle dup2 failure + TEMP_FAILURE_RETRY(dup2(fd, fileno(redirect))); close(fd); + return true; } // TODO: should call is_valid_output_file and/or be merged into it. @@ -766,7 +771,7 @@ void create_parent_dirs(const char *path) { } } -void _redirect_to_file(FILE *redirect, char *path, int truncate_flag) { +bool _redirect_to_file(FILE* redirect, char* path, int truncate_flag) { create_parent_dirs(path); int fd = TEMP_FAILURE_RETRY(open(path, @@ -774,19 +779,20 @@ void _redirect_to_file(FILE *redirect, char *path, int truncate_flag) { S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)); if (fd < 0) { MYLOGE("%s: %s\n", path, strerror(errno)); - exit(1); + return false; } TEMP_FAILURE_RETRY(dup2(fd, fileno(redirect))); close(fd); + return true; } -void redirect_to_file(FILE *redirect, char *path) { - _redirect_to_file(redirect, path, O_TRUNC); +bool redirect_to_file(FILE* redirect, char* path) { + return _redirect_to_file(redirect, path, O_TRUNC); } -void redirect_to_existing_file(FILE *redirect, char *path) { - _redirect_to_file(redirect, path, O_APPEND); +bool redirect_to_existing_file(FILE* redirect, char* path) { + return _redirect_to_file(redirect, path, O_APPEND); } // Dump Dalvik and native stack traces, return the trace file location (nullptr if none). |