aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Neil <dneil@google.com>2025-08-22 10:47:01 -0700
committerGopher Robot <gobot@golang.org>2025-09-16 11:04:27 -0700
commit8ac346df85773ac8919d5e10a1f3e4a0bc8be494 (patch)
treebe4fc9a1205787c1ff0284ee88c470b006ff0ee2
parent6ab3a41c864978d98da4d1a1afd75975185a663b (diff)
downloadgo-8ac346df85773ac8919d5e10a1f3e4a0bc8be494.tar.xz
[release-branch.go1.24] os: set full name for Roots created with Root.OpenRoot
Set the Name for a Root created within a Root to be the concatenation of the parent's path and the name used to open the child. This matches the behavior for files opened within a Root with Root.Open. For #73868 Fixes #75138 Change-Id: Idf4021602ac25556721b7ef6924dec652c7bf4db Reviewed-on: https://go-review.googlesource.com/c/go/+/698376 Reviewed-by: Alan Donovan <adonovan@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> (cherry picked from commit ed7f804775725149088a71108efd0b20ef9f206f) Reviewed-on: https://go-review.googlesource.com/c/go/+/704278 Auto-Submit: Michael Knyszek <mknyszek@google.com>
-rw-r--r--src/os/root_test.go33
-rw-r--r--src/os/root_unix.go2
-rw-r--r--src/os/root_windows.go2
3 files changed, 35 insertions, 2 deletions
diff --git a/src/os/root_test.go b/src/os/root_test.go
index 908d59896d..2cc32772de 100644
--- a/src/os/root_test.go
+++ b/src/os/root_test.go
@@ -1265,3 +1265,36 @@ func TestOpenInRoot(t *testing.T) {
}
}
}
+
+func TestRootName(t *testing.T) {
+ dir := t.TempDir()
+ root, err := os.OpenRoot(dir)
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer root.Close()
+ if got, want := root.Name(), dir; got != want {
+ t.Errorf("root.Name() = %q, want %q", got, want)
+ }
+
+ f, err := root.Create("file")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer f.Close()
+ if got, want := f.Name(), filepath.Join(dir, "file"); got != want {
+ t.Errorf(`root.Create("file").Name() = %q, want %q`, got, want)
+ }
+
+ if err := root.Mkdir("dir", 0o777); err != nil {
+ t.Fatal(err)
+ }
+ subroot, err := root.OpenRoot("dir")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer subroot.Close()
+ if got, want := subroot.Name(), filepath.Join(dir, "dir"); got != want {
+ t.Errorf(`root.OpenRoot("dir").Name() = %q, want %q`, got, want)
+ }
+}
diff --git a/src/os/root_unix.go b/src/os/root_unix.go
index 02d3b4bdad..c411864614 100644
--- a/src/os/root_unix.go
+++ b/src/os/root_unix.go
@@ -71,7 +71,7 @@ func openRootInRoot(r *Root, name string) (*Root, error) {
if err != nil {
return nil, &PathError{Op: "openat", Path: name, Err: err}
}
- return newRoot(fd, name)
+ return newRoot(fd, joinPath(r.Name(), name))
}
// rootOpenFileNolog is Root.OpenFile.
diff --git a/src/os/root_windows.go b/src/os/root_windows.go
index 32dfa070b7..4467fdf95b 100644
--- a/src/os/root_windows.go
+++ b/src/os/root_windows.go
@@ -119,7 +119,7 @@ func openRootInRoot(r *Root, name string) (*Root, error) {
if err != nil {
return nil, &PathError{Op: "openat", Path: name, Err: err}
}
- return newRoot(fd, name)
+ return newRoot(fd, joinPath(r.Name(), name))
}
// rootOpenFileNolog is Root.OpenFile.