> 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

Reply via email to