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

Commit 4ec72cc2 authored by Jaekyun Seok's avatar Jaekyun Seok
Browse files

Treblize init.rc location

Treblization requires to locate partner-specific modules in its own
partition. So their own init.rc file could be located in /odm or
/vendor.
This CL is to support those locations for the init.rc.
Additionally thic CL modified import parser to support importing a
relative path.

Test: building succeeded and tested on sailfish with enabling early
mount.
Bug: 35269867

Change-Id: I1bce924a32c8a2b53fb5d981d35d758cf9ddd9a6
parent dbb40b64
Loading
Loading
Loading
Loading
+12 −9
Original line number Original line Diff line number Diff line
@@ -476,15 +476,18 @@ exit_success:
static void import_late(const std::vector<std::string>& args, size_t start_index, size_t end_index) {
static void import_late(const std::vector<std::string>& args, size_t start_index, size_t end_index) {
    Parser& parser = Parser::GetInstance();
    Parser& parser = Parser::GetInstance();
    if (end_index <= start_index) {
    if (end_index <= start_index) {
        // Use the default set if no path is given
        // Fallbacks for partitions on which early mount isn't enabled.
        static const std::vector<std::string> init_directories = {
        if (!parser.is_system_etc_init_loaded()) {
            "/system/etc/init",
            parser.ParseConfig("/system/etc/init");
            "/vendor/etc/init",
            parser.set_is_system_etc_init_loaded(true);
            "/odm/etc/init"
        }
        };
        if (!parser.is_vendor_etc_init_loaded()) {

            parser.ParseConfig("/vendor/etc/init");
        for (const auto& dir : init_directories) {
            parser.set_is_vendor_etc_init_loaded(true);
            parser.ParseConfig(dir);
        }
        if (!parser.is_odm_etc_init_loaded()) {
            parser.ParseConfig("/odm/etc/init");
            parser.set_is_odm_etc_init_loaded(true);
        }
        }
    } else {
    } else {
        for (size_t i = start_index; i < end_index; ++i) {
        for (size_t i = start_index; i < end_index; ++i) {
+8 −0
Original line number Original line Diff line number Diff line
@@ -992,8 +992,16 @@ int main(int argc, char** argv) {
    std::string bootscript = property_get("ro.boot.init_rc");
    std::string bootscript = property_get("ro.boot.init_rc");
    if (bootscript.empty()) {
    if (bootscript.empty()) {
        parser.ParseConfig("/init.rc");
        parser.ParseConfig("/init.rc");
        parser.set_is_system_etc_init_loaded(
                parser.ParseConfig("/system/etc/init"));
        parser.set_is_vendor_etc_init_loaded(
                parser.ParseConfig("/vendor/etc/init"));
        parser.set_is_odm_etc_init_loaded(parser.ParseConfig("/odm/etc/init"));
    } else {
    } else {
        parser.ParseConfig(bootscript);
        parser.ParseConfig(bootscript);
        parser.set_is_system_etc_init_loaded(true);
        parser.set_is_vendor_etc_init_loaded(true);
        parser.set_is_odm_etc_init_loaded(true);
    }
    }


    ActionManager& am = ActionManager::GetInstance();
    ActionManager& am = ActionManager::GetInstance();
+15 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,18 @@ public:
    bool ParseConfig(const std::string& path);
    bool ParseConfig(const std::string& path);
    void AddSectionParser(const std::string& name,
    void AddSectionParser(const std::string& name,
                          std::unique_ptr<SectionParser> parser);
                          std::unique_ptr<SectionParser> parser);
    void set_is_system_etc_init_loaded(bool loaded) {
        is_system_etc_init_loaded_ = loaded;
    }
    void set_is_vendor_etc_init_loaded(bool loaded) {
        is_vendor_etc_init_loaded_ = loaded;
    }
    void set_is_odm_etc_init_loaded(bool loaded) {
        is_odm_etc_init_loaded_ = loaded;
    }
    bool is_system_etc_init_loaded() { return is_system_etc_init_loaded_; }
    bool is_vendor_etc_init_loaded() { return is_vendor_etc_init_loaded_; }
    bool is_odm_etc_init_loaded() { return is_odm_etc_init_loaded_; }


private:
private:
    Parser();
    Parser();
@@ -50,6 +62,9 @@ private:
    bool ParseConfigDir(const std::string& path);
    bool ParseConfigDir(const std::string& path);


    std::map<std::string, std::unique_ptr<SectionParser>> section_parsers_;
    std::map<std::string, std::unique_ptr<SectionParser>> section_parsers_;
    bool is_system_etc_init_loaded_ = false;
    bool is_vendor_etc_init_loaded_ = false;
    bool is_odm_etc_init_loaded_ = false;
};
};


#endif
#endif