diff options
author | Shea Levy <shea@shealevy.com> | 2016-08-31T14·08-0400 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2016-08-31T14·08-0400 |
commit | 821380c77bbfeb945d2b8a39a876c7c6ef090988 (patch) | |
tree | 92f31ba7a7a0448cfa15ea05f821a500f19843fa /src/nix-build/nix-build.cc | |
parent | 1bffd83e1a9cdf3271c2b178daa611c6b9c22f58 (diff) |
nix-build: Clean up a bit
Diffstat (limited to '')
-rwxr-xr-x | src/nix-build/nix-build.cc | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/nix-build/nix-build.cc b/src/nix-build/nix-build.cc index ee6d2699af50..50fcf16abdf0 100755 --- a/src/nix-build/nix-build.cc +++ b/src/nix-build/nix-build.cc @@ -16,6 +16,9 @@ using std::stringstream; extern char ** environ; +/* Recreate the effect of the perl shellwords function, breaking up a + * string into arguments like a shell word, including escapes + */ std::vector<string> shellwords(const string & s) { auto whitespace = std::regex("^(\\s+).*"); @@ -101,15 +104,14 @@ int main(int argc, char ** argv) if (runEnv && argc > 1 && !std::regex_search(argv[1], std::regex("nix-shell"))) { script = argv[1]; if (access(script.c_str(), F_OK) == 0 && access(script.c_str(), X_OK) == 0) { - auto SCRIPT = std::ifstream(script); - string first; - std::getline(SCRIPT, first); - if (std::regex_search(first, std::regex("^#!"))) { + auto lines = tokenizeString<Strings>(readFile(script), "\n"); + if (std::regex_search(lines.front(), std::regex("^#!"))) { + lines.pop_front(); inShebang = true; for (int i = 2; i < argc - 1; ++i) savedArgs.push_back(argv[i]); args = std::vector<string>{}; - for (string line; std::getline(SCRIPT, line);) { + for (auto line : lines) { line = chomp(line); std::smatch match; if (std::regex_match(line, match, std::regex("^#!\\s*nix-shell (.*)$"))) @@ -120,7 +122,7 @@ int main(int argc, char ** argv) } } - for (auto n = decltype(args)::size_type{0}; n < args.size(); ++n) { + for (size_t n = 0; n < args.size(); ++n) { auto arg = args[n]; if (arg == "--help") { |