From 742303dc3aa23462ba3e5e0497ae20487266adb3 Mon Sep 17 00:00:00 2001 From: Rebecca Turner Date: Mon, 26 Aug 2024 11:20:35 -0700 Subject: [PATCH] Add `getCwd` It's nice for this to be a separate function and not just inline in `absPath`. Prepared as part of cl/1865, though I don't think I actually ended up using it there. Change-Id: I24d9d4a984cee0af587010baf04b3939a1c147ec --- src/libutil/file-system.cc | 14 +++++++++----- src/libutil/file-system.hh | 7 +++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/libutil/file-system.cc b/src/libutil/file-system.cc index 631cf076b..124a0aef7 100644 --- a/src/libutil/file-system.cc +++ b/src/libutil/file-system.cc @@ -17,15 +17,19 @@ namespace fs = std::filesystem; namespace nix { +Path getCwd() { + char buf[PATH_MAX]; + if (!getcwd(buf, sizeof(buf))) { + throw SysError("cannot get cwd"); + } + return Path(buf); +} + Path absPath(Path path, std::optional dir, bool resolveSymlinks) { if (path.empty() || path[0] != '/') { if (!dir) { - char buf[PATH_MAX]; - if (!getcwd(buf, sizeof(buf))) { - throw SysError("cannot get cwd"); - } - path = concatStrings(buf, "/", path); + path = concatStrings(getCwd(), "/", path); } else { path = concatStrings(*dir, "/", path); } diff --git a/src/libutil/file-system.hh b/src/libutil/file-system.hh index e49323e84..23685ee08 100644 --- a/src/libutil/file-system.hh +++ b/src/libutil/file-system.hh @@ -29,6 +29,13 @@ namespace nix { struct Sink; struct Source; +/** + * Get the current working directory. + * + * Throw an error if the current directory cannot get got. + */ +Path getCwd(); + /** * @return An absolutized path, resolving paths relative to the * specified directory, or the current directory otherwise. The path