@@ -31,8 +31,8 @@ func (a *Archive) Open(name string) (fs.File, error) {
31
31
return newOpenFile (f ), nil
32
32
}
33
33
}
34
- var list []fileInfo
35
- var dirs = make (map [string ]bool )
34
+ var entries []fileInfo
35
+ dirs : = make (map [string ]bool )
36
36
prefix := name + "/"
37
37
if name == "." {
38
38
prefix = ""
@@ -46,22 +46,23 @@ func (a *Archive) Open(name string) (fs.File, error) {
46
46
felem := cleanName [len (prefix ):]
47
47
i := strings .Index (felem , "/" )
48
48
if i < 0 {
49
- list = append (list , fileInfo { f , 0444 } )
49
+ entries = append (entries , newFileInfo ( f ) )
50
50
} else {
51
51
dirs [felem [:i ]] = true
52
52
}
53
53
}
54
54
// If there are no children of the name,
55
- // then the directory is treated as not existing.
56
- if len (list ) == 0 && len (dirs ) == 0 && name != "." {
55
+ // then the directory is treated as not existing
56
+ // unless the directory is "."
57
+ if len (entries ) == 0 && len (dirs ) == 0 && name != "." {
57
58
return nil , & fs.PathError {Op : "open" , Path : name , Err : fs .ErrNotExist }
58
59
}
59
60
60
61
for name := range dirs {
61
- list = append (list , fileInfo { File { Name : name }, fs . ModeDir | 0555 } )
62
+ entries = append (entries , newDirInfo ( name ) )
62
63
}
63
64
64
- return & openDir {name , fileInfo { File { Name : name }, fs . ModeDir | 0555 }, list , 0 }, nil
65
+ return & openDir {newDirInfo ( name ), entries , 0 }, nil
65
66
}
66
67
67
68
var _ fs.ReadFileFS = (* Archive )(nil )
@@ -114,6 +115,14 @@ type fileInfo struct {
114
115
m fs.FileMode
115
116
}
116
117
118
+ func newFileInfo (f File ) fileInfo {
119
+ return fileInfo {f , 0444 }
120
+ }
121
+
122
+ func newDirInfo (name string ) fileInfo {
123
+ return fileInfo {File {Name : name }, fs .ModeDir | 0555 }
124
+ }
125
+
117
126
func (f fileInfo ) Name () string { return path .Base (f .File .Name ) }
118
127
func (f fileInfo ) Size () int64 { return int64 (len (f .File .Data )) }
119
128
func (f fileInfo ) Mode () fs.FileMode { return f .m }
@@ -124,32 +133,31 @@ func (f fileInfo) Sys() interface{} { return f.File }
124
133
func (f fileInfo ) Info () (fs.FileInfo , error ) { return f , nil }
125
134
126
135
type openDir struct {
127
- path string
128
- fileInfo
129
- entry []fileInfo
130
- offset int
136
+ dirInfo fileInfo
137
+ entries []fileInfo
138
+ offset int
131
139
}
132
140
133
- func (d * openDir ) Stat () (fs.FileInfo , error ) { return & d .fileInfo , nil }
141
+ func (d * openDir ) Stat () (fs.FileInfo , error ) { return & d .dirInfo , nil }
134
142
func (d * openDir ) Close () error { return nil }
135
143
func (d * openDir ) Read (b []byte ) (int , error ) {
136
- return 0 , & fs.PathError {Op : "read" , Path : d .path , Err : errors .New ("is a directory" )}
144
+ return 0 , & fs.PathError {Op : "read" , Path : d .dirInfo . File . Name , Err : errors .New ("is a directory" )}
137
145
}
138
146
139
147
func (d * openDir ) ReadDir (count int ) ([]fs.DirEntry , error ) {
140
- n := len (d .entry ) - d .offset
148
+ n := len (d .entries ) - d .offset
141
149
if count > 0 && n > count {
142
150
n = count
143
151
}
144
152
if n == 0 && count > 0 {
145
153
return nil , io .EOF
146
154
}
147
- list := make ([]fs.DirEntry , n )
148
- for i := range list {
149
- list [i ] = & d .entry [d .offset + i ]
155
+ entries := make ([]fs.DirEntry , n )
156
+ for i := range entries {
157
+ entries [i ] = & d .entries [d .offset + i ]
150
158
}
151
159
d .offset += n
152
- return list , nil
160
+ return entries , nil
153
161
}
154
162
155
163
// From constructs an Archive with the contents of fsys and an empty Comment.
0 commit comments