Honour the VNLP_COPYIFEXISTS flag when doing a copy operation.
diff --git a/dlls/setupapi/setupx16.h b/dlls/setupapi/setupx16.h
index a301d19..50e2f64 100644
--- a/dlls/setupapi/setupx16.h
+++ b/dlls/setupapi/setupx16.h
@@ -360,6 +360,20 @@
typedef int (CALLBACK *VCPENUMPROC)(LPVIRTNODE lpvn, LPARAM lparamRef);
RETERR16 WINAPI VcpOpen16(VIFPROC vifproc, LPARAM lparamMsgRef);
+
+/* VcpQueueCopy flags */
+#define VNLP_SYSCRITICAL 0x0001
+#define VNLP_SETUPCRITICAL 0x0002
+#define VNLP_NOVERCHECK 0x0004
+#define VNLP_FORCETEMP 0x0008
+#define VNLP_IFEXISTS 0x0010
+#define VNLP_KEEPNEWER 0x0020
+#define VNLP_PATCHIFEXIST 0x0040
+#define VNLP_NOPATCH 0x0080
+#define VNLP_CATALOGCERT 0x0100
+#define VNLP_NEEDCERTIFY 0x0200
+#define VNLP_COPYIFEXISTS 0x0400
+
RETERR16 WINAPI VcpQueueCopy16(
LPCSTR lpszSrcFileName, LPCSTR lpszDstFileName,
LPCSTR lpszSrcDir, LPCSTR lpszDstDir,
diff --git a/dlls/setupapi/virtcopy.c b/dlls/setupapi/virtcopy.c
index 597ae10..82ca725 100644
--- a/dlls/setupapi/virtcopy.c
+++ b/dlls/setupapi/virtcopy.c
@@ -467,7 +467,8 @@
/* FIXME: need to do the file copy in small chunks for notifications */
TRACE("copying '%s' to '%s'\n", fn_src, fn_dst);
/* perform the file copy */
- if (!(CopyFileA(fn_src, fn_dst, TRUE)))
+ if (!(CopyFileA(fn_src, fn_dst,
+ (lpvn->fl & VNLP_COPYIFEXISTS) ? FALSE : TRUE )))
{
ERR("error copying, src: %s -> dst: %s\n", fn_src, fn_dst);
res = ERR_VCP_IOFAIL;