init: Add support for assigning system properties to system properties in init.rc
For example:
setprop sys.usb.config $persist.sys.usb.config
Change-Id: I7b4e1ed1335906b32621bd96a341b0f94bbee7f5
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/init/builtins.c b/init/builtins.c
index f43b048..bfdd654 100644
--- a/init/builtins.c
+++ b/init/builtins.c
@@ -440,7 +440,24 @@
int do_setprop(int nargs, char **args)
{
- property_set(args[1], args[2]);
+ const char *name = args[1];
+ const char *value = args[2];
+
+ if (value[0] == '$') {
+ /* Use the value of a system property if value starts with '$' */
+ value++;
+ if (value[0] != '$') {
+ value = property_get(value);
+ if (!value) {
+ ERROR("property %s has no value for assigning to %s\n", value, name);
+ return -EINVAL;
+ }
+ } /* else fall through to support double '$' prefix for setting properties
+ * to string literals that start with '$'
+ */
+ }
+
+ property_set(name, value);
return 0;
}
@@ -522,8 +539,8 @@
int do_write(int nargs, char **args)
{
- char *path = args[1];
- char *value = args[2];
+ const char *path = args[1];
+ const char *value = args[2];
if (value[0] == '$') {
/* Write the value of a system property if value starts with '$' */
value++;