Skip to content

Commit 450e8a4

Browse files
committed
src: optimize Dotenv::GetPathFromArgs
1 parent 3ed9f98 commit 450e8a4

File tree

1 file changed

+13
-21
lines changed

1 file changed

+13
-21
lines changed

src/node_dotenv.cc

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,23 @@ using v8::NewStringType;
1111
using v8::Object;
1212
using v8::String;
1313

14-
std::vector<std::string> Dotenv::GetPathFromArgs(
15-
const std::vector<std::string>& args) {
16-
const auto find_match = [](const std::string& arg) {
17-
const std::string_view flag = "--env-file";
18-
return strncmp(arg.c_str(), flag.data(), flag.size()) == 0;
19-
};
14+
std::vector<std::string> Dotenv::GetPathFromArgs(const std::vector<std::string>& args) {
15+
const std::string_view flag = "--env-file";
2016
std::vector<std::string> paths;
21-
auto path = std::find_if(args.begin(), args.end(), find_match);
2217

23-
while (path != args.end()) {
24-
auto equal_char = path->find('=');
25-
26-
if (equal_char != std::string::npos) {
27-
paths.push_back(path->substr(equal_char + 1));
28-
} else {
29-
auto next_path = std::next(path);
30-
31-
if (next_path == args.end()) {
32-
return paths;
18+
for (size_t i = 0; i < args.size(); ++i) {
19+
const std::string_view arg = args[i];
20+
if (arg == "--") {
21+
break;
22+
}
23+
if (arg.find(flag) == 0) {
24+
if (arg.size() > flag.size() && arg[flag.size()] == '=') {
25+
paths.push_back(std::string(arg.substr(flag.size() + 1)));
26+
} else if (i + 1 < args.size()) {
27+
paths.push_back(args[i + 1]);
28+
++i;
3329
}
34-
35-
paths.push_back(*next_path);
3630
}
37-
38-
path = std::find_if(++path, args.end(), find_match);
3931
}
4032

4133
return paths;

0 commit comments

Comments
 (0)