aboutsummaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorTanguy Pruvot <tanguy.pruvot@gmail.com>2011-12-19 06:31:31 +0100
committerRicardo Cerqueira <cyanogenmod@cerqueira.org>2012-07-10 22:59:19 +0100
commit973311bf110a57a618a70de3a37b7309dd8c9020 (patch)
tree0ccfb6b58f0905b67d475776619aa1f0d55e085e /init
parent87e87fc7bfa2a033aabd5b339526f35e85fa6bee (diff)
downloadsystem_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.c26
-rw-r--r--init/init_parser.c1
-rw-r--r--init/keywords.h2
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)