Changes in directory llvm/lib/System/Win32:
Path.inc updated: 1.59 -> 1.60 --- Log message: For PR789: http://llvm.org/PR789 : * Add a method: bool isAbsolute() const, which determines if the path name is absolute or not. * Implement caching of file status information in the Path object. Allow it to be updated forcefully or lazily re-fetched from the cached value. --- Diffs of the changes: (+29 -16) Path.inc | 45 +++++++++++++++++++++++++++++---------------- 1 files changed, 29 insertions(+), 16 deletions(-) Index: llvm/lib/System/Win32/Path.inc diff -u llvm/lib/System/Win32/Path.inc:1.59 llvm/lib/System/Win32/Path.inc:1.60 --- llvm/lib/System/Win32/Path.inc:1.59 Sun Nov 5 13:31:28 2006 +++ llvm/lib/System/Win32/Path.inc Thu Mar 29 11:43:20 2007 @@ -105,6 +105,13 @@ return true; } +bool +Path::isAbsolute() const { + if (path.length() < 3) + return false; + return path[0] == 'C' && path[1] == ':' && path[2] == '\\'; +} + static Path *TempDirectory = NULL; Path @@ -294,24 +301,30 @@ } bool -Path::getFileStatus(FileStatus &info, std::string *ErrStr) const { - WIN32_FILE_ATTRIBUTE_DATA fi; - if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) - return MakeErrMsg(ErrStr, "getStatusInfo():" + std::string(path) + - ": Can't get status: "); - - info.fileSize = fi.nFileSizeHigh; - info.fileSize <<= sizeof(fi.nFileSizeHigh)*8; - info.fileSize += fi.nFileSizeLow; - - info.mode = fi.dwFileAttributes & FILE_ATTRIBUTE_READONLY ? 0555 : 0777; - info.user = 9999; // Not applicable to Windows, so... - info.group = 9999; // Not applicable to Windows, so... +Path::getFileStatus(FileStatus &info, bool update, std::string *ErrStr) const { + if (status == 0 || update) { + WIN32_FILE_ATTRIBUTE_DATA fi; + if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi)) + return MakeErrMsg(ErrStr, "getStatusInfo():" + std::string(path) + + ": Can't get status: "); + + if (status == 0) + status = new FileStatus; + + status->fileSize = fi.nFileSizeHigh; + status->fileSize <<= sizeof(fi.nFileSizeHigh)*8; + status->fileSize += fi.nFileSizeLow; + + status->mode = fi.dwFileAttributes & FILE_ATTRIBUTE_READONLY ? 0555 : 0777; + status->user = 9999; // Not applicable to Windows, so... + status->group = 9999; // Not applicable to Windows, so... - __int64 ft = *reinterpret_cast<__int64*>(&fi.ftLastWriteTime); - info.modTime.fromWin32Time(ft); + __int64 ft = *reinterpret_cast<__int64*>(&fi.ftLastWriteTime); + status->modTime.fromWin32Time(ft); - info.isDir = fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; + status->isDir = fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; + } + info = *status; return false; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits