@@ -29,7 +29,7 @@ type Local struct {
2929}
3030
3131func (d * Local ) getActualPath (path string ) string {
32- return filepath .Join (d .opt .Path , filepath . Clean ( path ) )
32+ return filepath .Join (d .opt .Path , path )
3333}
3434
3535func (d * Local ) List (ctx context.Context , path string , metas ... driver.Meta ) ([]driver.File , error ) {
@@ -81,47 +81,42 @@ func (d *Local) Move(ctx context.Context, src, dst string) error {
8181 return os .Rename (d .getActualPath (src ), filepath .Join (d .getActualPath (dst ), filepath .Base (src )))
8282}
8383
84- func (d * Local ) copyFile (ctx context.Context , src , dst string ) ( err error ) {
85- in , err := os .Open (src )
84+ func (d * Local ) copyFile (ctx context.Context , src , dst string ) error {
85+ srcFile , err := os .Open (src )
8686 if err != nil {
87- return
87+ return err
8888 }
89- defer in .Close ()
89+ defer srcFile .Close ()
9090
91- out , err := os .Create (dst )
91+ dstFile , err := os .Create (dst )
9292 if err != nil {
93- return
93+ return err
9494 }
9595
96- if _ , err = util .CopyWithContext (ctx , out , in ); err != nil {
97- out .Close ()
98- return
96+ if _ , err = util .CopyWithContext (ctx , dstFile , srcFile ); err != nil {
97+ dstFile .Close ()
98+ return err
9999 }
100100
101- if err = out .Close (); err != nil {
102- return
101+ if err = dstFile .Close (); err != nil {
102+ return err
103103 }
104104
105- info , err := in .Stat ()
105+ info , err := os .Stat (src )
106106 if err != nil {
107- return
107+ return err
108108 }
109- err = os .Chmod (dst , info .Mode ())
110- return
109+ return os .Chmod (dst , info .Mode ())
111110}
112111
113112func (d * Local ) copyDir (ctx context.Context , src , dst string ) error {
114- stat , err := os .Stat (dst )
115- if err != nil && ! os .IsNotExist (err ) {
116- return err
117- }
113+ info , err := os .Stat (src )
118114 if err != nil {
119- if err := d .MakeDir (ctx , dst ); err != nil {
120- return err
121- }
115+ return err
122116 }
123- if ! stat .IsDir () {
124- return fmt .Errorf ("cannot copy dir to file: %s" , dst )
117+
118+ if err := os .MkdirAll (dst , info .Mode ()); err != nil {
119+ return err
125120 }
126121
127122 files , err := os .ReadDir (src )
@@ -188,8 +183,10 @@ func New(opt *Option) (driver.FS, error) {
188183 if err := driver .VerifyOption (opt ); err != nil {
189184 return nil , err
190185 }
186+ if util .CleanPath (opt .Path ) != opt .Path {
187+ return nil , fs .ErrInvalid
188+ }
191189
192- opt .Path = filepath .Clean (opt .Path )
193190 opt .DirPerm = 0755
194191
195192 d := & Local {opt : opt }
0 commit comments