[PATCH] win32: fix unicode error caused by GetModuleFileNameEx (issue2480)

Steve Borho steve at borho.org
Wed Nov 10 09:07:23 CST 2010


On Wed, Nov 10, 2010 at 3:36 AM, Martin Geisler <mg at aragost.com> wrote:
> Yuya Nishihara <yuya at tcha.org> writes:
>
>> Oops, I CC-ed to BTS address wrongly, sorry.
>>
>> Yuya Nishihara wrote:
>>> # HG changeset patch
>>> # User Yuya Nishihara <yuya at tcha.org>
>>> # Date 1289320880 -32400
>>> # Node ID 08d6ea6440e222ee6530fef95aafd0b9b6d45e8f
>>> # Parent  9f2ac318b92e3bde06108bf8493b7d71219ad13e
>>> win32: fix unicode error caused by GetModuleFileNameEx (issue2480)
>> ...
>>> diff --git a/mercurial/win32.py b/mercurial/win32.py
>>> --- a/mercurial/win32.py
>>> +++ b/mercurial/win32.py
>>> @@ -106,6 +106,7 @@ def system_rcpath_win32():
>>>      try:
>>>          # This will fail on windows < NT
>>>          filename = win32process.GetModuleFileNameEx(proc, 0)
>>> +        filename = filename.encode(encoding.encoding)
>>>      except:
>>>          filename = win32api.GetModuleFileName(0)
>>>      # Use mercurial.ini found in directory with hg.exe
>>
>> I'm not pretty sure, but possibly it doesn't need to use
>> GetModuleFileName'Ex'.
>>
>> http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx
>> http://msdn.microsoft.com/en-us/library/ms683198(v=VS.85).aspx
>>
>> GetModuleFileName'Ex' seems available to get a filename of
>> another process.
>
> Yes, I skimmed the second URL and found this
>
>  Remarks
>
>  The GetModuleFileNameEx function is primarily designed for use by
>  debuggers and similar applications that must extract module
>  information from another process. If the module list in the target
>  process is corrupted or is not yet initialized, or if the module list
>  changes during the function call as a result of DLLs being loaded or
>  unloaded, GetModuleFileNameEx may fail or return incorrect
>  information.
>
>  To retrieve the name of a module in the current process, use the
>  GetModuleFileName function. This is more efficient and more reliable
>  than calling GetModuleFileNameEx with a handle to the current process.
>
> So perhaps the whole try-block should be removed?

+1

-- 
Steve Borho


More information about the Mercurial-devel mailing list