Commit 7628fcdd authored by Andrey Turkin's avatar Andrey Turkin Committed by Alexandre Julliard

extrac32: Implement /C mode.

parent 2db497e8
...@@ -5,7 +5,7 @@ VPATH = @srcdir@ ...@@ -5,7 +5,7 @@ VPATH = @srcdir@
MODULE = extrac32.exe MODULE = extrac32.exe
APPMODE = -mwindows -municode APPMODE = -mwindows -municode
EXTRADEFS = -DWINE_NO_UNICODE EXTRADEFS = -DWINE_NO_UNICODE
IMPORTS = shell32 setupapi user32 kernel32 IMPORTS = shell32 setupapi shlwapi user32 kernel32
C_SRCS = \ C_SRCS = \
extrac32.c extrac32.c
......
...@@ -22,12 +22,15 @@ ...@@ -22,12 +22,15 @@
#include <windows.h> #include <windows.h>
#include <shellapi.h> #include <shellapi.h>
#include <setupapi.h> #include <setupapi.h>
#include <shlwapi.h>
#include "wine/unicode.h" #include "wine/unicode.h"
#include "wine/debug.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(extrac32); WINE_DEFAULT_DEBUG_CHANNEL(extrac32);
static BOOL force_mode;
static UINT WINAPI ExtCabCallback(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2) static UINT WINAPI ExtCabCallback(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
{ {
FILE_IN_CABINET_INFO_W *pInfo; FILE_IN_CABINET_INFO_W *pInfo;
...@@ -54,6 +57,31 @@ static void extract(LPCWSTR cabfile, LPWSTR destdir) ...@@ -54,6 +57,31 @@ static void extract(LPCWSTR cabfile, LPWSTR destdir)
WINE_ERR("Could not extract cab file %s\n", wine_dbgstr_w(cabfile)); WINE_ERR("Could not extract cab file %s\n", wine_dbgstr_w(cabfile));
} }
static void copy_file(LPCWSTR source, LPCWSTR destination)
{
WCHAR destfile[MAX_PATH];
/* append source filename if destination is a directory */
if (PathIsDirectoryW(destination))
{
PathCombineW(destfile, destination, PathFindFileNameW(source));
destination = destfile;
}
if (PathFileExistsW(destination) && !force_mode)
{
static const WCHAR overwriteMsg[] = {'O','v','e','r','w','r','i','t','e',' ','"','%','s','"','?',0};
static const WCHAR titleMsg[] = {'E','x','t','r','a','c','t',0};
WCHAR msg[MAX_PATH+100];
snprintfW(msg, sizeof(msg)/sizeof(msg[0]), overwriteMsg, destination);
if (MessageBoxW(NULL, msg, titleMsg, MB_YESNO | MB_ICONWARNING) != IDYES)
return;
}
WINE_TRACE("copying %s to %s\n", wine_dbgstr_w(source), wine_dbgstr_w(destination));
CopyFileW(source, destination, FALSE);
}
int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int show) int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int show)
{ {
LPWSTR *argv; LPWSTR *argv;
...@@ -90,7 +118,7 @@ int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sho ...@@ -90,7 +118,7 @@ int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sho
WINE_FIXME("/A not implemented\n"); WINE_FIXME("/A not implemented\n");
break; break;
case 'Y': case 'Y':
WINE_FIXME("/Y not implemented\n"); force_mode = TRUE;
break; break;
case 'L': case 'L':
if ((i + 1) >= argc) return 0; if ((i + 1) >= argc) return 0;
...@@ -128,7 +156,7 @@ int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sho ...@@ -128,7 +156,7 @@ int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int sho
{ {
case 'C': case 'C':
/* Copy file */ /* Copy file */
WINE_FIXME("/C not implemented\n"); copy_file(cabfile, path);
break; break;
case 'E': case 'E':
/* Extract CAB archive */ /* Extract CAB archive */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment