my_rename() deletes files when it shouldn't

Description

On Windows my_rename() deletes the target file before renaming. But if the source file does not exist, it means that a target file was deleted erroneously.

It particular, this is a problem for handler::rename_table() that renames all files from handler::bas_ext(). It assumes that the table was renamed successfully if at least some files existed and were renamed. On Windows it would delete all other target files though.

Possible fixes:

  • verify that the source file exists in my_rename() — unnecessary overhead?

  • verify that the source file exists in handler::rename_table()

  • add a special MYF flag to my_rename() that tells to verify whether the source exists before deleting; use this flag in handler::rename_table()

Environment

Windows

Status

Assignee

Sergey Vojtovich

Reporter

Sergei Golubchik

Labels

External issue ID

None

External issue ID

None

Fix versions

Affects versions

Priority

Major
Configure