Skip to content

Commit ebfaa8f

Browse files
committed
vfs: use maps.Clone, maps.Keys in MemFS
1 parent 461e298 commit ebfaa8f

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

vfs/mem_fs.go

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"bytes"
99
"fmt"
1010
"io"
11+
"maps"
1112
"math/rand/v2"
1213
"os"
1314
"path"
@@ -651,7 +652,7 @@ type memNode struct {
651652
}
652653

653654
children map[string]*memNode
654-
syncedChildren map[string]*memNode
655+
syncedChildren map[string]*memNode // may be nil if never synced
655656
}
656657

657658
func newRootMemNode() *memNode {
@@ -661,14 +662,6 @@ func newRootMemNode() *memNode {
661662
}
662663
}
663664

664-
func cloneChildren(f map[string]*memNode) map[string]*memNode {
665-
m := make(map[string]*memNode)
666-
for k, v := range f {
667-
m[k] = v
668-
}
669-
return m
670-
}
671-
672665
func (f *memNode) dump(w *bytes.Buffer, level int, name string) {
673666
if f.isDir {
674667
w.WriteString(" ")
@@ -689,10 +682,7 @@ func (f *memNode) dump(w *bytes.Buffer, level int, name string) {
689682
w.WriteByte(sep[0])
690683
}
691684
w.WriteByte('\n')
692-
names := make([]string, 0, len(f.children))
693-
for name := range f.children {
694-
names = append(names, name)
695-
}
685+
names := slices.Collect(maps.Keys(f.children))
696686
sort.Strings(names)
697687
for _, name := range names {
698688
f.children[name].dump(w, level+1, name)
@@ -704,7 +694,11 @@ func (f *memNode) dump(w *bytes.Buffer, level int, name string) {
704694
func (f *memNode) CrashClone(cfg *CrashCloneCfg) *memNode {
705695
newNode := &memNode{isDir: f.isDir}
706696
if f.isDir {
707-
newNode.children = cloneChildren(f.syncedChildren)
697+
newNode.children = maps.Clone(f.syncedChildren)
698+
if newNode.children == nil {
699+
// syncedChildren may be nil, but children cannot.
700+
newNode.children = make(map[string]*memNode)
701+
}
708702
// Randomly include some non-synced children.
709703
for name, child := range f.children {
710704
if cfg.UnsyncedDataPercent > 0 && cfg.RNG.IntN(100) < cfg.UnsyncedDataPercent {
@@ -714,7 +708,7 @@ func (f *memNode) CrashClone(cfg *CrashCloneCfg) *memNode {
714708
for name, child := range newNode.children {
715709
newNode.children[name] = child.CrashClone(cfg)
716710
}
717-
newNode.syncedChildren = cloneChildren(newNode.children)
711+
newNode.syncedChildren = maps.Clone(newNode.children)
718712
} else {
719713
newNode.mu.data = slices.Clone(f.mu.syncedData)
720714
newNode.mu.modTime = f.mu.modTime
@@ -880,7 +874,7 @@ func (f *memFile) Sync() error {
880874
f.fs.mu.Lock()
881875
defer f.fs.mu.Unlock()
882876
if f.n.isDir {
883-
f.n.syncedChildren = cloneChildren(f.n.children)
877+
f.n.syncedChildren = maps.Clone(f.n.children)
884878
} else {
885879
f.n.mu.Lock()
886880
f.n.mu.syncedData = append(f.n.mu.syncedData[:0], f.n.mu.data...)

0 commit comments

Comments
 (0)