Alexandre Julliard : wldap32: Added a wrapper for ber_printf.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 18 14:34:56 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 7a1fb2ecb40921eb4f6302ffd3e10d78a50cc208
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=7a1fb2ecb40921eb4f6302ffd3e10d78a50cc208

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Apr 18 20:40:40 2006 +0200

wldap32: Added a wrapper for ber_printf.

---

 dlls/wldap32/ber.c        |   83 +++++++++++++++++++++++++++++++++++++++++++--
 dlls/wldap32/wldap32.spec |    2 +
 2 files changed, 81 insertions(+), 4 deletions(-)

diff --git a/dlls/wldap32/ber.c b/dlls/wldap32/ber.c
index 5353498..8110a07 100644
--- a/dlls/wldap32/ber.c
+++ b/dlls/wldap32/ber.c
@@ -24,6 +24,9 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winldap.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(wldap32);
 
 #ifndef LBER_ERROR
 # define LBER_ERROR (~0U)
@@ -166,13 +169,87 @@ ULONG WLDAP32_ber_skip_tag( BerElement *
 }
 
 
-#ifndef HAVE_LDAP
-
-INT ber_printf( BerElement *berelement, PCHAR fmt, ... )
+/***********************************************************************
+ *      ber_printf     (WLDAP32.@)
+ */
+INT WLDAP32_ber_printf( BerElement *berelement, PCHAR fmt, ... )
 {
+#ifdef HAVE_LDAP
+    va_list list;
+    int ret = 0;
+    char new_fmt[2];
+
+    new_fmt[1] = 0;
+    va_start( list, fmt );
+    while (*fmt)
+    {
+        new_fmt[0] = *fmt++;
+        switch(new_fmt[0])
+        {
+        case 'b':
+        case 'e':
+        case 'i':
+            {
+                int i = va_arg( list, int );
+                ret = ber_printf( berelement, new_fmt, i );
+                break;
+            }
+        case 'o':
+        case 's':
+            {
+                char *str = va_arg( list, char * );
+                ret = ber_printf( berelement, new_fmt, str );
+                break;
+            }
+        case 't':
+            {
+                unsigned int tag = va_arg( list, unsigned int );
+                ret = ber_printf( berelement, new_fmt, tag );
+                break;
+            }
+        case 'v':
+            {
+                char **array = va_arg( list, char ** );
+                ret = ber_printf( berelement, new_fmt, array );
+                break;
+            }
+        case 'V':
+            {
+                struct berval **array = va_arg( list, struct berval ** );
+                ret = ber_printf( berelement, new_fmt, array );
+                break;
+            }
+        case 'X':
+            {
+                char *str = va_arg( list, char * );
+                int len = va_arg( list, int );
+                ret = ber_printf( berelement, "B" /* 'X' is deprecated */, str, len );
+                break;
+            }
+        case 'n':
+        case '{':
+        case '}':
+        case '[':
+        case ']':
+            ret = ber_printf( berelement, new_fmt );
+            break;
+        default:
+            FIXME( "Unknown format '%c'\n", new_fmt[0] );
+            ret = -1;
+            break;
+        }
+        if (ret == -1) break;
+    }
+    va_end( list );
+    return ret;
+#else
     return LBER_ERROR;
+#endif
 }
 
+
+#ifndef HAVE_LDAP
+
 INT ber_scanf( BerElement *berelement, PCHAR fmt, ... )
 {
     return LBER_ERROR;
diff --git a/dlls/wldap32/wldap32.spec b/dlls/wldap32/wldap32.spec
index 93d4b18..1c3a68a 100644
--- a/dlls/wldap32/wldap32.spec
+++ b/dlls/wldap32/wldap32.spec
@@ -225,7 +225,7 @@
 307 cdecl ber_first_element(ptr ptr ptr) WLDAP32_ber_first_element
 308 cdecl ber_next_element(ptr ptr ptr) WLDAP32_ber_next_element
 309 cdecl ber_flatten(ptr ptr) WLDAP32_ber_flatten
-310 varargs ber_printf(ptr str)
+310 varargs ber_printf(ptr str) WLDAP32_ber_printf
 311 varargs ber_scanf(ptr str)
 312 cdecl ldap_conn_from_msg(ptr ptr)
 313 cdecl ldap_sasl_bindW(ptr wstr wstr ptr ptr ptr ptr)




More information about the wine-cvs mailing list