Sergey Guralnik : extrac32: Create directory for extracted file if need.
Alexandre Julliard
julliard at winehq.org
Thu Apr 11 13:32:20 CDT 2013
Module: wine
Branch: master
Commit: 7925c9b0287e1fe28108afe879d454b18681369b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7925c9b0287e1fe28108afe879d454b18681369b
Author: Sergey Guralnik <serhio at etersoft.ru>
Date: Thu Apr 11 10:45:58 2013 +0300
extrac32: Create directory for extracted file if need.
---
programs/extrac32/extrac32.c | 19 +++++++++++++++++++
1 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/programs/extrac32/extrac32.c b/programs/extrac32/extrac32.c
index 111d2a7..644f885 100644
--- a/programs/extrac32/extrac32.c
+++ b/programs/extrac32/extrac32.c
@@ -23,6 +23,7 @@
#include <shellapi.h>
#include <setupapi.h>
#include <shlwapi.h>
+#include <shlobj.h>
#include "wine/unicode.h"
#include "wine/debug.h"
@@ -31,6 +32,21 @@ WINE_DEFAULT_DEBUG_CHANNEL(extrac32);
static BOOL force_mode;
+static void create_target_directory(LPWSTR Target)
+{
+ WCHAR dir[MAX_PATH];
+ int res;
+
+ strcpyW(dir, Target);
+ *PathFindFileNameW(dir) = 0; /* Truncate file name */
+ if(!PathIsDirectoryW(dir))
+ {
+ res = SHCreateDirectoryExW(NULL, dir, NULL);
+ if(res != ERROR_SUCCESS && res != ERROR_ALREADY_EXISTS)
+ WINE_ERR("Can't create directory: %s\n", wine_dbgstr_w(dir));
+ }
+}
+
static UINT WINAPI ExtCabCallback(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
{
FILE_IN_CABINET_INFO_W *pInfo;
@@ -42,6 +58,9 @@ static UINT WINAPI ExtCabCallback(PVOID Context, UINT Notification, UINT_PTR Par
pInfo = (FILE_IN_CABINET_INFO_W*)Param1;
lstrcpyW(pInfo->FullTargetName, (LPCWSTR)Context);
lstrcatW(pInfo->FullTargetName, pInfo->NameInCabinet);
+ /* SetupIterateCabinet() doesn't create full path to target by itself,
+ so we should do it manually */
+ create_target_directory(pInfo->FullTargetName);
return FILEOP_DOIT;
case SPFILENOTIFY_FILEEXTRACTED:
pFilePaths = (FILEPATHS_W*)Param1;
More information about the wine-cvs
mailing list