From 597af76fd67975113aba4317b59d68ce4709a5b9 Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Thu, 28 Oct 2010 05:59:57 +0000 Subject: [PATCH] [+] added: !py windbg command can work without python script file extension ".py" git-svn-id: https://pykd.svn.codeplex.com/svn@56558 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/dbgpath.cpp | 56 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/pykd/dbgpath.cpp b/pykd/dbgpath.cpp index 914ec3b..d975e8d 100644 --- a/pykd/dbgpath.cpp +++ b/pykd/dbgpath.cpp @@ -62,7 +62,40 @@ DbgPythonPath::findPath( std::string &fullFileName, std::string &filePath ) const { - bool result = false; + bool pyExt = fileName.rfind( ".py" ) == fileName.length() - 3; + + // 1. Ищем в рабочей директории + DWORD bufSize = + SearchPathA( + NULL, + fileName.c_str(), + pyExt ? NULL : ".py", + 0, + NULL, + NULL ); + + if ( bufSize > 0 ) + { + char *fullFileNameCStr = new char[ bufSize ]; + char *partFileNameCStr = NULL; + + SearchPathA( + NULL, + fileName.c_str(), + pyExt ? NULL : ".py", + bufSize, + fullFileNameCStr, + &partFileNameCStr ); + + fullFileName = std::string( fullFileNameCStr ); + filePath = std::string( fullFileNameCStr, partFileNameCStr ); + + delete[] fullFileNameCStr; + + return true; + } + + // 2. Ищем во всех директориях, указанных в m_pathList std::vector::const_iterator it = m_pathList.begin(); @@ -72,7 +105,7 @@ DbgPythonPath::findPath( SearchPathA( (*it).c_str(), fileName.c_str(), - NULL, + pyExt ? NULL : ".py", 0, NULL, NULL ); @@ -85,7 +118,7 @@ DbgPythonPath::findPath( SearchPathA( (*it).c_str(), fileName.c_str(), - NULL, + pyExt ? NULL : ".py", bufSize, fullFileNameCStr, &partFileNameCStr ); @@ -95,24 +128,11 @@ DbgPythonPath::findPath( delete[] fullFileNameCStr; - result = true; - - break; + return true; } } - return result; + return false; } ////////////////////////////////////////////////////////////////////////////// - - - -// DWORD SearchPath( -// LPCTSTR lpPath, -// LPCTSTR lpFileName, -// LPCTSTR lpExtension, -// DWORD nBufferLength, -// LPTSTR lpBuffer, -// LPTSTR* lpFilePart -//);