MCPcopy Create free account
hub / github.com/abbeycode/UnrarKit / SetDirTime

Function SetDirTime

Libraries/unrar/filefn.cpp:89–128  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87
88
89void 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
131bool IsRemovable(const wchar *Name)

Callers 1

ExtrCreateDirMethod · 0.85

Calls 5

GetFileAttrFunction · 0.85
SetFileAttrFunction · 0.85
GetWinLongPathFunction · 0.85
GetWinFTMethod · 0.80
IsSetMethod · 0.45

Tested by

no test coverage detected