You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by sk...@apache.org on 2022/12/08 13:14:41 UTC
[netbeans-native-installers] 11/19: [NETBEANS-3094] NBI cleaner process must attempt to delete read-only files too.
This is an automated email from the ASF dual-hosted git repository.
skygo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-native-installers.git
commit 0b5c1520ba6cb64a1f53d82936fa64353dc8401b
Author: Lars Bruun-Hansen <lb...@apache.org>
AuthorDate: Sat Sep 14 22:39:31 2019 +0200
[NETBEANS-3094] NBI cleaner process must attempt to delete read-only
files too.
- Attempt to remove read-only attrib on a file/folder before
attempting to delete it.
- Also added braces on existing statements to make the code more
readable.
---
cleaner/windows/src/main.c | 32 ++++++++++++++++++++++++--------
1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/cleaner/windows/src/main.c b/cleaner/windows/src/main.c
index 74f0850..43271ff 100644
--- a/cleaner/windows/src/main.c
+++ b/cleaner/windows/src/main.c
@@ -257,6 +257,7 @@ void readStringList(HANDLE fileHandle, WCHAR *** list, DWORD *number) {
}
void deleteFile(WCHAR * filePath) {
+ BOOL canDelete = TRUE;
DWORD count = 0 ;
WIN32_FILE_ATTRIBUTE_DATA attrs;
DWORD filePathLength = lstrlenW(filePath);
@@ -271,15 +272,30 @@ void deleteFile(WCHAR * filePath) {
file[i+prefixLength] = filePath[i];
}
+ // Implementation note:
+ // GetFileAttributesExW() is used not only to get file attributes
+ // but also as a way to check if the file/dir (still) exist.
+
if(GetFileAttributesExW(file, GetFileExInfoStandard, &attrs)) {
- if(attrs.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- while((!RemoveDirectoryW(file) || GetFileAttributesExW(file, GetFileExInfoStandard, &attrs)) &&
- ((count++) < MAX_ATTEMPTS))
- Sleep(SLEEP_DELAY);
- else
- while((!DeleteFileW(file) || GetFileAttributesExW(file, GetFileExInfoStandard, &attrs)) &&
- ((count++) < MAX_ATTEMPTS))
- Sleep(SLEEP_DELAY);
+ if (attrs.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { // if read-only attrib is set
+ if (SetFileAttributesW(file, FILE_ATTRIBUTE_NORMAL) == 0) { // remove read-only attrib
+ // The read-only attrib could not be deleted. No point in continuing.
+ canDelete = FALSE;
+ }
+ }
+ if (canDelete) {
+ if (attrs.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+ while ((!RemoveDirectoryW(file) || GetFileAttributesExW(file, GetFileExInfoStandard, &attrs)) &&
+ ((count++) < MAX_ATTEMPTS)) {
+ Sleep(SLEEP_DELAY);
+ }
+ } else {
+ while ((!DeleteFileW(file) || GetFileAttributesExW(file, GetFileExInfoStandard, &attrs)) &&
+ ((count++) < MAX_ATTEMPTS)) {
+ Sleep(SLEEP_DELAY);
+ }
+ }
+ }
}
LocalFree(file);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists