Mercurial > pidgin.yaz
comparison plugins/perl/perl-common.c @ 6898:806f6e950e76
[gaim-migrate @ 7445]
This should allow parameters with outgoing types (int *, char **, etc) in
signals to work without appearing as garbage in perl. You still can't set
them, though.. That's next. Untested!
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sat, 20 Sep 2003 22:27:31 +0000 |
parents | 69e0a3e29aa1 |
children | 13f78c350cd3 |
comparison
equal
deleted
inserted
replaced
6897:69e0a3e29aa1 | 6898:806f6e950e76 |
---|---|
381 } | 381 } |
382 | 382 |
383 SV * | 383 SV * |
384 gaim_perl_sv_from_vargs(const GaimValue *value, va_list args) | 384 gaim_perl_sv_from_vargs(const GaimValue *value, va_list args) |
385 { | 385 { |
386 switch (gaim_value_get_type(value)) | 386 if (gaim_value_is_outgoing(value)) |
387 { | 387 { |
388 case GAIM_TYPE_SUBTYPE: | 388 switch (gaim_value_get_type(value)) |
389 return gaim_perl_sv_from_subtype(value, va_arg(args, void *)); | 389 { |
390 | 390 case GAIM_TYPE_SUBTYPE: |
391 case GAIM_TYPE_BOOLEAN: | 391 return gaim_perl_sv_from_subtype(value, *va_arg(args, void **)); |
392 return newSViv(va_arg(args, gboolean)); | 392 |
393 | 393 case GAIM_TYPE_BOOLEAN: |
394 case GAIM_TYPE_INT: | 394 return newSViv(*va_arg(args, gboolean *)); |
395 return newSViv(va_arg(args, int)); | 395 |
396 | 396 case GAIM_TYPE_INT: |
397 case GAIM_TYPE_UINT: | 397 return newSViv(*va_arg(args, int *)); |
398 return newSVuv(va_arg(args, unsigned int)); | 398 |
399 | 399 case GAIM_TYPE_UINT: |
400 case GAIM_TYPE_LONG: | 400 return newSVuv(*va_arg(args, unsigned int *)); |
401 return newSViv(va_arg(args, long)); | 401 |
402 | 402 case GAIM_TYPE_LONG: |
403 case GAIM_TYPE_ULONG: | 403 return newSViv(*va_arg(args, long *)); |
404 return newSVuv(va_arg(args, unsigned long)); | 404 |
405 | 405 case GAIM_TYPE_ULONG: |
406 case GAIM_TYPE_INT64: | 406 return newSVuv(*va_arg(args, unsigned long *)); |
407 return newSViv(va_arg(args, gint64)); | 407 |
408 | 408 case GAIM_TYPE_INT64: |
409 case GAIM_TYPE_UINT64: | 409 return newSViv(*va_arg(args, gint64 *)); |
410 return newSVuv(va_arg(args, guint64)); | 410 |
411 | 411 case GAIM_TYPE_UINT64: |
412 case GAIM_TYPE_STRING: | 412 return newSVuv(*va_arg(args, guint64 *)); |
413 return newSVGChar(va_arg(args, char *)); | 413 |
414 | 414 case GAIM_TYPE_STRING: |
415 case GAIM_TYPE_POINTER: | 415 return newSVGChar(*va_arg(args, char **)); |
416 return newSViv((IV)va_arg(args, void *)); | 416 |
417 | 417 case GAIM_TYPE_POINTER: |
418 case GAIM_TYPE_BOXED: | 418 return newSViv((IV)*va_arg(args, void **)); |
419 /* Uh.. I dunno. Try this? */ | 419 |
420 return sv_2mortal(gaim_perl_bless_object( | 420 case GAIM_TYPE_BOXED: |
421 va_arg(args, void *), | 421 /* Uh.. I dunno. Try this? */ |
422 gaim_value_get_specific_type(value))); | 422 return sv_2mortal(gaim_perl_bless_object( |
423 | 423 va_arg(args, void **), |
424 default: | 424 gaim_value_get_specific_type(value))); |
425 /* If this happens, things are going to get screwed up... */ | 425 |
426 return NULL; | 426 default: |
427 } | 427 /* If this happens, things are going to get screwed up... */ |
428 } | 428 return NULL; |
429 } | |
430 } | |
431 else | |
432 { | |
433 switch (gaim_value_get_type(value)) | |
434 { | |
435 case GAIM_TYPE_SUBTYPE: | |
436 return gaim_perl_sv_from_subtype(value, va_arg(args, void *)); | |
437 | |
438 case GAIM_TYPE_BOOLEAN: | |
439 return newSViv(va_arg(args, gboolean)); | |
440 | |
441 case GAIM_TYPE_INT: | |
442 return newSViv(va_arg(args, int)); | |
443 | |
444 case GAIM_TYPE_UINT: | |
445 return newSVuv(va_arg(args, unsigned int)); | |
446 | |
447 case GAIM_TYPE_LONG: | |
448 return newSViv(va_arg(args, long)); | |
449 | |
450 case GAIM_TYPE_ULONG: | |
451 return newSVuv(va_arg(args, unsigned long)); | |
452 | |
453 case GAIM_TYPE_INT64: | |
454 return newSViv(va_arg(args, gint64)); | |
455 | |
456 case GAIM_TYPE_UINT64: | |
457 return newSVuv(va_arg(args, guint64)); | |
458 | |
459 case GAIM_TYPE_STRING: | |
460 return newSVGChar(va_arg(args, char *)); | |
461 | |
462 case GAIM_TYPE_POINTER: | |
463 return newSViv((IV)va_arg(args, void *)); | |
464 | |
465 case GAIM_TYPE_BOXED: | |
466 /* Uh.. I dunno. Try this? */ | |
467 return sv_2mortal(gaim_perl_bless_object( | |
468 va_arg(args, void *), | |
469 gaim_value_get_specific_type(value))); | |
470 | |
471 default: | |
472 /* If this happens, things are going to get screwed up... */ | |
473 return NULL; | |
474 } | |
475 } | |
476 } |