Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 36fb5fed authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "Add "import" support to system property files."

parents 8c40dc90 f96b0445
Loading
Loading
Loading
Loading
+57 −22
Original line number Diff line number Diff line
@@ -457,40 +457,73 @@ void get_property_workspace(int *fd, int *sz)
    *sz = pa_workspace.size;
}

static void load_properties(char *data, char *prefix)
static void load_properties_from_file(const char *, const char *);

/*
 * Filter is used to decide which properties to load: NULL loads all keys,
 * "ro.foo.*" is a prefix match, and "ro.foo.bar" is an exact match.
 */
static void load_properties(char *data, const char *filter)
{
    char *key, *value, *eol, *sol, *tmp;
    size_t plen;
    char *key, *value, *eol, *sol, *tmp, *fn;
    size_t flen = 0;

    if (filter) {
        flen = strlen(filter);
    }

    if (prefix)
        plen = strlen(prefix);
    sol = data;
    while ((eol = strchr(sol, '\n'))) {
        key = sol;
        *eol++ = 0;
        sol = eol;

        while (isspace(*key)) key++;
        if (*key == '#') continue;

        tmp = eol - 2;
        while ((tmp > key) && isspace(*tmp)) *tmp-- = 0;

        if (!strncmp(key, "import ", 7) && flen == 0) {
            fn = key + 7;
            while (isspace(*fn)) fn++;

            key = strchr(fn, ' ');
            if (key) {
                *key++ = 0;
                while (isspace(*key)) key++;
            }

            load_properties_from_file(fn, key);

        } else {
            value = strchr(key, '=');
        if(value == 0) continue;
            if (!value) continue;
            *value++ = 0;

        while(isspace(*key)) key++;
        if(*key == '#') continue;
            tmp = value - 2;
            while ((tmp > key) && isspace(*tmp)) *tmp-- = 0;

        if (prefix && strncmp(key, prefix, plen))
            continue;

            while (isspace(*value)) value++;
        tmp = eol - 2;
        while((tmp > value) && isspace(*tmp)) *tmp-- = 0;

            if (flen > 0) {
                if (filter[flen - 1] == '*') {
                    if (strncmp(key, filter, flen - 1)) continue;
                } else {
                    if (strcmp(key, filter)) continue;
                }
            }

            property_set(key, value);
        }
    }
}

static void load_properties_from_file(const char *fn, char *prefix)
/*
 * Filter is used to decide which properties to load: NULL loads all keys,
 * "ro.foo.*" is a prefix match, and "ro.foo.bar" is an exact match.
 */
static void load_properties_from_file(const char *fn, const char *filter)
{
    char *data;
    unsigned sz;
@@ -498,7 +531,7 @@ static void load_properties_from_file(const char *fn, char *prefix)
    data = read_file(fn, &sz);

    if(data != 0) {
        load_properties(data, prefix);
        load_properties(data, filter);
        free(data);
    }
}
@@ -611,8 +644,10 @@ void start_property_service(void)

    load_properties_from_file(PROP_PATH_SYSTEM_BUILD, NULL);
    load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT, NULL);
    load_properties_from_file(PROP_PATH_FACTORY, "ro.");
    load_properties_from_file(PROP_PATH_FACTORY, "ro.*");

    load_override_properties();

    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();