diff --git a/src/ini_reader.h b/src/ini_reader.h index 1e53d75..efa0bd0 100644 --- a/src/ini_reader.h +++ b/src/ini_reader.h @@ -215,7 +215,7 @@ public: lineSize = strLine.size(); if(lineSize && strLine[lineSize - 1] == '\r') //remove line break { - strLine = strLine.substr(0, lineSize - 1); + strLine.erase(lineSize - 1); lineSize--; } if(!lineSize || strLine[0] == ';' || strLine[0] == '#' || (lineSize >= 2 && strLine[0] == '/' && strLine[1] == '/')) //empty lines and comments are ignored diff --git a/src/interfaces.cpp b/src/interfaces.cpp index 775da40..f0d88a7 100644 --- a/src/interfaces.cpp +++ b/src/interfaces.cpp @@ -94,6 +94,11 @@ std::string getRuleset(RESPONSE_CALLBACK_ARGS) continue; lineSize = strLine.size(); + if(lineSize && strLine[lineSize - 1] == '\r') //remove line break + { + strLine.erase(lineSize - 1); + lineSize--; + } if(!strLine.empty() && (strLine[0] != ';' && strLine[0] != '#' && !(lineSize >= 2 && strLine[0] == '/' && strLine[1] == '/'))) { @@ -1297,7 +1302,7 @@ std::string surgeConfToClash(RESPONSE_CALLBACK_ARGS) return "No nodes were found!"; } - extra_settings ext = {true, true, dummy_str_array, dummy_str_array, false, false, false, udp_flag, tfo_flag, false, do_sort, scv_flag, filter_deprecated, ""}; + extra_settings ext = {true, true, dummy_str_array, dummy_str_array, false, false, false, udp_flag, tfo_flag, false, do_sort, scv_flag, filter_deprecated, "", ""}; netchToClash(nodes, clash, dummy_str_array, false, ext); diff --git a/src/subexport.cpp b/src/subexport.cpp index 59e40b7..e03bbad 100644 --- a/src/subexport.cpp +++ b/src/subexport.cpp @@ -324,7 +324,11 @@ void rulesetToClash(YAML::Node &base_rule, std::vector &ruleset while(getline(strStrm, strLine, delimiter)) { lineSize = strLine.size(); - strLine = replace_all_distinct(strLine, "\r", ""); //remove line break + if(lineSize && strLine[lineSize - 1] == '\r') //remove line break + { + strLine.erase(lineSize - 1); + lineSize--; + } if(!lineSize || strLine[0] == ';' || strLine[0] == '#' || (lineSize >= 2 && strLine[0] == '/' && strLine[1] == '/')) //empty lines and comments are ignored continue; if(strLine.find("USER-AGENT") == 0 || strLine.find("URL-REGEX") == 0 || strLine.find("PROCESS-NAME") == 0 || strLine.find("AND") == 0 || strLine.find("OR") == 0) //remove unsupported types @@ -447,11 +451,16 @@ void rulesetToSurge(INIReader &base_rule, std::vector &ruleset_ while(getline(strStrm, strLine, delimiter)) { lineSize = strLine.size(); + if(lineSize && strLine[lineSize - 1] == '\r') //remove line break + { + strLine.erase(lineSize - 1); + lineSize--; + } if(!lineSize || strLine[0] == ';' || strLine[0] == '#' || (lineSize >= 2 && strLine[0] == '/' && strLine[1] == '/')) //empty lines and comments are ignored continue; if((surge_ver == -1 || surge_ver == -2) && (strLine.find("IP-CIDR6") == 0 || strLine.find("URL-REGEX") == 0 || strLine.find("PROCESS-NAME") == 0 || strLine.find("AND") == 0 || strLine.find("OR") == 0)) //remove unsupported types continue; - strLine = replace_all_distinct(strLine, "\r", ""); //remove line break + strLine += "," + rule_group; if(surge_ver == -1 || surge_ver == -2) {