Mercurial > pidgin
comparison src/signals.c @ 8090:fb0eab758560
[gaim-migrate @ 8789]
Thanks to Ben Herrenschmidt for pointing this out.
committer: Tailor Script <tailor@pidgin.im>
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Tue, 13 Jan 2004 02:15:46 +0000 |
parents | fa6395637e2c |
children | 47046ceedf0b |
comparison
equal
deleted
inserted
replaced
8089:35db601609e3 | 8090:fb0eab758560 |
---|---|
413 { | 413 { |
414 GaimInstanceData *instance_data; | 414 GaimInstanceData *instance_data; |
415 GaimSignalData *signal_data; | 415 GaimSignalData *signal_data; |
416 GaimSignalHandlerData *handler_data; | 416 GaimSignalHandlerData *handler_data; |
417 GList *l, *l_next; | 417 GList *l, *l_next; |
418 va_list tmp; | |
418 | 419 |
419 g_return_if_fail(instance != NULL); | 420 g_return_if_fail(instance != NULL); |
420 g_return_if_fail(signal != NULL); | 421 g_return_if_fail(signal != NULL); |
421 | 422 |
422 instance_data = | 423 instance_data = |
438 { | 439 { |
439 l_next = l->next; | 440 l_next = l->next; |
440 | 441 |
441 handler_data = (GaimSignalHandlerData *)l->data; | 442 handler_data = (GaimSignalHandlerData *)l->data; |
442 | 443 |
444 /* This is necessary because a va_list may only be | |
445 * evaluated once */ | |
446 va_copy(tmp, args); | |
447 | |
443 if (handler_data->use_vargs) | 448 if (handler_data->use_vargs) |
444 { | 449 { |
445 ((void (*)(va_list, void *))handler_data->cb)(args, | 450 ((void (*)(va_list, void *))handler_data->cb)(tmp, |
446 handler_data->data); | 451 handler_data->data); |
447 } | 452 } |
448 else | 453 else |
449 { | 454 { |
450 signal_data->marshal(handler_data->cb, args, | 455 signal_data->marshal(handler_data->cb, tmp, |
451 handler_data->data, NULL); | 456 handler_data->data, NULL); |
452 } | 457 } |
458 | |
459 va_end(tmp); | |
453 } | 460 } |
454 } | 461 } |
455 | 462 |
456 void * | 463 void * |
457 gaim_signal_emit_return_1(void *instance, const char *signal, ...) | 464 gaim_signal_emit_return_1(void *instance, const char *signal, ...) |