Huw Davies : localspl: Implement GetForm().

Alexandre Julliard julliard at winehq.org
Wed May 19 14:55:14 CDT 2021


Module: wine
Branch: master
Commit: 649821071caf13846cfd9283fe9ea18a183d2e4d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=649821071caf13846cfd9283fe9ea18a183d2e4d

Author: Huw Davies <huw at codeweavers.com>
Date:   Wed May 19 14:43:10 2021 +0100

localspl: Implement GetForm().

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/localspl/provider.c | 40 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 38 insertions(+), 2 deletions(-)

diff --git a/dlls/localspl/provider.c b/dlls/localspl/provider.c
index 69f70cdf541..c17983e3037 100644
--- a/dlls/localspl/provider.c
+++ b/dlls/localspl/provider.c
@@ -2714,8 +2714,44 @@ static BOOL WINAPI fpDeleteForm( HANDLE printer, WCHAR *name )
 
 static BOOL WINAPI fpGetForm( HANDLE printer, WCHAR *name, DWORD level, BYTE *form, DWORD size, DWORD *needed )
 {
-    FIXME( "(%p, %s, %d, %p, %d, %p): stub\n", printer, debugstr_w( name ), level, form, size, needed );
-    return FALSE;
+    size_t struct_size = form_struct_size( level );
+    const struct builtin_form *builtin = NULL;
+    WCHAR *strings = NULL;
+    BYTE *base = form;
+    DWORD i;
+
+    TRACE( "(%p, %s, %d, %p, %d, %p)\n", printer, debugstr_w( name ), level, form, size, needed );
+
+    *needed = 0;
+
+    if (!struct_size) return FALSE;
+
+    for (i = 0; i < ARRAY_SIZE(builtin_forms); i++)
+    {
+        if (!wcscmp( name, builtin_forms[i].name ))
+        {
+            builtin = builtin_forms + i;
+            break;
+        }
+    }
+
+    if (!builtin)
+    {
+        SetLastError( ERROR_INVALID_FORM_NAME );
+        return FALSE;
+    }
+
+    *needed = struct_size;
+    if (*needed < size) strings = (WCHAR *)(form + *needed);
+
+    fill_builtin_form_info( &base, &strings, builtin, level, size, needed );
+
+    if (*needed > size)
+    {
+        SetLastError( ERROR_INSUFFICIENT_BUFFER );
+        return FALSE;
+    }
+    return TRUE;
 }
 
 static BOOL WINAPI fpSetForm( HANDLE printer, WCHAR *name, DWORD level, BYTE *form )




More information about the wine-cvs mailing list