aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ng <dave@codeaurora.org>2012-08-23 20:40:33 -0700
committerRicardo Cerqueira <cyanogenmod@cerqueira.org>2012-11-19 17:32:40 +0000
commit5056eab7c686fb3bfb67b81225adfc1938ceb0b1 (patch)
tree3c3a425539f179181697d890bba451d8262efb82
parentd23a32d1ae32fb4e421f93757fdb65441f6aa91a (diff)
downloadsystem_core-5056eab7c686fb3bfb67b81225adfc1938ceb0b1.tar.gz
system_core-5056eab7c686fb3bfb67b81225adfc1938ceb0b1.tar.bz2
system_core-5056eab7c686fb3bfb67b81225adfc1938ceb0b1.zip
init: Add support for properties expansion in exec command
Add Android properties expansion to 'exec' arguments. E.g. exec /system/bin/log ${sys.usb.config} CRs-Fixed: 390942 Change-Id: Ie520396d951e578bd9f591734a45d2f460b8f51d
-rw-r--r--init/builtins.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/init/builtins.c b/init/builtins.c
index 39fe9bae..a58604b5 100644
--- a/init/builtins.c
+++ b/init/builtins.c
@@ -264,6 +264,8 @@ int do_exec(int nargs, char **args)
pid_t pid;
int status, i, j;
char *par[MAX_PARAMETERS];
+ char prop_val[PROP_VALUE_MAX];
+ int len;
if (nargs > MAX_PARAMETERS)
{
@@ -272,6 +274,23 @@ int do_exec(int nargs, char **args)
for(i=0, j=1; i<(nargs-1) ;i++,j++)
{
+ if ((args[j])
+ &&
+ (!expand_props(prop_val, args[j], sizeof(prop_val))))
+
+ {
+ len = strlen(args[j]);
+ if (strlen(prop_val) <= len) {
+ /* Overwrite arg with expansion.
+ *
+ * For now, only allow an expansion length that
+ * can fit within the original arg length to
+ * avoid extra allocations.
+ * On failure, use original argument.
+ */
+ strncpy(args[j], prop_val, len + 1);
+ }
+ }
par[i] = args[j];
}