diff options
| author | Damien Neil <dneil@google.com> | 2025-08-22 10:47:01 -0700 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2025-09-16 11:04:27 -0700 |
| commit | 8ac346df85773ac8919d5e10a1f3e4a0bc8be494 (patch) | |
| tree | be4fc9a1205787c1ff0284ee88c470b006ff0ee2 | |
| parent | 6ab3a41c864978d98da4d1a1afd75975185a663b (diff) | |
| download | go-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.go | 33 | ||||
| -rw-r--r-- | src/os/root_unix.go | 2 | ||||
| -rw-r--r-- | 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. |
