init: use init's property expansion code for setprop/write
Change-Id: I3c284860cc8d5106ac2b086e62baeb6263873935 Signed-off-by: Dima Zavin <dima@android.com>
This commit is contained in:
parent
78a1b1fe1a
commit
84bf9af758
|
@ -31,6 +31,7 @@
|
|||
#include <sys/resource.h>
|
||||
#include <linux/loop.h>
|
||||
#include <cutils/partition_utils.h>
|
||||
#include <sys/system_properties.h>
|
||||
|
||||
#include "init.h"
|
||||
#include "keywords.h"
|
||||
|
@ -448,22 +449,15 @@ int do_setprop(int nargs, char **args)
|
|||
{
|
||||
const char *name = args[1];
|
||||
const char *value = args[2];
|
||||
char prop_val[PROP_VALUE_MAX];
|
||||
int ret;
|
||||
|
||||
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 '$'
|
||||
*/
|
||||
ret = expand_props(prop_val, value, sizeof(prop_val));
|
||||
if (ret) {
|
||||
ERROR("cannot expand '%s' while assigning to '%s'\n", value, name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
property_set(name, value);
|
||||
property_set(name, prop_val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -547,21 +541,15 @@ int do_write(int nargs, char **args)
|
|||
{
|
||||
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++;
|
||||
if (value[0] != '$') {
|
||||
value = property_get(value);
|
||||
if (!value) {
|
||||
ERROR("property %s has no value for writing to %s\n", value, path);
|
||||
return -EINVAL;
|
||||
}
|
||||
} /* else fall through to support double '$' prefix for writing
|
||||
* string literals that start with '$'
|
||||
*/
|
||||
}
|
||||
char prop_val[PROP_VALUE_MAX];
|
||||
int ret;
|
||||
|
||||
return write_file(path, value);
|
||||
ret = expand_props(prop_val, value, sizeof(prop_val));
|
||||
if (ret) {
|
||||
ERROR("cannot expand '%s' while writing to '%s'\n", value, path);
|
||||
return -EINVAL;
|
||||
}
|
||||
return write_file(path, prop_val);
|
||||
}
|
||||
|
||||
int do_copy(int nargs, char **args)
|
||||
|
|
|
@ -176,7 +176,7 @@ static int push_chars(char **dst, int *len, const char *chars, int cnt)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int expand_props(char *dst, const char *src, int dst_size)
|
||||
int expand_props(char *dst, const char *src, int dst_size)
|
||||
{
|
||||
int cnt = 0;
|
||||
char *dst_ptr = dst;
|
||||
|
|
|
@ -31,5 +31,6 @@ void queue_all_property_triggers();
|
|||
void queue_builtin_action(int (*func)(int nargs, char **args), char *name);
|
||||
|
||||
int init_parse_config_file(const char *fn);
|
||||
int expand_props(char *dst, const char *src, int len);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue