svn commit: samba r16550 - in branches/SAMBA_3_0:
examples/libsmbclient source/include source/libsmb
derrell at samba.org
derrell at samba.org
Tue Jun 27 02:31:00 GMT 2006
Author: derrell
Date: 2006-06-27 02:30:58 +0000 (Tue, 27 Jun 2006)
New Revision: 16550
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16550
Log:
Fix bug 3866. Thanks for the report!
Although I've never met a computer or compiler that produced pointers to
functions which are a different size than pointers to data, I suppose they
probably exist. Assigning a pointer to a function is technically illegal in C
anyway.
Change casts of the option_value based on the option_name to use of variable
argument lists.
For binary compatibility, I've maintained but deprecated the old behavior of
debug_stderr (which expected to be passed a NULL or non-NULL pointer) and
added a new option debug_to_stderr which properly expects a boolean (int)
parameter.
Derrell
Modified:
branches/SAMBA_3_0/examples/libsmbclient/testbrowse.c
branches/SAMBA_3_0/source/include/libsmbclient.h
branches/SAMBA_3_0/source/libsmb/libsmbclient.c
Changeset:
Modified: branches/SAMBA_3_0/examples/libsmbclient/testbrowse.c
===================================================================
--- branches/SAMBA_3_0/examples/libsmbclient/testbrowse.c 2006-06-27 01:04:05 UTC (rev 16549)
+++ branches/SAMBA_3_0/examples/libsmbclient/testbrowse.c 2006-06-27 02:30:58 UTC (rev 16550)
@@ -120,10 +120,10 @@
(no_auth ? no_auth_data_fn : get_auth_data_fn);
}
- /* If we've been asked to log to stderr instead of stdout... */
+ /* If we've been asked to log to stderr instead of stdout, ... */
if (debug_stderr) {
/* ... then set the option to do so */
- smbc_option_set(context, "debug_stderr", (void *) 1);
+ smbc_option_set(context, "debug_to_stderr", 1);
}
/* Initialize the context using the previously specified options */
Modified: branches/SAMBA_3_0/source/include/libsmbclient.h
===================================================================
--- branches/SAMBA_3_0/source/include/libsmbclient.h 2006-06-27 01:04:05 UTC (rev 16549)
+++ branches/SAMBA_3_0/source/include/libsmbclient.h 2006-06-27 02:30:58 UTC (rev 16550)
@@ -635,7 +635,7 @@
void
smbc_option_set(SMBCCTX *context,
char *option_name,
- void *option_value);
+ ... /* option_value */);
/*
* Retrieve the current value of an option
*
Modified: branches/SAMBA_3_0/source/libsmb/libsmbclient.c
===================================================================
--- branches/SAMBA_3_0/source/libsmb/libsmbclient.c 2006-06-27 01:04:05 UTC (rev 16549)
+++ branches/SAMBA_3_0/source/libsmb/libsmbclient.c 2006-06-27 02:30:58 UTC (rev 16550)
@@ -236,7 +236,7 @@
*
*
* We accept:
- * smb://[[[domain;]user[:password@]]server[/share[/path[/file]]]][?options]
+ * smb://[[[domain;]user[:password]@]server[/share[/path[/file]]]][?options]
*
* Meaning of URLs:
*
@@ -6003,27 +6003,62 @@
void
smbc_option_set(SMBCCTX *context,
char *option_name,
- void *option_value)
+ ... /* option_value */)
{
- if (strcmp(option_name, "debug_stderr") == 0) {
+ va_list ap;
+ union {
+ BOOL b;
+ smbc_get_auth_data_with_context_fn auth_fn;
+ void *v;
+ } option_value;
+
+ va_start(ap, option_name);
+
+ if (strcmp(option_name, "debug_to_stderr") == 0) {
/*
* Log to standard error instead of standard output.
*/
+ option_value.b = (BOOL) va_arg(ap, int);
+ context->internal->_debug_stderr = option_value.b;
+
+ } else if (strcmp(option_name, "debug_to_stderr") == 0) {
+ /*
+ * Log to standard error instead of standard output.
+ *
+ * This function used to take a third parameter,
+ * void *option_value. Since it was a void* and we needed to
+ * pass a boolean, a boolean value was cast to void* to be
+ * passed in. Now that we're using a va_list to retrieve the
+ * parameters, the casting kludge is unnecessary.
+ *
+ * WARNING: DO NOT USE THIS OPTION.
+ * This option is retained for backward compatibility. New
+ * applications should use "debug_to_stderr" and properly pass
+ * in a boolean (int) value.
+ */
+ option_value.v = va_arg(ap, void *);
context->internal->_debug_stderr =
- (option_value == NULL ? False : True);
+ (option_value.v == NULL ? False : True);
+
} else if (strcmp(option_name, "auth_function") == 0) {
/*
* Use the new-style authentication function which includes
* the context.
*/
- context->internal->_auth_fn_with_context = option_value;
+ option_value.auth_fn =
+ va_arg(ap, smbc_get_auth_data_with_context_fn);
+ context->internal->_auth_fn_with_context =
+ option_value.auth_fn;
} else if (strcmp(option_name, "user_data") == 0) {
/*
* Save a user data handle which may be retrieved by the user
* with smbc_option_get()
*/
- context->internal->_user_data = option_value;
+ option_value.v = va_arg(ap, void *);
+ context->internal->_user_data = option_value.v;
}
+
+ va_end(ap);
}
More information about the samba-cvs
mailing list