@@ -161,7 +161,6 @@ func (d *S3Driver) WriteStream(path string, offset, size uint64, reader io.ReadC
161161 } else {
162162 part , err := multi .PutPart (int (partNumber ), bytes .NewReader (buf [0 :bytesRead ]))
163163 if err != nil {
164-
165164 return err
166165 }
167166
@@ -192,15 +191,18 @@ func (d *S3Driver) ResumeWritePosition(path string) (uint64, error) {
192191}
193192
194193func (d * S3Driver ) List (prefix string ) ([]string , error ) {
195- listResponse , err := d .Bucket .List (prefix + "/" , "/" , "" , listPartsMax )
194+ if prefix [len (prefix )- 1 ] != '/' {
195+ prefix = prefix + "/"
196+ }
197+ listResponse , err := d .Bucket .List (prefix , "/" , "" , listPartsMax )
196198 if err != nil {
197199 return nil , err
198200 }
199201
200202 files := []string {}
201203 directories := []string {}
202204
203- for len ( listResponse . Contents ) > 0 || len ( listResponse . CommonPrefixes ) > 0 {
205+ for {
204206 for _ , key := range listResponse .Contents {
205207 files = append (files , key .Key )
206208 }
@@ -209,27 +211,13 @@ func (d *S3Driver) List(prefix string) ([]string, error) {
209211 directories = append (directories , commonPrefix [0 :len (commonPrefix )- 1 ])
210212 }
211213
212- lastFile := ""
213- lastDirectory := ""
214- lastMarker := ""
215-
216- if len (files ) > 0 {
217- lastFile = files [len (files )- 1 ]
218- }
219-
220- if len (directories ) > 0 {
221- lastDirectory = directories [len (directories )- 1 ] + "/"
222- }
223-
224- if lastDirectory > lastFile {
225- lastMarker = lastDirectory
214+ if listResponse .IsTruncated {
215+ listResponse , err = d .Bucket .List (prefix , "/" , listResponse .NextMarker , listPartsMax )
216+ if err != nil {
217+ return nil , err
218+ }
226219 } else {
227- lastMarker = lastFile
228- }
229-
230- listResponse , err = d .Bucket .List (prefix + "/" , "/" , lastMarker , listPartsMax )
231- if err != nil {
232- return nil , err
220+ break
233221 }
234222 }
235223
0 commit comments