--- filefield.module-orig 2008-05-29 21:49:41.000000000 -0500 +++ filefield.module 2008-05-29 21:51:32.000000000 -0500 @@ -322,6 +322,19 @@ function filefield_clear_field_session($ } function _filefield_file_delete($node, $field, $file) { + /* See if there are multiple files table entries for one file, this happens + * when node_clone is used. + */ + $result = db_query(" + select b.fid + from files a + join files b on a.filepath = b.filepath and a.fid != b.fid + where a.fid = %d + ", $file['fid']); + $multi_linked = false; + if($row = db_fetch_array($result)){ + $multi_linked = true; + } if (is_numeric($file['fid'])) { db_query('DELETE FROM {files} WHERE fid = %d', $file['fid']); } @@ -329,6 +342,12 @@ function _filefield_file_delete($node, $ unset($_SESSION['filefield'][$field['field_name']][$file['sessionid']]); } module_invoke_all('filefield', 'delete', $node, $field, $file); + /* Skip the delete step, if there are links to the same file from + * other files table entries. + */ + if($multi_linked){ + return true; + } return file_delete($file['filepath']); }