aboutsummaryrefslogtreecommitdiffstats
path: root/init/init.c
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2010-01-19 14:41:40 -0500
committerMike Lockwood <lockwood@android.com>2010-01-19 14:41:40 -0500
commit7a36210cdb39bde3a7d73095d5891678685e431f (patch)
tree8c9723a8b2b980cad39122259fc99cb01138eed7 /init/init.c
parentc4fc728e7062cb6269c7669f947b4573cf8c2d02 (diff)
downloadsystem_core-7a36210cdb39bde3a7d73095d5891678685e431f.tar.gz
system_core-7a36210cdb39bde3a7d73095d5891678685e431f.tar.bz2
system_core-7a36210cdb39bde3a7d73095d5891678685e431f.zip
init: Support bugreports to SD card in user builds if adb is enabled.
The rationale being that we do not want this enabled by default, but tying it to adb being enabled allows convenient bugreport collection for savvy users and developers using production devices. Change-Id: I71535b33f0774faf1975c98d106080f2ff12e349 Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'init/init.c')
-rwxr-xr-xinit/init.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/init/init.c b/init/init.c
index f76eb36b..16a35303 100755
--- a/init/init.c
+++ b/init/init.c
@@ -767,21 +767,31 @@ int open_keychord()
void handle_keychord(int fd)
{
struct service *svc;
+ char* debuggable;
+ char* adb_enabled;
int ret;
__u16 id;
- ret = read(fd, &id, sizeof(id));
- if (ret != sizeof(id)) {
- ERROR("could not read keychord id\n");
- return;
- }
+ // only handle keychords if ro.debuggable is set or adb is enabled.
+ // the logic here is that bugreports should be enabled in userdebug or eng builds
+ // and on user builds for users that are developers.
+ debuggable = property_get("ro.debuggable");
+ adb_enabled = property_get("init.svc.adbd");
+ if ((debuggable && !strcmp(debuggable, "1")) ||
+ (adb_enabled && !strcmp(adb_enabled, "running"))) {
+ ret = read(fd, &id, sizeof(id));
+ if (ret != sizeof(id)) {
+ ERROR("could not read keychord id\n");
+ return;
+ }
- svc = service_find_by_keychord(id);
- if (svc) {
- INFO("starting service %s from keychord\n", svc->name);
- service_start(svc, NULL);
- } else {
- ERROR("service for keychord %d not found\n", id);
+ svc = service_find_by_keychord(id);
+ if (svc) {
+ INFO("starting service %s from keychord\n", svc->name);
+ service_start(svc, NULL);
+ } else {
+ ERROR("service for keychord %d not found\n", id);
+ }
}
}
@@ -853,10 +863,7 @@ int main(int argc, char **argv)
property_init();
// only listen for keychords if ro.debuggable is true
- debuggable = property_get("ro.debuggable");
- if (debuggable && !strcmp(debuggable, "1")) {
- keychord_fd = open_keychord();
- }
+ keychord_fd = open_keychord();
if (console[0]) {
snprintf(tmp, sizeof(tmp), "/dev/%s", console);