Skip to content

Commit e316971

Browse files
committed
Fix cross-device warning in rename function
1 parent d552787 commit e316971

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

src/SPC/store/FileSystem.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -660,11 +660,19 @@ private static function moveFileOrDir(string $source, string $dest): void
660660
$source = self::convertPath($source);
661661
$dest = self::convertPath($dest);
662662

663-
// Try rename first (fast, atomic)
664-
if (@rename($source, $dest)) {
665-
return;
663+
// Check if source and dest are on the same device to avoid cross-device rename errors
664+
$source_stat = @stat($source);
665+
$dest_parent = dirname($dest);
666+
$dest_stat = @stat($dest_parent);
667+
668+
// Only use rename if on same device
669+
if ($source_stat !== false && $dest_stat !== false && $source_stat['dev'] === $dest_stat['dev']) {
670+
if (@rename($source, $dest)) {
671+
return;
672+
}
666673
}
667674

675+
// Fall back to copy + delete for cross-device moves or if rename failed
668676
if (is_dir($source)) {
669677
self::copyDir($source, $dest);
670678
self::removeDir($source);

0 commit comments

Comments
 (0)