79 #define _XOPEN_SOURCE 600    90 #   include <sys/types.h>    94 #include "Compression.h"    96 #include "RConfigure.h"   128 #include "compiledata.h"   161 static struct AddPseudoGlobals {
   187    fCacheReadMap    = 
new TMap();
   200    fAsyncOpenStatus = kAOSNotAsync;
   201    SetBit(kBinaryFile, 
kTRUE);
   217       Info(
"TFile", 
"default ctor");
   326       ::Fatal(
"TFile::TFile", 
"ROOT system not initialized");
   334       fNoAnchorInName = 
kTRUE;
   341    fname1 = fUrl.GetFile();
   345    if (strstr(fUrl.GetOptions(), 
"filetype=raw"))
   350    if (strstr(fUrl.GetOptions(), 
"filetype=pcm"))
   359    fAsyncOpenStatus = kAOSNotAsync;
   365    fVersion      = 
gROOT->GetVersionInt();  
   368    fCompress     = compress;
   382    fCacheReadMap = 
new TMap();
   385    SetBit(kBinaryFile, 
kTRUE);
   392    if (fIsRootFile && !fIsPcmFile && fOption != 
"NEW" && fOption != 
"CREATE"   393        && fOption != 
"RECREATE") {
   401          if (!strlen(fArchive->GetMemberName()))
   406    if (fOption == 
"NET")
   409    if (fOption == 
"WEB") {
   415    if (fOption == 
"NEW")
   422    if (!create && !recreate && !
update && !
read) {
   429    if (!fname1 || !fname1[0]) {
   430       Error(
"TFile", 
"file name is not specified");
   435    if (!strcmp(fname1, 
"/dev/null") &&
   451       fname = fRealName.Data();
   453       Error(
"TFile", 
"error expanding path %s", fname1);
   460             SysError(
"TFile", 
"could not delete %s (errno: %d)",
   470       Error(
"TFile", 
"file %s already exists", fname);
   479          Error(
"TFile", 
"no write permission, could not open file %s", fname);
   485          Error(
"TFile", 
"file %s does not exist", fname);
   489          Error(
"TFile", 
"no read permission, could not open file %s", fname);
   497       fD = SysOpen(fname, O_RDWR | O_CREAT, 0644);
   499       fD = SysOpen(fname, O_RDWR | O_CREAT | 
O_BINARY, S_IREAD | S_IWRITE);
   502          SysError(
"TFile", 
"file %s can not be opened", fname);
   508       fD = SysOpen(fname, O_RDONLY, 0644);
   510       fD = SysOpen(fname, O_RDONLY | 
O_BINARY, S_IREAD | S_IWRITE);
   513          SysError(
"TFile", 
"file %s can not be opened for reading", fname);
   527       gROOT->GetListOfClosedObjects()->Add(
this);
   538    MayNotUse(
"TFile::TFile(const TFile &)");
   560       gROOT->GetListOfClosedObjects()->Remove(
this);
   561       gROOT->GetUUIDs()->RemoveUUID(GetUniqueID());
   596       if (fOption != 
"READ") {
   597          Error(
"Init", 
"archive %s can only be opened in read mode", 
GetName());
   604       fArchive->OpenArchive();
   606       if (fIsArchive) 
return;
   609       if (!fNoAnchorInName)
   613       if (fArchive->SetCurrentMember() != -1)
   614          fArchiveOffset = fArchive->GetMemberFilePosition();
   616          Error(
"Init", 
"member %s not found in archive %s",
   617                fArchive->GetMemberName(), fArchive->GetArchiveName());
   640       TKey *key    = 
new TKey(fName, fTitle, IsA(), nbytes, 
this);
   641       fNbytesName  = key->
GetKeylen() + namelen;
   654       char *header = 
new char[
kBEGIN+200];
   659          Error(
"Init",
"%s failed to read the file type data.",
   666       if (strncmp(header, 
"root", 4)) {
   672       char *buffer = header + 4;    
   675       frombuf(buffer, &headerLength);
   677       if (fVersion < 1000000) { 
   678          Int_t send,sfree,sinfo;
   699       if (fBEGIN < 0 || fBEGIN > fEND) {
   701          Error(
"Init",
"file %s has an incorrect header length (%lld) or incorrect end of file length (%lld)",
   709          if (fSeekFree > fBEGIN) {
   712             Warning(
"Init",
"file %s probably not closed, cannot read free segments",
GetName());
   717       char *buffer_keyloc = 0;
   720       if ( (nbytes + fBEGIN) > fEND) {
   722          Error(
"Init",
"file %s has an incorrect header length (%lld) or incorrect end of file length (%lld)",
   726       if (nbytes+fBEGIN > 
kBEGIN+200) {
   728          header       = 
new char[nbytes];
   733             Error(
"Init",
"%s failed to read the file header information at %lld (size=%d)",
   738          buffer = header+fNbytesName;
   739          buffer_keyloc = header;
   741          buffer = header+fBEGIN+fNbytesName;
   742          buffer_keyloc = header+fBEGIN;
   745       frombuf(buffer,&version); versiondir = version%1000;
   746       fDatimeC.ReadBuffer(buffer);
   747       fDatimeM.ReadBuffer(buffer);
   750       if (version > 1000) {
   755          Int_t sdir,sparent,skeys;
   760       if (versiondir > 1) fUUID.ReadBuffer(buffer);
   763       buffer_keyloc += 
sizeof(
Int_t); 
   765       frombuf(buffer_keyloc, &keyversion);
   767       if (keyversion > 1000) {
   776       fTitle.ReadBuffer(buffer_keyloc);
   778       if (fNbytesName < 10 || fNbytesName > 10000) {
   779          Error(
"Init",
"cannot read directory info of file %s", 
GetName());
   785       if ((size = GetSize()) == -1) {
   795       if (fSeekKeys > fBEGIN && fEND <= size) {
   807       } 
else if ((fBEGIN+nbytes == fEND) && (fEND == size)) {
   815                Error(
"Init",
"file %s is truncated at %lld bytes: should be %lld, "   816                      "trying to recover", 
GetName(), size, fEND);
   818                Error(
"Init",
"file %s is truncated at %lld bytes: should be %lld",
   824                Warning(
"Init",
"file %s probably not closed, "   825                        "trying to recover", 
GetName());
   831          Int_t nrecov = Recover();
   833             Warning(
"Init", 
"successfully recovered %d keys", nrecov);
   835             Warning(
"Init", 
"no keys recovered, file has been made a Zombie");
   843       gROOT->GetListOfFiles()->Add(
this);
   844       gROOT->GetUUIDs()->AddUUID(fUUID,
this);
   849       Int_t lenIndex = 
gROOT->GetListOfStreamerInfo()->GetSize()+1;
   850       if (lenIndex < 5000) lenIndex = 5000;
   851       fClassIndex = 
new TArrayC(lenIndex);
   853          if (fSeekInfo > fBEGIN) {
   857                gROOT->GetListOfFiles()->Remove(
this);
   860          } 
else if (fVersion != 
gROOT->GetVersionInt() && fVersion > 30000) {
   862             if (fKeys->GetSize()) {
   863                Warning(
"Init",
"no StreamerInfo found in %s therefore preventing schema evolution when reading this file.",
GetName());
   873       while ((key = (
TKey*)next())) {
   874          if (!strcmp(key->
GetClassName(),
"TProcessID")) fNProcessIDs++;
   876       fProcessIDs = 
new TObjArray(fNProcessIDs+1);
   883       gROOT->GetListOfClosedObjects()->Add(
this);
   909    if (!IsOpen()) 
return;
   911    if (fIsArchive || !fIsRootFile) {
   927    if (fCacheRead) fCacheRead->Close();
   929       TIter iter(fCacheReadMap);
   931       while ((key = iter()) != 0) {
   976    TIter next(fProcessIDs);
   989       gROOT->GetListOfFiles()->Remove(
this);
   990       gROOT->GetListOfBrowsers()->RecursiveRemove(
this);
   991       gROOT->GetListOfClosedObjects()->Add(
this);
  1002    return new TKey(obj, 
name, bufsize, mother);
  1010    return new TKey(obj, cl, 
name, bufsize, mother);
  1022    static TFile *currentFile = 0;
  1054       Info(
"Delete", 
"deleting name = %s", namecycle);
  1075    if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TFileDrawMap"))) {
  1087    if (IsOpen() && fWritable) {
  1089       if (SysSync(fD) < 0) {
  1091          SetBit(kWriteError); SetWritable(
kFALSE);
  1104    if (fCacheWrite && IsOpen() && fWritable)
  1105       return fCacheWrite->Flush();
  1116    Version_t version = TFile::Class_Version();
  1117    tobuf(buffer, version);
  1130    Double_t mean = fSumBuffer/fWritten;
  1145    Int_t    nbytes, objlen, nwh = 64;
  1146    char    *header = 
new char[fBEGIN];
  1150    comp = uncomp = fBEGIN;
  1152    while (idcur < fEND-100) {
  1167       if (nbytes == 0) 
break; 
  1173       if (!objlen) objlen = nbytes-keylen;
  1175       uncomp += keylen + objlen;
  1204       if (!fCacheRead && fCacheReadMap->GetSize() == 1) {
  1205          TIter next(fCacheReadMap);
  1211    if (!cache) 
return fCacheRead;
  1243    if (
first < fBEGIN) 
return 0;
  1244    if (
first > fEND)   
return 0;
  1246    Int_t nread = maxbytes;
  1247    if (
first+maxbytes > fEND) nread = fEND-maxbytes;
  1249       Warning(
"GetRecordHeader",
"%s: parameter maxbytes = %d must be >= 4",
  1255       Warning(
"GetRecordHeader",
"%s: failed to read header data (maxbytes = %d)",
  1266    if (nb < 0) 
return nread;
  1268    const Int_t headerSize = 16;
  1269    if (nread < headerSize) 
return nread;
  1274    if (!olen) olen = nbytes-klen;
  1288    if (fArchive && fArchive->GetMember()) {
  1289       size = fArchive->GetMember()->GetDecompressedSize();
  1292       if (const_cast<TFile*>(
this)->SysStat(fD, &
id, &size, &flags, &modtime)) {
  1293          Error(
"GetSize", 
"cannot stat the file %s", 
GetName());
  1305    return fInfoCache ?  fInfoCache : (fInfoCache=GetStreamerInfoList());
  1326    if (fIsPcmFile) 
return 0; 
  1332       char *buffer = 
new char[fNbytesInfo+1];
  1337          Warning(
"GetRecordHeader",
"%s: failed to read the StreamerInfo data from disk.",
  1347       list = (
TList*)Get(
"StreamerInfo"); 
  1351       Info(
"GetStreamerInfoList", 
"cannot find the StreamerInfo record in file %s",
  1398    if(!newfree) 
return;
  1402    if (nbytesl > 2000000000) nbytesl = 2000000000;
  1405    char * buffer   = 
new char[nb];
  1406    char * psave    = buffer;
  1407    tobuf(buffer, nbytes);
  1408    if (last == fEND-1) fEND = nfirst;
  1415    WriteBuffer(psave, nb);
  1416    if (fMustFlush) Flush();
  1457    Int_t    nbytes,date,time,objlen,nwheader;
  1466    Int_t nread = nwheader;
  1469    char classname[512];
  1471    while (idcur < fEND) {
  1473       if (idcur+nread >= fEND) nread = fEND-idcur-1;
  1476          Warning(
"Map",
"%s: failed to read the key data from disk at %lld.",
  1484          Printf(
"Address = %lld\tNbytes = %d\t=====E R R O R=======", idcur, nbytes);
  1489          Printf(
"Address = %lld\tNbytes = %d\t=====G A P===========", idcur, nbytes);
  1500       if (versionkey > 1000) {
  1509       for (
int i = 0;i < nwhc; i++) 
frombuf(buffer, &classname[i]);
  1510       classname[(int)nwhc] = 
'\0'; 
  1511       if (idcur == fSeekFree) strlcpy(classname,
"FreeSegments",512);
  1512       if (idcur == fSeekInfo) strlcpy(classname,
"StreamerInfo",512);
  1513       if (idcur == fSeekKeys) strlcpy(classname,
"KeysList",512);
  1515       if (objlen != nbytes-keylen) {
  1517          Printf(
"%d/%06d  At:%lld  N=%-8d  %-14s CX = %5.2f",date,time,idcur,nbytes,classname,cx);
  1519          Printf(
"%d/%06d  At:%lld  N=%-8d  %-14s",date,time,idcur,nbytes,classname);
  1523    Printf(
"%d/%06d  At:%lld  N=%-8d  %-14s",date,time,idcur,1,
"END");
  1531    GetList()->R__FOR_EACH(
TObject,Paint)(option);
  1539    Printf(
"TFile: name=%s, title=%s, option=%s", 
GetName(), GetTitle(), GetOption());
  1561       if ((st = ReadBufferViaCache(buf, len))) {
  1570       while ((siz = SysRead(fD, buf, len)) < 0 && 
GetErrno() == EINTR)
  1578          Error(
"ReadBuffer", 
"error reading all requested bytes from file %s, got %ld of %d",
  1606       if ((st = ReadBufferViaCache(buf, len))) {
  1617       while ((siz = SysRead(fD, buf, len)) < 0 && 
GetErrno() == EINTR)
  1625          Error(
"ReadBuffer", 
"error reading all requested bytes from file %s, got %ld of %d",
  1656       for (
Int_t j = 0; j < nbuf; j++) {
  1657          if (ReadBufferAsync(pos[j], len[j])) {
  1673       cur = pos[i]+len[i];
  1675       if (cur -curbegin < fgReadaheadSize) {
n++; i++; bigRead = 
kFALSE;}
  1676       if (bigRead || (i>=nbuf)) {
  1688             if (buf2 == 0) buf2 = 
new char[fgReadaheadSize];
  1690             Long64_t nahead = pos[i-1]+len[i-1]-curbegin;
  1695             for (
Int_t j=0;j<
n;j++) {
  1696                memcpy(&buf[k],&buf2[pos[i-n+j]-curbegin],len[i-n+j]);
  1701             fBytesReadExtra += extra;
  1702             fBytesRead      -= extra;
  1703             fgBytesRead     -= extra;
  1709    if (buf2) 
delete [] buf2;
  1724       Int_t st = fCacheRead->ReadBuffer(buf, off, len);
  1729          SetOffset(off + len);
  1736       if (fWritable && fCacheWrite) {
  1737          if (fCacheWrite->ReadBuffer(buf, off, len) == 0) {
  1738             SetOffset(off + len);
  1759    if (fNbytesFree < 0 || fNbytesFree > fEND) {
  1763    TKey *headerfree = 
new TKey(fSeekFree, fNbytesFree, 
this);
  1772       if (afree->
GetLast() > fEND) 
break;
  1785    TObjArray *pids = GetListOfProcessIDs();
  1795    snprintf(pidname,32,
"ProcessID%d",pidf);
  1798       printf(
"ReadProcessID, name=%s, file=%s, pid=%lx\n",pidname,
GetName(),(
Long_t)pid);
  1807    TIter next(pidslist);
  1880    Int_t    nbytes,date,time,objlen,nwheader;
  1883    char    *buffer, *bufread;
  1888    if ((size = GetSize()) == -1) {
  1889       Error(
"Recover", 
"cannot stat the file %s", 
GetName());
  1895    if (fWritable && !fFree) fFree  = 
new TList;
  1900    Int_t nread = nwheader;
  1902    while (idcur < fEND) {
  1904       if (idcur+nread >= fEND) nread = fEND-idcur-1;
  1907          Error(
"Recover",
"%s: failed to read the key data from disk at %lld.",
  1915          Error(
"Recover",
"Address = %lld\tNbytes = %d\t=====E R R O R=======", idcur, nbytes);
  1920          if (fWritable) 
new TFree(fFree,idcur,idcur-nbytes-1);
  1930       if (versionkey > 1000) {
  1939       char *classname = 0;
  1940       if (nwhc <= 0 || nwhc > 100) 
break;
  1941       classname = 
new char[nwhc+1];
  1942       int i, nwhci = nwhc;
  1943       for (i = 0;i < nwhc; i++) 
frombuf(buffer, &classname[i]);
  1944       classname[nwhci] = 
'\0';
  1948                                && strcmp(classname,
"TBasket")) {
  1949          key = 
new TKey(
this);
  1951          if (!strcmp(key->
GetName(),
"StreamerInfo")) {
  1952             fSeekInfo = seekkey;
  1954             fNbytesInfo = nbytes;
  1962       delete [] classname;
  1967       if (max_file_size < fEND) max_file_size = fEND+1000000000;
  1970          last->
AddFree(fFree,fEND,max_file_size);
  1972          new TFree(fFree,fEND,max_file_size);
  1974       if (nrecov) Write();
  1997    if (opt != 
"READ" && opt != 
"UPDATE") {
  1998       Error(
"ReOpen", 
"mode must be either READ or UPDATE, not %s", opt.
Data());
  2002    if (opt == fOption || (opt == 
"UPDATE" && fOption == 
"CREATE"))
  2005    if (opt == 
"READ") {
  2009       if (IsOpen() && IsWritable()) {
  2010          WriteStreamerInfo();
  2038       fD = SysOpen(fRealName, O_RDONLY, 0644);
  2040       fD = SysOpen(fRealName, O_RDONLY | 
O_BINARY, S_IREAD | S_IWRITE);
  2043          SysError(
"ReOpen", 
"file %s can not be opened in read mode", 
GetName());
  2060       fD = SysOpen(fRealName, O_RDWR | O_CREAT, 0644);
  2062       fD = SysOpen(fRealName, O_RDWR | O_CREAT | 
O_BINARY, S_IREAD | S_IWRITE);
  2065          SysError(
"ReOpen", 
"file %s can not be opened in update mode", 
GetName());
  2071       if (fSeekFree > fBEGIN)
  2074          Warning(
"ReOpen",
"file %s probably not closed, cannot read free segments", 
GetName());
  2087          fOffset = offset + fArchiveOffset;
  2095             Error(
"SetOffset", 
"seeking from end in archive is not (yet) supported");
  2096          fOffset = fEND + offset;  
  2110          offset += fArchiveOffset;
  2119             Error(
"Seek", 
"seeking from end in archive is not (yet) supported");
  2123    if ((retpos = SysSeek(fD, offset, whence)) < 0)
  2124       SysError(
"Seek", 
"cannot seek to position %lld in file %s, retpos=%lld",
  2137    if (algorithm < 0 || algorithm >= ROOT::kUndefinedCompressionAlgorithm) algorithm = 0;
  2138    if (fCompress < 0) {
  2140       fCompress = 100 * algorithm + 1;
  2142       int level = fCompress % 100;
  2143       fCompress = 100 * algorithm + level;
  2152    if (level < 0) level = 0;
  2153    if (level > 99) level = 99;
  2154    if (fCompress < 0) {
  2158       int algorithm = fCompress / 100;
  2159       if (algorithm >= ROOT::kUndefinedCompressionAlgorithm) algorithm = 0;
  2160       fCompress = 100 * algorithm + level;
  2171    fCompress = settings;
  2199       if (cache) fCacheReadMap->Add(tree, cache);
  2204          fCacheReadMap->Remove(tree);
  2205          if (tpf && (tpf->
GetFile() == 
this) && (action != kDoNotDisconnect)) tpf->
SetFile(0, action);
  2208    if (cache) cache->
SetFile(
this, action);
  2209    else if (!tree && fCacheRead && (action != kDoNotDisconnect)) fCacheRead->SetFile(0, action);
  2221    if (!cache && fCacheWrite) 
delete fCacheWrite;
  2222    fCacheWrite = cache;
  2251    fSumBuffer  += double(bufsize);
  2252    fSum2Buffer += double(bufsize) * double(bufsize); 
  2269    if (!IsWritable()) {
  2270       if (!TestBit(kWriteError)) {
  2278       if (!GetTitle() || strlen(GetTitle()) == 0)
  2281          Info(
"Write", 
"writing name = %s title = %s", 
GetName(), GetTitle());
  2286    WriteStreamerInfo();
  2299    Error(
"Write const",
"A const TFile object should not be saved. We try to proceed anyway.");
  2300    return const_cast<TFile*
>(
this)->Write(
n, opt, bufsize);
  2309    if (IsOpen() && fWritable) {
  2312       if ((st = WriteBufferViaCache(buf, len))) {
  2320       while ((siz = SysWrite(fD, buf, len)) < 0 && 
GetErrno() == EINTR)
  2325          SetBit(kWriteError); SetWritable(
kFALSE);
  2330          SetBit(kWriteError);
  2331          Error(
"WriteBuffer", 
"error writing all requested bytes to file %s, wrote %ld of %d",
  2336       fgBytesWrite += siz;
  2352    if (!fCacheWrite) 
return 0;
  2356    if ((st = fCacheWrite->WriteBuffer(buf, off, len)) < 0) {
  2357       SetBit(kWriteError);
  2358       Error(
"WriteBuffer", 
"error writing to cache");
  2377    if (fSeekFree != 0) {
  2378       MakeFree(fSeekFree, fSeekFree + fNbytesFree -1);
  2383    auto createKey = [
this]() {
  2387       while ((afree = (
TFree*) next())) {
  2388          nbytes += afree->
Sizeof();
  2390       if (!nbytes) 
return (
TKey*)
nullptr;
  2392       TKey *key = 
new TKey(fName,fTitle,IsA(),nbytes,
this);
  2396          return (
TKey*)
nullptr;
  2401    TKey *key = createKey();
  2418    char *start = buffer;
  2422    while ((afree = (
TFree*) next())) {
  2427    auto actualBytes = buffer-start;
  2428    if ( actualBytes != nbytes ) {
  2429       if (actualBytes < nbytes) {
  2432          memset(buffer,0,nbytes-actualBytes);
  2434          Error(
"WriteFree",
"The free block list TKey wrote more data than expected (%d vs %ld). Most likely there has been an out-of-bound write.",nbytes,actualBytes);
  2450    if (lastfree) fEND  = lastfree->
GetFirst();
  2451    const char *root = 
"root";
  2452    char *psave  = 
new char[fBEGIN];
  2453    char *buffer = psave;
  2454    Int_t nfree  = fFree->GetSize();
  2455    memcpy(buffer, root, 4); buffer += 4;
  2456    Int_t version = fVersion;
  2457    if (version <1000000 && fEND > kStartBigFile) {version += 1000000; fUnits = 8;}
  2458    tobuf(buffer, version);
  2460    if (version < 1000000) {
  2463       tobuf(buffer, fNbytesFree);
  2464       tobuf(buffer, nfree);
  2465       tobuf(buffer, fNbytesName);
  2466       tobuf(buffer, fUnits);
  2467       tobuf(buffer, fCompress);
  2469       tobuf(buffer, fNbytesInfo);
  2471       tobuf(buffer, fEND);
  2472       tobuf(buffer, fSeekFree);
  2473       tobuf(buffer, fNbytesFree);
  2474       tobuf(buffer, nfree);
  2475       tobuf(buffer, fNbytesName);
  2476       tobuf(buffer, fUnits);
  2477       tobuf(buffer, fCompress);
  2478       tobuf(buffer, fSeekInfo);
  2479       tobuf(buffer, fNbytesInfo);
  2481    fUUID.FillBuffer(buffer);
  2482    Int_t nbytes  = buffer - psave;
  2484    WriteBuffer(psave, nbytes);
  2573             path += 
"/PROOF-INF";
  2575             const char *afile = 0;
  2578                   if (strcmp(afile,
".") == 0) 
continue;
  2579                   if (strcmp(afile,
"..") == 0) 
continue;
  2580                   filepath.
Form(
"%s/%s", path.
Data(), afile);
  2582                      Warning(
"MakeProject", 
"1: problems unlinking '%s' ('%s', '%s')", filepath.
Data(), path.
Data(), afile);
  2589                if (strcmp(afile,
".") == 0) 
continue;
  2590                if (strcmp(afile,
"..") == 0) 
continue;
  2591                filepath.
Form(
"%s/%s", path.
Data(), afile);
  2593                   Warning(
"MakeProject", 
"2: problems unlinking '%s' ('%s', '%s')", filepath.
Data(), path.
Data(), afile);
  2597                Warning(
"MakeProject", 
"problems unlinking '%s'", path.
Data());
  2601       path.
Form(
"%s/%s/PROOF-INF", pardir.
Data(), parname.
Data());
  2603          Error(
"MakeProject", 
"problems creating '%s'", path.
Data());
  2618       } 
else if (opt.
Contains(
"recreate")) {
  2622                Error(
"MakeProject",
"cannot create directory '%s'",dirname);
  2629             if (afile == 0) 
break;
  2630             if (strcmp(afile,
".") == 0) 
continue;
  2631             if (strcmp(afile,
"..") == 0) 
continue;
  2632             dirpath.
Form(
"%s/%s",dirname,afile);
  2640             Error(
"MakeProject",
"cannot create directory %s, already existing",dirname);
  2645             Error(
"MakeProject",
"cannot create directory '%s'",dirname);
  2657    TList *filelist = (
TList*)GetStreamerInfoCache();
  2658    if (filelist) filelist = (
TList*)filelist->
Clone();
  2659    if (filelist == 0) {
  2660       Error(
"MakeProject",
"file %s has no StreamerInfo", 
GetName());
  2664    TString clean_dirname(dirname);
  2665    if (makepar) clean_dirname.
Form(
"%s/%s", pardir.
Data(), parname.
Data());
  2666    if (clean_dirname[clean_dirname.
Length()-1]==
'/') {
  2668    } 
else if (clean_dirname[clean_dirname.
Length()-1]==
'\\') {
  2670       if (clean_dirname[clean_dirname.
Length()-1]==
'\\') {
  2675    if (makepar) subdirname = parname;
  2676    if (subdirname == 
"") {
  2677       Error(
"MakeProject",
"Directory name must not be empty.");
  2682    TString spath; spath.
Form(
"%s/%sProjectSource.cxx",clean_dirname.
Data(),subdirname.Data());
  2683    FILE *sfp = fopen(spath.
Data(),
"w");
  2685       Error(
"MakeProject",
"Unable to create the source file %s.",spath.
Data());
  2688    fprintf(sfp, 
"namespace std {}\nusing namespace std;\n");
  2689    fprintf(sfp, 
"#include \"%sProjectHeaders.h\"\n\n",subdirname.Data() );
  2690    if (!genreflex) fprintf(sfp, 
"#include \"%sLinkDef.h\"\n\n",subdirname.Data() );
  2691    fprintf(sfp, 
"#include \"%sProjectDict.cxx\"\n\n",subdirname.Data() );
  2692    fprintf(sfp, 
"struct DeleteObjectFunctor {\n");
  2693    fprintf(sfp, 
"   template <typename T>\n");
  2694    fprintf(sfp, 
"   void operator()(const T *ptr) const {\n");
  2695    fprintf(sfp, 
"      delete ptr;\n");
  2696    fprintf(sfp, 
"   }\n");
  2697    fprintf(sfp, 
"   template <typename T, typename Q>\n");
  2698    fprintf(sfp, 
"   void operator()(const std::pair<T,Q> &) const {\n");
  2699    fprintf(sfp, 
"      // Do nothing\n");
  2700    fprintf(sfp, 
"   }\n");
  2701    fprintf(sfp, 
"   template <typename T, typename Q>\n");
  2702    fprintf(sfp, 
"   void operator()(const std::pair<T,Q*> &ptr) const {\n");
  2703    fprintf(sfp, 
"      delete ptr.second;\n");
  2704    fprintf(sfp, 
"   }\n");
  2705    fprintf(sfp, 
"   template <typename T, typename Q>\n");
  2706    fprintf(sfp, 
"   void operator()(const std::pair<T*,Q> &ptr) const {\n");
  2707    fprintf(sfp, 
"      delete ptr.first;\n");
  2708    fprintf(sfp, 
"   }\n");
  2709    fprintf(sfp, 
"   template <typename T, typename Q>\n");
  2710    fprintf(sfp, 
"   void operator()(const std::pair<T*,Q*> &ptr) const {\n");
  2711    fprintf(sfp, 
"      delete ptr.first;\n");
  2712    fprintf(sfp, 
"      delete ptr.second;\n");
  2713    fprintf(sfp, 
"   }\n");
  2714    fprintf(sfp, 
"};\n\n");
  2721    TIter flnext(filelist);
  2728       if (strstr(info->
GetName(),
"@@")) {
  2745          for(
auto rule : rules) {
  2746             if( rule->IsRenameRule() || rule->IsAliasRule() )
  2749             if ( rule->HasTarget( el->GetName()) && rule->GetAttributes()[0] != 0 ) {
  2750                TString attr( rule->GetAttributes() );
  2752                if (attr.Contains(
"owner")) {
  2753                   if (attr.Contains(
"notowner")) {
  2776    TIter nextextra(&extrainfos);
  2779       filelist->
Add(info);
  2790       TIter subnext(list);
  2802             if ( (sublen > len) && subinfo->
GetName()[len+1]==
':'  2805                subClasses.
Add(subinfo);
  2810       subClasses.
Clear(
"nodelete");
  2813    path.
Form(
"%s/%sProjectHeaders.h",clean_dirname.
Data(),subdirname.Data());
  2814    FILE *allfp = fopen(path,
"a");
  2816       Error(
"MakeProject",
"Cannot open output file:%s\n",path.
Data());
  2818       fprintf(allfp,
"#include \"%sProjectInstances.h\"\n", subdirname.Data());
  2822    printf(
"MakeProject has generated %d classes in %s\n",ngener,clean_dirname.
Data());
  2825    if (!opt.
Contains(
"+") && !makepar) {
  2838       path.
Form(
"%s/makep.cmd",clean_dirname.
Data());
  2840       path.
Form(
"%s/MAKEP",clean_dirname.
Data());
  2843       fpMAKE = fopen(path,
"wb");
  2845       fpMAKE = fopen(path,
"w");
  2848          Error(
"MakeProject", 
"cannot open file %s", path.
Data());
  2858    path.
Form(
"%s/%sProjectInstances.h",clean_dirname.
Data(),subdirname.Data());
  2860    ifp = fopen(path,
"wb");
  2862    ifp = fopen(path,
"w");
  2865       Error(
"MakeProject", 
"cannot open path file %s", path.
Data());
  2875          fprintf(fpMAKE,
"genreflex %sProjectHeaders.h -o %sProjectDict.cxx --comments --iocomments %s ",subdirname.Data(),subdirname.Data(),
gSystem->
GetIncludePath());
  2876          path.
Form(
"%s/%sSelection.xml",clean_dirname.
Data(),subdirname.Data());
  2879          path.
Form(
"%s/%sLinkDef.h",clean_dirname.
Data(),subdirname.Data());
  2882       path.
Form(
"%s/%sLinkDef.h",clean_dirname.
Data(),subdirname.Data());
  2888    FILE *fp = fopen(path,
"wb");
  2890    FILE *fp = fopen(path,
"w");
  2893       Error(
"MakeProject", 
"cannot open path file %s", path.
Data());
  2902       fprintf(fp,
"<lcgdict>\n");
  2905       fprintf(fp,
"#ifdef __CINT__\n");
  2923             for(
auto rule : rules) {
  2926                   rule->AsString(strrule,
"x");
  2929                      selections.
Append(strrule);
  2932                   rule->AsString(strrule);
  2933                   if (strncmp(strrule.
Data(),
"type=",5)==0) {
  2936                   fprintf(fp,
"#pragma %s;\n",strrule.
Data());
  2943          std::vector<std::string> inside;
  2950             switch ( stlkind )  {
  2954                   what = 
"std::pair<";
  2958                   if (what[what.
Length()-1]==
'>') {
  2964                      tmp.
Form(
"<class name=\"%s\" />\n",what.
Data());
  2968                      tmp.
Form(
"template class %s;\n",what.
Data());
  2976                         fprintf(fp,
"#pragma link C++ class %s+;\n",what.
Data());
  2982                if (strncmp(key->
GetName(),
"pair<",strlen(
"pair<"))==0) {
  2984                      tmp.
Form(
"<class name=\"%s\" />\n",key->
GetName());
  2994                      fprintf(fp,
"#pragma link C++ class %s+;\n",key->
GetName());
  3005             tmp.
Form(
"<class name=\"%s\" />\n",
what.Data());
  3009             if (
what[
what.Length()-1] == 
'>') {
  3010                tmp.
Form(
"template class %s;\n",
what.Data());
  3016             what.ReplaceAll(
"std::",
"");
  3017             fprintf(fp,
"#pragma link C++ class %s+;\n",
what.Data());
  3025             if (element->GetClass() && !element->GetClass()->IsLoaded() && element->GetClass()->GetCollectionProxy()) {
  3027                tmp.
Form(
"<class name=\"%s\" />\n",what.
Data());
  3031                tmp.
Form(
"template class %s;\n",what.
Data());
  3040       fprintf(ifp,
"#ifndef PROJECT_INSTANCES_H\n");
  3041       fprintf(ifp,
"#define PROJECT_INSTANCES_H\n");
  3042       fprintf(ifp,
"%s",instances.
Data());
  3043       fprintf(ifp,
"#endif\n");
  3044       fprintf(fp,
"%s",selections.
Data());
  3045       fprintf(fp,
"</lcgdict>\n");
  3047       fprintf(fp,
"#endif\n");
  3068       TString rootbuild = ROOTBUILD;
  3077          fprintf(fpMAKE,
"-s %sSelection.xml \n",subdirname.Data());
  3079          fprintf(fpMAKE,
"%sProjectHeaders.h ",subdirname.Data());
  3080          fprintf(fpMAKE,
"%sLinkDef.h \n",subdirname.Data());
  3083       fprintf(fpMAKE,
"%s\n",cmd.
Data());
  3085       printf(
"%s/MAKEP file has been generated\n", clean_dirname.
Data());
  3093       if (MakeProjectParMake(parname, filemake.
Data()) != 0) {
  3094          Error(
"MakeProject", 
"problems creating PAR make file '%s'", filemake.
Data());
  3104       TString mkarchsrc(
"$(ROOTSYS)/etc/Makefile.arch");
  3107          Warning(
"MakeProject", 
"problems expanding '%s'", mkarchsrc.
Data());
  3110          Error(
"MakeProject", 
"problems retrieving '%s' to '%s'", mkarchsrc.
Data(), mkarchdst.
Data());
  3118       if (MakeProjectParProofInf(parname, proofinf.
Data()) != 0) {
  3119          Error(
"MakeProject", 
"problems creating BUILD.sh and/or SETUP.C under '%s'", proofinf.
Data());
  3132       chmod(cmod.
Data(), 00700);
  3134       Printf(
"Files Makefile, Makefile.arch, PROOF-INF/BUILD.sh and"  3135              " PROOF-INF/SETUP.C have been generated under '%s'", clean_dirname.
Data());
  3144             Info(
"MakeProject", 
"PAR file %s.par generated", clean_dirname.
Data());
  3146             Warning(
"MakeProject", 
"problems changing directory back to '%s'", curdir.Data());
  3149          Error(
"MakeProject", 
"problems changing directory to '%s' - skipping PAR file generation", pardir.
Data());
  3152       Warning(
"MakeProject", 
"on Windows systems the PAR file cannot be generated out of the package directory!");
  3157    if (!makepar && !opt.
Contains(
"nocompilation")) {
  3166       chmod(
"makep.cmd",00700);
  3171       if (res) printf(
"Shared lib %s has been generated\n",path.
Data());
  3176          if (res) printf(
"Shared lib %s has been dynamically linked\n",path.
Data());
  3180    extrainfos.
Clear(
"nodelete");
  3196    if (!filemake || (filemake && strlen(filemake) <= 0)) {
  3197       Error(
"MakeProjectParMake", 
"path for output file undefined!");
  3202    if (!pack || (pack && strlen(pack) <= 0)) {
  3203       Error(
"MakeProjectParMake", 
"package name undefined!");
  3208    FILE *fmk = fopen(filemake, 
"wb");
  3210    FILE *fmk = fopen(filemake, 
"w");
  3218    fprintf(fmk, 
"# Makefile for the ROOT test programs.\n");
  3219    fprintf(fmk, 
"# This Makefile shows how to compile and link applications\n");
  3220    fprintf(fmk, 
"# using the ROOT libraries on all supported platforms.\n");
  3221    fprintf(fmk, 
"#\n");
  3222    fprintf(fmk, 
"# Copyright (c) 2000 Rene Brun and Fons Rademakers\n");
  3223    fprintf(fmk, 
"#\n");
  3224    fprintf(fmk, 
"# Author: this makefile has been automatically generated via TFile::MakeProject\n");
  3226    fprintf(fmk, 
"include Makefile.arch\n");
  3228    fprintf(fmk, 
"#------------------------------------------------------------------------------\n");
  3230    fprintf(fmk, 
"PACKO        = %sProjectSource.$(ObjSuf)\n", pack);
  3231    fprintf(fmk, 
"PACKS        = %sProjectSource.$(SrcSuf) %sProjectDict.$(SrcSuf)\n", pack, pack);
  3232    fprintf(fmk, 
"PACKSO       = lib%s.$(DllSuf)\n", pack);
  3234    fprintf(fmk, 
"ifeq ($(PLATFORM),win32)\n");
  3235    fprintf(fmk, 
"PACKLIB      = lib%s.lib\n", pack);
  3236    fprintf(fmk, 
"else\n");
  3237    fprintf(fmk, 
"PACKLIB      = $(PACKSO)\n");
  3238    fprintf(fmk, 
"endif\n");
  3240    fprintf(fmk, 
"OBJS          = $(PACKO)\n");
  3242    fprintf(fmk, 
"PROGRAMS      =\n");
  3244    fprintf(fmk, 
"#------------------------------------------------------------------------------\n");
  3246    fprintf(fmk, 
".SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf)\n");
  3248    fprintf(fmk, 
"all:            $(PACKLIB)\n");
  3250    fprintf(fmk, 
"$(PACKSO):     $(PACKO)\n");
  3251    fprintf(fmk, 
"ifeq ($(ARCH),aix)\n");
  3252    fprintf(fmk, 
"\t\t/usr/ibmcxx/bin/makeC++SharedLib $(OutPutOpt) $@ $(LIBS) -p 0 $^\n");
  3253    fprintf(fmk, 
"else\n");
  3254    fprintf(fmk, 
"ifeq ($(ARCH),aix5)\n");
  3255    fprintf(fmk, 
"\t\t/usr/vacpp/bin/makeC++SharedLib $(OutPutOpt) $@ $(LIBS) -p 0 $^\n");
  3256    fprintf(fmk, 
"else\n");
  3257    fprintf(fmk, 
"ifeq ($(PLATFORM),macosx)\n");
  3258    fprintf(fmk, 
"# We need to make both the .dylib and the .so\n");
  3259    fprintf(fmk, 
"\t\t$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(LIBS)\n");
  3260    fprintf(fmk, 
"ifneq ($(subst $(MACOSX_MINOR),,1234),1234)\n");
  3261    fprintf(fmk, 
"ifeq ($(MACOSX_MINOR),4)\n");
  3262    fprintf(fmk, 
"\t\tln -sf $@ $(subst .$(DllSuf),.so,$@)\n");
  3263    fprintf(fmk, 
"else\n");
  3264    fprintf(fmk, 
"\t\t$(LD) -bundle -undefined $(UNDEFOPT) $(LDFLAGS) $^ \\\n");
  3265    fprintf(fmk, 
"\t\t   $(OutPutOpt) $(subst .$(DllSuf),.so,$@)\n");
  3266    fprintf(fmk, 
"endif\n");
  3267    fprintf(fmk, 
"endif\n");
  3268    fprintf(fmk, 
"else\n");
  3269    fprintf(fmk, 
"ifeq ($(PLATFORM),win32)\n");
  3270    fprintf(fmk, 
"\t\tbindexplib $* $^ > $*.def\n");
  3271    fprintf(fmk, 
"\t\tlib -nologo -MACHINE:IX86 $^ -def:$*.def \\\n");
  3272    fprintf(fmk, 
"\t\t   $(OutPutOpt)$(PACKLIB)\n");
  3273    fprintf(fmk, 
"\t\t$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(LIBS) \\\n");
  3274    fprintf(fmk, 
"\t\t   $(OutPutOpt)$@\n");
  3275    fprintf(fmk, 
"else\n");
  3276    fprintf(fmk, 
"\t\t$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(LIBS) $(EXPLLINKLIBS)\n");
  3277    fprintf(fmk, 
"endif\n");
  3278    fprintf(fmk, 
"endif\n");
  3279    fprintf(fmk, 
"endif\n");
  3280    fprintf(fmk, 
"endif\n");
  3281    fprintf(fmk, 
"\t\t@echo \"$@ done\"\n");
  3283    fprintf(fmk, 
"clean:\n");
  3284    fprintf(fmk, 
"\t\t@rm -f $(OBJS) core\n");
  3286    fprintf(fmk, 
"distclean:      clean\n");
  3287    fprintf(fmk, 
"\t\t@rm -f $(PROGRAMS) $(PACKSO) $(PACKLIB) *Dict.* *.def *.exp \\\n");
  3288    fprintf(fmk, 
"\t\t   *.so *.lib *.dll *.d *.log .def so_locations\n");
  3289    fprintf(fmk, 
"\t\t@rm -rf cxx_repository\n");
  3291    fprintf(fmk, 
"# Dependencies\n");
  3293    fprintf(fmk, 
"%sProjectSource.$(ObjSuf): %sProjectHeaders.h %sLinkDef.h %sProjectDict.$(SrcSuf)\n", pack, pack, pack, pack);
  3295    fprintf(fmk, 
"%sProjectDict.$(SrcSuf): %sProjectHeaders.h %sLinkDef.h\n", pack, pack, pack);
  3296    fprintf(fmk, 
"\t\t@echo \"Generating dictionary $@...\"\n");
  3297    fprintf(fmk, 
"\t\t@rootcint -f $@ -c $^\n");
  3299    fprintf(fmk, 
".$(SrcSuf).$(ObjSuf):\n");
  3300    fprintf(fmk, 
"\t\t$(CXX) $(CXXFLAGS) -c $<\n");
  3318    if (!proofinf || (proofinf && strlen(proofinf) <= 0)) {
  3319       Error(
"MakeProjectParProofInf", 
"directory path undefined!");
  3327       Error(
"MakeProjectParProofInf", 
"path '%s' %s", proofinf,
  3328                        ((rcst == 0) ? 
"is not a directory" : 
"does not exist"));
  3333    if (!pack || (pack && strlen(pack) <= 0)) {
  3334       Error(
"MakeProjectParProofInf", 
"package name undefined!");
  3341    path.
Form(
"%s/BUILD.sh", proofinf);
  3343    FILE *
f = fopen(path.
Data(), 
"wb");
  3345    FILE *f = fopen(path.
Data(), 
"w");
  3348       Error(
"MakeProjectParProofInf", 
"cannot create file '%s' (errno: %d)",
  3353    fprintf(f, 
"#! /bin/sh\n");
  3354    fprintf(f, 
"# Build libEvent library.\n");
  3357    fprintf(f, 
"# The environment variables ROOTPROOFLITE and ROOTPROOFCLIENT can be used to\n");
  3358    fprintf(f, 
"# adapt the script to the calling environment\n");
  3360    fprintf(f, 
"# if test ! \"x$ROOTPROOFLITE\" = \"x\"; then\n");
  3361    fprintf(f, 
"#    echo \"event-BUILD: PROOF-Lite node (session has $ROOTPROOFLITE workers)\"\n");
  3362    fprintf(f, 
"# elif test ! \"x$ROOTPROOFCLIENT\" = \"x\"; then\n");
  3363    fprintf(f, 
"#    echo \"event-BUILD: PROOF client\"\n");
  3364    fprintf(f, 
"# else\n");
  3365    fprintf(f, 
"#    echo \"event-BUILD: standard PROOF node\"\n");
  3366    fprintf(f, 
"# fi\n");
  3368    fprintf(f, 
"if [ \"\" = \"clean\" ]; then\n");
  3369    fprintf(f, 
"   make distclean\n");
  3370    fprintf(f, 
"   exit 0\n");
  3373    fprintf(f, 
"make\n");
  3374    fprintf(f, 
"rc=$?\n");
  3375    fprintf(f, 
"echo \"rc=$?\"\n");
  3376    fprintf(f, 
"if [ $? != \"0\" ] ; then\n");
  3377    fprintf(f, 
"   exit 1\n");
  3379    fprintf(f, 
"exit 0\n");
  3385    path.
Form(
"%s/SETUP.C", proofinf);
  3387    f = fopen(path.
Data(), 
"wb");
  3389    f = fopen(path.
Data(), 
"w");
  3392       Error(
"MakeProjectParProofInf", 
"cannot create file '%s' (errno: %d)",
  3397    fprintf(f, 
"Int_t SETUP()\n");
  3401    fprintf(f, 
"// The environment variables ROOTPROOFLITE and ROOTPROOFCLIENT can be used to\n");
  3402    fprintf(f, 
"// adapt the macro to the calling environment\n");
  3404    fprintf(f, 
"//   if (gSystem->Getenv(\"ROOTPROOFLITE\")) {\n");
  3405    fprintf(f, 
"//      Printf(\"event-SETUP: PROOF-Lite node (session has %%s workers)\",\n");
  3406    fprintf(f, 
"//                                   gSystem->Getenv(\"ROOTPROOFLITE\"));\n");
  3407    fprintf(f, 
"//   } else if (gSystem->Getenv(\"ROOTPROOFCLIENT\")) {\n");
  3408    fprintf(f, 
"//      Printf(\"event-SETUP: PROOF client\");\n");
  3409    fprintf(f, 
"//   } else {\n");
  3410    fprintf(f, 
"//      Printf(\"event-SETUP: standard PROOF node\");\n");
  3411    fprintf(f, 
"//   }\n");
  3413    fprintf(f, 
"   if (gSystem->Load(\"lib%s\") == -1)\n", pack);
  3414    fprintf(f, 
"      return -1;\n");
  3415    fprintf(f, 
"   return 0;\n");
  3436    TList *list = GetStreamerInfoList();
  3448    Int_t version = fVersion;
  3449    if (version > 1000000) version -= 1000000;
  3450    if (version < 53419 || (59900 < version && version < 59907)) {
  3465             if (!base) 
continue;
  3477    for (
int mode=0;mode<2; ++mode) {
  3490                if (strcmp(obj->
GetName(),
"listOfRules")==0) {
  3498                      rulelnk = rulelnk->
Next();
  3502                   Warning(
"ReadStreamerInfo",
"%s has a %s in the list of TStreamerInfo.", 
GetName(), info->IsA()->
GetName());
  3512             Warning(
"ReadStreamerInfo",
"The StreamerInfo for %s does not have a list of elements.",info->
GetName());
  3517          Bool_t isstl = element && strcmp(
"This",element->
GetName())==0;
  3519          if ( (!isstl && mode ==0) || (isstl && mode ==1) ) {
  3524             Int_t asize = fClassIndex->GetSize();
  3525             if (uid >= asize && uid <100000) fClassIndex->Set(2*asize);
  3526             if (uid >= 0 && uid < fClassIndex->GetSize()) fClassIndex->fArray[uid] = 1;
  3528                printf(
"ReadStreamerInfo, class:%s, illegal uid=%d\n",info->
GetName(),uid);
  3535    fClassIndex->fArray[0] = 0;
  3553    fgReadInfo = readinfo;
  3571    TList *list = GetStreamerInfoList();
  3586    TObjArray *pids = GetListOfProcessIDs();
  3587    Int_t npids = GetNProcessIDs();
  3588    for (
Int_t i=0;i<npids;i++) {
  3596    snprintf(name,32,
"ProcessID%d",npids);
  3597    this->WriteTObject(pid,name);
  3598    this->IncrementProcessIDs();
  3600       Info(
"WriteProcessID", 
"name=%s, file=%s", name, 
GetName());
  3614    if (!fWritable) 
return;
  3615    if (!fClassIndex) 
return;
  3616    if (fIsPcmFile) 
return; 
  3617    if (fClassIndex->fArray[0] == 0
  3618        && fSeekInfo != 0) {
  3634    listOfRules.
SetName(
"listOfRules");
  3635    std::set<TClass*> classSet;
  3639       Int_t uid = info->GetNumber();
  3640       if (fClassIndex->fArray[uid]) {
  3642          if (
gDebug > 0) printf(
" -class: %s info number %d saved\n",info->GetName(),uid);
  3647          if (clinfo && clinfo->GetSchemaRules()) {
  3648             if ( classSet.find( clinfo ) == classSet.end() ) {
  3649                if (
gDebug > 0) printf(
" -class: %s stored the I/O customization rules\n",info->GetName());
  3655                   rule->AsString(obj->
String());
  3656                   listOfRules.
Add(obj);
  3658                classSet.insert(clinfo);
  3665    fClassIndex->fArray[0] = 2; 
  3669       list.
Add(&listOfRules);
  3673    Int_t compress = fCompress;
  3677    if (fSeekInfo) MakeFree(fSeekInfo,fSeekInfo+fNbytesInfo-1);
  3679    TKey key(&list,
"StreamerInfo",GetBestBuffer(), 
this);
  3680    fKeys->Remove(&key);
  3686    fClassIndex->fArray[0] = 0;
  3687    fCompress = compress;
  3704    if (fgCacheFileDir == 
"") {
  3706                 "you want to read through a cache, but you have no valid cache "  3707                 "directory set - reading remotely");
  3708       ::Info(
"TFile::OpenFromCache", 
"set cache directory using TFile::SetCacheFileDir()");
  3715          if (!fgCacheFileForce)
  3717                       "you want to read through a cache, but you are reading "  3718                       "local files - CACHEREAD disabled");
  3724          cachefilepath = fgCacheFileDir;
  3725          cachefilepath += fileurl.
GetFile();
  3729             ::Warning(
"TFile::OpenFromCache",
"you want to read through a cache, but I "  3730                       "cannot create the directory %s - CACHEREAD disabled",
  3731                       cachefilepathbasedir.
Data());
  3736                cachefilepath += 
"__";
  3740             if (strstr(
name,
"zip=")) {
  3745                Int_t optioncount = 0;
  3754                         if (optioncount!=0) {
  3759                         newoptions += value;
  3769                cachefilepath += 
"__";
  3770                cachefilepath += zipname;
  3783                if (!fgCacheFileDisconnected) {
  3784                   char cacheblock[256];
  3785                   char remotblock[256];
  3788                   cfurl = cachefilepath;
  3789                   cfurl += 
"?filetype=raw";
  3792                   ropt += 
"&filetype=raw";
  3795                   Bool_t forcedcache = fgCacheFileForce;
  3796                   fgCacheFileForce = 
kFALSE;
  3801                   fgCacheFileForce = forcedcache;
  3805                      ::Error(
"TFile::OpenFromCache",
  3806                              "cannot open the cache file to check cache consistency");
  3811                      ::Error(
"TFile::OpenFromCache",
  3812                              "cannot open the remote file to check cache consistency");
  3819                   if ((!cachefile->
ReadBuffer(cacheblock,256)) &&
  3821                      if (memcmp(cacheblock, remotblock, 256)) {
  3822                         ::Warning(
"TFile::OpenFromCache", 
"the header of the cache file "  3823                                   "differs from the remote file - forcing an update");
  3827                      ::Warning(
"TFile::OpenFromCache", 
"the header of the cache and/or "  3828                                "remote file are not readable - forcing an update");
  3840             Bool_t forcedcache = fgCacheFileForce;
  3841             fgCacheFileForce = 
kFALSE;
  3843                ::Warning(
"TFile::OpenFromCache", 
"you want to read through a cache, but I "  3844                          "cannot make a cache copy of %s - CACHEREAD disabled",
  3845                          cachefilepathbasedir.
Data());
  3846                fgCacheFileForce = forcedcache;
  3847                if (fgOpenTimeout != 0)
  3850                fgCacheFileForce = forcedcache;
  3851                ::Info(
"TFile::OpenFromCache", 
"using local cache copy of %s [%s]",
  3855                fileurl.
SetFile(cachefilepath);
  3859                tagfile = cachefilepath;
  3860                tagfile += 
".ROOT.cachefile";
  3914    if (!url || strlen(url) <= 0) {
  3915       ::Error(
"TFile::Open", 
"no url specified");
  3928       TString sto = opts(ito + strlen(
"TIMEOUT="), opts.
Length());
  3933          if (
gDebug > 0) 
::Info(
"TFile::Open", 
"timeout of %d millisec requested", toms);
  3935          sto.
Insert(0, 
"TIMEOUT=");
  3953                   ::Info(
"TFile::Open", 
"waited %d millisec for asynchronous open", toms - xtms);
  3955                   ::Info(
"TFile::Open", 
"timeout option not supported (requires asynchronous"  3960                ::Error(
"TFile::Open", 
"timeout expired while opening '%s'", expandedUrl.
Data());
  3967          ::Warning(
"TFile::Open", 
"incomplete 'TIMEOUT=' option specification - ignored");
  3973    const char *option = opts;
  3976    TString namelist(expandedUrl);
  3993    while (namelist.
Tokenize(n, from, 
"|") && !
f) {
  3996       if (!strcasecmp(option, 
"CACHEREAD") ||
  3997          ((!strcasecmp(option,
"READ") || !option[0]) && fgCacheFileForce)) {
  4003       IncrementFileCounter();
  4010       if (fgAsyncOpenRequests && (fgAsyncOpenRequests->GetSize() > 0)) {
  4011          TIter nxr(fgAsyncOpenRequests);
  4019       if (urlOptions.BeginsWith(
"pmerge") || urlOptions.Contains(
"&pmerge") || urlOptions.Contains(
" pmerge")) {
  4030          if (
type == kLocal) {
  4036                lfname = urlname.
GetUrl();
  4038             f = 
new TFile(lfname.
Data(), option, ftitle, compress);
  4040          } 
else if (
type == kNet) {
  4043             if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TFile", name))) {
  4049          } 
else if (
type == kWeb) {
  4052             if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TFile", name))) {
  4058          } 
else if (
type == kFile) {
  4061             if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TFile", name)) &&
  4066                f = 
new TFile(name.
Data(), option, ftitle, compress);
  4071             if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TFile", name.
Data()))) {
  4093             f = 
TFile::Open( newUrl, option, ftitle, compress );
  4111    if (
type != kLocal && 
type != kFile &&
  4156    if (!url || strlen(url) <= 0) {
  4157       ::Error(
"TFile::AsyncOpen", 
"no url specified");
  4169       TString outf = 
".TFileAsyncOpen_";
  4180    while (namelist.
Tokenize(n, from, 
"|") && !
f) {
  4193          if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TFile", name)) &&
  4194             (!strcmp(h->
GetClass(),
"TXNetFile") || !strcmp(h->
GetClass(),
"TNetXNGFile"))
  4200       if ((h = 
gROOT->GetPluginManager()->FindHandler(
"TFile", name)) &&
  4212       if (!notfound && !f)
  4232       if (!fgAsyncOpenRequests)
  4233          fgAsyncOpenRequests = 
new TList;
  4234       fgAsyncOpenRequests->
Add(fh);
  4252    if (fh && fgAsyncOpenRequests) {
  4255       fgAsyncOpenRequests->
Remove(fh);
  4283 #if defined(R__WINGCC)  4287 #elif defined(R__SEEK64)  4288    return ::open64(pathname, flags, mode);
  4299    if (fd < 0) 
return 0;
  4327 #if defined (R__SEEK64)  4328    return ::lseek64(fd, offset, whence);
  4329 #elif defined(WIN32)  4330    return ::_lseeki64(fd, offset, whence);
  4332    return ::lseek(fd, offset, whence);
  4354    if (TestBit(kDevNull)) 
return 0;
  4359    return ::_commit(fd);
  4368    return fCacheWrite ? fCacheWrite->GetBytesInCache() + fBytesWrite : fBytesWrite;
  4385    return fgBytesWrite;
  4401    return fgReadaheadSize;
  4437          ::Error(
"TFile::SetCacheFileDir", 
"no sufficient permissions on cache directory %s or cannot create it", cachedir);
  4438          fgCacheFileDir = 
"";
  4445    fgCacheFileDir          = cached;
  4446    fgCacheFileDisconnected = operatedisconnected;
  4447    fgCacheFileForce        = forcecacheread;
  4456    return fgCacheFileDir;
  4468    if (fgCacheFileDir == 
"") {
  4478    TString cachetagfile = fgCacheFileDir;
  4479    cachetagfile += 
".tag.ROOT.cache";
  4483       if (lastcleanuptime < cleanupinterval) {
  4484          ::Info(
"TFile::ShrinkCacheFileDir", 
"clean-up is skipped - last cleanup %lu seconds ago - you requested %lu", lastcleanuptime, cleanupinterval);
  4490    cachetagfile += 
"?filetype=raw";
  4493    if (!(tagfile = 
TFile::Open(cachetagfile, 
"RECREATE"))) {
  4494       ::Error(
"TFile::ShrinkCacheFileDir", 
"cannot create the cache tag file %s", cachetagfile.
Data());
  4502 #if defined(R__WIN32)  4503    cmd = 
"echo <TFile::ShrinkCacheFileDir>: cleanup to be implemented";
  4504 #elif defined(R__MACOSX)  4505    cmd.
Format(
"perl -e 'my $cachepath = \"%s\"; my $cachesize = %lld;my $findcommand=\"find $cachepath -type f -exec stat -f \\\"\\%%a::\\%%N::\\%%z\\\" \\{\\} \\\\\\;\";my $totalsize=0;open FIND, \"$findcommand | sort -k 1 |\";while (<FIND>) { my ($accesstime, $filename, $filesize) = split \"::\",$_; $totalsize += $filesize;if ($totalsize > $cachesize) {if ( ( -e \"${filename}.ROOT.cachefile\" ) && ( -e \"${filename}\" ) ) {unlink \"$filename.ROOT.cachefile\";unlink \"$filename\";}}}close FIND;' ", fgCacheFileDir.Data(),shrinksize);
  4507    cmd.
Format(
"perl -e 'my $cachepath = \"%s\"; my $cachesize = %lld;my $findcommand=\"find $cachepath -type f -exec stat -c \\\"\\%%x::\\%%n::\\%%s\\\" \\{\\} \\\\\\;\";my $totalsize=0;open FIND, \"$findcommand | sort -k 1 |\";while (<FIND>) { my ($accesstime, $filename, $filesize) = split \"::\",$_; $totalsize += $filesize;if ($totalsize > $cachesize) {if ( ( -e \"${filename}.ROOT.cachefile\" ) && ( -e \"${filename}\" ) ) {unlink \"$filename.ROOT.cachefile\";unlink \"$filename\";}}}close FIND;' ", fgCacheFileDir.Data(),shrinksize);
  4514       ::Error(
"TFile::ShrinkCacheFileDir", 
"error executing clean-up script");
  4526    UInt_t to = fgOpenTimeout;
  4527    fgOpenTimeout = timeout;
  4536    return fgOpenTimeout;
  4547    fgOnlyStaged = onlystaged;
  4556    return fgOnlyStaged;
  4572    if (!strcmp(u.
GetFile(), fUrl.GetFile())) {
  4574       if (u.
GetPort() == fUrl.GetPort()) {
  4575          if (!strcmp(u.
GetHostFQDN(), fUrl.GetHostFQDN())) {
  4593       return fFile->Matches(url);
  4594    } 
else if (fName.Length() > 0){
  4626    if (re.
Match(name)) {
  4644          forceRemote = 
kTRUE;
  4645       else if (opts.
Contains(
"remote=0"))
  4654             if (fname[0] == 
'/') {
  4656                   lfname.
Form(
"%s%s", prefix->
Data(), fname);
  4659             } 
else if (fname[0] == 
'~' || fname[0] == 
'$') {
  4677             if (localFile && prefix)
  4683       type = (localFile) ? kLocal : type;
  4684    } 
else if (
TPMERegexp(
"^(http[s]?|s3http[s]?|[a]?s3|gs|gshttp[s]?){1}:", 
"i").
Match(name)) {
  4688    } 
else if (!strncmp(name, 
"file:", 5)) {
  4703    if (fgAsyncOpenRequests && (fgAsyncOpenRequests->GetSize() > 0)) {
  4704       TIter nxr(fgAsyncOpenRequests);
  4714    if (of && (of->
GetSize() > 0)) {
  4717       while ((f = (
TFile *)nxf()))
  4723    return kAOSNotAsync;
  4731    if (handle && handle->
fFile) {
  4749    if (fgAsyncOpenRequests && (fgAsyncOpenRequests->GetSize() > 0)) {
  4750       TIter nxr(fgAsyncOpenRequests);
  4761    if (of && (of->
GetSize() > 0)) {
  4764       while ((f = (
TFile *)nxf()))
  4770    return (
const TUrl *)0;
  4778    fprintf(stderr, 
"[TFile::Cp] Total %.02f MB\t|", (
Double_t)size/1048576);
  4780    for (
int l = 0; 
l < 20; 
l++) {
  4782          if (
l < 20*bytesread/size)
  4783             fprintf(stderr, 
"=");
  4784          else if (
l == 20*bytesread/size)
  4785             fprintf(stderr, 
">");
  4786          else if (
l > 20*bytesread/size)
  4787             fprintf(stderr, 
".");
  4789          fprintf(stderr, 
"=");
  4795    fprintf(stderr, 
"| %.02f %% [%.01f MB/s]\r",
  4796            100.0*(size?(bytesread/((
float)size)):1), (lCopy_time>0.)?bytesread/lCopy_time/1048576.:0.);
  4820    if (opt != 
"") opt += 
"&";
  4829    char *copybuffer = 0;
  4831    TFile *sfile = 
this;
  4848       ::Error(
"TFile::Cp", 
"cannot open destination file %s", dst);
  4854    rmdestiferror = 
kTRUE;
  4859    copybuffer = 
new char[buffersize];
  4861       ::Error(
"TFile::Cp", 
"cannot allocate the copy buffer");
  4879       if (progressbar) CpProgress(totalread, filesize,watch);
  4884       if (filesize - b1 > (
Long64_t)buffersize) {
  4885          readsize = buffersize;
  4887          readsize = filesize - b1;
  4890       if (readsize == 0) 
break;
  4896       if ((read <= 0) || readop) {
  4897          ::Error(
"TFile::Cp", 
"cannot read from source file %s. readsize=%lld read=%lld readop=%d",
  4905       if ((written != read) || writeop) {
  4906          ::Error(
"TFile::Cp", 
"cannot write %lld bytes to destination file %s", read, dst);
  4910    } 
while (read == (
Long64_t)buffersize);
  4913       CpProgress(totalread, filesize,watch);
  4914       fprintf(stderr, 
"\n");
  4920    if (dfile) dfile->
Close();
  4922    if (dfile) 
delete dfile;
  4923    if (copybuffer) 
delete[] copybuffer;
  4925    if (rmdestiferror && (success != 
kTRUE))
  4948    if (opt != 
"") opt += 
"&";
  4954    opt += 
TString::Format(
"&cachesz=%d&readaheadsz=%d&rmpolicy=1", 4*buffersize, 2*buffersize);
  4963       ::Error(
"TFile::Cp", 
"cannot open source file %s", src);
  4965       success = sfile->
Cp(dst, progressbar, buffersize);
  4968    if (sfile) sfile->
Close();
  4969    if (sfile) 
delete sfile;
  4978 #if defined(R__neverLINUX) && !defined(R__WINGCC)  4990    int advice = POSIX_FADV_WILLNEED;
  4995       advice = POSIX_FADV_NORMAL;
  4999 #if defined(R__SEEK64)  5000    Int_t result = posix_fadvise64(fD, offset, len, advice);
  5002    Int_t result = posix_fadvise(fD, offset, len, advice);
  5007    return (result != 0);
  5027    if ((cr = GetCacheRead())) {
  5029       return ((bytes < 0) ? 0 : bytes);
 
virtual Bool_t SendFileCloseEvent(TFile *)
 
virtual void Map()
List the contents of a file sequentially. 
 
Describe Streamer information for one class version. 
 
virtual Bool_t SendFileWriteProgress(TFile *)
 
void SetFile(const char *file)
 
virtual Int_t Sizeof() const
Return the size in bytes of the directory header. 
 
static TProcessID * GetPID()
static: returns pointer to current TProcessID 
 
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root. 
 
virtual const char * GetName() const
Returns name of object. 
 
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode. 
 
std::string GetName(const std::string &scope_name)
 
double read(const std::string &file_name)
reading 
 
void frombuf(char *&buf, Bool_t *x)
 
virtual void DrawMap(const char *keys="*", Option_t *option="")
Draw map of objects in this file. 
 
virtual Int_t Recover()
Attempt to recover file if not correctly closed. 
 
static Int_t DecreaseDirLevel()
Decrease the indentation level for ls(). 
 
const char * GetArchiveName() const
 
virtual Int_t SysStat(Int_t fd, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime)
Return file stat information. 
 
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets). 
 
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects. 
 
virtual const char * GetFlagsOpt() const
Return the optimization flags. 
 
int GetErrno()
return errno 
 
Double_t RealTime()
Stop the stopwatch (if it is running) and return the realtime (in seconds) passed between the start a...
 
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector<list<classA,allocator>,allocator> result: 0 : not stl container code of cont...
 
static Bool_t AddRule(const char *rule)
Add a schema evolution customization rule. 
 
virtual Bool_t IsPathLocal(const char *path)
Returns TRUE if the url in 'path' points to the local file system. 
 
void Start(Bool_t reset=kTRUE)
Start the stopwatch. 
 
static Bool_t fgReadInfo
if true (default) ReadStreamerInfo is called when opening a file 
 
virtual Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence)
Interface to system lseek. 
 
EAsyncOpenStatus
Asynchronous open request status. 
 
virtual const char * WorkingDirectory()
Return working directory. 
 
void SetProtocol(const char *proto, Bool_t setDefaultPort=kFALSE)
Set protocol and, optionally, change the port accordingly. 
 
double write(int n, const std::string &file_name, const std::string &vector_type, int compress=0)
writing 
 
virtual void FillBuffer(char *&buffer)
Encode file output buffer. 
 
static std::atomic< Long64_t > fgBytesRead
Number of bytes read by all TFile objects. 
 
void Fatal(const char *location, const char *msgfmt,...)
 
Collectable string class. 
 
virtual Int_t ReOpen(Option_t *mode)
Reopen a file with a different access mode. 
 
Bool_t Matches(const char *name)
Return kTRUE if this async request matches the open request specified by 'url'. 
 
static void IncrementFileCounter()
 
virtual void ReadFree()
Read the FREE linked list. 
 
A cache when reading files over the network. 
 
int GetSplit(const char *type, std::vector< std::string > &output, int &nestedLoc, EModType mode=TClassEdit::kNone)
Stores in output (after emptying it) the split type. 
 
virtual void Flush()
Synchronize a file's in-memory and on-disk states. 
 
virtual void SetCacheRead(TFileCacheRead *cache, TObject *tree=0, ECacheAction action=kDisconnect)
Set a pointer to the read cache. 
 
static TList * fgAsyncOpenRequests
 
T ReadBuffer(TBufferFile *buf)
One of the template functions used to read objects from messages. 
 
virtual void SetOffset(Long64_t offset, ERelativeTo pos=kBeg)
Set position from where to start reading. 
 
This class represents a WWW compatible URL. 
 
virtual char * GetBuffer() const
 
TString & ReplaceAll(const TString &s1, const TString &s2)
 
virtual void RemoveLast()
Remove the last object of the list. 
 
virtual TKey * CreateKey(TDirectory *mother, const TObject *obj, const char *name, Int_t bufsize)
Creates key for object and converts data to buffer. 
 
int GetPathInfo(const char *path, Long_t *id, Long_t *size, Long_t *flags, Long_t *modtime)
Get info about a file: id, size, flags, modification time. 
 
Class holding info about the file being opened. 
 
const char * GetProtocol() const
 
static UInt_t fgOpenTimeout
Timeout for open operations in ms - 0 corresponds to blocking i/o. 
 
virtual const char * GetClassName() const
 
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content. 
 
virtual void Seek(Long64_t offset, ERelativeTo pos=kBeg)
Seek to a specific position in the file. Pos it either kBeg, kCur or kEnd. 
 
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
 
static void SetFileReadCalls(Int_t readcalls=0)
 
virtual Int_t GetEntries() const
 
virtual Bool_t ReadBuffer(char *buf, Int_t len)
Read a buffer from the file. 
 
virtual const char * HomeDirectory(const char *userName=0)
Return the user's home directory. 
 
void ToUpper()
Change string to upper case. 
 
Buffer base class used for serializing objects. 
 
Bool_t HasInterpreterInfo() const
 
virtual Bool_t ChangeDirectory(const char *path)
Change directory. 
 
const char * GetFileAndOptions() const
Return the file and its options (the string specified behind the ?). 
 
static TArchiveFile * Open(const char *url, TFile *file)
Return proper archive file handler depending on passed url. 
 
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
 
virtual Long64_t GetBytesWritten() const
Return the total number of bytes written so far to the file. 
 
Int_t LoadPlugin()
Load the plugin library for this handler. 
 
virtual int Load(const char *module, const char *entry="", Bool_t system=kFALSE)
Load a shared library. 
 
static Bool_t ShrinkCacheFileDir(Long64_t shrinkSize, Long_t cleanupInteval=0)
Try to shrink the cache to the desired size. 
 
virtual Int_t Sizeof() const
Return size of the TNamed part of the TObject. 
 
void ToLower()
Change string to lower-case. 
 
virtual void FillBuffer(char *&buffer)
Encode TNamed into output buffer. 
 
virtual const char * DirName(const char *pathname)
Return the directory name in pathname. 
 
Iterator of object array. 
 
R__EXTERN TVirtualMutex * gROOTMutex
 
Int_t WriteBufferViaCache(const char *buf, Int_t len)
Write buffer via cache. 
 
virtual const char * GetSoExt() const
Get the shared library extension. 
 
const char * GetOptions() const
 
Int_t GenerateHeaderFile(const char *dirname, const TList *subClasses=0, const TList *extrainfos=0)
Generate header file for the class described by this TStreamerInfo the function is called by TFile::M...
 
virtual Int_t Write(const char *name=0, Int_t opt=0, Int_t bufsize=0)
Write all objects in memory to disk. 
 
Type GetType(const std::string &Name)
 
virtual const char * GetFlagsDebug() const
Return the debug flags. 
 
virtual UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)=0
 
TObject * At(Int_t idx) const
 
virtual void IgnoreInterrupt(Bool_t ignore=kTRUE)
If ignore is true ignore the interrupt signal, else restore previous behaviour. 
 
static void SetReadStreamerInfo(Bool_t readinfo=kTRUE)
Specify if the streamerinfos must be read at file opening. 
 
virtual TObject * Clone(const char *newname="") const
Make a clone of an collection using the Streamer facility. 
 
static void SetReadaheadSize(Int_t bufsize=256000)
 
TString & Insert(Ssiz_t pos, const char *s)
 
virtual void FillBuffer(char *&buffer)
Encode directory header into output buffer. 
 
R__EXTERN void **(* gThreadTsd)(void *, Int_t)
 
const char * GetHostFQDN() const
Return fully qualified domain name of url host. 
 
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
Make a file system directory. 
 
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f. 
 
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL. 
 
void SysError(const char *location, const char *msgfmt,...)
 
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name. 
 
void SumBuffer(Int_t bufsize)
Increment statistics for buffer sizes of objects in this file. 
 
virtual void FillBuffer(char *&buffer)
Encode fre structure into output buffer. 
 
static Int_t GetErrno()
Static function returning system error number. 
 
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file. 
 
TFree * AddFree(TList *lfree, Long64_t first, Long64_t last)
Add a new free segment to the list of free segments. 
 
virtual Bool_t Cp(const char *dst, Bool_t progressbar=kTRUE, UInt_t buffersize=1000000)
Allows to copy this file to the dst URL. 
 
static void SetFileBytesWritten(Long64_t bytes=0)
 
const char * GetFile() const
 
virtual Int_t GetErrno() const
Method returning errno. Is overriden in TRFIOFile. 
 
static TObjArray * GetPIDs()
static: returns array of TProcessIDs 
 
virtual const char * GetDirEntry(void *dirp)
Get a directory entry. Returns 0 if no more entries. 
 
virtual int Unlink(const char *name)
Unlink, i.e. remove, a file. 
 
virtual Int_t GetClassVersion() const =0
 
Sequenceable collection abstract base class. 
 
virtual void ResetErrno() const
Method resetting the errno. Is overridden in TRFIOFile. 
 
void Stop()
Stop the stopwatch. 
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
 
virtual FILE * TempFileName(TString &base, const char *dir=0)
Create a secure temporary file by appending a unique 6 letter string to base. 
 
virtual void ReadBuffer(char *&buffer)
Read string from I/O buffer. 
 
static Bool_t GetReadStreamerInfo()
If the streamerinfos are to be read at file opening. 
 
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds. 
 
virtual void SetCompressionLevel(Int_t level=1)
See comments for function SetCompressionSettings. 
 
virtual void MakeProject(const char *dirname, const char *classes="*", Option_t *option="new")
Generate source code necessary to access the objects stored in the file. 
 
virtual void WriteFree()
Write FREE linked list on the file. 
 
static Long64_t GetFileBytesRead()
Static function returning the total number of bytes read from all files. 
 
static EFileType GetType(const char *name, Option_t *option="", TString *prefix=0)
Resolve the file type as a function of the protocol field in 'name'. 
 
void Init(TClassEdit::TInterpreterLookupHelper *helper)
 
static TFile * OpenFromCache(const char *name, Option_t *="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Open a file for reading through the file cache. 
 
void Clear()
Clear string without changing its capacity. 
 
static void GetDateTime(UInt_t datetime, Int_t &date, Int_t &time)
Static function that returns the date and time. 
 
R__EXTERN TVirtualMonitoringWriter * gMonitoringWriter
 
static Long64_t GetFileBytesWritten()
Static function returning the total number of bytes written to all files. 
 
virtual Int_t WriteFile(Int_t cycle=1, TFile *f=0)
Write the encoded object supported by this key. 
 
void Info(const char *location, const char *msgfmt,...)
 
ROOT::ESTLType STLKind(std::string_view type)
Converts STL container name to number. 
 
TString & Append(const char *cs)
 
std::vector< std::vector< double > > Data
 
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string. 
 
const std::string ClassName(PyObject *pyobj)
Retrieve the class name from the given python object (which may be just an instance of the class)...
 
const char * GetAnchor() const
 
void tobuf(char *&buf, Bool_t x)
 
void Continue()
Resume a stopped stopwatch. 
 
Book space in a file, create I/O buffers, to fill them, (un)compress them. 
 
A TProcessID identifies a ROOT job in a unique way in time and space. 
 
virtual void Delete(Option_t *option="")
Delete an object from the file. 
 
virtual TString GetNewUrl()
 
void Error(const char *location, const char *msgfmt,...)
 
R__EXTERN TPluginManager * gPluginMgr
 
virtual Int_t SysWrite(Int_t fd, const void *buf, Int_t len)
Interface to system write. All arguments like in POSIX write(). 
 
void MayNotUse(const char *method)
This function can be used in classes that should override a certain function, but in the inherited cl...
 
virtual Int_t SysSync(Int_t fd)
Interface to system fsync. All arguments like in POSIX fsync(). 
 
virtual void SetUniqueID(UInt_t uid)
Set the unique object id. 
 
Int_t GetRecordHeader(char *buf, Long64_t first, Int_t maxbytes, Int_t &nbytes, Int_t &objlen, Int_t &keylen)
Read the logical record header starting at a certain postion. 
 
virtual void ls(Option_t *option="") const
List Directory contents. 
 
virtual Int_t SysClose(Int_t fd)
Interface to system close. All arguments like in POSIX close(). 
 
static UInt_t GetOpenTimeout()
Returns open timeout (in ms). 
 
virtual void ShowStreamerInfo()
Show the StreamerInfo of all classes written to this file. 
 
virtual Int_t SysRead(Int_t fd, void *buf, Int_t len)
Interface to system read. All arguments like in POSIX read(). 
 
const char * GetOpt() const
 
void ResetErrno()
reset errno 
 
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx. 
 
TClass * GetClass() const
 
R__EXTERN TSystem * gSystem
 
#define R__RWLOCK_RELEASE_READ(rwlock)
 
virtual Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode)
Interface to system open. All arguments like in POSIX open(). 
 
#define R__RWLOCK_RELEASE_WRITE(rwlock)
 
UInt_t GetCheckSum() const
 
virtual void WriteStreamerInfo()
Write the list of TStreamerInfo as a single object in this file The class Streamer description for al...
 
A ROOT file is structured in Directories (like a file system). 
 
virtual const char * GetLibraries(const char *regexp="", const char *option="", Bool_t isRegexp=kTRUE)
Return a space separated list of loaded shared libraries. 
 
virtual Int_t Write(const char *name=0, Int_t opt=0, Int_t bufsiz=0)
Write memory objects to this file. 
 
virtual Int_t GetBytesToPrefetch() const
Max number of bytes to prefetch. 
 
Long_t ExecPlugin(int nargs, const T &... params)
 
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource. 
 
virtual TObject * Remove(TObject *obj)
Remove object from the list. 
 
virtual void Delete(const char *namecycle="")
Delete object namecycle. 
 
void SetBaseCheckSum(UInt_t cs)
 
virtual Bool_t WriteBuffer(const char *buf, Int_t len)
Write a buffer to the file. 
 
const TMatches FindRules(const TString &source) const
Return all the rules that are about the given 'source' class. 
 
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
 
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor. 
 
Int_t IncrementCount()
Increase the reference count to this object. 
 
virtual Bool_t ReadFile()
Read the key structure from the file. 
 
virtual void MakeFree(Long64_t first, Long64_t last)
Mark unused bytes on the file. 
 
virtual void SetFile(TFile *file, TFile::ECacheAction action=TFile::kDisconnect)
Set the file using this cache and reset the current blocks (if any). 
 
static std::atomic< Long64_t > fgFileCounter
Counter for all opened files. 
 
Int_t DecrementCount()
The reference fCount is used to delete the TProcessID in the TFile destructor when fCount = 0...
 
static std::atomic< Long64_t > fgBytesWrite
Number of bytes written by all TFile objects. 
 
static void CpProgress(Long64_t bytesread, Long64_t size, TStopwatch &watch)
Print file copy progress. 
 
static void IndentLevel()
Functions used by ls() to indent an object hierarchy. 
 
static std::atomic< Int_t > fgReadCalls
Number of bytes read from all TFile objects. 
 
The ROOT global object gROOT contains a list of all defined classes. 
 
virtual void Draw(Option_t *option="")
Fill Graphics Structure and Paint. 
 
virtual void Delete(const char *namecycle="")
Delete Objects or/and keys in a directory. 
 
virtual Int_t Exec(const char *shellcmd)
Execute a command. 
 
virtual TList * GetStreamerInfoList()
Read the list of TStreamerInfo objects written to this file. 
 
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing. 
 
void Build(TFile *motherFile=0, TDirectory *motherDir=0)
Initialise directory to defaults. 
 
static Int_t GetFileReadCalls()
Static function returning the total number of read calls from all files. 
 
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname". 
 
virtual const char * GetMakeSharedLib() const
Return the command line use to make a shared library. 
 
void SetName(const char *name)
 
virtual TObject * ReadObjWithBuffer(char *bufferRead)
To read a TObject* from bufferRead. 
 
void Warning(const char *location, const char *msgfmt,...)
 
virtual void Init(Bool_t create)
Initialize a TFile object. 
 
Long64_t GetFirst() const
 
virtual void FreeDirectory(void *dirp)
Free a directory. 
 
Int_t ReadBufferViaCache(char *buf, Int_t len)
Read buffer via cache. 
 
static TFile *& CurrentFile()
Return the current ROOT file if any. 
 
virtual TObjLink * FirstLink() const
 
Option_t * GetOption() const
 
#define R__LOCKGUARD2(mutex)
 
static void GenerateMissingStreamerInfos(TList *extrainfos, TStreamerElement *element)
Generate an empty StreamerInfo for types that are used in templates parameters but are not known in t...
 
virtual Long64_t GetBytesRead() const
 
virtual void ReadBuffer(char *&buffer)
Decode one free structure from input buffer. 
 
static Bool_t fgOnlyStaged
Before the file is opened, it is checked, that the file is staged, if not, the open fails...
 
static Bool_t GetOnlyStaged()
Returns staged only flag. 
 
virtual void ReadStreamerInfo()
Read the list of StreamerInfo from this file. 
 
virtual Int_t RedirectOutput(const char *name, const char *mode="a", RedirectHandle_t *h=0)
Redirect standard output (stdout, stderr) to the specified file. 
 
void CheckInit()
Initialize fObjects. 
 
void SetHost(const char *host)
 
TString & Remove(Ssiz_t pos)
 
TFile()
File default Constructor. 
 
static void Add(TGlobalMappedFunction *gmf)
 
virtual int Chmod(const char *file, UInt_t mode)
Set the file permission bits. Returns -1 in case or error, 0 otherwise. 
 
Version_t GetClassVersion() const
 
void ReadKeyBuffer(char *&buffer)
Decode input buffer. 
 
void SetAnchor(const char *anchor)
 
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString. 
 
virtual const char * GetIncludePath()
Get the list of include path. 
 
TObject * UncheckedAt(Int_t i) const
 
virtual Bool_t IsOpen() const
Returns kTRUE in case file is open and kFALSE if file is not open. 
 
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list. 
 
void Print(std::ostream &os, const OptionType &opt)
 
static Bool_t fgCacheFileForce
Indicates, to force all READ to CACHEREAD. 
 
TFile * fFile
TFile instance of the file being opened. 
 
Int_t Sizeof() const
return number of bytes occupied by this TFree on permanent storage 
 
virtual Int_t ReadKeys(Bool_t forceRead=kTRUE)
Read the linked list of keys. 
 
virtual Long64_t GetSeekKey() const
 
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection. 
 
virtual int Symlink(const char *from, const char *to)
Create a symbolic link from file1 to file2. 
 
static Int_t GetReadaheadSize()
Static function returning the readahead buffer size. 
 
#define R__RWLOCK_ACQUIRE_READ(rwlock)
 
Describe directory structure in memory. 
 
Wrapper around a TObject so it can be stored in a TList. 
 
TFileCacheWrite * GetCacheWrite() const
Return a pointer to the current write cache. 
 
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
 
virtual void Clear(Option_t *option="")
delete the TObjArray pointing to referenced objects this function is called by TFile::Close("R") ...
 
virtual Int_t GetBufferSize() const
 
Int_t IndexOf(const TObject *obj) const
 
virtual Long64_t GetSize() const
Returns the current file size. 
 
The TTimeStamp encapsulates seconds and ns since EPOCH. 
 
static Bool_t fgCacheFileDisconnected
Indicates, we trust in the files in the cache dir without stat on the cached file. 
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
static TProcessID * GetSessionProcessID()
static function returning the pointer to the session TProcessID 
 
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2. 
 
Float_t GetCompressionFactor()
Return the file compression factor. 
 
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name. 
 
virtual void Clear(Option_t *option="")
Remove all objects from the list. 
 
Int_t GetCompress() const
 
virtual Bool_t SendFileReadProgress(TFile *)
 
virtual void Close(Option_t *option="")
Delete all objects from memory and directory structure itself. 
 
Int_t Match(const TString &s, UInt_t start=0)
Runs a match on s against the regex 'this' was created with. 
 
virtual void AddAfter(const TObject *after, TObject *obj)
Insert object after object after in the list. 
 
const TList * GetStreamerInfoCache()
Returns the cached list of StreamerInfos used in this file. 
 
Mother of all ROOT objects. 
 
TObjArray * GetElements() const
 
Bool_t FlushWriteCache()
Flush the write cache if active. 
 
static Bool_t SetOnlyStaged(Bool_t onlystaged)
Sets only staged flag. 
 
virtual void Paint(Option_t *option="")
Paint all objects in the file. 
 
virtual void SetCompressionSettings(Int_t settings=1)
Used to specify the compression level and algorithm. 
 
TObject * GetObject() const
 
static TString fgCacheFileDir
Directory where to locally stage files. 
 
static Int_t IncreaseDirLevel()
Increase the indentation level for ls(). 
 
Int_t GetClassVersion() const
 
virtual const TUrl * GetEndpointUrl() const
 
static TString UpdateAssociativeToVector(const char *name)
If we have a map, multimap, set or multiset, plus unordered partners, and the key is a class...
 
RooCmdArg Save(Bool_t flag=kTRUE)
 
void BuildCheck(TFile *file=0)
Check if built and consistent with the class dictionary. 
 
virtual ~TFile()
File destructor. 
 
Bool_t R_ISDIR(Int_t mode)
 
static TFileOpenHandle * AsyncOpen(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Submit an asynchronous open request. 
 
static Bool_t SetCacheFileDir(const char *cacheDir, Bool_t operateDisconnected=kTRUE, Bool_t forceCacheread=kFALSE)
Sets the directory where to locally stage/cache remote files. 
 
virtual void Add(TObject *obj)
 
Int_t MakeProjectParProofInf(const char *packname, const char *proofinfdir)
Create BUILD.sh and SETUP.C under 'proofinf' for PAR package 'pack'. 
 
Wrapper for PCRE library (Perl Compatible Regular Expressions). 
 
virtual void ShowOutput(RedirectHandle_t *h)
Display the content associated with the redirection described by the opaque handle 'h'...
 
virtual void Print(Option_t *option="") const
Print all objects in the file. 
 
virtual UShort_t WriteProcessID(TProcessID *pid)
Check if the ProcessID pidd is already in the file, if not, add it and return the index number in the...
 
virtual Bool_t ReadBuffers(char *buf, Long64_t *pos, Int_t *len, Int_t nbuf)
Read the nbuf blocks described in arrays pos and len. 
 
void SetOptions(const char *opt)
 
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
 
virtual Int_t Sizeof() const
Return the size in bytes of the file header. 
 
static UInt_t SetOpenTimeout(UInt_t timeout)
Sets open timeout time (in ms). Returns previous timeout value. 
 
Int_t GetEntries() const
Return the number of objects in array (i.e. 
 
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file. 
 
virtual void * OpenDirectory(const char *name)
Open a directory. Returns 0 if directory does not exist. 
 
virtual void SetCompressionAlgorithm(Int_t algorithm=0)
See comments for function SetCompressionSettings. 
 
Int_t Atoi() const
Return integer value of string. 
 
#define R__RWLOCK_ACQUIRE_WRITE(rwlock)
 
TFileCacheRead * GetCacheRead(TObject *tree=0) const
Return a pointer to the current read cache. 
 
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e. 
 
static void ResetErrno()
Static function resetting system error number. 
 
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any. 
 
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~. 
 
static Int_t fgReadaheadSize
Readahead buffer size. 
 
virtual void WriteHeader()
Write File Header. 
 
Bool_t IsWritable() const
 
TFileOpenHandle * fAsyncHandle
!For proper automatic cleanup 
 
virtual void Close(Option_t *option="")
Close out any threads or asynchronous fetches used by the underlying implementation. 
 
virtual const char * GetName() const
Returns name of object. 
 
virtual Int_t GetSize() const
 
Abstract Interface class describing Streamer information for one class. 
 
static void SetFileBytesRead(Long64_t bytes=0)
 
virtual void ls(Option_t *option="") const
List file contents. 
 
static Long64_t GetFileCounter()
 
virtual void SetCacheWrite(TFileCacheWrite *cache)
Set a pointer to the write cache. 
 
virtual const char * GetObjExt() const
Get the object file extension. 
 
static const char * GetCacheFileDir()
Get the directory where to locally stage/cache remote files. 
 
virtual TProcessID * ReadProcessID(UShort_t pidf)
The TProcessID with number pidf is read from this file. 
 
A cache when writing files over the network. 
 
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0
 
Int_t GetBestBuffer() const
Return the best buffer size of objects on this file. 
 
virtual const char * GetTitle() const
Returns title of object. 
 
Int_t MakeProjectParMake(const char *packname, const char *filename)
Create makefile at 'filemake' for PAR package 'pack'. 
 
virtual Bool_t ReadBufferAsync(Long64_t offs, Int_t len)
 
virtual void Close(Option_t *option="")
Close a file. 
 
virtual Bool_t Matches(const char *name)
Return kTRUE if 'url' matches the coordinates of this file. 
 
const char * Data() const
 
Array of chars or bytes (8 bits per element). 
 
ECacheAction
TTreeCache flushing semantics. 
 
const char * GetClass() const
 
virtual EAsyncOpenStatus GetAsyncOpenStatus()