diff options
| author | Tanguy Pruvot <tanguy.pruvot@gmail.com> | 2011-12-19 06:31:31 +0100 |
|---|---|---|
| committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-07-10 22:59:19 +0100 |
| commit | 973311bf110a57a618a70de3a37b7309dd8c9020 (patch) | |
| tree | 0ccfb6b58f0905b67d475776619aa1f0d55e085e /init | |
| parent | 87e87fc7bfa2a033aabd5b339526f35e85fa6bee (diff) | |
| download | system_core-973311bf110a57a618a70de3a37b7309dd8c9020.tar.gz system_core-973311bf110a57a618a70de3a37b7309dd8c9020.tar.bz2 system_core-973311bf110a57a618a70de3a37b7309dd8c9020.zip | |
init: implement a new 'log' command, useful to debug property events
liblog is not usable, because stderr and stdout are redirected to
/dev/null to control the android log output.
Only forked processes are able to write to the android logs...
Note: accept parameters: log [-t topic] [-p level] <message>
limit : strings beginning with "--" are not handled
Change-Id: I2fbf7422e0085d4cdf1bba6511413d1f796d4555
Diffstat (limited to 'init')
| -rw-r--r-- | init/builtins.c | 26 | ||||
| -rw-r--r-- | init/init_parser.c | 1 | ||||
| -rw-r--r-- | init/keywords.h | 2 |
3 files changed, 29 insertions, 0 deletions
diff --git a/init/builtins.c b/init/builtins.c index 15dd366e..f16f07d6 100644 --- a/init/builtins.c +++ b/init/builtins.c @@ -325,6 +325,32 @@ int do_insmod(int nargs, char **args) return do_insmod_inner(nargs, args, size); } +int do_log(int nargs, char **args) +{ + char* par[nargs+3]; + char* value; + int i; + + par[0] = "exec"; + par[1] = "/system/bin/log"; + par[2] = "-tinit"; + for (i = 1; i < nargs; ++i) { + value = args[i]; + if (value[0] == '$') { + /* system property if value starts with '$' */ + value++; + if (value[0] != '$') { + value = (char*) property_get(value); + if (!value) value = args[i]; + } + } + par[i+2] = value; + } + par[nargs+2] = NULL; + + return do_exec(nargs+2, par); +} + int do_mkdir(int nargs, char **args) { mode_t mode = 0755; diff --git a/init/init_parser.c b/init/init_parser.c index 5393e526..a2cd06ab 100644 --- a/init/init_parser.c +++ b/init/init_parser.c @@ -118,6 +118,7 @@ int lookup_keyword(const char *s) break; case 'l': if (!strcmp(s, "oglevel")) return K_loglevel; + if (!strcmp(s, "og")) return K_log; if (!strcmp(s, "oad_persist_props")) return K_load_persist_props; break; case 'm': diff --git a/init/keywords.h b/init/keywords.h index 97d4950a..b3f6ebc4 100644 --- a/init/keywords.h +++ b/init/keywords.h @@ -11,6 +11,7 @@ int do_export(int nargs, char **args); int do_hostname(int nargs, char **args); int do_ifup(int nargs, char **args); int do_insmod(int nargs, char **args); +int do_log(int nargs, char **args); int do_mkdir(int nargs, char **args); int do_mount_all(int nargs, char **args); int do_mount(int nargs, char **args); @@ -60,6 +61,7 @@ enum { KEYWORD(insmod, COMMAND, 1, do_insmod) KEYWORD(import, SECTION, 1, 0) KEYWORD(keycodes, OPTION, 0, 0) + KEYWORD(log, COMMAND, 1, do_log) KEYWORD(mkdir, COMMAND, 1, do_mkdir) KEYWORD(mount_all, COMMAND, 1, do_mount_all) KEYWORD(mount, COMMAND, 3, do_mount) |
