| 87 | |
| 88 | |
| 89 | void SetDirTime(const wchar *Name,RarTime *ftm,RarTime *ftc,RarTime *fta) |
| 90 | { |
| 91 | #if defined(_WIN_ALL) |
| 92 | bool sm=ftm!=NULL && ftm->IsSet(); |
| 93 | bool sc=ftc!=NULL && ftc->IsSet(); |
| 94 | bool sa=fta!=NULL && fta->IsSet(); |
| 95 | |
| 96 | uint DirAttr=GetFileAttr(Name); |
| 97 | bool ResetAttr=(DirAttr!=0xffffffff && (DirAttr & FILE_ATTRIBUTE_READONLY)!=0); |
| 98 | if (ResetAttr) |
| 99 | SetFileAttr(Name,0); |
| 100 | |
| 101 | HANDLE hFile=CreateFile(Name,GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, |
| 102 | NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL); |
| 103 | if (hFile==INVALID_HANDLE_VALUE) |
| 104 | { |
| 105 | wchar LongName[NM]; |
| 106 | if (GetWinLongPath(Name,LongName,ASIZE(LongName))) |
| 107 | hFile=CreateFile(LongName,GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, |
| 108 | NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL); |
| 109 | } |
| 110 | |
| 111 | if (hFile==INVALID_HANDLE_VALUE) |
| 112 | return; |
| 113 | FILETIME fm,fc,fa; |
| 114 | if (sm) |
| 115 | ftm->GetWinFT(&fm); |
| 116 | if (sc) |
| 117 | ftc->GetWinFT(&fc); |
| 118 | if (sa) |
| 119 | fta->GetWinFT(&fa); |
| 120 | SetFileTime(hFile,sc ? &fc:NULL,sa ? &fa:NULL,sm ? &fm:NULL); |
| 121 | CloseHandle(hFile); |
| 122 | if (ResetAttr) |
| 123 | SetFileAttr(Name,DirAttr); |
| 124 | #endif |
| 125 | #if defined(_UNIX) || defined(_EMX) |
| 126 | File::SetCloseFileTimeByName(Name,ftm,fta); |
| 127 | #endif |
| 128 | } |
| 129 | |
| 130 | |
| 131 | bool IsRemovable(const wchar *Name) |
no test coverage detected