Skip to content

Commit b7ce211

Browse files
committed
[io] Cleanup a bit TFile::Recover
- Declare variables when they're used - Spare a needless dynamic allocation - Use memcpy instead of frombuf in a loop
1 parent 42e1212 commit b7ce211

1 file changed

Lines changed: 19 additions & 19 deletions

File tree

io/io/src/TFile.cxx

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2109,13 +2109,6 @@ TProcessID *TFile::ReadProcessID(UShort_t pidf)
21092109

21102110
Int_t TFile::Recover()
21112111
{
2112-
Short_t keylen,cycle;
2113-
UInt_t datime;
2114-
Int_t nbytes,date,time,objlen,nwheader;
2115-
Long64_t seekkey,seekpdir;
2116-
char header[1024];
2117-
char *buffer, *bufread;
2118-
char nwhc;
21192112
Long64_t idcur = fBEGIN;
21202113

21212114
Long64_t size;
@@ -2129,10 +2122,11 @@ Int_t TFile::Recover()
21292122
if (fWritable && !fFree) fFree = new TList;
21302123

21312124
Int_t nrecov = 0;
2132-
nwheader = 1024;
2133-
Int_t nread = nwheader;
21342125

21352126
while (idcur < fEND) {
2127+
char header[1024];
2128+
int nread = sizeof(header);
2129+
21362130
Seek(idcur); // NOLINT: silence clang-tidy warnings
21372131
if (idcur+nread >= fEND) nread = fEND-idcur-1;
21382132
if (ReadBuffer(header, nread)) { // NOLINT: silence clang-tidy warnings
@@ -2141,8 +2135,8 @@ Int_t TFile::Recover()
21412135
GetName(),idcur);
21422136
break;
21432137
}
2144-
buffer = header;
2145-
bufread = header;
2138+
char *buffer = header;
2139+
Int_t nbytes;
21462140
frombuf(buffer, &nbytes);
21472141
if (!nbytes) {
21482142
Error("Recover","Address = %lld\tNbytes = %d\t=====E R R O R=======", idcur, nbytes);
@@ -2156,10 +2150,15 @@ Int_t TFile::Recover()
21562150
}
21572151
Version_t versionkey;
21582152
frombuf(buffer, &versionkey);
2153+
Int_t objlen;
21592154
frombuf(buffer, &objlen);
2155+
UInt_t datime;
21602156
frombuf(buffer, &datime);
2157+
Short_t keylen;
21612158
frombuf(buffer, &keylen);
2159+
Short_t cycle;
21622160
frombuf(buffer, &cycle);
2161+
Long64_t seekkey, seekpdir;
21632162
if (versionkey > 1000) {
21642163
frombuf(buffer, &seekkey);
21652164
frombuf(buffer, &seekpdir);
@@ -2168,13 +2167,15 @@ Int_t TFile::Recover()
21682167
frombuf(buffer, &skey); seekkey = (Long64_t)skey;
21692168
frombuf(buffer, &sdir); seekpdir = (Long64_t)sdir;
21702169
}
2171-
frombuf(buffer, &nwhc);
2172-
char *classname = nullptr;
2173-
if (nwhc <= 0 || nwhc > 100) break;
2174-
classname = new char[nwhc+1];
2175-
int i, nwhci = nwhc;
2176-
for (i = 0;i < nwhc; i++) frombuf(buffer, &classname[i]);
2177-
classname[nwhci] = '\0';
2170+
char classnameLen;
2171+
frombuf(buffer, &classnameLen);
2172+
char classname[101];
2173+
if (classnameLen <= 0 || classnameLen > (Int_t)sizeof(classname))
2174+
break;
2175+
memcpy(classname, buffer, classnameLen);
2176+
buffer += classnameLen;
2177+
classname[static_cast<std::size_t>(classnameLen)] = '\0';
2178+
Int_t date, time;
21782179
TDatime::GetDateTime(datime, date, time);
21792180
TClass *tclass = TClass::GetClass(classname);
21802181
if (seekpdir == fSeekDir && tclass && !tclass->InheritsFrom(TFile::Class())
@@ -2194,7 +2195,6 @@ Int_t TFile::Recover()
21942195
Info("Recover", "%s, recovered key %s:%s at address %lld",GetName(),key->GetClassName(),key->GetName(),idcur);
21952196
}
21962197
}
2197-
delete [] classname;
21982198
idcur += nbytes;
21992199
}
22002200
if (fWritable) {

0 commit comments

Comments
 (0)