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
This commit is contained in:
Rebecca Turner 2024-08-26 11:20:35 -07:00
parent b6884388a1
commit 742303dc3a
Signed by: rbt
SSH key fingerprint: SHA256:SiNaEWabvotTldoNb5jIKqjJ3RnpS4aRXA4KLAdW5vs
2 changed files with 16 additions and 5 deletions

View file

@ -17,15 +17,19 @@ namespace fs = std::filesystem;
namespace nix { namespace nix {
Path absPath(Path path, std::optional<PathView> dir, bool resolveSymlinks) Path getCwd() {
{
if (path.empty() || path[0] != '/') {
if (!dir) {
char buf[PATH_MAX]; char buf[PATH_MAX];
if (!getcwd(buf, sizeof(buf))) { if (!getcwd(buf, sizeof(buf))) {
throw SysError("cannot get cwd"); throw SysError("cannot get cwd");
} }
path = concatStrings(buf, "/", path); return Path(buf);
}
Path absPath(Path path, std::optional<PathView> dir, bool resolveSymlinks)
{
if (path.empty() || path[0] != '/') {
if (!dir) {
path = concatStrings(getCwd(), "/", path);
} else { } else {
path = concatStrings(*dir, "/", path); path = concatStrings(*dir, "/", path);
} }

View file

@ -29,6 +29,13 @@ namespace nix {
struct Sink; struct Sink;
struct Source; 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 * @return An absolutized path, resolving paths relative to the
* specified directory, or the current directory otherwise. The path * specified directory, or the current directory otherwise. The path