* commit 'ac81bf51a41dcf44911132ff3ca9edfa4532cc1c': Use text based trace masks for adbd.
This commit is contained in:
commit
dd37525399
2 changed files with 89 additions and 64 deletions
108
adb/adb.cpp
108
adb/adb.cpp
|
|
@ -19,16 +19,18 @@
|
|||
#include "sysdeps.h"
|
||||
#include "adb.h"
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdint.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "adb_auth.h"
|
||||
#include "adb_io.h"
|
||||
|
|
@ -75,17 +77,71 @@ void fatal_errno(const char *fmt, ...)
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
int adb_trace_mask;
|
||||
#if !ADB_HOST
|
||||
void start_device_log(void) {
|
||||
adb_mkdir("/data/adb", 0775);
|
||||
|
||||
/* read a comma/space/colum/semi-column separated list of tags
|
||||
* from the ADB_TRACE environment variable and build the trace
|
||||
* mask from it. note that '1' and 'all' are special cases to
|
||||
* enable all tracing
|
||||
*/
|
||||
void adb_trace_init(void)
|
||||
{
|
||||
const char* p = getenv("ADB_TRACE");
|
||||
const char* q;
|
||||
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);
|
||||
|
||||
int fd = unix_open(path, O_WRONLY | O_CREAT | O_TRUNC, 0640);
|
||||
if (fd == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// redirect stdout and stderr to the log file
|
||||
dup2(fd, STDOUT_FILENO);
|
||||
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
|
||||
|
||||
int adb_trace_mask;
|
||||
|
||||
std::string get_trace_setting_from_env() {
|
||||
const char* setting = getenv("ADB_TRACE");
|
||||
if (setting == nullptr) {
|
||||
setting = "";
|
||||
}
|
||||
|
||||
return std::string(setting);
|
||||
}
|
||||
|
||||
#if !ADB_HOST
|
||||
std::string get_trace_setting_from_prop() {
|
||||
char buf[PROPERTY_VALUE_MAX];
|
||||
property_get("persist.adb.trace_mask", buf, "");
|
||||
return std::string(buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
std::string get_trace_setting() {
|
||||
#if ADB_HOST
|
||||
return get_trace_setting_from_env();
|
||||
#else
|
||||
return get_trace_setting_from_prop();
|
||||
#endif
|
||||
}
|
||||
|
||||
// Split the comma/space/colum/semi-column separated list of tags from the trace
|
||||
// setting and build the trace mask from it. note that '1' and 'all' are special
|
||||
// cases to enable all tracing.
|
||||
//
|
||||
// adb's trace setting comes from the ADB_TRACE environment variable, whereas
|
||||
// adbd's comes from the system property persist.adb.trace_mask.
|
||||
void adb_trace_init() {
|
||||
const std::string trace_setting = get_trace_setting();
|
||||
|
||||
static const struct {
|
||||
const char* tag;
|
||||
|
|
@ -107,25 +163,25 @@ void adb_trace_init(void)
|
|||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
if (p == NULL)
|
||||
return;
|
||||
if (trace_setting.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* use a comma/column/semi-colum/space separated list */
|
||||
// Use a comma/colon/semi-colon/space separated list
|
||||
const char* p = trace_setting.c_str();
|
||||
while (*p) {
|
||||
int len, tagn;
|
||||
|
||||
q = strpbrk(p, " ,:;");
|
||||
const char* q = strpbrk(p, " ,:;");
|
||||
if (q == NULL) {
|
||||
q = p + strlen(p);
|
||||
}
|
||||
len = q - p;
|
||||
|
||||
for (tagn = 0; tags[tagn].tag != NULL; tagn++)
|
||||
{
|
||||
for (tagn = 0; tags[tagn].tag != NULL; tagn++) {
|
||||
int taglen = strlen(tags[tagn].tag);
|
||||
|
||||
if (len == taglen && !memcmp(tags[tagn].tag, p, len) )
|
||||
{
|
||||
if (len == taglen && !memcmp(tags[tagn].tag, p, len)) {
|
||||
int flag = tags[tagn].flag;
|
||||
if (flag == 0) {
|
||||
adb_trace_mask = ~0;
|
||||
|
|
@ -139,6 +195,10 @@ void adb_trace_init(void)
|
|||
if (*p)
|
||||
p++;
|
||||
}
|
||||
|
||||
#if !ADB_HOST
|
||||
start_device_log();
|
||||
#endif
|
||||
}
|
||||
|
||||
apacket* get_apacket(void)
|
||||
|
|
|
|||
|
|
@ -148,42 +148,6 @@ static bool should_drop_privileges() {
|
|||
return true; // "adb root" not allowed, always drop privileges.
|
||||
#endif /* ALLOW_ADBD_ROOT */
|
||||
}
|
||||
|
||||
void start_device_log(void)
|
||||
{
|
||||
int fd;
|
||||
char path[PATH_MAX];
|
||||
struct tm now;
|
||||
time_t t;
|
||||
char value[PROPERTY_VALUE_MAX];
|
||||
|
||||
// read the trace mask from persistent property persist.adb.trace_mask
|
||||
// give up if the property is not set or cannot be parsed
|
||||
property_get("persist.adb.trace_mask", value, "");
|
||||
if (sscanf(value, "%x", &adb_trace_mask) != 1)
|
||||
return;
|
||||
|
||||
adb_mkdir("/data/adb", 0775);
|
||||
tzset();
|
||||
time(&t);
|
||||
localtime_r(&t, &now);
|
||||
strftime(path, sizeof(path),
|
||||
"/data/adb/adb-%Y-%m-%d-%H-%M-%S.txt",
|
||||
&now);
|
||||
fd = unix_open(path, O_WRONLY | O_CREAT | O_TRUNC, 0640);
|
||||
if (fd < 0)
|
||||
return;
|
||||
|
||||
// redirect stdout and stderr to the log file
|
||||
dup2(fd, 1);
|
||||
dup2(fd, 2);
|
||||
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 /* ADB_HOST */
|
||||
|
||||
/* Constructs a local name of form tcp:port.
|
||||
|
|
@ -385,18 +349,20 @@ int adb_main(int is_daemon, int server_port)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int main(int argc, char **argv) {
|
||||
#if ADB_HOST
|
||||
adb_sysdeps_init();
|
||||
#endif
|
||||
adb_trace_init();
|
||||
|
||||
#if ADB_HOST
|
||||
D("Handling commandline()\n");
|
||||
return adb_commandline(argc - 1, const_cast<const char**>(argv + 1));
|
||||
#else
|
||||
/* If adbd runs inside the emulator this will enable adb tracing via
|
||||
* adb-debug qemud service in the emulator. */
|
||||
adb_qemu_trace_init();
|
||||
while(1) {
|
||||
while (1) {
|
||||
int c;
|
||||
int option_index = 0;
|
||||
static struct option opts[] = {
|
||||
|
|
@ -418,7 +384,6 @@ int main(int argc, char **argv)
|
|||
}
|
||||
}
|
||||
|
||||
start_device_log();
|
||||
D("Handling main()\n");
|
||||
return adb_main(0, DEFAULT_ADB_PORT);
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue