mirror of
https://git.tukaani.org/xz.git
synced 2024-04-04 12:36:23 +02:00
Fix compression of symlinks with --force.
xz --force accepted symlinks, but didn't remove them after successful compression. Instead, an error message was displayed.
This commit is contained in:
parent
d4da177d5b
commit
82220a1490
1 changed files with 13 additions and 1 deletions
|
@ -100,7 +100,19 @@ io_unlink(const char *name, const struct stat *known_st)
|
|||
#else
|
||||
struct stat new_st;
|
||||
|
||||
if (lstat(name, &new_st)
|
||||
// If --force was used, use stat() instead of lstat(). This way
|
||||
// (de)compressing symlinks works correctly. However, it also means
|
||||
// that xz cannot detect if a regular file foo is renamed to bar
|
||||
// and then a symlink foo -> bar is created. Because of stat()
|
||||
// instead of lstat(), xz will think that foo hasn't been replaced
|
||||
// with another file. Thus, xz will remove foo even though it no
|
||||
// longer is the same file that xz used when it started compressing.
|
||||
// Probably it's not too bad though, so this doesn't need a more
|
||||
// complex fix.
|
||||
const int stat_ret = opt_force
|
||||
? stat(name, &new_st) : lstat(name, &new_st);
|
||||
|
||||
if (stat_ret
|
||||
# ifdef __VMS
|
||||
// st_ino is an array, and we don't want to
|
||||
// compare st_dev at all.
|
||||
|
|
Loading…
Reference in a new issue