diff options
| author | David Ng <dave@codeaurora.org> | 2012-08-23 20:40:33 -0700 |
|---|---|---|
| committer | Ricardo Cerqueira <cyanogenmod@cerqueira.org> | 2012-11-19 17:32:40 +0000 |
| commit | 5056eab7c686fb3bfb67b81225adfc1938ceb0b1 (patch) | |
| tree | 3c3a425539f179181697d890bba451d8262efb82 | |
| parent | d23a32d1ae32fb4e421f93757fdb65441f6aa91a (diff) | |
| download | system_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.c | 19 |
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]; } |
