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