From 8743ef98414b336f222327253f2cde6bf6aee386 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 19 Mar 2015 22:53:30 -0700 Subject: [PATCH] Additional cleanup of start_device_log. Addresses nnk's post commit review comments on https://android-review.googlesource.com/#/c/139381/ Remove unneeded code for creating /data/adb. Add an O_CLOEXEC. Move the closing of stdin out to main(). Append the pid of the current process to the log file to avoid clobbering the log if the process crashes and restarts within the same second. Change-Id: Ide0be86b4b33256486634c29ba02efaf10cf913d --- adb/adb.cpp | 15 ++++++--------- adb/adb_main.cpp | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/adb/adb.cpp b/adb/adb.cpp index d37ca363a..ad85184f6 100644 --- a/adb/adb.cpp +++ b/adb/adb.cpp @@ -79,18 +79,19 @@ void fatal_errno(const char *fmt, ...) #if !ADB_HOST void start_device_log(void) { - adb_mkdir("/data/adb", 0775); - struct tm now; time_t t; tzset(); time(&t); localtime_r(&t, &now); - char path[PATH_MAX]; - strftime(path, sizeof(path), "/data/adb/adb-%Y-%m-%d-%H-%M-%S.txt", &now); + char timestamp[PATH_MAX]; + strftime(timestamp, sizeof(timestamp), "%Y-%m-%d-%H-%M-%S", &now); - int fd = unix_open(path, O_WRONLY | O_CREAT | O_TRUNC, 0640); + char path[PATH_MAX]; + snprintf(path, sizeof(path), "/data/adb/adb-%s-%d", timestamp, getpid()); + + int fd = unix_open(path, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0640); if (fd == -1) { return; } @@ -100,10 +101,6 @@ void start_device_log(void) { dup2(fd, STDERR_FILENO); fprintf(stderr, "--- adb starting (pid %d) ---\n", getpid()); adb_close(fd); - - fd = unix_open("/dev/null", O_RDONLY); - dup2(fd, 0); - adb_close(fd); } #endif diff --git a/adb/adb_main.cpp b/adb/adb_main.cpp index c1e4b13dc..a03fcf1a7 100644 --- a/adb/adb_main.cpp +++ b/adb/adb_main.cpp @@ -349,9 +349,23 @@ int adb_main(int is_daemon, int server_port) return 0; } +#if !ADB_HOST +void close_stdin() { + int fd = unix_open("/dev/null", O_RDONLY); + if (fd == -1) { + perror("failed to open /dev/null, stdin will remain open"); + return; + } + dup2(fd, 0); + adb_close(fd); +} +#endif + int main(int argc, char **argv) { #if ADB_HOST adb_sysdeps_init(); +#else + close_stdin(); #endif adb_trace_init();