tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

DLL.cpp (1833B)


      1 // Windows/DLL.cpp
      2 
      3 #include "StdAfx.h"
      4 
      5 #include "DLL.h"
      6 
      7 #ifndef _UNICODE
      8 extern bool g_IsNT;
      9 #endif
     10 
     11 extern HINSTANCE g_hInstance;
     12 
     13 namespace NWindows {
     14 namespace NDLL {
     15 
     16 bool CLibrary::Free() throw()
     17 {
     18  if (_module == 0)
     19    return true;
     20  if (!::FreeLibrary(_module))
     21    return false;
     22  _module = 0;
     23  return true;
     24 }
     25 
     26 bool CLibrary::LoadEx(CFSTR path, DWORD flags) throw()
     27 {
     28  if (!Free())
     29    return false;
     30  #ifndef _UNICODE
     31  if (!g_IsNT)
     32  {
     33    _module = ::LoadLibraryEx(fs2fas(path), NULL, flags);
     34  }
     35  else
     36  #endif
     37  {
     38    _module = ::LoadLibraryExW(fs2us(path), NULL, flags);
     39  }
     40  return (_module != NULL);
     41 }
     42 
     43 bool CLibrary::Load(CFSTR path) throw()
     44 {
     45  if (!Free())
     46    return false;
     47  #ifndef _UNICODE
     48  if (!g_IsNT)
     49  {
     50    _module = ::LoadLibrary(fs2fas(path));
     51  }
     52  else
     53  #endif
     54  {
     55    _module = ::LoadLibraryW(fs2us(path));
     56  }
     57  return (_module != NULL);
     58 }
     59 
     60 bool MyGetModuleFileName(FString &path)
     61 {
     62  HMODULE hModule = g_hInstance;
     63  path.Empty();
     64  #ifndef _UNICODE
     65  if (!g_IsNT)
     66  {
     67    TCHAR s[MAX_PATH + 2];
     68    s[0] = 0;
     69    DWORD size = ::GetModuleFileName(hModule, s, MAX_PATH + 1);
     70    if (size <= MAX_PATH && size != 0)
     71    {
     72      path = fas2fs(s);
     73      return true;
     74    }
     75  }
     76  else
     77  #endif
     78  {
     79    WCHAR s[MAX_PATH + 2];
     80    s[0] = 0;
     81    DWORD size = ::GetModuleFileNameW(hModule, s, MAX_PATH + 1);
     82    if (size <= MAX_PATH && size != 0)
     83    {
     84      path = us2fs(s);
     85      return true;
     86    }
     87  }
     88  return false;
     89 }
     90 
     91 #ifndef _SFX
     92 
     93 FString GetModuleDirPrefix()
     94 {
     95  FString s;
     96  if (MyGetModuleFileName(s))
     97  {
     98    int pos = s.ReverseFind_PathSepar();
     99    if (pos >= 0)
    100      s.DeleteFrom(pos + 1);
    101  }
    102  if (s.IsEmpty())
    103    s = "." STRING_PATH_SEPARATOR;
    104  return s;
    105 }
    106 
    107 #endif
    108 
    109 }}