BOOL TRASH_CanTrashFile(LPCWSTR wszPath) { struct stat file_stat; char *unix_path; int ret; TRACE("(%s)\n", debugstr_w(wszPath)); if (!TRASH_EnsureInitialized()) return FALSE; if (!(unix_path = wine_get_unix_file_name(wszPath))) return FALSE; ret = lstat(unix_path, &file_stat); heap_free(unix_path); if (ret == -1) return FALSE; return file_good_for_bucket(home_trash, &file_stat); }
BOOL TRASH_CanTrashFile(LPCWSTR wszPath) { struct stat file_stat; char *unix_path; TRACE("(%s)\n", debugstr_w(wszPath)); if (!TRASH_EnsureInitialized()) return FALSE; if (!(unix_path = wine_get_unix_file_name(wszPath))) return FALSE; if (lstat(unix_path, &file_stat)==-1) { HeapFree(GetProcessHeap(), 0, unix_path); return FALSE; } HeapFree(GetProcessHeap(), 0, unix_path); return file_good_for_bucket(home_trash, &file_stat); }
static BOOL TRASH_MoveFileToBucket(TRASH_BUCKET *pBucket, const char *unix_path) { struct stat file_stat; char *trash_file_name = NULL; char *trash_path = NULL; BOOL ret = TRUE; if (lstat(unix_path, &file_stat)==-1) return FALSE; if (!file_good_for_bucket(pBucket, &file_stat)) return FALSE; trash_file_name = create_trashinfo(pBucket->info_dir, unix_path); if (trash_file_name == NULL) return FALSE; trash_path = SHAlloc(strlen(pBucket->files_dir)+strlen(trash_file_name)+1); if (trash_path == NULL) goto error; lstrcpyA(trash_path, pBucket->files_dir); lstrcatA(trash_path, trash_file_name); if (rename(unix_path, trash_path)==0) { TRACE("rename succeeded\n"); goto cleanup; } /* TODO: try to manually move the file */ ERR("Couldn't move file\n"); error: ret = FALSE; remove_trashinfo_file(pBucket->info_dir, trash_file_name); cleanup: SHFree(trash_file_name); SHFree(trash_path); return ret; }