亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

android13中cmdline中屬性帶=的問題解決

2024-03-29 08:12:24
4
0

最近在android13中遇到例如以下參數kernel啟動參數

Kernel command line: ....... vendorboot.net_address=192.168.0.1 vendorboot.test.test1={"key":"afsU=","value":"xxx"} 

此時在系統啟動完畢并不能看到屬性為test.test1的值,通過查看android13的代碼發現在propertyService中,對屬性和value的處理方式和之前android9上有些不同,即根據`=`為分隔符來進行判斷,如果屬性值中出現了`=`則不會被寫入到系統中,代碼如下:

void ImportKernelCmdline(const std::function<void(const std::string&, const std::string&)>& fn) {
    std::string cmdline;
    android::base::ReadFileToString("/proc/cmdline", &cmdline);

    for (const auto& entry : android::base::Split(android::base::Trim(cmdline), " ")) {
        std::vector<std::string> pieces = android::base::Split(entry, "=");
        if (pieces.size() == 2) {
            fn(pieces[0], pieces[1]);      
    }
}

 

通過`pices.size==2`可以得出啟動參數中不能出現多個`=`,如果要支持cmdline中帶多個=的方式可以參考下面方式解決:即將第一個=作為key和value的分隔符進行分割:

void ImportKernelCmdline(const std::function<void(const std::string&, const std::string&)>& fn) {
    std::string cmdline;
    android::base::ReadFileToString("/proc/cmdline", &cmdline);

    for (const auto& entry : android::base::Split(android::base::Trim(cmdline), " ")) {
        std::vector<std::string> pieces = android::base::Split(entry, "=");
        if (pieces.size() == 2) {
            fn(pieces[0], pieces[1]);
        } else if (pieces.size() > 2) {
            size_t pos = entry.find("=");
            if (pos != std::string::npos) {
                std::pair kv = std::make_pair(entry.substr(0, pos), entry.substr(pos + 1));
                fn(kv.first, kv.second);
            }
        }        
    }
}

 

0條評論
作者已關閉評論
張****龍
18文章數
0粉絲數
張****龍
18 文章 | 0 粉絲
張****龍
18文章數
0粉絲數
張****龍
18 文章 | 0 粉絲
原創

android13中cmdline中屬性帶=的問題解決

2024-03-29 08:12:24
4
0

最近在android13中遇到例如以下參數kernel啟動參數

Kernel command line: ....... vendorboot.net_address=192.168.0.1 vendorboot.test.test1={"key":"afsU=","value":"xxx"} 

此時在系統啟動完畢并不能看到屬性為test.test1的值,通過查看android13的代碼發現在propertyService中,對屬性和value的處理方式和之前android9上有些不同,即根據`=`為分隔符來進行判斷,如果屬性值中出現了`=`則不會被寫入到系統中,代碼如下:

void ImportKernelCmdline(const std::function<void(const std::string&, const std::string&)>& fn) {
    std::string cmdline;
    android::base::ReadFileToString("/proc/cmdline", &cmdline);

    for (const auto& entry : android::base::Split(android::base::Trim(cmdline), " ")) {
        std::vector<std::string> pieces = android::base::Split(entry, "=");
        if (pieces.size() == 2) {
            fn(pieces[0], pieces[1]);      
    }
}

 

通過`pices.size==2`可以得出啟動參數中不能出現多個`=`,如果要支持cmdline中帶多個=的方式可以參考下面方式解決:即將第一個=作為key和value的分隔符進行分割:

void ImportKernelCmdline(const std::function<void(const std::string&, const std::string&)>& fn) {
    std::string cmdline;
    android::base::ReadFileToString("/proc/cmdline", &cmdline);

    for (const auto& entry : android::base::Split(android::base::Trim(cmdline), " ")) {
        std::vector<std::string> pieces = android::base::Split(entry, "=");
        if (pieces.size() == 2) {
            fn(pieces[0], pieces[1]);
        } else if (pieces.size() > 2) {
            size_t pos = entry.find("=");
            if (pos != std::string::npos) {
                std::pair kv = std::make_pair(entry.substr(0, pos), entry.substr(pos + 1));
                fn(kv.first, kv.second);
            }
        }        
    }
}

 

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0