Alexandre Julliard : wldap32: Added a wrapper for ber_scanf.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Apr 18 14:34:59 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: ec9af18e96385a861de2b98a06d572d991ff7b61
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ec9af18e96385a861de2b98a06d572d991ff7b61
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Apr 18 20:41:03 2006 +0200
wldap32: Added a wrapper for ber_scanf.
---
dlls/wldap32/ber.c | 85 ++++++++++++++++++++++++++++++++++++++++++---
dlls/wldap32/wldap32.spec | 2 +
2 files changed, 81 insertions(+), 6 deletions(-)
diff --git a/dlls/wldap32/ber.c b/dlls/wldap32/ber.c
index 8110a07..78fc39f 100644
--- a/dlls/wldap32/ber.c
+++ b/dlls/wldap32/ber.c
@@ -248,11 +248,86 @@ INT WLDAP32_ber_printf( BerElement *bere
}
-#ifndef HAVE_LDAP
-
-INT ber_scanf( BerElement *berelement, PCHAR fmt, ... )
+/***********************************************************************
+ * ber_scanf (WLDAP32.@)
+ */
+INT WLDAP32_ber_scanf( 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 'a':
+ {
+ char **ptr = va_arg( list, char ** );
+ ret = ber_scanf( berelement, new_fmt, ptr );
+ break;
+ }
+ case 'b':
+ case 'e':
+ case 'i':
+ {
+ int *i = va_arg( list, int * );
+ ret = ber_scanf( berelement, new_fmt, i );
+ break;
+ }
+ case 't':
+ {
+ unsigned int *tag = va_arg( list, unsigned int * );
+ ret = ber_scanf( berelement, new_fmt, tag );
+ break;
+ }
+ case 'v':
+ {
+ char ***array = va_arg( list, char *** );
+ ret = ber_scanf( berelement, new_fmt, array );
+ break;
+ }
+ case 'B':
+ {
+ char **str = va_arg( list, char ** );
+ int *len = va_arg( list, int * );
+ ret = ber_scanf( berelement, new_fmt, str, len );
+ break;
+ }
+ case 'O':
+ {
+ struct berval **ptr = va_arg( list, struct berval ** );
+ ret = ber_scanf( berelement, new_fmt, ptr );
+ break;
+ }
+ case 'V':
+ {
+ struct berval ***array = va_arg( list, struct berval *** );
+ ret = ber_scanf( berelement, new_fmt, array );
+ break;
+ }
+ case 'n':
+ case 'x':
+ case '{':
+ case '}':
+ case '[':
+ case ']':
+ ret = ber_scanf( 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
}
-
-#endif /* HAVE_LDAP */
diff --git a/dlls/wldap32/wldap32.spec b/dlls/wldap32/wldap32.spec
index 1c3a68a..048defe 100644
--- a/dlls/wldap32/wldap32.spec
+++ b/dlls/wldap32/wldap32.spec
@@ -226,7 +226,7 @@
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) WLDAP32_ber_printf
-311 varargs ber_scanf(ptr str)
+311 varargs ber_scanf(ptr str) WLDAP32_ber_scanf
312 cdecl ldap_conn_from_msg(ptr ptr)
313 cdecl ldap_sasl_bindW(ptr wstr wstr ptr ptr ptr ptr)
314 cdecl ldap_sasl_bind_sW(ptr wstr wstr ptr ptr ptr ptr)
More information about the wine-cvs
mailing list