Hi rooters,
ROOT version 2.25/03 on Linux-i386
I define a rootlogon.C with :
{gROOT->LoadMacro("usefulstufftest.C");}
So when I launch root it load the following file :
<<<< FILE usefulstufftest.C
TFile* get_file(char *name) {
TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject(name);
if (!f) f = new TFile(name);
f->cd(); return(f);
}
TFile* get_file(char *fix,char *name0) {
char fname[200];
sprintf(fname,"%s%s",fix,name0);
TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject(fname);
if (!f) f = new TFile(fname);
f->cd(); return(f);
}
>>>>
The two functions are very similar, and I regulary use it to open a root
file. But the second one seems to work only once.
I wrote the following macro :
<<<< FILE bug.C
void bug(void) {
char *rname0[2]={"hsimple.root","hsimple2.root"};
char *rname1[2]={".root","2.root"};
for (int i=0;i<2;i++) {
// Opening the files using the first function
TFile *f = get_file(rname0[i]);
printf("name : %s\n",f->GetName());
// Opening the files using the second one
TFile *f = get_file("hsimple",rname1[i]);
printf("name : %s\n",f->GetName());
}
}
>>>>
If I comment the opening using the second function everything is ok:
root [0] .x bug.C
name : hsimple.root
name : hsimple2.root
root [1] .x bug.C
name : hsimple.root
name : hsimple2.root
If I comment the first opening and uncomment the second, I get :
root [3] .x bug.C
name : hsimple.root <--
name : hsimple2.root <-- First time, opening OK
root [4] .x bug.C
Error in <TFile::TFile>: file does not exist
name :
Error in <TFile::TFile>: file does not exist
name :
Second time it doesnt work ! It seems that the pointer to the string
passed as argument is pointing anywhere, resulting in a completly
irrelevant file name.
Is this reproducable ?
As anybody and idea about what's wrong ?
Yannick
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:36 MET