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") &&
450 fRealName = GetName();
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());
571 Info(
"~TFile",
"dtor called for %s [%lx]", GetName(),(
Long_t)
this);
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)
610 if (!strchr(GetName(),
'#'))
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)) {
667 Error(
"Init",
"%s not a ROOT file", GetName());
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)",
702 GetName(),fBEGIN,fEND);
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)",
723 GetName(),fBEGIN+nbytes,fEND);
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)",
734 GetName(),fBEGIN,nbytes);
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) {
786 Error(
"Init",
"cannot stat the file %s", GetName());
795 if (fSeekKeys > fBEGIN && fEND <= size) {
803 Error(
"Init",
"file %s has no keys", GetName());
807 }
else if ((fBEGIN+nbytes == fEND) && (fEND == size)) {
809 Warning(
"Init",
"file %s has no keys", GetName());
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",
819 GetName(), size, fEND);
824 Warning(
"Init",
"file %s probably not closed, " 825 "trying to recover", GetName());
827 Warning(
"Init",
"file %s probably not closed", 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);
1092 SysError(
"Flush",
"error flushing file %s", GetName());
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",
1369 std::cout <<
ClassName()<<
"**\t\t"<<GetName()<<
"\t"<<GetTitle()<<std::endl;
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)
1574 SysError(
"ReadBuffer",
"error reading from file %s", GetName());
1578 Error(
"ReadBuffer",
"error reading all requested bytes from file %s, got %ld of %d",
1579 GetName(), (
Long_t)siz, len);
1606 if ((st = ReadBufferViaCache(buf, len))) {
1617 while ((siz = SysRead(fD, buf, len)) < 0 &&
GetErrno() == EINTR)
1621 SysError(
"ReadBuffer",
"error reading from file %s", GetName());
1625 Error(
"ReadBuffer",
"error reading all requested bytes from file %s, got %ld of %d",
1626 GetName(), (
Long_t)siz, len);
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;
1959 Info(
"Recover",
"%s, recovered key %s:%s at address %lld",GetName(),key->
GetClassName(),key->
GetName(),idcur);
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",
2125 offset, GetName(), retpos);
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)) {
2272 Warning(
"Write",
"file %s not opened in write mode", GetName());
2278 if (!GetTitle() || strlen(GetTitle()) == 0)
2279 Info(
"Write",
"writing name = %s", GetName());
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);
2326 SysError(
"WriteBuffer",
"error writing to file %s (%ld)", GetName(), (
Long_t)siz);
2330 SetBit(kWriteError);
2331 Error(
"WriteBuffer",
"error writing all requested bytes to file %s, wrote %ld of %d",
2332 GetName(), (
Long_t)siz, len);
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);
2384 while ((afree = (
TFree*) next())) {
2385 nbytes += afree->
Sizeof();
2387 if (!nbytes)
return;
2389 TKey *key =
new TKey(fName,fTitle,IsA(),nbytes,
this);
2395 char *start = buffer;
2398 while ((afree = (
TFree*) next())) {
2401 if ( (buffer-start)!=nbytes ) {
2404 memset(buffer,0,nbytes-(buffer-start));
2419 if (lastfree) fEND = lastfree->
GetFirst();
2420 const char *root =
"root";
2421 char *psave =
new char[fBEGIN];
2422 char *buffer = psave;
2423 Int_t nfree = fFree->GetSize();
2424 memcpy(buffer, root, 4); buffer += 4;
2425 Int_t version = fVersion;
2426 if (version <1000000 && fEND > kStartBigFile) {version += 1000000; fUnits = 8;}
2427 tobuf(buffer, version);
2429 if (version < 1000000) {
2432 tobuf(buffer, fNbytesFree);
2433 tobuf(buffer, nfree);
2434 tobuf(buffer, fNbytesName);
2435 tobuf(buffer, fUnits);
2436 tobuf(buffer, fCompress);
2438 tobuf(buffer, fNbytesInfo);
2440 tobuf(buffer, fEND);
2441 tobuf(buffer, fSeekFree);
2442 tobuf(buffer, fNbytesFree);
2443 tobuf(buffer, nfree);
2444 tobuf(buffer, fNbytesName);
2445 tobuf(buffer, fUnits);
2446 tobuf(buffer, fCompress);
2447 tobuf(buffer, fSeekInfo);
2448 tobuf(buffer, fNbytesInfo);
2450 fUUID.FillBuffer(buffer);
2451 Int_t nbytes = buffer - psave;
2453 WriteBuffer(psave, nbytes);
2542 path +=
"/PROOF-INF";
2544 const char *afile = 0;
2547 if (strcmp(afile,
".") == 0)
continue;
2548 if (strcmp(afile,
"..") == 0)
continue;
2549 filepath.
Form(
"%s/%s", path.
Data(), afile);
2551 Warning(
"MakeProject",
"1: problems unlinking '%s' ('%s', '%s')", filepath.
Data(), path.
Data(), afile);
2558 if (strcmp(afile,
".") == 0)
continue;
2559 if (strcmp(afile,
"..") == 0)
continue;
2560 filepath.
Form(
"%s/%s", path.
Data(), afile);
2562 Warning(
"MakeProject",
"2: problems unlinking '%s' ('%s', '%s')", filepath.
Data(), path.
Data(), afile);
2566 Warning(
"MakeProject",
"problems unlinking '%s'", path.
Data());
2570 path.
Form(
"%s/%s/PROOF-INF", pardir.
Data(), parname.
Data());
2572 Error(
"MakeProject",
"problems creating '%s'", path.
Data());
2587 }
else if (opt.
Contains(
"recreate")) {
2591 Error(
"MakeProject",
"cannot create directory '%s'",dirname);
2598 if (afile == 0)
break;
2599 if (strcmp(afile,
".") == 0)
continue;
2600 if (strcmp(afile,
"..") == 0)
continue;
2601 dirpath.
Form(
"%s/%s",dirname,afile);
2609 Error(
"MakeProject",
"cannot create directory %s, already existing",dirname);
2614 Error(
"MakeProject",
"cannot create directory '%s'",dirname);
2626 TList *filelist = (
TList*)GetStreamerInfoCache();
2627 if (filelist) filelist = (
TList*)filelist->
Clone();
2628 if (filelist == 0) {
2629 Error(
"MakeProject",
"file %s has no StreamerInfo", GetName());
2633 TString clean_dirname(dirname);
2634 if (makepar) clean_dirname.
Form(
"%s/%s", pardir.
Data(), parname.
Data());
2635 if (clean_dirname[clean_dirname.
Length()-1]==
'/') {
2637 }
else if (clean_dirname[clean_dirname.
Length()-1]==
'\\') {
2639 if (clean_dirname[clean_dirname.
Length()-1]==
'\\') {
2644 if (makepar) subdirname = parname;
2645 if (subdirname ==
"") {
2646 Error(
"MakeProject",
"Directory name must not be empty.");
2651 TString spath; spath.
Form(
"%s/%sProjectSource.cxx",clean_dirname.
Data(),subdirname.Data());
2652 FILE *sfp = fopen(spath.
Data(),
"w");
2654 Error(
"MakeProject",
"Unable to create the source file %s.",spath.
Data());
2657 fprintf(sfp,
"namespace std {}\nusing namespace std;\n");
2658 fprintf(sfp,
"#include \"%sProjectHeaders.h\"\n\n",subdirname.Data() );
2659 if (!genreflex) fprintf(sfp,
"#include \"%sLinkDef.h\"\n\n",subdirname.Data() );
2660 fprintf(sfp,
"#include \"%sProjectDict.cxx\"\n\n",subdirname.Data() );
2661 fprintf(sfp,
"struct DeleteObjectFunctor {\n");
2662 fprintf(sfp,
" template <typename T>\n");
2663 fprintf(sfp,
" void operator()(const T *ptr) const {\n");
2664 fprintf(sfp,
" delete ptr;\n");
2665 fprintf(sfp,
" }\n");
2666 fprintf(sfp,
" template <typename T, typename Q>\n");
2667 fprintf(sfp,
" void operator()(const std::pair<T,Q> &) const {\n");
2668 fprintf(sfp,
" // Do nothing\n");
2669 fprintf(sfp,
" }\n");
2670 fprintf(sfp,
" template <typename T, typename Q>\n");
2671 fprintf(sfp,
" void operator()(const std::pair<T,Q*> &ptr) const {\n");
2672 fprintf(sfp,
" delete ptr.second;\n");
2673 fprintf(sfp,
" }\n");
2674 fprintf(sfp,
" template <typename T, typename Q>\n");
2675 fprintf(sfp,
" void operator()(const std::pair<T*,Q> &ptr) const {\n");
2676 fprintf(sfp,
" delete ptr.first;\n");
2677 fprintf(sfp,
" }\n");
2678 fprintf(sfp,
" template <typename T, typename Q>\n");
2679 fprintf(sfp,
" void operator()(const std::pair<T*,Q*> &ptr) const {\n");
2680 fprintf(sfp,
" delete ptr.first;\n");
2681 fprintf(sfp,
" delete ptr.second;\n");
2682 fprintf(sfp,
" }\n");
2683 fprintf(sfp,
"};\n\n");
2690 TIter flnext(filelist);
2697 if (strstr(info->
GetName(),
"@@")) {
2714 for(
auto rule : rules) {
2715 if( rule->IsRenameRule() || rule->IsAliasRule() )
2718 if ( rule->HasTarget( el->GetName()) && rule->GetAttributes()[0] != 0 ) {
2719 TString attr( rule->GetAttributes() );
2721 if (attr.Contains(
"owner")) {
2722 if (attr.Contains(
"notowner")) {
2745 TIter nextextra(&extrainfos);
2748 filelist->
Add(info);
2759 TIter subnext(list);
2771 if ( (sublen > len) && subinfo->
GetName()[len+1]==
':' 2774 subClasses.
Add(subinfo);
2779 subClasses.
Clear(
"nodelete");
2782 path.
Form(
"%s/%sProjectHeaders.h",clean_dirname.
Data(),subdirname.Data());
2783 FILE *allfp = fopen(path,
"a");
2785 Error(
"MakeProject",
"Cannot open output file:%s\n",path.
Data());
2787 fprintf(allfp,
"#include \"%sProjectInstances.h\"\n", subdirname.Data());
2791 printf(
"MakeProject has generated %d classes in %s\n",ngener,clean_dirname.
Data());
2794 if (!opt.
Contains(
"+") && !makepar) {
2807 path.
Form(
"%s/makep.cmd",clean_dirname.
Data());
2809 path.
Form(
"%s/MAKEP",clean_dirname.
Data());
2812 fpMAKE = fopen(path,
"wb");
2814 fpMAKE = fopen(path,
"w");
2817 Error(
"MakeProject",
"cannot open file %s", path.
Data());
2827 path.
Form(
"%s/%sProjectInstances.h",clean_dirname.
Data(),subdirname.Data());
2829 ifp = fopen(path,
"wb");
2831 ifp = fopen(path,
"w");
2834 Error(
"MakeProject",
"cannot open path file %s", path.
Data());
2844 fprintf(fpMAKE,
"genreflex %sProjectHeaders.h -o %sProjectDict.cxx --comments --iocomments %s ",subdirname.Data(),subdirname.Data(),
gSystem->
GetIncludePath());
2845 path.
Form(
"%s/%sSelection.xml",clean_dirname.
Data(),subdirname.Data());
2848 path.
Form(
"%s/%sLinkDef.h",clean_dirname.
Data(),subdirname.Data());
2851 path.
Form(
"%s/%sLinkDef.h",clean_dirname.
Data(),subdirname.Data());
2857 FILE *fp = fopen(path,
"wb");
2859 FILE *fp = fopen(path,
"w");
2862 Error(
"MakeProject",
"cannot open path file %s", path.
Data());
2871 fprintf(fp,
"<lcgdict>\n");
2874 fprintf(fp,
"#ifdef __CINT__\n");
2892 for(
auto rule : rules) {
2895 rule->AsString(strrule,
"x");
2898 selections.
Append(strrule);
2901 rule->AsString(strrule);
2902 if (strncmp(strrule.
Data(),
"type=",5)==0) {
2905 fprintf(fp,
"#pragma %s;\n",strrule.
Data());
2912 std::vector<std::string> inside;
2919 switch ( stlkind ) {
2923 what =
"std::pair<";
2927 if (what[what.
Length()-1]==
'>') {
2933 tmp.
Form(
"<class name=\"%s\" />\n",what.
Data());
2937 tmp.
Form(
"template class %s;\n",what.
Data());
2945 fprintf(fp,
"#pragma link C++ class %s+;\n",what.
Data());
2951 if (strncmp(key->
GetName(),
"pair<",strlen(
"pair<"))==0) {
2953 tmp.
Form(
"<class name=\"%s\" />\n",key->
GetName());
2963 fprintf(fp,
"#pragma link C++ class %s+;\n",key->
GetName());
2974 tmp.
Form(
"<class name=\"%s\" />\n",
what.Data());
2978 if (
what[
what.Length()-1] ==
'>') {
2979 tmp.
Form(
"template class %s;\n",
what.Data());
2985 what.ReplaceAll(
"std::",
"");
2986 fprintf(fp,
"#pragma link C++ class %s+;\n",
what.Data());
2994 if (element->GetClass() && !element->GetClass()->IsLoaded() && element->GetClass()->GetCollectionProxy()) {
2996 tmp.
Form(
"<class name=\"%s\" />\n",what.
Data());
3000 tmp.
Form(
"template class %s;\n",what.
Data());
3009 fprintf(ifp,
"#ifndef PROJECT_INSTANCES_H\n");
3010 fprintf(ifp,
"#define PROJECT_INSTANCES_H\n");
3011 fprintf(ifp,
"%s",instances.
Data());
3012 fprintf(ifp,
"#endif\n");
3013 fprintf(fp,
"%s",selections.
Data());
3014 fprintf(fp,
"</lcgdict>\n");
3016 fprintf(fp,
"#endif\n");
3037 TString rootbuild = ROOTBUILD;
3046 fprintf(fpMAKE,
"-s %sSelection.xml \n",subdirname.Data());
3048 fprintf(fpMAKE,
"%sProjectHeaders.h ",subdirname.Data());
3049 fprintf(fpMAKE,
"%sLinkDef.h \n",subdirname.Data());
3052 fprintf(fpMAKE,
"%s\n",cmd.
Data());
3054 printf(
"%s/MAKEP file has been generated\n", clean_dirname.
Data());
3062 if (MakeProjectParMake(parname, filemake.
Data()) != 0) {
3063 Error(
"MakeProject",
"problems creating PAR make file '%s'", filemake.
Data());
3073 TString mkarchsrc(
"$(ROOTSYS)/etc/Makefile.arch");
3076 Warning(
"MakeProject",
"problems expanding '%s'", mkarchsrc.
Data());
3079 Error(
"MakeProject",
"problems retrieving '%s' to '%s'", mkarchsrc.
Data(), mkarchdst.
Data());
3087 if (MakeProjectParProofInf(parname, proofinf.
Data()) != 0) {
3088 Error(
"MakeProject",
"problems creating BUILD.sh and/or SETUP.C under '%s'", proofinf.
Data());
3101 chmod(cmod.
Data(), 00700);
3103 Printf(
"Files Makefile, Makefile.arch, PROOF-INF/BUILD.sh and" 3104 " PROOF-INF/SETUP.C have been generated under '%s'", clean_dirname.
Data());
3113 Info(
"MakeProject",
"PAR file %s.par generated", clean_dirname.
Data());
3115 Warning(
"MakeProject",
"problems changing directory back to '%s'", curdir.Data());
3118 Error(
"MakeProject",
"problems changing directory to '%s' - skipping PAR file generation", pardir.
Data());
3121 Warning(
"MakeProject",
"on Windows systems the PAR file cannot be generated out of the package directory!");
3126 if (!makepar && !opt.
Contains(
"nocompilation")) {
3135 chmod(
"makep.cmd",00700);
3140 if (res) printf(
"Shared lib %s has been generated\n",path.
Data());
3145 if (res) printf(
"Shared lib %s has been dynamically linked\n",path.
Data());
3149 extrainfos.
Clear(
"nodelete");
3165 if (!filemake || (filemake && strlen(filemake) <= 0)) {
3166 Error(
"MakeProjectParMake",
"path for output file undefined!");
3171 if (!pack || (pack && strlen(pack) <= 0)) {
3172 Error(
"MakeProjectParMake",
"package name undefined!");
3177 FILE *fmk = fopen(filemake,
"wb");
3179 FILE *fmk = fopen(filemake,
"w");
3187 fprintf(fmk,
"# Makefile for the ROOT test programs.\n");
3188 fprintf(fmk,
"# This Makefile shows how to compile and link applications\n");
3189 fprintf(fmk,
"# using the ROOT libraries on all supported platforms.\n");
3190 fprintf(fmk,
"#\n");
3191 fprintf(fmk,
"# Copyright (c) 2000 Rene Brun and Fons Rademakers\n");
3192 fprintf(fmk,
"#\n");
3193 fprintf(fmk,
"# Author: this makefile has been automatically generated via TFile::MakeProject\n");
3195 fprintf(fmk,
"include Makefile.arch\n");
3197 fprintf(fmk,
"#------------------------------------------------------------------------------\n");
3199 fprintf(fmk,
"PACKO = %sProjectSource.$(ObjSuf)\n", pack);
3200 fprintf(fmk,
"PACKS = %sProjectSource.$(SrcSuf) %sProjectDict.$(SrcSuf)\n", pack, pack);
3201 fprintf(fmk,
"PACKSO = lib%s.$(DllSuf)\n", pack);
3203 fprintf(fmk,
"ifeq ($(PLATFORM),win32)\n");
3204 fprintf(fmk,
"PACKLIB = lib%s.lib\n", pack);
3205 fprintf(fmk,
"else\n");
3206 fprintf(fmk,
"PACKLIB = $(PACKSO)\n");
3207 fprintf(fmk,
"endif\n");
3209 fprintf(fmk,
"OBJS = $(PACKO)\n");
3211 fprintf(fmk,
"PROGRAMS =\n");
3213 fprintf(fmk,
"#------------------------------------------------------------------------------\n");
3215 fprintf(fmk,
".SUFFIXES: .$(SrcSuf) .$(ObjSuf) .$(DllSuf)\n");
3217 fprintf(fmk,
"all: $(PACKLIB)\n");
3219 fprintf(fmk,
"$(PACKSO): $(PACKO)\n");
3220 fprintf(fmk,
"ifeq ($(ARCH),aix)\n");
3221 fprintf(fmk,
"\t\t/usr/ibmcxx/bin/makeC++SharedLib $(OutPutOpt) $@ $(LIBS) -p 0 $^\n");
3222 fprintf(fmk,
"else\n");
3223 fprintf(fmk,
"ifeq ($(ARCH),aix5)\n");
3224 fprintf(fmk,
"\t\t/usr/vacpp/bin/makeC++SharedLib $(OutPutOpt) $@ $(LIBS) -p 0 $^\n");
3225 fprintf(fmk,
"else\n");
3226 fprintf(fmk,
"ifeq ($(PLATFORM),macosx)\n");
3227 fprintf(fmk,
"# We need to make both the .dylib and the .so\n");
3228 fprintf(fmk,
"\t\t$(LD) $(SOFLAGS)$@ $(LDFLAGS) $^ $(OutPutOpt) $@ $(LIBS)\n");
3229 fprintf(fmk,
"ifneq ($(subst $(MACOSX_MINOR),,1234),1234)\n");
3230 fprintf(fmk,
"ifeq ($(MACOSX_MINOR),4)\n");
3231 fprintf(fmk,
"\t\tln -sf $@ $(subst .$(DllSuf),.so,$@)\n");
3232 fprintf(fmk,
"else\n");
3233 fprintf(fmk,
"\t\t$(LD) -bundle -undefined $(UNDEFOPT) $(LDFLAGS) $^ \\\n");
3234 fprintf(fmk,
"\t\t $(OutPutOpt) $(subst .$(DllSuf),.so,$@)\n");
3235 fprintf(fmk,
"endif\n");
3236 fprintf(fmk,
"endif\n");
3237 fprintf(fmk,
"else\n");
3238 fprintf(fmk,
"ifeq ($(PLATFORM),win32)\n");
3239 fprintf(fmk,
"\t\tbindexplib $* $^ > $*.def\n");
3240 fprintf(fmk,
"\t\tlib -nologo -MACHINE:IX86 $^ -def:$*.def \\\n");
3241 fprintf(fmk,
"\t\t $(OutPutOpt)$(PACKLIB)\n");
3242 fprintf(fmk,
"\t\t$(LD) $(SOFLAGS) $(LDFLAGS) $^ $*.exp $(LIBS) \\\n");
3243 fprintf(fmk,
"\t\t $(OutPutOpt)$@\n");
3244 fprintf(fmk,
"else\n");
3245 fprintf(fmk,
"\t\t$(LD) $(SOFLAGS) $(LDFLAGS) $^ $(OutPutOpt) $@ $(LIBS) $(EXPLLINKLIBS)\n");
3246 fprintf(fmk,
"endif\n");
3247 fprintf(fmk,
"endif\n");
3248 fprintf(fmk,
"endif\n");
3249 fprintf(fmk,
"endif\n");
3250 fprintf(fmk,
"\t\t@echo \"$@ done\"\n");
3252 fprintf(fmk,
"clean:\n");
3253 fprintf(fmk,
"\t\t@rm -f $(OBJS) core\n");
3255 fprintf(fmk,
"distclean: clean\n");
3256 fprintf(fmk,
"\t\t@rm -f $(PROGRAMS) $(PACKSO) $(PACKLIB) *Dict.* *.def *.exp \\\n");
3257 fprintf(fmk,
"\t\t *.so *.lib *.dll *.d *.log .def so_locations\n");
3258 fprintf(fmk,
"\t\t@rm -rf cxx_repository\n");
3260 fprintf(fmk,
"# Dependencies\n");
3262 fprintf(fmk,
"%sProjectSource.$(ObjSuf): %sProjectHeaders.h %sLinkDef.h %sProjectDict.$(SrcSuf)\n", pack, pack, pack, pack);
3264 fprintf(fmk,
"%sProjectDict.$(SrcSuf): %sProjectHeaders.h %sLinkDef.h\n", pack, pack, pack);
3265 fprintf(fmk,
"\t\t@echo \"Generating dictionary $@...\"\n");
3266 fprintf(fmk,
"\t\t@rootcint -f $@ -c $^\n");
3268 fprintf(fmk,
".$(SrcSuf).$(ObjSuf):\n");
3269 fprintf(fmk,
"\t\t$(CXX) $(CXXFLAGS) -c $<\n");
3287 if (!proofinf || (proofinf && strlen(proofinf) <= 0)) {
3288 Error(
"MakeProjectParProofInf",
"directory path undefined!");
3296 Error(
"MakeProjectParProofInf",
"path '%s' %s", proofinf,
3297 ((rcst == 0) ?
"is not a directory" :
"does not exist"));
3302 if (!pack || (pack && strlen(pack) <= 0)) {
3303 Error(
"MakeProjectParProofInf",
"package name undefined!");
3310 path.
Form(
"%s/BUILD.sh", proofinf);
3312 FILE *
f = fopen(path.
Data(),
"wb");
3314 FILE *f = fopen(path.
Data(),
"w");
3317 Error(
"MakeProjectParProofInf",
"cannot create file '%s' (errno: %d)",
3322 fprintf(f,
"#! /bin/sh\n");
3323 fprintf(f,
"# Build libEvent library.\n");
3326 fprintf(f,
"# The environment variables ROOTPROOFLITE and ROOTPROOFCLIENT can be used to\n");
3327 fprintf(f,
"# adapt the script to the calling environment\n");
3329 fprintf(f,
"# if test ! \"x$ROOTPROOFLITE\" = \"x\"; then\n");
3330 fprintf(f,
"# echo \"event-BUILD: PROOF-Lite node (session has $ROOTPROOFLITE workers)\"\n");
3331 fprintf(f,
"# elif test ! \"x$ROOTPROOFCLIENT\" = \"x\"; then\n");
3332 fprintf(f,
"# echo \"event-BUILD: PROOF client\"\n");
3333 fprintf(f,
"# else\n");
3334 fprintf(f,
"# echo \"event-BUILD: standard PROOF node\"\n");
3335 fprintf(f,
"# fi\n");
3337 fprintf(f,
"if [ \"\" = \"clean\" ]; then\n");
3338 fprintf(f,
" make distclean\n");
3339 fprintf(f,
" exit 0\n");
3342 fprintf(f,
"make\n");
3343 fprintf(f,
"rc=$?\n");
3344 fprintf(f,
"echo \"rc=$?\"\n");
3345 fprintf(f,
"if [ $? != \"0\" ] ; then\n");
3346 fprintf(f,
" exit 1\n");
3348 fprintf(f,
"exit 0\n");
3354 path.
Form(
"%s/SETUP.C", proofinf);
3356 f = fopen(path.
Data(),
"wb");
3358 f = fopen(path.
Data(),
"w");
3361 Error(
"MakeProjectParProofInf",
"cannot create file '%s' (errno: %d)",
3366 fprintf(f,
"Int_t SETUP()\n");
3370 fprintf(f,
"// The environment variables ROOTPROOFLITE and ROOTPROOFCLIENT can be used to\n");
3371 fprintf(f,
"// adapt the macro to the calling environment\n");
3373 fprintf(f,
"// if (gSystem->Getenv(\"ROOTPROOFLITE\")) {\n");
3374 fprintf(f,
"// Printf(\"event-SETUP: PROOF-Lite node (session has %%s workers)\",\n");
3375 fprintf(f,
"// gSystem->Getenv(\"ROOTPROOFLITE\"));\n");
3376 fprintf(f,
"// } else if (gSystem->Getenv(\"ROOTPROOFCLIENT\")) {\n");
3377 fprintf(f,
"// Printf(\"event-SETUP: PROOF client\");\n");
3378 fprintf(f,
"// } else {\n");
3379 fprintf(f,
"// Printf(\"event-SETUP: standard PROOF node\");\n");
3380 fprintf(f,
"// }\n");
3382 fprintf(f,
" if (gSystem->Load(\"lib%s\") == -1)\n", pack);
3383 fprintf(f,
" return -1;\n");
3384 fprintf(f,
" return 0;\n");
3405 TList *list = GetStreamerInfoList();
3413 if (
gDebug > 0)
Info(
"ReadStreamerInfo",
"called for file %s",GetName());
3417 Int_t version = fVersion;
3418 if (version > 1000000) version -= 1000000;
3419 if (version < 53419 || (59900 < version && version < 59907)) {
3434 if (!base)
continue;
3446 for (
int mode=0;mode<2; ++mode) {
3459 if (strcmp(obj->
GetName(),
"listOfRules")==0) {
3467 rulelnk = rulelnk->
Next();
3471 Warning(
"ReadStreamerInfo",
"%s has a %s in the list of TStreamerInfo.", GetName(), info->IsA()->
GetName());
3481 Warning(
"ReadStreamerInfo",
"The StreamerInfo for %s does not have a list of elements.",info->
GetName());
3486 Bool_t isstl = element && strcmp(
"This",element->
GetName())==0;
3488 if ( (!isstl && mode ==0) || (isstl && mode ==1) ) {
3493 Int_t asize = fClassIndex->GetSize();
3494 if (uid >= asize && uid <100000) fClassIndex->Set(2*asize);
3495 if (uid >= 0 && uid < fClassIndex->GetSize()) fClassIndex->fArray[uid] = 1;
3497 printf(
"ReadStreamerInfo, class:%s, illegal uid=%d\n",info->
GetName(),uid);
3504 fClassIndex->fArray[0] = 0;
3522 fgReadInfo = readinfo;
3540 TList *list = GetStreamerInfoList();
3555 TObjArray *pids = GetListOfProcessIDs();
3556 Int_t npids = GetNProcessIDs();
3557 for (
Int_t i=0;i<npids;i++) {
3565 snprintf(name,32,
"ProcessID%d",npids);
3566 this->WriteTObject(pid,name);
3567 this->IncrementProcessIDs();
3569 Info(
"WriteProcessID",
"name=%s, file=%s", name, GetName());
3583 if (!fWritable)
return;
3584 if (!fClassIndex)
return;
3585 if (fIsPcmFile)
return;
3587 if (fClassIndex->fArray[0] == 0)
return;
3588 if (
gDebug > 0)
Info(
"WriteStreamerInfo",
"called for file %s",GetName());
3598 listOfRules.
SetName(
"listOfRules");
3599 std::set<TClass*> classSet;
3603 Int_t uid = info->GetNumber();
3604 if (fClassIndex->fArray[uid]) {
3606 if (
gDebug > 0) printf(
" -class: %s info number %d saved\n",info->GetName(),uid);
3611 if (clinfo && clinfo->GetSchemaRules()) {
3612 if ( classSet.find( clinfo ) == classSet.end() ) {
3613 if (
gDebug > 0) printf(
" -class: %s stored the I/O customization rules\n",info->GetName());
3619 rule->AsString(obj->
String());
3620 listOfRules.
Add(obj);
3622 classSet.insert(clinfo);
3629 fClassIndex->fArray[0] = 2;
3633 list.
Add(&listOfRules);
3637 Int_t compress = fCompress;
3641 if (fSeekInfo) MakeFree(fSeekInfo,fSeekInfo+fNbytesInfo-1);
3643 TKey key(&list,
"StreamerInfo",GetBestBuffer(),
this);
3644 fKeys->Remove(&key);
3650 fClassIndex->fArray[0] = 0;
3651 fCompress = compress;
3668 if (fgCacheFileDir ==
"") {
3670 "you want to read through a cache, but you have no valid cache " 3671 "directory set - reading remotely");
3672 ::Info(
"TFile::OpenFromCache",
"set cache directory using TFile::SetCacheFileDir()");
3679 if (!fgCacheFileForce)
3681 "you want to read through a cache, but you are reading " 3682 "local files - CACHEREAD disabled");
3688 cachefilepath = fgCacheFileDir;
3689 cachefilepath += fileurl.
GetFile();
3693 ::Warning(
"TFile::OpenFromCache",
"you want to read through a cache, but I " 3694 "cannot create the directory %s - CACHEREAD disabled",
3695 cachefilepathbasedir.
Data());
3700 cachefilepath +=
"__";
3704 if (strstr(
name,
"zip=")) {
3709 Int_t optioncount = 0;
3718 if (optioncount!=0) {
3723 newoptions += value;
3733 cachefilepath +=
"__";
3734 cachefilepath += zipname;
3747 if (!fgCacheFileDisconnected) {
3748 char cacheblock[256];
3749 char remotblock[256];
3752 cfurl = cachefilepath;
3753 cfurl +=
"?filetype=raw";
3756 ropt +=
"&filetype=raw";
3759 Bool_t forcedcache = fgCacheFileForce;
3760 fgCacheFileForce =
kFALSE;
3765 fgCacheFileForce = forcedcache;
3769 ::Error(
"TFile::OpenFromCache",
3770 "cannot open the cache file to check cache consistency");
3775 ::Error(
"TFile::OpenFromCache",
3776 "cannot open the remote file to check cache consistency");
3783 if ((!cachefile->
ReadBuffer(cacheblock,256)) &&
3785 if (memcmp(cacheblock, remotblock, 256)) {
3786 ::Warning(
"TFile::OpenFromCache",
"the header of the cache file " 3787 "differs from the remote file - forcing an update");
3791 ::Warning(
"TFile::OpenFromCache",
"the header of the cache and/or " 3792 "remote file are not readable - forcing an update");
3804 Bool_t forcedcache = fgCacheFileForce;
3805 fgCacheFileForce =
kFALSE;
3807 ::Warning(
"TFile::OpenFromCache",
"you want to read through a cache, but I " 3808 "cannot make a cache copy of %s - CACHEREAD disabled",
3809 cachefilepathbasedir.
Data());
3810 fgCacheFileForce = forcedcache;
3811 if (fgOpenTimeout != 0)
3814 fgCacheFileForce = forcedcache;
3815 ::Info(
"TFile::OpenFromCache",
"using local cache copy of %s [%s]",
3819 fileurl.
SetFile(cachefilepath);
3823 tagfile = cachefilepath;
3824 tagfile +=
".ROOT.cachefile";
3878 if (!url || strlen(url) <= 0) {
3879 ::Error(
"TFile::Open",
"no url specified");
3892 TString sto = opts(ito + strlen(
"TIMEOUT="), opts.
Length());
3897 if (
gDebug > 0)
::Info(
"TFile::Open",
"timeout of %d millisec requested", toms);
3899 sto.
Insert(0,
"TIMEOUT=");
3917 ::Info(
"TFile::Open",
"waited %d millisec for asynchronous open", toms - xtms);
3919 ::Info(
"TFile::Open",
"timeout option not supported (requires asynchronous" 3924 ::Error(
"TFile::Open",
"timeout expired while opening '%s'", expandedUrl.
Data());
3931 ::Warning(
"TFile::Open",
"incomplete 'TIMEOUT=' option specification - ignored");
3937 const char *option = opts;
3940 TString namelist(expandedUrl);
3957 while (namelist.
Tokenize(n, from,
"|") && !
f) {
3960 if (!strcasecmp(option,
"CACHEREAD") ||
3961 ((!strcasecmp(option,
"READ") || !option[0]) && fgCacheFileForce)) {
3967 IncrementFileCounter();
3974 if (fgAsyncOpenRequests && (fgAsyncOpenRequests->GetSize() > 0)) {
3975 TIter nxr(fgAsyncOpenRequests);
3983 if (urlOptions.BeginsWith(
"pmerge") || urlOptions.Contains(
"&pmerge") || urlOptions.Contains(
" pmerge")) {
3994 if (
type == kLocal) {
4000 lfname = urlname.
GetUrl();
4002 f =
new TFile(lfname.
Data(), option, ftitle, compress);
4004 }
else if (
type == kNet) {
4007 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TFile", name))) {
4013 }
else if (
type == kWeb) {
4016 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TFile", name))) {
4022 }
else if (
type == kFile) {
4025 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TFile", name)) &&
4030 f =
new TFile(name.
Data(), option, ftitle, compress);
4035 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TFile", name.
Data()))) {
4057 f =
TFile::Open( newUrl, option, ftitle, compress );
4075 if (
type != kLocal &&
type != kFile &&
4120 if (!url || strlen(url) <= 0) {
4121 ::Error(
"TFile::AsyncOpen",
"no url specified");
4133 TString outf =
".TFileAsyncOpen_";
4144 while (namelist.
Tokenize(n, from,
"|") && !
f) {
4157 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TFile", name)) &&
4158 (!strcmp(h->
GetClass(),
"TXNetFile") || !strcmp(h->
GetClass(),
"TNetXNGFile"))
4164 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TFile", name)) &&
4176 if (!notfound && !f)
4196 if (!fgAsyncOpenRequests)
4197 fgAsyncOpenRequests =
new TList;
4198 fgAsyncOpenRequests->
Add(fh);
4216 if (fh && fgAsyncOpenRequests) {
4219 fgAsyncOpenRequests->
Remove(fh);
4247 #if defined(R__WINGCC) 4251 #elif defined(R__SEEK64) 4252 return ::open64(pathname, flags, mode);
4263 if (fd < 0)
return 0;
4291 #if defined (R__SEEK64) 4292 return ::lseek64(fd, offset, whence);
4293 #elif defined(WIN32) 4294 return ::_lseeki64(fd, offset, whence);
4296 return ::lseek(fd, offset, whence);
4318 if (TestBit(kDevNull))
return 0;
4323 return ::_commit(fd);
4332 return fCacheWrite ? fCacheWrite->GetBytesInCache() + fBytesWrite : fBytesWrite;
4349 return fgBytesWrite;
4365 return fgReadaheadSize;
4401 ::Error(
"TFile::SetCacheFileDir",
"no sufficient permissions on cache directory %s or cannot create it", cachedir);
4402 fgCacheFileDir =
"";
4409 fgCacheFileDir = cached;
4410 fgCacheFileDisconnected = operatedisconnected;
4411 fgCacheFileForce = forcecacheread;
4420 return fgCacheFileDir;
4432 if (fgCacheFileDir ==
"") {
4442 TString cachetagfile = fgCacheFileDir;
4443 cachetagfile +=
".tag.ROOT.cache";
4447 if (lastcleanuptime < cleanupinterval) {
4448 ::Info(
"TFile::ShrinkCacheFileDir",
"clean-up is skipped - last cleanup %lu seconds ago - you requested %lu", lastcleanuptime, cleanupinterval);
4454 cachetagfile +=
"?filetype=raw";
4457 if (!(tagfile =
TFile::Open(cachetagfile,
"RECREATE"))) {
4458 ::Error(
"TFile::ShrinkCacheFileDir",
"cannot create the cache tag file %s", cachetagfile.
Data());
4466 #if defined(R__WIN32) 4467 cmd =
"echo <TFile::ShrinkCacheFileDir>: cleanup to be implemented";
4468 #elif defined(R__MACOSX) 4469 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);
4471 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);
4478 ::Error(
"TFile::ShrinkCacheFileDir",
"error executing clean-up script");
4490 UInt_t to = fgOpenTimeout;
4491 fgOpenTimeout = timeout;
4500 return fgOpenTimeout;
4511 fgOnlyStaged = onlystaged;
4520 return fgOnlyStaged;
4536 if (!strcmp(u.
GetFile(), fUrl.GetFile())) {
4538 if (u.
GetPort() == fUrl.GetPort()) {
4539 if (!strcmp(u.
GetHostFQDN(), fUrl.GetHostFQDN())) {
4557 return fFile->Matches(url);
4558 }
else if (fName.Length() > 0){
4590 if (re.
Match(name)) {
4608 forceRemote =
kTRUE;
4609 else if (opts.
Contains(
"remote=0"))
4618 if (fname[0] ==
'/') {
4620 lfname.
Form(
"%s%s", prefix->
Data(), fname);
4623 }
else if (fname[0] ==
'~' || fname[0] ==
'$') {
4641 if (localFile && prefix)
4647 type = (localFile) ? kLocal : type;
4648 }
else if (
TPMERegexp(
"^(http[s]?|s3http[s]?|[a]?s3|gs|gshttp[s]?){1}:",
"i").
Match(name)) {
4652 }
else if (!strncmp(name,
"file:", 5)) {
4667 if (fgAsyncOpenRequests && (fgAsyncOpenRequests->GetSize() > 0)) {
4668 TIter nxr(fgAsyncOpenRequests);
4678 if (of && (of->
GetSize() > 0)) {
4681 while ((f = (
TFile *)nxf()))
4687 return kAOSNotAsync;
4695 if (handle && handle->
fFile) {
4713 if (fgAsyncOpenRequests && (fgAsyncOpenRequests->GetSize() > 0)) {
4714 TIter nxr(fgAsyncOpenRequests);
4725 if (of && (of->
GetSize() > 0)) {
4728 while ((f = (
TFile *)nxf()))
4734 return (
const TUrl *)0;
4742 fprintf(stderr,
"[TFile::Cp] Total %.02f MB\t|", (
Double_t)size/1048576);
4744 for (
int l = 0;
l < 20;
l++) {
4746 if (
l < 20*bytesread/size)
4747 fprintf(stderr,
"=");
4748 else if (
l == 20*bytesread/size)
4749 fprintf(stderr,
">");
4750 else if (
l > 20*bytesread/size)
4751 fprintf(stderr,
".");
4753 fprintf(stderr,
"=");
4759 fprintf(stderr,
"| %.02f %% [%.01f MB/s]\r",
4760 100.0*(size?(bytesread/((
float)size)):1), (lCopy_time>0.)?bytesread/lCopy_time/1048576.:0.);
4784 if (opt !=
"") opt +=
"&";
4793 char *copybuffer = 0;
4795 TFile *sfile =
this;
4812 ::Error(
"TFile::Cp",
"cannot open destination file %s", dst);
4818 rmdestiferror =
kTRUE;
4823 copybuffer =
new char[buffersize];
4825 ::Error(
"TFile::Cp",
"cannot allocate the copy buffer");
4843 if (progressbar) CpProgress(totalread, filesize,watch);
4848 if (filesize - b1 > (
Long64_t)buffersize) {
4849 readsize = buffersize;
4851 readsize = filesize - b1;
4854 if (readsize == 0)
break;
4860 if ((read <= 0) || readop) {
4861 ::Error(
"TFile::Cp",
"cannot read from source file %s. readsize=%lld read=%lld readop=%d",
4869 if ((written != read) || writeop) {
4870 ::Error(
"TFile::Cp",
"cannot write %lld bytes to destination file %s", read, dst);
4874 }
while (read == (
Long64_t)buffersize);
4877 CpProgress(totalread, filesize,watch);
4878 fprintf(stderr,
"\n");
4884 if (dfile) dfile->
Close();
4886 if (dfile)
delete dfile;
4887 if (copybuffer)
delete[] copybuffer;
4889 if (rmdestiferror && (success !=
kTRUE))
4912 if (opt !=
"") opt +=
"&";
4918 opt +=
TString::Format(
"&cachesz=%d&readaheadsz=%d&rmpolicy=1", 4*buffersize, 2*buffersize);
4927 ::Error(
"TFile::Cp",
"cannot open source file %s", src);
4929 success = sfile->
Cp(dst, progressbar, buffersize);
4932 if (sfile) sfile->
Close();
4933 if (sfile)
delete sfile;
4942 #if defined(R__neverLINUX) && !defined(R__WINGCC) 4954 int advice = POSIX_FADV_WILLNEED;
4959 advice = POSIX_FADV_NORMAL;
4963 #if defined(R__SEEK64) 4964 Int_t result = posix_fadvise64(fD, offset, len, advice);
4966 Int_t result = posix_fadvise(fD, offset, len, advice);
4971 return (result != 0);
4991 if ((cr = GetCacheRead())) {
4993 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)
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 Int_t GetEntries() const
virtual const char * GetTitle() const
Returns title 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.
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.
virtual Long64_t GetSize() const
Returns the current file size.
virtual void ls(Option_t *option="") const
List file contents.
static Int_t DecreaseDirLevel()
Decrease the indentation level for ls().
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.
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.
virtual Int_t GetErrno() const
Method returning errno. Is overriden in TRFIOFile.
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.
virtual void ls(Option_t *option="") const
List (ls) all objects in this collection.
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.
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.
static UInt_t fgOpenTimeout
Timeout for open operations in ms - 0 corresponds to blocking i/o.
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
const char * GetProtocol() const
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...
virtual Long64_t GetBytesWritten() const
Return the total number of bytes written so far to the file.
static void SetFileReadCalls(Int_t readcalls=0)
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.
virtual Bool_t ChangeDirectory(const char *path)
Change directory.
static TArchiveFile * Open(const char *url, TFile *file)
Return proper archive file handler depending on passed url.
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.
virtual const TUrl * GetEndpointUrl() const
static Bool_t ShrinkCacheFileDir(Long64_t shrinkSize, Long_t cleanupInteval=0)
Try to shrink the cache to the desired size.
virtual const char * GetClassName() const
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 TObject * FindObject(const char *name) const
Find an object in this list using its name.
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 UInt_t WriteVersion(const TClass *cl, Bool_t useBcnt=kFALSE)=0
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.
const char * GetOptions() const
Int_t Sizeof() const
return number of bytes occupied by this TFree on permanent storage
Long_t ExecPlugin(int nargs, const T &...params)
static void SetReadaheadSize(Int_t bufsize=256000)
TString & Insert(Ssiz_t pos, const char *s)
virtual Long64_t GetSeekKey() const
Int_t GetBestBuffer() const
Return the best buffer size of objects on this file.
virtual void FillBuffer(char *&buffer)
Encode directory header into output buffer.
R__EXTERN void **(* gThreadTsd)(void *, Int_t)
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.
void SysError(const char *location, const char *msgfmt,...)
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.
virtual char * GetBuffer() const
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)
virtual TObject * Clone(const char *newname="") const
Make a clone of an collection using the Streamer facility.
const char * Data() const
TFileCacheRead * GetCacheRead(TObject *tree=0) const
Return a pointer to the current read cache.
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.
Sequenceable collection abstract base class.
void Stop()
Stop the stopwatch.
virtual Bool_t IsOpen() const
Returns kTRUE in case file is open and kFALSE if file is not open.
Option_t * GetOption() const
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.
virtual Int_t GetBufferSize() const
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.
virtual const char * GetMakeSharedLib() const
Return the command line use to make a shared library.
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 IsWritable() const
const std::string ClassName(PyObject *pyobj)
Retrieve the class name from the given python object (which may be just an instance of the class)...
Int_t Atoi() const
Return integer value of string.
void tobuf(char *&buf, Bool_t x)
TClass * GetClass() const
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 TString GetNewUrl()
void Error(const char *location, const char *msgfmt,...)
Int_t GetClassVersion() const
const char * GetArchiveName() const
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().
virtual const char * GetFlagsDebug() const
Return the debug flags.
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 Int_t Sizeof() const
Return the size in bytes of the directory header.
virtual void ls(Option_t *option="") const
List Directory contents.
TObject * UncheckedAt(Int_t i) const
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 const char * GetSoExt() const
Get the shared library extension.
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().
Int_t IndexOf(const TObject *obj) const
void ResetErrno()
reset errno
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TObjArray * GetElements() 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)
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 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.
TObject * GetObject() const
const char * GetHostFQDN() const
Return fully qualified domain name of url host.
UInt_t GetCheckSum() const
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
Bool_t HasInterpreterInfo() const
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.
const char * GetFileAndOptions() const
Return the file and its options (the string specified behind the ?).
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.
virtual const char * GetName() const
Returns name of object.
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.
void Build(TFile *motherFile=0, TDirectory *motherDir=0)
Initialise directory to defaults.
const char * GetAnchor() const
static Int_t GetFileReadCalls()
Static function returning the total number of read calls from all files.
Version_t GetClassVersion() const
virtual TObjLink * FirstLink() const
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.
virtual Int_t GetBytesToPrefetch() const
Max number of bytes to prefetch.
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.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
#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...
const char * GetUrl(Bool_t withDeflt=kFALSE) const
Return full URL.
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 Long64_t GetBytesRead() const
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.
void ReadKeyBuffer(char *&buffer)
Decode input buffer.
void SetAnchor(const char *anchor)
virtual const char * GetIncludePath()
Get the list of include path.
virtual Int_t GetSize() const
virtual TObject * Remove(TObject *)
Remove an object from the in-memory list.
Int_t GetCompress() const
void Print(std::ostream &os, const OptionType &opt)
virtual const char * GetFlagsOpt() const
Return the optimization flags.
static Bool_t fgCacheFileForce
Indicates, to force all READ to CACHEREAD.
TFile * fFile
TFile instance of the file being opened.
virtual const char * GetName() const
Returns name of object.
Long64_t GetFirst() const
virtual Int_t ReadKeys(Bool_t forceRead=kTRUE)
Read the linked list of keys.
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.
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 void Print(Option_t *option="") const
Print all objects in the file.
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.
virtual Int_t Sizeof() const
Return the size in bytes of the file header.
Int_t GetEntries() const
Return the number of objects in array (i.e.
static TProcessID * GetSessionProcessID()
static function returning the pointer to the session TProcessID
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.
const TMatches FindRules(const TString &source) const
Return all the rules that are about the given 'source' class.
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.
virtual Int_t Sizeof() const
Return size of the TNamed part of the TObject.
Mother of all ROOT objects.
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.
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
static TString fgCacheFileDir
Directory where to locally stage files.
static Int_t IncreaseDirLevel()
Increase the indentation level for ls().
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 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.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
virtual const char * GetObjExt() const
Get the object file extension.
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
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
static UInt_t SetOpenTimeout(UInt_t timeout)
Sets open timeout time (in ms). Returns previous timeout value.
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.
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
#define R__RWLOCK_ACQUIRE_WRITE(rwlock)
virtual Int_t GetClassVersion() const =0
static void ResetErrno()
Static function resetting system error number.
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
static Int_t fgReadaheadSize
Readahead buffer size.
TObject * At(Int_t idx) const
virtual void WriteHeader()
Write File Header.
TFileOpenHandle * fAsyncHandle
!For proper automatic cleanup
virtual void Close(Option_t *option="")
Close out any threads or asynchronous fetches used by the underlying implementation.
const char * GetClass() const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Abstract Interface class describing Streamer information for one class.
static void SetFileBytesRead(Long64_t bytes=0)
static Long64_t GetFileCounter()
virtual void SetCacheWrite(TFileCacheWrite *cache)
Set a pointer to the write cache.
virtual void ResetErrno() const
Method resetting the errno. Is overridden in TRFIOFile.
TFileCacheWrite * GetCacheWrite() const
Return a pointer to the current write cache.
const char * GetOpt() const
static const char * GetCacheFileDir()
Get the directory where to locally stage/cache remote files.
const char * GetFile() const
virtual TProcessID * ReadProcessID(UShort_t pidf)
The TProcessID with number pidf is read from this file.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
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 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.
Array of chars or bytes (8 bits per element).
ECacheAction
TTreeCache flushing semantics.
virtual EAsyncOpenStatus GetAsyncOpenStatus()