ReactOS  0.4.14-dev-552-g2fad488
setupcab.c
Go to the documentation of this file.
1 /*
2  * Unit tests for SetupIterateCabinet
3  *
4  * Copyright 2007 Hans Leidekker
5  * Copyright 2010 Andrew Nguyen
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #include <stdarg.h>
23 
24 #include "windef.h"
25 #include "winbase.h"
26 #include "wingdi.h"
27 #include "winuser.h"
28 #include "winreg.h"
29 #include "setupapi.h"
30 #include "wine/test.h"
31 
32 static const BYTE comp_cab_zip_multi[] = {
33  0x4d, 0x53, 0x43, 0x46, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34  0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00,
35  0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x0a, 0x00, 0x00, 0x00,
36  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x38, 0xf0, 0x48, 0x20, 0x00, 0x74, 0x72, 0x69, 0x73,
37  0x74, 0x72, 0x61, 0x6d, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1,
38  0x38, 0xf0, 0x48, 0x20, 0x00, 0x77, 0x69, 0x6e, 0x65, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x00,
39  0x00, 0x00, 0x00, 0x00, 0xd1, 0x38, 0xf0, 0x48, 0x20, 0x00, 0x73, 0x68, 0x61, 0x6e, 0x64, 0x79,
40  0x00, 0x67, 0x2c, 0x03, 0x85, 0x23, 0x00, 0x20, 0x00, 0x43, 0x4b, 0xcb, 0x49, 0x2c, 0x2d, 0x4a,
41  0xcd, 0x4b, 0x4e, 0xe5, 0xe5, 0x2a, 0xcd, 0x4b, 0xce, 0xcf, 0x2d, 0x28, 0x4a, 0x2d, 0x2e, 0x4e,
42  0x4d, 0xe1, 0xe5, 0x2a, 0x2e, 0x49, 0x2d, 0xca, 0x03, 0x8a, 0x02, 0x00
43 };
44 
45 static const WCHAR docW[] = {'d','o','c',0};
46 
48 {
49  HANDLE handle;
50  DWORD written;
51 
54  WriteFile(handle, data, size, &written, NULL);
56 }
57 
59 {
60  HANDLE handle;
61  DWORD written;
62 
65  WriteFile(handle, data, size, &written, NULL);
67 }
68 
70  UINT_PTR Param1, UINT_PTR Param2)
71 {
72  ok(0, "Received unexpected notification (%p, %u, %lu, %lu)\n", Context,
73  Notification, Param1, Param2);
74  return 0;
75 }
76 
78  UINT_PTR Param1, UINT_PTR Param2)
79 {
80  ok(0, "Received unexpected notification (%p, %u, %lu, %lu)\n", Context,
81  Notification, Param1, Param2);
82  return 0;
83 }
84 
85 static void test_invalid_parametersA(void)
86 {
87  BOOL ret;
88  char source[MAX_PATH], temp[MAX_PATH];
89  int i;
90 
91  const struct
92  {
93  PCSTR CabinetFile;
94  PSP_FILE_CALLBACK_A MsgHandler;
95  DWORD expected_lasterror;
96  int todo_lasterror;
97  } invalid_parameters[] =
98  {
101  {"c:\\nonexistent.cab", NULL, ERROR_FILE_NOT_FOUND},
102  {"c:\\nonexistent.cab", dummy_callbackA, ERROR_FILE_NOT_FOUND},
105  };
106 
107  GetTempPathA(sizeof(temp), temp);
108  GetTempFileNameA(temp, "doc", 0, source);
109 
111 
112  for (i = 0; i < ARRAY_SIZE(invalid_parameters); i++)
113  {
114  SetLastError(0xdeadbeef);
115  ret = SetupIterateCabinetA(invalid_parameters[i].CabinetFile, 0,
116  invalid_parameters[i].MsgHandler, NULL);
117  ok(!ret, "[%d] Expected SetupIterateCabinetA to return 0, got %d\n", i, ret);
118  todo_wine_if (invalid_parameters[i].todo_lasterror)
119  ok(GetLastError() == invalid_parameters[i].expected_lasterror,
120  "[%d] Expected GetLastError() to return %u, got %u\n",
121  i, invalid_parameters[i].expected_lasterror, GetLastError());
122  }
123 
124  SetLastError(0xdeadbeef);
125  ret = SetupIterateCabinetA("", 0, NULL, NULL);
126  ok(!ret, "Expected SetupIterateCabinetA to return 0, got %d\n", ret);
128  GetLastError() == ERROR_FILE_NOT_FOUND, /* Win9x/NT4/Win2k */
129  "Expected GetLastError() to return ERROR_NOT_ENOUGH_MEMORY, got %u\n",
130  GetLastError());
131 
132  SetLastError(0xdeadbeef);
134  ok(!ret, "Expected SetupIterateCabinetA to return 0, got %d\n", ret);
136  GetLastError() == ERROR_FILE_NOT_FOUND, /* Win9x/NT4/Win2k */
137  "Expected GetLastError() to return ERROR_NOT_ENOUGH_MEMORY, got %u\n",
138  GetLastError());
139 
141 }
142 
143 static void test_invalid_parametersW(void)
144 {
145  static const WCHAR nonexistentW[] = {'c',':','\\','n','o','n','e','x','i','s','t','e','n','t','.','c','a','b',0};
146  static const WCHAR emptyW[] = {0};
147 
148  BOOL ret;
150  int i;
151 
152  const struct
153  {
154  PCWSTR CabinetFile;
155  PSP_FILE_CALLBACK_W MsgHandler;
156  DWORD expected_lasterror;
157  int todo_lasterror;
158  } invalid_parameters[] =
159  {
160  {nonexistentW, NULL, ERROR_FILE_NOT_FOUND},
161  {nonexistentW, dummy_callbackW, ERROR_FILE_NOT_FOUND},
164  };
165 
168  {
169  win_skip("SetupIterateCabinetW is not available\n");
170  return;
171  }
172 
175 
177 
178  for (i = 0; i < ARRAY_SIZE(invalid_parameters); i++)
179  {
180  SetLastError(0xdeadbeef);
181  ret = SetupIterateCabinetW(invalid_parameters[i].CabinetFile, 0,
182  invalid_parameters[i].MsgHandler, NULL);
183  ok(!ret, "[%d] Expected SetupIterateCabinetW to return 0, got %d\n", i, ret);
184  todo_wine_if (invalid_parameters[i].todo_lasterror)
185  ok(GetLastError() == invalid_parameters[i].expected_lasterror,
186  "[%d] Expected GetLastError() to return %u, got %u\n",
187  i, invalid_parameters[i].expected_lasterror, GetLastError());
188  }
189 
190  SetLastError(0xdeadbeef);
192  ok(!ret, "Expected SetupIterateCabinetW to return 0, got %d\n", ret);
194  GetLastError() == ERROR_NOT_ENOUGH_MEMORY, /* Vista/Win2k8 */
195  "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n",
196  GetLastError());
197 
198  SetLastError(0xdeadbeef);
200  ok(!ret, "Expected SetupIterateCabinetW to return 0, got %d\n", ret);
202  GetLastError() == ERROR_NOT_ENOUGH_MEMORY, /* Vista/Win2k8 */
203  "Expected GetLastError() to return ERROR_INVALID_PARAMETER, got %u\n",
204  GetLastError());
205 
206  SetLastError(0xdeadbeef);
208  ok(!ret, "Expected SetupIterateCabinetW to return 0, got %d\n", ret);
210  GetLastError() == ERROR_FILE_NOT_FOUND, /* NT4/Win2k */
211  "Expected GetLastError() to return ERROR_NOT_ENOUGH_MEMORY, got %u\n",
212  GetLastError());
213 
214  SetLastError(0xdeadbeef);
216  ok(!ret, "Expected SetupIterateCabinetW to return 0, got %d\n", ret);
218  GetLastError() == ERROR_FILE_NOT_FOUND, /* NT4/Win2k */
219  "Expected GetLastError() to return ERROR_NOT_ENOUGH_MEMORY, got %u\n",
220  GetLastError());
221 
223 }
224 
226  UINT_PTR Param1, UINT_PTR Param2)
227 {
228  *(volatile char*)0 = 2;
229  return 0;
230 }
231 
233  UINT_PTR Param1, UINT_PTR Param2)
234 {
235  *(volatile char*)0 = 2;
236  return 0;
237 }
238 
239 static void test_invalid_callbackA(void)
240 {
241  BOOL ret;
242  char source[MAX_PATH], temp[MAX_PATH];
243 
244  GetTempPathA(sizeof(temp), temp);
245  GetTempFileNameA(temp, "doc", 0, source);
246 
248 
249  SetLastError(0xdeadbeef);
251  ok(!ret, "Expected SetupIterateCabinetA to return 0, got %d\n", ret);
253  "Expected GetLastError() to return ERROR_INVALID_DATA, got %u\n",
254  GetLastError());
255 
256  SetLastError(0xdeadbeef);
258  ok(!ret, "Expected SetupIterateCabinetA to return 0, got %d\n", ret);
260  "Expected GetLastError() to return ERROR_INVALID_DATA, got %u\n",
261  GetLastError());
262 
264 }
265 
266 static void test_invalid_callbackW(void)
267 {
268  BOOL ret;
270 
273  {
274  win_skip("SetupIterateCabinetW is not available\n");
275  return;
276  }
277 
280 
282 
283  SetLastError(0xdeadbeef);
285  ok(!ret, "Expected SetupIterateCabinetW to return 0, got %d\n", ret);
287  "Expected GetLastError() to return ERROR_INVALID_DATA, got %u\n",
288  GetLastError());
289 
290  SetLastError(0xdeadbeef);
292  ok(!ret, "Expected SetupIterateCabinetW to return 0, got %d\n", ret);
294  "Expected GetLastError() to return ERROR_INVALID_DATA, got %u\n",
295  GetLastError());
296 
298 }
299 
300 static const char *expected_files[] = {"tristram", "wine", "shandy"};
301 
302 struct contextA
303 {
304  int count;
305  const char *cabinet;
306  const char *target;
307 };
308 
310  UINT_PTR Param1, UINT_PTR Param2)
311 {
312  static int index;
313  struct contextA *ctx = Context;
314 
315  switch (Notification)
316  {
318  {
319  CABINET_INFO_A *info = (CABINET_INFO_A *)Param1;
320 
321  ok(!strcmp(info->CabinetFile, ""),
322  "Expected empty CabinetFile, got \"%s\"\n", info->CabinetFile);
323 
324  index = 0;
325  return NO_ERROR;
326  }
328  {
330  const char *cabinet_file = (const char *)Param2;
331 
332  ctx->count++;
333 
335  {
336  ok(!strcmp(expected_files[index], info->NameInCabinet),
337  "[%d] Expected file \"%s\", got \"%s\"\n",
338  index, expected_files[index], info->NameInCabinet);
339  ok(!strcmp(ctx->cabinet, cabinet_file),
340  "[%d] Expected cabinet \"%s\", got \"%s\"\n",
341  index, ctx->cabinet, cabinet_file);
342 
343  strcpy(info->FullTargetName, ctx->target);
344  return FILEOP_DOIT;
345  }
346  else
347  {
348  ok(0, "Unexpectedly enumerated more than number of files in cabinet, index = %d\n", index);
349  return FILEOP_ABORT;
350  }
351  }
353  {
354  FILEPATHS_A *info = (FILEPATHS_A *)Param1;
355 
356  ok(!strcmp(ctx->cabinet, info->Source),
357  "[%d] Expected cabinet \"%s\", got \"%s\"\n",
358  index, ctx->cabinet, info->Source);
359  ok(!strcmp(ctx->target, info->Target),
360  "[%d] Expected target \"%s\", got \"%s\"\n",
361  index, ctx->target, info->Target);
362  ok(info->Win32Error == 0,
363  "[%d] Expected Win32Error 0, got %u\n",
364  index, info->Win32Error);
365 
366  index++;
367  return NO_ERROR;
368  }
369  default:
370  return NO_ERROR;
371  }
372 }
373 
374 static void test_simple_enumerationA(void)
375 {
376  BOOL ret;
377  char source[MAX_PATH], temp[MAX_PATH];
378  char target[MAX_PATH];
379  struct contextA ctx;
380 
381  GetTempPathA(sizeof(temp), temp);
382  GetTempFileNameA(temp, "doc", 0, source);
383  GetTempFileNameA(temp, "doc", 0, target);
384 
386 
387  ctx.count = 0;
388  ctx.cabinet = source;
389  ctx.target = target;
391  ok(ret == 1, "Expected SetupIterateCabinetA to return 1, got %d\n", ret);
392  ok(ctx.count == ARRAY_SIZE(expected_files), "Unexpectedly enumerated %d files\n", ctx.count);
393 
396 }
397 
398 static const WCHAR tristramW[] = {'t','r','i','s','t','r','a','m',0};
399 static const WCHAR wineW[] = {'w','i','n','e',0};
400 static const WCHAR shandyW[] = {'s','h','a','n','d','y',0};
402 
403 struct contextW
404 {
405  int count;
406  const WCHAR *cabinet;
407  const WCHAR *target;
408 };
409 
411  UINT_PTR Param1, UINT_PTR Param2)
412 {
413  static const WCHAR emptyW[] = {0};
414  static int index;
415  struct contextW *ctx = Context;
416 
417  switch (Notification)
418  {
420  {
421  CABINET_INFO_W *info = (CABINET_INFO_W *)Param1;
422 
423  ok(!lstrcmpW(info->CabinetFile, emptyW),
424  "Expected empty CabinetFile, got %s\n", wine_dbgstr_w(info->CabinetFile));
425 
426  index = 0;
427  return NO_ERROR;
428  }
430  {
432  const WCHAR *cabinet_file = (const WCHAR *)Param2;
433 
434  ctx->count++;
435 
437  {
438  ok(!lstrcmpW(expected_filesW[index], info->NameInCabinet),
439  "[%d] Expected file %s, got %s\n",
441  ok(!lstrcmpW(ctx->cabinet, cabinet_file),
442  "[%d] Expected cabinet %s, got %s\n",
443  index, wine_dbgstr_w(ctx->cabinet), wine_dbgstr_w(cabinet_file));
444 
445  lstrcpyW(info->FullTargetName, ctx->target);
446  return FILEOP_DOIT;
447  }
448  else
449  {
450  ok(0, "Unexpectedly enumerated more than number of files in cabinet, index = %d\n", index);
451  return FILEOP_ABORT;
452  }
453  }
455  {
456  FILEPATHS_W *info = (FILEPATHS_W *)Param1;
457 
458  ok(!lstrcmpW(ctx->cabinet, info->Source),
459  "[%d] Expected cabinet %s, got %s\n",
460  index, wine_dbgstr_w(ctx->cabinet), wine_dbgstr_w(info->Source));
461  ok(!lstrcmpW(ctx->target, info->Target),
462  "[%d] Expected target %s, got %s\n",
463  index, wine_dbgstr_w(ctx->target), wine_dbgstr_w(info->Target));
464  ok(info->Win32Error == 0,
465  "[%d] Expected Win32Error 0, got %u\n",
466  index, info->Win32Error);
467 
468  index++;
469  return NO_ERROR;
470  }
471  default:
472  return NO_ERROR;
473  }
474 }
475 
476 static void test_simple_enumerationW(void)
477 {
478  BOOL ret;
481  struct contextW ctx;
482 
485  {
486  win_skip("SetupIterateCabinetW is not available\n");
487  return;
488  }
489 
493 
495 
496  ctx.count = 0;
497  ctx.cabinet = source;
498  ctx.target = target;
500  ok(ret == 1, "Expected SetupIterateCabinetW to return 1, got %d\n", ret);
501  ok(ctx.count == ARRAY_SIZE(expected_files), "Unexpectedly enumerated %d files\n", ctx.count);
502 
505 }
506 
507 START_TEST(setupcab)
508 {
511 
512  /* Tests crash on NT4/Win9x/Win2k and Wine. */
513  if (0)
514  {
517  }
518 
521 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
BOOL WINAPI SetupIterateCabinetA(PCSTR CabinetFile, DWORD Reserved, PSP_FILE_CALLBACK_A MsgHandler, PVOID Context)
Definition: setupcab.c:510
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
const uint16_t * PCWSTR
Definition: typedefs.h:55
static UINT CALLBACK crash_callbackA(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
Definition: setupcab.c:225
const WCHAR * target
Definition: setupcab.c:407
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
Definition: sock.c:82
#define CloseHandle
Definition: compat.h:406
static const BYTE comp_cab_zip_multi[]
Definition: setupcab.c:32
#define SPFILENOTIFY_FILEEXTRACTED
Definition: setupapi.h:559
START_TEST(setupcab)
Definition: setupcab.c:507
char * wine_dbgstr_w(const wchar_t *wstr)
Definition: atltest.h:87
static void test_invalid_callbackA(void)
Definition: setupcab.c:239
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
#define CALLBACK
Definition: compat.h:27
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
UINT(CALLBACK * PSP_FILE_CALLBACK_A)(PVOID, UINT, UINT_PTR, UINT_PTR)
Definition: setupapi.h:871
static const WCHAR tristramW[]
Definition: setupcab.c:398
BOOL WINAPI SetupIterateCabinetW(PCWSTR CabinetFile, DWORD Reserved, PSP_FILE_CALLBACK_W MsgHandler, PVOID Context)
Definition: setupcab.c:575
static const char * expected_files[]
Definition: setupcab.c:300
const char * target
Definition: setupcab.c:306
char * LPSTR
Definition: xmlstorage.h:182
const char * filename
Definition: ioapi.h:135
#define NO_ERROR
Definition: dderror.h:5
const WCHAR * cabinet
Definition: setupcab.c:406
#define FILEOP_ABORT
Definition: fileqsup.h:47
static void create_source_fileW(LPWSTR filename, const BYTE *data, DWORD size)
Definition: setupcab.c:58
static UINT CALLBACK crash_callbackW(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
Definition: setupcab.c:232
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
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2079
unsigned int BOOL
Definition: ntddk_ex.h:94
#define GENERIC_WRITE
Definition: nt_native.h:90
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
static UINT CALLBACK simple_callbackA(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
Definition: setupcab.c:309
smooth NULL
Definition: ftsmooth.c:416
static void test_invalid_parametersA(void)
Definition: setupcab.c:85
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
Definition: delete.c:24
GLuint index
Definition: glext.h:6031
static void test_invalid_parametersW(void)
Definition: setupcab.c:143
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
int count
Definition: setupcab.c:405
#define SPFILENOTIFY_CABINETINFO
Definition: setupapi.h:556
#define todo_wine_if(is_todo)
Definition: test.h:164
#define FILEOP_DOIT
Definition: fileqsup.h:48
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT(CALLBACK * PSP_FILE_CALLBACK_W)(IN PVOID Context, IN UINT Notification, IN UINT_PTR Param1, IN UINT_PTR Param2)
Definition: fileqsup.h:66
#define MAX_PATH
Definition: compat.h:26
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
Definition: filename.c:84
static const WCHAR wineW[]
Definition: setupcab.c:399
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SetLastError(x)
Definition: compat.h:417
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
int ret
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
#define index(s, c)
Definition: various.h:29
unsigned char BYTE
Definition: mem.h:68
#define SPFILENOTIFY_FILEINCABINET
Definition: setupapi.h:557
static const WCHAR shandyW[]
Definition: setupcab.c:400
static UINT CALLBACK simple_callbackW(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
Definition: setupcab.c:410
#define ERROR_INVALID_DATA
Definition: winerror.h:116
#define CREATE_ALWAYS
Definition: disk.h:72
static const WCHAR emptyW[]
Definition: navigate.c:40
#define lstrcpyW
Definition: compat.h:414
const char * cabinet
Definition: setupcab.c:305
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
Definition: path.c:2053
static calc_node_t temp
Definition: rpn_ieee.c:38
static void test_simple_enumerationA(void)
Definition: setupcab.c:374
GLsizei GLsizei GLchar * source
Definition: glext.h:6048
#define ARRAY_SIZE(a)
Definition: main.h:24
#define ok(value,...)
Definition: atltest.h:57
static void test_invalid_callbackW(void)
Definition: setupcab.c:266
static const WCHAR * expected_filesW[]
Definition: setupcab.c:401
unsigned int UINT
Definition: ndis.h:50
static UINT CALLBACK dummy_callbackW(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
Definition: setupcab.c:77
int count
Definition: setupcab.c:304
#define CreateFileW
Definition: compat.h:408
static void create_source_fileA(LPSTR filename, const BYTE *data, DWORD size)
Definition: setupcab.c:47
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
struct tagContext Context
Definition: acpixf.h:1030
GLenum target
Definition: glext.h:7315
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:92
const char * PCSTR
Definition: typedefs.h:51
static const WCHAR docW[]
Definition: setupcab.c:45
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:407
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define win_skip
Definition: test.h:150
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
Definition: filename.c:26
static void test_simple_enumerationW(void)
Definition: setupcab.c:476
static UINT CALLBACK dummy_callbackA(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
Definition: setupcab.c:69