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

Commit 12e3639a authored by Colin Cross's avatar Colin Cross Committed by Android Git Automerger
Browse files

am c383c6d1: Merge "Add "import" support to system property files."

* commit 'c383c6d1':
  Add "import" support to system property files.
parents eb8f6b8a c383c6d1
Loading
Loading
Loading
Loading
+57 −22
Original line number Diff line number Diff line
@@ -439,40 +439,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;
@@ -480,7 +513,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);
    }
}
@@ -592,8 +625,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();