Skip to content

Commit 9c222b1

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 525b398 commit 9c222b1

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
@@ -2101,13 +2101,6 @@ TProcessID *TFile::ReadProcessID(UShort_t pidf)
21012101

21022102
Int_t TFile::Recover()
21032103
{
2104-
Short_t keylen,cycle;
2105-
UInt_t datime;
2106-
Int_t nbytes,date,time,objlen,nwheader;
2107-
Long64_t seekkey,seekpdir;
2108-
char header[1024];
2109-
char *buffer, *bufread;
2110-
char nwhc;
21112104
Long64_t idcur = fBEGIN;
21122105

21132106
Long64_t size;
@@ -2121,10 +2114,11 @@ Int_t TFile::Recover()
21212114
if (fWritable && !fFree) fFree = new TList;
21222115

21232116
Int_t nrecov = 0;
2124-
nwheader = 1024;
2125-
Int_t nread = nwheader;
21262117

21272118
while (idcur < fEND) {
2119+
char header[1024];
2120+
int nread = sizeof(header);
2121+
21282122
Seek(idcur); // NOLINT: silence clang-tidy warnings
21292123
if (idcur+nread >= fEND) nread = fEND-idcur-1;
21302124
if (ReadBuffer(header, nread)) { // NOLINT: silence clang-tidy warnings
@@ -2133,8 +2127,8 @@ Int_t TFile::Recover()
21332127
GetName(),idcur);
21342128
break;
21352129
}
2136-
buffer = header;
2137-
bufread = header;
2130+
char *buffer = header;
2131+
Int_t nbytes;
21382132
frombuf(buffer, &nbytes);
21392133
if (!nbytes) {
21402134
Error("Recover","Address = %lld\tNbytes = %d\t=====E R R O R=======", idcur, nbytes);
@@ -2148,10 +2142,15 @@ Int_t TFile::Recover()
21482142
}
21492143
Version_t versionkey;
21502144
frombuf(buffer, &versionkey);
2145+
Int_t objlen;
21512146
frombuf(buffer, &objlen);
2147+
UInt_t datime;
21522148
frombuf(buffer, &datime);
2149+
Short_t keylen;
21532150
frombuf(buffer, &keylen);
2151+
Short_t cycle;
21542152
frombuf(buffer, &cycle);
2153+
Long64_t seekkey, seekpdir;
21552154
if (versionkey > 1000) {
21562155
frombuf(buffer, &seekkey);
21572156
frombuf(buffer, &seekpdir);
@@ -2160,13 +2159,15 @@ Int_t TFile::Recover()
21602159
frombuf(buffer, &skey); seekkey = (Long64_t)skey;
21612160
frombuf(buffer, &sdir); seekpdir = (Long64_t)sdir;
21622161
}
2163-
frombuf(buffer, &nwhc);
2164-
char *classname = nullptr;
2165-
if (nwhc <= 0 || nwhc > 100) break;
2166-
classname = new char[nwhc+1];
2167-
int i, nwhci = nwhc;
2168-
for (i = 0;i < nwhc; i++) frombuf(buffer, &classname[i]);
2169-
classname[nwhci] = '\0';
2162+
char classnameLen;
2163+
frombuf(buffer, &classnameLen);
2164+
char classname[101];
2165+
if (classnameLen <= 0 || classnameLen > (Int_t)sizeof(classname))
2166+
break;
2167+
memcpy(classname, buffer, classnameLen);
2168+
buffer += classnameLen;
2169+
classname[static_cast<std::size_t>(classnameLen)] = '\0';
2170+
Int_t date, time;
21702171
TDatime::GetDateTime(datime, date, time);
21712172
TClass *tclass = TClass::GetClass(classname);
21722173
if (seekpdir == fSeekDir && tclass && !tclass->InheritsFrom(TFile::Class())
@@ -2186,7 +2187,6 @@ Int_t TFile::Recover()
21862187
Info("Recover", "%s, recovered key %s:%s at address %lld",GetName(),key->GetClassName(),key->GetName(),idcur);
21872188
}
21882189
}
2189-
delete [] classname;
21902190
idcur += nbytes;
21912191
}
21922192
if (fWritable) {

0 commit comments

Comments
 (0)