[PATCH v2 11/12] prntvpt: Implement PTMergeAndValidatePrintTicket.

Dmitry Timoshkov dmitry at baikal.ru
Wed Jun 17 00:22:38 CDT 2020


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/prntvpt/prntvpt.spec |  2 +-
 dlls/prntvpt/ticket.c     | 28 ++++++++++++++++++++++++++++
 include/prntvpt.h         |  5 ++++-
 3 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/dlls/prntvpt/prntvpt.spec b/dlls/prntvpt/prntvpt.spec
index bae26fab9d..9563d9ae37 100644
--- a/dlls/prntvpt/prntvpt.spec
+++ b/dlls/prntvpt/prntvpt.spec
@@ -4,7 +4,7 @@
 @ stdcall PTCloseProvider(ptr)
 @ stub BindPTProviderThunk
 @ stub PTGetPrintCapabilities
-@ stub PTMergeAndValidatePrintTicket
+@ stdcall PTMergeAndValidatePrintTicket(ptr ptr ptr long ptr ptr)
 @ stdcall PTConvertPrintTicketToDevMode(ptr ptr long long ptr ptr ptr)
 @ stdcall PTConvertDevModeToPrintTicket(ptr long ptr long ptr)
 @ stdcall PTReleaseMemory(ptr)
diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c
index e9745233c9..42cdec6ec0 100644
--- a/dlls/prntvpt/ticket.c
+++ b/dlls/prntvpt/ticket.c
@@ -1227,3 +1227,31 @@ HRESULT WINAPI PTConvertDevModeToPrintTicket(HPTPROVIDER provider, ULONG size, P
 
     return write_ticket(stream, &ticket, scope);
 }
+
+HRESULT WINAPI PTMergeAndValidatePrintTicket(HPTPROVIDER provider, IStream *base, IStream *delta,
+                                             EPrintTicketScope scope, IStream *result, BSTR *error)
+{
+    struct prn_provider *prov = (struct prn_provider *)provider;
+    struct ticket ticket;
+    HRESULT hr;
+
+    TRACE("%p,%p,%p,%d,%p,%p\n", provider, base, delta, scope, result, error);
+
+    if (!is_valid_provider(provider) || !base || !result)
+        return E_INVALIDARG;
+
+    hr = initialize_ticket(prov, &ticket);
+    if (hr != S_OK) return hr;
+
+    hr = parse_ticket(base, scope, &ticket);
+    if (hr != S_OK) return hr;
+
+    if (delta)
+    {
+        hr = parse_ticket(delta, scope, &ticket);
+        if (hr != S_OK) return hr;
+    }
+
+    hr = write_ticket(result, &ticket, scope);
+    return hr ? hr : S_PT_NO_CONFLICT;
+}
diff --git a/include/prntvpt.h b/include/prntvpt.h
index f1d7edc350..94b047d8c7 100644
--- a/include/prntvpt.h
+++ b/include/prntvpt.h
@@ -25,7 +25,9 @@ extern "C" {
 
 DECLARE_HANDLE(HPTPROVIDER);
 
-#define E_PRINTTICKET_FORMAT 0x80040003
+#define S_PT_NO_CONFLICT       0x00040001
+#define S_PT_CONFLICT_RESOLVED 0x00040002
+#define E_PRINTTICKET_FORMAT   0x80040003
 
 typedef enum
 {
@@ -45,6 +47,7 @@ HRESULT WINAPI PTOpenProviderEx(const WCHAR *printer, DWORD max_version, DWORD p
 HRESULT WINAPI PTCloseProvider(HPTPROVIDER);
 HRESULT WINAPI PTConvertDevModeToPrintTicket(HPTPROVIDER, ULONG, PDEVMODEW, EPrintTicketScope, IStream *);
 HRESULT WINAPI PTConvertPrintTicketToDevMode(HPTPROVIDER, IStream *, EDefaultDevmodeType, EPrintTicketScope, ULONG *, PDEVMODEW *, BSTR *);
+HRESULT WINAPI PTMergeAndValidatePrintTicket(HPTPROVIDER, IStream *, IStream *, EPrintTicketScope, IStream *, BSTR *);
 HRESULT WINAPI PTReleaseMemory(PVOID);
 
 #ifdef __cplusplus
-- 
2.26.2




More information about the wine-devel mailing list