other-licenses/7zstub/src/Windows/DLL.cpp

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 // Windows/DLL.cpp
     3 #include "StdAfx.h"
     5 #include "DLL.h"
     6 #include "Defs.h"
     7 #ifndef _UNICODE
     8 #include "../Common/StringConvert.h"
     9 #endif
    11 #ifndef _UNICODE
    12 extern bool g_IsNT;
    13 #endif
    15 namespace NWindows {
    16 namespace NDLL {
    18 CLibrary::~CLibrary()
    19 {
    20   Free();
    21 }
    23 bool CLibrary::Free()
    24 {
    25   if (_module == 0)
    26     return true;
    27   // MessageBox(0, TEXT(""), TEXT("Free"), 0);
    28   // Sleep(5000);
    29   if (!::FreeLibrary(_module))
    30     return false;
    31   _module = 0;
    32   return true;
    33 }
    35 bool CLibrary::LoadOperations(HMODULE newModule)
    36 {
    37   if (newModule == NULL)
    38     return false;
    39   if(!Free())
    40     return false;
    41   _module = newModule;
    42   return true;
    43 }
    45 bool CLibrary::LoadEx(LPCTSTR fileName, DWORD flags)
    46 {
    47   // MessageBox(0, fileName, TEXT("LoadEx"), 0);
    48   return LoadOperations(::LoadLibraryEx(fileName, NULL, flags));
    49 }
    51 bool CLibrary::Load(LPCTSTR fileName)
    52 {
    53   // MessageBox(0, fileName, TEXT("Load"), 0);
    54   // Sleep(5000);
    55   // OutputDebugString(fileName);
    56   // OutputDebugString(TEXT("\n"));
    57   return LoadOperations(::LoadLibrary(fileName));
    58 }
    60 #ifndef _UNICODE
    61 static inline UINT GetCurrentCodePage() { return ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; } 
    62 CSysString GetSysPath(LPCWSTR sysPath)
    63   { return UnicodeStringToMultiByte(sysPath, GetCurrentCodePage()); }
    65 bool CLibrary::LoadEx(LPCWSTR fileName, DWORD flags)
    66 {
    67   if (g_IsNT)
    68     return LoadOperations(::LoadLibraryExW(fileName, NULL, flags));
    69   return LoadEx(GetSysPath(fileName), flags);
    70 }
    71 bool CLibrary::Load(LPCWSTR fileName)
    72 {
    73   if (g_IsNT)
    74     return LoadOperations(::LoadLibraryW(fileName));
    75   return Load(GetSysPath(fileName));
    76 }
    77 #endif
    79 bool MyGetModuleFileName(HMODULE hModule, CSysString &result)
    80 {
    81   result.Empty();
    82   TCHAR fullPath[MAX_PATH + 2];
    83   DWORD size = ::GetModuleFileName(hModule, fullPath, MAX_PATH + 1);
    84   if (size <= MAX_PATH && size != 0)
    85   {
    86     result = fullPath;
    87     return true;
    88   }
    89   return false;
    90 }
    92 #ifndef _UNICODE
    93 bool MyGetModuleFileName(HMODULE hModule, UString &result)
    94 {
    95   result.Empty();
    96   if (g_IsNT)
    97   {
    98     wchar_t fullPath[MAX_PATH + 2];
    99     DWORD size = ::GetModuleFileNameW(hModule, fullPath, MAX_PATH + 1);
   100     if (size <= MAX_PATH && size != 0)
   101     {
   102       result = fullPath;
   103       return true;
   104     }
   105     return false;
   106   }
   107   CSysString resultSys;
   108   if (!MyGetModuleFileName(hModule, resultSys))
   109     return false;
   110   result = MultiByteToUnicodeString(resultSys, GetCurrentCodePage());
   111   return true;
   112 }
   113 #endif
   115 }}

mercurial