From 8ac346df85773ac8919d5e10a1f3e4a0bc8be494 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Fri, 22 Aug 2025 10:47:01 -0700 Subject: [PATCH] [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 LUCI-TryBot-Result: Go LUCI (cherry picked from commit ed7f804775725149088a71108efd0b20ef9f206f) Reviewed-on: https://go-review.googlesource.com/c/go/+/704278 Auto-Submit: Michael Knyszek --- src/os/root_test.go | 33 +++++++++++++++++++++++++++++++++ src/os/root_unix.go | 2 +- src/os/root_windows.go | 2 +- 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. -- 2.52.0