From bd91cf0b149ca0a057a7bbdfb88b74faa6ec5549 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Mon, 25 Sep 2017 11:49:38 -0700 Subject: [PATCH] url: const-ify APIs, and pass URL by ref Fixes warnings by Coverity Scan of inefficiences when passing by value instead of passing by const reference. PR-URL: https://github.com/nodejs/node/pull/15615 Reviewed-By: Anna Henningsen Reviewed-By: Refael Ackermann Reviewed-By: James M Snell Reviewed-By: Timothy Gu Reviewed-By: Evan Lucas --- src/module_wrap.cc | 14 +++++++------- src/module_wrap.h | 2 +- src/node_url.cc | 4 ++-- src/node_url.h | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/module_wrap.cc b/src/module_wrap.cc index 73d248c373ea00..cbee6faff3aca0 100644 --- a/src/module_wrap.cc +++ b/src/module_wrap.cc @@ -323,7 +323,7 @@ struct file_check { bool failed = true; uv_file file = -1; }; -inline const struct file_check check_file(URL search, +inline const struct file_check check_file(const URL& search, bool close = false, bool allow_dir = false) { struct file_check ret; @@ -349,7 +349,7 @@ inline const struct file_check check_file(URL search, if (close) uv_fs_close(nullptr, &fs_req, fd, nullptr); return ret; } -URL resolve_extensions(URL search, bool check_exact = true) { +URL resolve_extensions(const URL& search, bool check_exact = true) { if (check_exact) { auto check = check_file(search, true); if (!check.failed) { @@ -365,10 +365,10 @@ URL resolve_extensions(URL search, bool check_exact = true) { } return URL(""); } -inline URL resolve_index(URL search) { +inline URL resolve_index(const URL& search) { return resolve_extensions(URL("index", &search), false); } -URL resolve_main(URL search) { +URL resolve_main(const URL& search) { URL pkg("package.json", &search); auto check = check_file(pkg); if (!check.failed) { @@ -402,7 +402,7 @@ URL resolve_main(URL search) { } return URL(""); } -URL resolve_module(std::string specifier, URL* base) { +URL resolve_module(std::string specifier, const URL* base) { URL parent(".", base); URL dir(""); do { @@ -427,7 +427,7 @@ URL resolve_module(std::string specifier, URL* base) { return URL(""); } -URL resolve_directory(URL search, bool read_pkg_json) { +URL resolve_directory(const URL& search, bool read_pkg_json) { if (read_pkg_json) { auto main = resolve_main(search); if (!(main.flags() & URL_FLAGS_FAILED)) return main; @@ -438,7 +438,7 @@ URL resolve_directory(URL search, bool read_pkg_json) { } // anonymous namespace -URL Resolve(std::string specifier, URL* base, bool read_pkg_json) { +URL Resolve(std::string specifier, const URL* base, bool read_pkg_json) { URL pure_url(specifier); if (!(pure_url.flags() & URL_FLAGS_FAILED)) { return pure_url; diff --git a/src/module_wrap.h b/src/module_wrap.h index 0d8b41552b6aa8..82fd1d89ffd547 100644 --- a/src/module_wrap.h +++ b/src/module_wrap.h @@ -13,7 +13,7 @@ namespace node { namespace loader { -node::url::URL Resolve(std::string specifier, node::url::URL* base, +node::url::URL Resolve(std::string specifier, const node::url::URL* base, bool read_pkg_json = false); class ModuleWrap : public BaseObject { diff --git a/src/node_url.cc b/src/node_url.cc index c8a4427eb60fb9..157adc3f63b37a 100644 --- a/src/node_url.cc +++ b/src/node_url.cc @@ -2081,7 +2081,7 @@ static void DomainToUnicode(const FunctionCallbackInfo& args) { v8::NewStringType::kNormal).ToLocalChecked()); } -std::string URL::ToFilePath() { +std::string URL::ToFilePath() const { if (context_.scheme != "file:") { return ""; } @@ -2102,7 +2102,7 @@ std::string URL::ToFilePath() { } #endif std::string decoded_path; - for (std::string& part : context_.path) { + for (const std::string& part : context_.path) { std::string decoded; PercentDecode(part.c_str(), part.length(), &decoded); for (char& ch : decoded) { diff --git a/src/node_url.h b/src/node_url.h index cb7bdca7f2cd6a..503fb21e0d4f30 100644 --- a/src/node_url.h +++ b/src/node_url.h @@ -154,7 +154,7 @@ class URL { return context_.fragment; } - std::string path() { + std::string path() const { std::string ret; for (auto i = context_.path.begin(); i != context_.path.end(); i++) { ret += '/'; @@ -165,7 +165,7 @@ class URL { // Get the path of the file: URL in a format consumable by native file system // APIs. Returns an empty string if something went wrong. - std::string ToFilePath(); + std::string ToFilePath() const; const Local ToObject(Environment* env) const;