Chris Lattner wrote: >> Use the stat information in the Path object, if it is already >> obtained. This >> avoids a call to ::fstat by MappedFile when the file size >> information was >> already obtained by the Path object. >> > > Interesting approach. The problem is that fstat is significantly > faster than stat. How about a new Path::getFileStatusFromFD() > method, which takes an open file descriptor. If the System supports > it, it can get status information faster by using it, otherwise it > falls back to getFileStatus (e.g. if win32 doesn't have fstat)? > > -Chris >
It does, but names it _fstat. I'm not sure it's worth the bother to cache fstat either. stat is slow because it has to look up the file path. > >> --- >> Diffs of the changes: (+3 -4) >> >> MappedFile.inc | 7 +++---- >> 1 files changed, 3 insertions(+), 4 deletions(-) >> >> >> Index: llvm/lib/System/Unix/MappedFile.inc >> diff -u llvm/lib/System/Unix/MappedFile.inc:1.18 llvm/lib/System/ >> Unix/MappedFile.inc:1.19 >> --- llvm/lib/System/Unix/MappedFile.inc:1.18 Fri Aug 25 16:37:17 2006 >> +++ llvm/lib/System/Unix/MappedFile.inc Thu Mar 29 14:11:22 2007 >> @@ -54,15 +54,14 @@ >> MakeErrMsg(ErrMsg, "can't open file '" + path_.toString() + "'"); >> return true; >> } >> - struct stat sbuf; >> - if(::fstat(FD, &sbuf) < 0) { >> - MakeErrMsg(ErrMsg, "can't stat file '"+ path_.toString() + "'"); >> + const FileStatus *Status = path_.getFileStatus(false, ErrMsg); >> + if (!Status) { >> ::close(FD); >> return true; >> } >> info_ = new MappedFileInfo; >> info_->FD = FD; >> - info_->Size = sbuf.st_size; >> + info_->Size = Status->getSize(); >> return false; >> } >> >> >> >> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits@cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> > > _______________________________________________ > llvm-commits mailing list > llvm-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits > > > > _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits