> 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 > > --- > 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