ReactOS  0.4.13-dev-482-ge57f103
addons.c
Go to the documentation of this file.
1 /*
2  * Copyright 2006-2010 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #include "appwiz.h"
20 
21 #include <stdio.h>
22 
23 #ifdef HAVE_UNISTD_H
24 # include <unistd.h>
25 #endif
26 
27 #include <msi.h>
28 
29 #define GECKO_VERSION "2.40"
30 
31 #ifdef __i386__
32 #define ARCH_STRING "x86"
33 #define GECKO_SHA "8a3adedf3707973d1ed4ac3b2e791486abf814bd"
34 #else
35 #define ARCH_STRING ""
36 #define GECKO_SHA "???"
37 #endif
38 
39 typedef struct {
40  const char *version;
41  const char *file_name;
42  const char *sha;
43  const char *config_key;
44  const char *dir_config_key;
46 } addon_info_t;
47 
48 static const addon_info_t addons_info[] = {
49  {
51  "wine_gecko-" GECKO_VERSION "-" ARCH_STRING ".msi",
52  GECKO_SHA,
53  "MSHTML",
54  "GeckoCabDir",
56  }
57 };
58 
59 static const addon_info_t *addon;
60 
63 
64 static WCHAR GeckoUrl[] = L"https://svn.reactos.org/amine/wine_gecko-2.40-x86.msi";
65 
66 /* SHA definitions are copied from advapi32. They aren't available in headers. */
67 
68 typedef struct {
73 } SHA_CTX, *PSHA_CTX;
74 
76 void WINAPI A_SHAUpdate(PSHA_CTX,const unsigned char*,UINT);
78 
79 static BOOL sha_check(const WCHAR *file_name)
80 {
81  const unsigned char *file_map;
82  HANDLE file, map;
83  ULONG sha[5];
84  char buf[2*sizeof(sha)+1];
85  SHA_CTX ctx;
86  DWORD size, i;
87 
90  return FALSE;
91 
93 
96  if(!map)
97  return FALSE;
98 
99  file_map = MapViewOfFile(map, FILE_MAP_READ, 0, 0, 0);
100  CloseHandle(map);
101  if(!file_map)
102  return FALSE;
103 
104  A_SHAInit(&ctx);
105  A_SHAUpdate(&ctx, file_map, size);
106  A_SHAFinal(&ctx, sha);
107 
108  UnmapViewOfFile(file_map);
109 
110  for(i=0; i < sizeof(sha); i++)
111  sprintf(buf + i*2, "%02x", *((unsigned char*)sha+i));
112 
113  if(strcmp(buf, addon->sha)) {
114  WARN("Got %s, expected %s\n", buf, addon->sha);
115  return FALSE;
116  }
117 
118  return TRUE;
119 }
120 
121 static void set_status(DWORD id)
122 {
124  WCHAR buf[64];
125 
126  LoadStringW(hApplet, id, buf, sizeof(buf)/sizeof(WCHAR));
128 }
129 
134 };
135 
137 {
138  ULONG res;
139 
141  if(res != ERROR_SUCCESS) {
142  ERR("MsiInstallProduct failed: %u\n", res);
143  return INSTALL_FAILED;
144  }
145 
146  return INSTALL_OK;
147 }
148 
149 static enum install_res install_from_unix_file(const char *dir, const char *subdir, const char *file_name)
150 {
151  LPWSTR dos_file_name;
152  char *file_path;
153  int fd, len;
154  enum install_res ret;
155  UINT res;
156 
157  len = strlen(dir);
159  if(!file_path)
160  return INSTALL_FAILED;
161 
162  memcpy(file_path, dir, len);
163  if(len && file_path[len-1] != '/' && file_path[len-1] != '\\')
164  file_path[len++] = '/';
165  if(*subdir) {
166  strcpy(file_path+len, subdir);
167  len += strlen(subdir);
168  file_path[len++] = '/';
169  }
171 
173  if(fd == -1) {
174  TRACE("%s not found\n", debugstr_a(file_path));
176  return INSTALL_NEXT;
177  }
178 
179  _close(fd);
180 
181  WARN("Could not get wine_get_dos_file_name function, calling install_cab directly.\n");
182  res = MultiByteToWideChar( CP_ACP, 0, file_path, -1, 0, 0);
183  dos_file_name = heap_alloc (res*sizeof(WCHAR));
184  MultiByteToWideChar( CP_ACP, 0, file_path, -1, dos_file_name, res);
185 
187 
188  ret = install_file(dos_file_name);
189 
190  heap_free(dos_file_name);
191  return ret;
192 }
193 
194 static const CHAR mshtml_keyA[] =
195  {'S','o','f','t','w','a','r','e',
196  '\\','W','i','n','e',
197  '\\','M','S','H','T','M','L',0};
198 
200 {
201  char *package_dir;
202  DWORD res, type, size = MAX_PATH;
203  enum install_res ret;
204 
205  package_dir = heap_alloc(size + sizeof(addon->file_name));
206 
207  res = RegGetValueA(HKEY_CURRENT_USER, mshtml_keyA, "GeckoCabDir", RRF_RT_ANY, &type, (PBYTE)package_dir, &size);
208  if(res == ERROR_MORE_DATA) {
209  package_dir = heap_realloc(package_dir, size + sizeof(addon->file_name));
210  res = RegGetValueA(HKEY_CURRENT_USER, mshtml_keyA, "GeckoCabDir", RRF_RT_ANY, &type, (PBYTE)package_dir, &size);
211  }
212 
213  if(res != ERROR_SUCCESS || (type != REG_SZ && type != REG_EXPAND_SZ)) {
214  heap_free(package_dir);
215  return INSTALL_FAILED;
216  }
217 
218  if (type == REG_EXPAND_SZ)
219  {
220  size = ExpandEnvironmentStringsA(package_dir, NULL, 0);
221  if (size)
222  {
223  char* buf = heap_alloc(size + sizeof(addon->file_name));
224  ExpandEnvironmentStringsA(package_dir, buf, size);
225  heap_free(package_dir);
226  package_dir = buf;
227  }
228  }
229 
230  TRACE("Trying %s/%s\n", debugstr_a(package_dir), debugstr_a(addon->file_name));
231 
232  ret = install_from_unix_file(package_dir, "", addon->file_name);
233 
234  heap_free(package_dir);
235  return ret;
236 }
237 
239  REFIID riid, void **ppv)
240 {
241  if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IBindStatusCallback, riid)) {
242  *ppv = iface;
243  return S_OK;
244  }
245 
246  return E_INVALIDARG;
247 }
248 
250 {
251  return 2;
252 }
253 
255 {
256  return 1;
257 }
258 
260  DWORD dwReserved, IBinding *pib)
261 {
263  IBinding_AddRef(pib);
264  download_binding = pib;
265 
266  return S_OK;
267 }
268 
270  LONG *pnPriority)
271 {
272  return E_NOTIMPL;
273 }
274 
277 {
278  return E_NOTIMPL;
279 }
280 
282  ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
283 {
285 
286  if(ulProgressMax)
287  SendMessageW(progress, PBM_SETRANGE32, 0, ulProgressMax);
288  if(ulProgress)
289  SendMessageW(progress, PBM_SETPOS, ulProgress, 0);
290 
291  return S_OK;
292 }
293 
295  HRESULT hresult, LPCWSTR szError)
296 {
297  if(download_binding) {
298  IBinding_Release(download_binding);
300  }
301 
302  if(FAILED(hresult)) {
303  if(hresult == E_ABORT)
304  TRACE("Binding aborted\n");
305  else
306  ERR("Binding failed %08x\n", hresult);
307  return S_OK;
308  }
309 
311  return S_OK;
312 }
313 
315  DWORD* grfBINDF, BINDINFO* pbindinfo)
316 {
317  /* FIXME */
318  *grfBINDF = 0;
319  return S_OK;
320 }
321 
323  DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed)
324 {
325  ERR("\n");
326  return E_NOTIMPL;
327 }
328 
330  REFIID riid, IUnknown* punk)
331 {
332  ERR("\n");
333  return E_NOTIMPL;
334 }
335 
336 static const IBindStatusCallbackVtbl InstallCallbackVtbl = {
348 };
349 
351 
353 {
354  WCHAR message[256];
355  WCHAR tmp_dir[MAX_PATH], tmp_file[MAX_PATH];
356  HRESULT hres;
357 
358  GetTempPathW(sizeof(tmp_dir)/sizeof(WCHAR), tmp_dir);
359  GetTempFileNameW(tmp_dir, NULL, 0, tmp_file);
360 
361  TRACE("using temp file %s\n", debugstr_w(tmp_file));
362 
364  if(FAILED(hres)) {
365  if (LoadStringW(hApplet, IDS_DWL_FAILED, message, sizeof(message) / sizeof(WCHAR))) {
366  /* If the user aborted the download, DO NOT display the message box */
367  if (hres == E_ABORT) {
368  TRACE("Downloading of Gecko package aborted!\n");
369  } else {
371  }
372  }
373  ERR("URLDownloadToFile failed: %08x\n", hres);
374  } else {
375  if(sha_check(tmp_file)) {
376  install_file(tmp_file);
377  }else {
378  if(LoadStringW(hApplet, IDS_INVALID_SHA, message, sizeof(message)/sizeof(WCHAR))) {
380  }
381  }
382  }
383 
384  DeleteFileW(tmp_file);
386  return 0;
387 }
388 
390 {
391  switch(msg) {
392  case WM_INITDIALOG:
395  return TRUE;
396 
397  case WM_NOTIFY:
398  break;
399 
400  case WM_COMMAND:
401  switch(wParam) {
402  case IDCANCEL:
403  if(download_binding) {
404  IBinding_Abort(download_binding);
405  }
406  else {
407  EndDialog(hwnd, 0);
408  }
409  return FALSE;
410 
411  case ID_DWL_INSTALL:
415  return FALSE;
416  }
417  }
418 
419  return FALSE;
420 }
421 
423 {
424 
425  if(!*ARCH_STRING)
426  return FALSE;
427 
428  addon = addons_info + addon_type;
429 
430  /*
431  * Try to find addon .msi file in following order:
432  * - directory stored in $dir_config_key value of HKCU/Wine/Software/$config_key key
433  * - download the package
434  */
437 
438  return TRUE;
439 }
static const WCHAR sha[]
Definition: oid.c:1218
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
static HRESULT WINAPI InstallCallback_OnStopBinding(IBindStatusCallback *iface, HRESULT hresult, LPCWSTR szError)
Definition: addons.c:294
Definition: tftpd.h:59
#define PBM_SETRANGE32
Definition: commctrl.h:2160
HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN pCaller, LPCWSTR szURL, LPCWSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB)
Definition: download.c:427
static enum install_res install_from_unix_file(const char *dir, const char *subdir, const char *file_name)
Definition: addons.c:149
#define REFIID
Definition: guiddef.h:113
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:398
static enum install_res install_file(const WCHAR *file_name)
Definition: addons.c:136
#define ERROR_SUCCESS
Definition: deptool.c:10
#define MapViewOfFile
Definition: compat.h:402
void WINAPI A_SHAUpdate(PSHA_CTX, const unsigned char *, UINT)
Definition: sha1.c:128
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
static HWND install_dialog
Definition: addons.c:61
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define SW_HIDE
Definition: winuser.h:762
REFIID riid
Definition: precomp.h:44
#define CP_ACP
Definition: compat.h:99
struct SHA_CTX * PSHA_CTX
#define HKEY_CURRENT_USER
Definition: winreg.h:11
UINT WINAPI MsiInstallProductW(LPCWSTR szPackagePath, LPCWSTR szCommandLine)
Definition: msi.c:235
char CHAR
Definition: xmlstorage.h:175
static const IBindStatusCallbackVtbl InstallCallbackVtbl
Definition: addons.c:336
#define WARN(fmt,...)
Definition: debug.h:111
#define CALLBACK
Definition: compat.h:27
static WCHAR GeckoUrl[]
Definition: addons.c:64
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define ID_DWL_INSTALL
Definition: resource.h:46
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
Definition: exfuncs.h:1015
#define PBM_SETPOS
Definition: commctrl.h:2156
static int fd
Definition: io.c:51
HINSTANCE hApplet
Definition: access.c:17
UINT_PTR WPARAM
Definition: windef.h:207
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
LPCWSTR dialog_template
Definition: addons.c:45
int32_t INT_PTR
Definition: typedefs.h:62
#define IDS_INVALID_SHA
Definition: resource.h:34
static IBinding * download_binding
Definition: addons.c:62
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
static void * heap_realloc(void *mem, size_t len)
Definition: appwiz.h:70
WPARAM wParam
Definition: combotst.c:138
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
const char * dir_config_key
Definition: addons.c:44
#define sprintf(buf, format,...)
Definition: sprintf.c:55
static HRESULT WINAPI InstallCallback_OnProgress(IBindStatusCallback *iface, ULONG ulProgress, ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText)
Definition: addons.c:281
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static INT_PTR CALLBACK installer_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: addons.c:389
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2079
Definition: addons.c:68
static HRESULT WINAPI InstallCallback_OnLowResource(IBindStatusCallback *iface, DWORD dwReserved)
Definition: addons.c:275
static HRESULT WINAPI InstallCallback_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk)
Definition: addons.c:329
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:90
#define GECKO_SHA
Definition: addons.c:36
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
const char * file_name
Definition: addons.c:41
static ULONG WINAPI InstallCallback_Release(IBindStatusCallback *iface)
Definition: addons.c:254
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
static HRESULT WINAPI InstallCallback_GetPriority(IBindStatusCallback *iface, LONG *pnPriority)
Definition: addons.c:269
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT WINAPI InstallCallback_OnDataAvailable(IBindStatusCallback *iface, DWORD grfBSCF, DWORD dwSize, FORMATETC *pformatetc, STGMEDIUM *pstgmed)
Definition: addons.c:322
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:111
#define ID_DWL_STATUS
Definition: resource.h:47
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
DWORD WINAPI ExpandEnvironmentStringsA(IN LPCSTR lpSrc, IN LPSTR lpDst, IN DWORD nSize)
Definition: environ.c:399
struct tagSHA_CTX SHA_CTX
Definition: bufpool.h:45
static HRESULT WINAPI InstallCallback_OnStartBinding(IBindStatusCallback *iface, DWORD dwReserved, IBinding *pib)
Definition: addons.c:259
#define FILE_MAP_READ
Definition: compat.h:427
unsigned int dir
Definition: maze.c:112
#define SW_SHOW
Definition: winuser.h:769
static HWND hwnd_parent
Definition: dce.c:36
#define WM_SETTEXT
Definition: winuser.h:1599
LSTATUS WINAPI RegGetValueA(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:2071
static HRESULT WINAPI InstallCallback_QueryInterface(IBindStatusCallback *iface, REFIID riid, void **ppv)
Definition: addons.c:238
#define OPEN_EXISTING
Definition: compat.h:426
void WINAPI A_SHAInit(PSHA_CTX)
Definition: sha1.c:102
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4268
_Check_return_opt_ _CRTIMP int __cdecl _close(_In_ int _FileHandle)
#define ID_DWL_PROGRESS
Definition: resource.h:45
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:77
#define CreateFileMappingW(a, b, c, d, e, f)
Definition: compat.h:401
const GUID IID_IUnknown
#define ID_DWL_GECKO_DIALOG
Definition: resource.h:44
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:8
const char file[]
Definition: icontest.c:11
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
Definition: filename.c:84
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
static void set_status(DWORD id)
Definition: addons.c:121
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:481
static ULONG WINAPI InstallCallback_AddRef(IBindStatusCallback *iface)
Definition: addons.c:249
Definition: _map.h:44
const char * config_key
Definition: addons.c:43
unsigned char UCHAR
Definition: xmlstorage.h:181
int ret
static BOOL sha_check(const WCHAR *file_name)
Definition: addons.c:79
static const WCHAR L[]
Definition: oid.c:1250
#define MB_ICONERROR
Definition: winuser.h:781
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
addon_t
Definition: appwiz.h:56
#define GENERIC_READ
Definition: compat.h:124
#define WM_COMMAND
Definition: winuser.h:1716
#define E_ABORT
Definition: winerror.h:2366
#define ERROR_MORE_DATA
Definition: dderror.h:13
void WINAPI A_SHAFinal(PSHA_CTX, PULONG)
Definition: sha1.c:171
#define GECKO_VERSION
Definition: addons.c:29
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define ERR(fmt,...)
Definition: debug.h:109
#define S_OK
Definition: intsafe.h:59
#define IDS_INSTALLING
Definition: resource.h:33
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define E_NOTIMPL
Definition: ddrawi.h:99
_CRTIMP int __cdecl _open(const char *_Filename, int _OpenFlag,...)
Definition: file.c:2001
BOOL install_addon(addon_t addon_type, HWND hwnd_parent)
Definition: addons.c:422
static const addon_info_t * addon
Definition: addons.c:59
unsigned int * PULONG
Definition: retypes.h:1
static const CHAR mshtml_keyA[]
Definition: addons.c:194
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
#define PAGE_READONLY
Definition: compat.h:127
cd_progress_ptr progress
Definition: cdjpeg.h:150
#define IDS_DOWNLOADING
Definition: resource.h:32
#define MultiByteToWideChar
Definition: compat.h:100
static LPCWSTR file_name
Definition: protocol.c:146
#define CreateFileW
Definition: compat.h:400
#define IDS_DWL_FAILED
Definition: resource.h:35
static HRESULT WINAPI InstallCallback_GetBindInfo(IBindStatusCallback *iface, DWORD *grfBINDF, BINDINFO *pbindinfo)
Definition: addons.c:314
#define msg(x)
Definition: auth_time.c:54
GLuint res
Definition: glext.h:9613
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
unsigned int ULONG
Definition: retypes.h:1
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
static const addon_info_t addons_info[]
Definition: addons.c:48
#define ARCH_STRING
Definition: addons.c:35
const char * sha
Definition: addons.c:42
#define RRF_RT_ANY
Definition: winreg.h:64
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
static enum install_res install_from_registered_dir(void)
Definition: addons.c:199
#define UnmapViewOfFile
Definition: compat.h:403
install_res
Definition: addons.c:130
BYTE * PBYTE
Definition: pedump.c:66
#define WM_INITDIALOG
Definition: winuser.h:1715
LPARAM lParam
Definition: combotst.c:139
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define WM_NOTIFY
Definition: richedit.h:61
const char * version
Definition: addons.c:40
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint GLenum GLenum GLenum GLint GLuint GLenum GLenum GLfloat GLenum GLfloat GLenum map
Definition: glfuncs.h:262
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
TCHAR file_path[MAX_PATH]
Definition: sndrec32.cpp:57
#define O_RDONLY
Definition: acwin.h:82
Definition: fci.c:126
#define REG_SZ
Definition: layer.c:22
static DWORD WINAPI download_proc(PVOID arg)
Definition: addons.c:352
Definition: ps.c:97