MSI: enable asynchronous dll custom action calls
Mike McCormack
mike at codeweavers.com
Fri Dec 24 00:41:55 CST 2004
ChangeLog:
<aric at codeweavers.com>
* enable asynchronous dll custom action calls
-------------- next part --------------
Index: dlls/msi/action.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/action.c,v
retrieving revision 1.47
diff -u -r1.47 action.c
--- dlls/msi/action.c 23 Dec 2004 11:20:50 -0000 1.47
+++ dlls/msi/action.c 24 Dec 2004 06:30:28 -0000
@@ -1266,11 +1266,10 @@
typedef struct
{
MSIPACKAGE *package;
- WCHAR target[MAX_PATH];
- WCHAR source[MAX_PATH];
+ WCHAR *target;
+ WCHAR *source;
} thread_struct;
-#if 0
static DWORD WINAPI DllThread(LPVOID info)
{
HANDLE DLL;
@@ -1309,10 +1308,11 @@
else
ERR("Unable to load library\n");
msiobj_release( &stuff->package->hdr );
- HeapFree( GetProcessHeap(), 0, info );
+ HeapFree(GetProcessHeap(),0,stuff->source);
+ HeapFree(GetProcessHeap(),0,stuff->target);
+ HeapFree(GetProcessHeap(), 0, stuff);
return 0;
}
-#endif
static UINT HANDLE_CustomType1(MSIPACKAGE *package, const LPWSTR source,
const LPWSTR target, const INT type)
@@ -1335,18 +1335,16 @@
if (type & 0xc0)
{
- /* DWORD ThreadId; */
+ DWORD ThreadId;
thread_struct *info = HeapAlloc( GetProcessHeap(), 0, sizeof(*info) );
- /* msiobj_addref( &package->hdr ); */
+ msiobj_addref( &package->hdr );
info->package = package;
- strcpyW(info->target,target);
- strcpyW(info->source,tmp_file);
- TRACE("Start Asynchronous execution\n");
- FIXME("DATABASE NOT THREADSAFE... not starting\n");
- /* CreateThread(NULL,0,DllThread,(LPVOID)&info,0,&ThreadId); */
+ info->target = dupstrW(target);
+ info->source = dupstrW(tmp_file);
+ TRACE("Start Asynchronous execution of dll\n");
+ CreateThread(NULL,0,DllThread,(LPVOID)info,0,&ThreadId);
/* FIXME: release the package if the CreateThread fails */
- HeapFree( GetProcessHeap(), 0, info );
return ERROR_SUCCESS;
}
@@ -2866,6 +2864,11 @@
DeleteFileW(file->SourcePath);
rc = 0;
}
+ else if (rc == ERROR_FILE_NOT_FOUND)
+ {
+ ERR("Source File Not Found! Continueing\n");
+ rc = 0;
+ }
else
break;
}
@@ -3303,6 +3306,12 @@
DWORD sz;
UINT rc;
+ if (ptr==NULL)
+ {
+ TRACE("Deformatting NULL string\n");
+ *data = NULL;
+ return 0;
+ }
/* scan for special characters */
if (!strchrW(ptr,'[') || (strchrW(ptr,'[') && !strchrW(ptr,']')))
{
More information about the wine-patches
mailing list