File tree 1 file changed +18
-14
lines changed
1 file changed +18
-14
lines changed Original file line number Diff line number Diff line change 1
- //go:build go1.18
2
-
3
1
package sftp
4
2
5
3
import (
@@ -80,26 +78,33 @@ func (i *driveInfo) Name() string {
80
78
81
79
type winRoot struct {
82
80
dummyFile
83
- doneDirs int
81
+ drives [] string
84
82
}
85
83
86
- func ( f * winRoot ) Readdir ( n int ) ([]os. FileInfo , error ) {
84
+ func newWinRoot () ( * winRoot , error ) {
87
85
drives , err := getDrives ()
88
86
if err != nil {
89
87
return nil , err
90
88
}
89
+ return & winRoot {
90
+ drives : drives ,
91
+ }, nil
92
+ }
91
93
92
- if f .doneDirs >= len (drives ) {
93
- return nil , io .EOF
94
+ func (f * winRoot ) Readdir (n int ) ([]os.FileInfo , error ) {
95
+ drives := f .drives
96
+ if n > 0 {
97
+ if len (drives ) > n {
98
+ drives = drives [:n ]
99
+ }
100
+ f .drives = f .drives [len (drives ):]
101
+ if len (drives ) == 0 {
102
+ return nil , io .EOF
103
+ }
94
104
}
95
- drives = drives [f .doneDirs :]
96
105
97
106
var infos []os.FileInfo
98
- for i , drive := range drives {
99
- if i >= n {
100
- break
101
- }
102
-
107
+ for _ , drive := range drives {
103
108
fi , err := os .Stat (drive )
104
109
if err != nil {
105
110
return nil , err
@@ -112,13 +117,12 @@ func (f *winRoot) Readdir(n int) ([]os.FileInfo, error) {
112
117
infos = append (infos , di )
113
118
}
114
119
115
- f .doneDirs += len (infos )
116
120
return infos , nil
117
121
}
118
122
119
123
func openfile (path string , flag int , mode fs.FileMode ) (file , error ) {
120
124
if path == "/" {
121
- return & winRoot {}, nil
125
+ return newWinRoot ()
122
126
}
123
127
return os .OpenFile (path , flag , mode )
124
128
}
You can’t perform that action at this time.
0 commit comments