Mercurial > pidgin.yaz
comparison plugins/perl/perl-common.c @ 6921:11d05ddf30a3
[gaim-migrate @ 7468]
Eh, okay, some more new perl code. You still can't modify signal params, but
this is more correct and less leaky.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 24 Sep 2003 00:52:16 +0000 |
parents | 13f78c350cd3 |
children | 3875b924d622 |
comparison
equal
deleted
inserted
replaced
6920:13f78c350cd3 | 6921:11d05ddf30a3 |
---|---|
368 case GAIM_TYPE_UINT: return (void *)SvUV(sv); | 368 case GAIM_TYPE_UINT: return (void *)SvUV(sv); |
369 case GAIM_TYPE_LONG: return (void *)SvIV(sv); | 369 case GAIM_TYPE_LONG: return (void *)SvIV(sv); |
370 case GAIM_TYPE_ULONG: return (void *)SvUV(sv); | 370 case GAIM_TYPE_ULONG: return (void *)SvUV(sv); |
371 case GAIM_TYPE_INT64: return (void *)SvIV(sv); | 371 case GAIM_TYPE_INT64: return (void *)SvIV(sv); |
372 case GAIM_TYPE_UINT64: return (void *)SvUV(sv); | 372 case GAIM_TYPE_UINT64: return (void *)SvUV(sv); |
373 case GAIM_TYPE_STRING: return (void *)SvPV(sv, na); | 373 case GAIM_TYPE_STRING: return g_strdup((void *)SvPV(sv, na)); |
374 case GAIM_TYPE_POINTER: return (void *)SvIV(sv); | 374 case GAIM_TYPE_POINTER: return (void *)SvIV(sv); |
375 case GAIM_TYPE_BOXED: return (void *)SvIV(sv); | 375 case GAIM_TYPE_BOXED: return (void *)SvIV(sv); |
376 | 376 |
377 default: | 377 default: |
378 return NULL; | 378 return NULL; |
405 return sv_2mortal(gaim_perl_bless_object(arg, stash)); | 405 return sv_2mortal(gaim_perl_bless_object(arg, stash)); |
406 } | 406 } |
407 | 407 |
408 SV * | 408 SV * |
409 gaim_perl_sv_from_vargs(const GaimValue *value, va_list *args, | 409 gaim_perl_sv_from_vargs(const GaimValue *value, va_list *args, |
410 void **copy_arg) | 410 void ***copy_arg) |
411 { | 411 { |
412 if (gaim_value_is_outgoing(value)) | 412 if (gaim_value_is_outgoing(value)) |
413 { | 413 { |
414 switch (gaim_value_get_type(value)) | 414 switch (gaim_value_get_type(value)) |
415 { | 415 { |
418 return &PL_sv_undef; | 418 return &PL_sv_undef; |
419 | 419 |
420 return gaim_perl_sv_from_subtype(value, *(void **)*copy_arg); | 420 return gaim_perl_sv_from_subtype(value, *(void **)*copy_arg); |
421 | 421 |
422 case GAIM_TYPE_BOOLEAN: | 422 case GAIM_TYPE_BOOLEAN: |
423 if ((*copy_arg = va_arg(*args, gboolean *)) == NULL) | 423 if ((*copy_arg = (void *)va_arg(*args, gboolean *)) == NULL) |
424 return &PL_sv_undef; | 424 return &PL_sv_undef; |
425 | 425 |
426 return newSViv(*(gboolean *)*copy_arg); | 426 return newSViv(*(gboolean *)*copy_arg); |
427 | 427 |
428 case GAIM_TYPE_INT: | 428 case GAIM_TYPE_INT: |
429 if ((*copy_arg = va_arg(*args, int *)) == NULL) | 429 if ((*copy_arg = (void *)va_arg(*args, int *)) == NULL) |
430 return &PL_sv_undef; | 430 return &PL_sv_undef; |
431 | 431 |
432 return newSViv(*(int *)*copy_arg); | 432 return newSViv(*(int *)*copy_arg); |
433 | 433 |
434 case GAIM_TYPE_UINT: | 434 case GAIM_TYPE_UINT: |
435 if ((*copy_arg = va_arg(*args, unsigned int *)) == NULL) | 435 if ((*copy_arg = (void *)va_arg(*args, unsigned int *)) == NULL) |
436 return &PL_sv_undef; | 436 return &PL_sv_undef; |
437 | 437 |
438 return newSVuv(*(unsigned int *)*copy_arg); | 438 return newSVuv(*(unsigned int *)*copy_arg); |
439 | 439 |
440 case GAIM_TYPE_LONG: | 440 case GAIM_TYPE_LONG: |
441 if ((*copy_arg = va_arg(*args, long *)) == NULL) | 441 if ((*copy_arg = (void *)va_arg(*args, long *)) == NULL) |
442 return &PL_sv_undef; | 442 return &PL_sv_undef; |
443 | 443 |
444 return newSViv(*(long *)*copy_arg); | 444 return newSViv(*(long *)*copy_arg); |
445 | 445 |
446 case GAIM_TYPE_ULONG: | 446 case GAIM_TYPE_ULONG: |
447 if ((*copy_arg = va_arg(*args, unsigned long *)) == NULL) | 447 if ((*copy_arg = (void *)va_arg(*args, |
448 unsigned long *)) == NULL) | |
448 return &PL_sv_undef; | 449 return &PL_sv_undef; |
449 | 450 |
450 return newSVuv(*(unsigned long *)*copy_arg); | 451 return newSVuv(*(unsigned long *)*copy_arg); |
451 | 452 |
452 case GAIM_TYPE_INT64: | 453 case GAIM_TYPE_INT64: |
453 if ((*copy_arg = va_arg(*args, gint64 *)) == NULL) | 454 if ((*copy_arg = (void *)va_arg(*args, gint64 *)) == NULL) |
454 return &PL_sv_undef; | 455 return &PL_sv_undef; |
455 | 456 |
456 return newSViv(*(gint64 *)*copy_arg); | 457 return newSViv(*(gint64 *)*copy_arg); |
457 | 458 |
458 case GAIM_TYPE_UINT64: | 459 case GAIM_TYPE_UINT64: |
459 if ((*copy_arg = va_arg(*args, guint64 *)) == NULL) | 460 if ((*copy_arg = (void *)va_arg(*args, guint64 *)) == NULL) |
460 return &PL_sv_undef; | 461 return &PL_sv_undef; |
461 | 462 |
462 return newSVuv(*(guint64 *)*copy_arg); | 463 return newSVuv(*(guint64 *)*copy_arg); |
463 | 464 |
464 case GAIM_TYPE_STRING: | 465 case GAIM_TYPE_STRING: |
465 if ((*copy_arg = va_arg(*args, char **)) == NULL) | 466 if ((*copy_arg = (void *)va_arg(*args, char **)) == NULL) |
466 return &PL_sv_undef; | 467 return &PL_sv_undef; |
467 | 468 |
468 return newSVGChar(*(char **)*copy_arg); | 469 return newSVGChar(*(char **)*copy_arg); |
469 | 470 |
470 case GAIM_TYPE_POINTER: | 471 case GAIM_TYPE_POINTER: |
542 | 543 |
543 case GAIM_TYPE_STRING: | 544 case GAIM_TYPE_STRING: |
544 if ((*copy_arg = (void *)va_arg(*args, char *)) == NULL) | 545 if ((*copy_arg = (void *)va_arg(*args, char *)) == NULL) |
545 return &PL_sv_undef; | 546 return &PL_sv_undef; |
546 | 547 |
547 return newSVGChar(*copy_arg); | 548 return newSVGChar(*(char **)*copy_arg); |
548 | 549 |
549 case GAIM_TYPE_POINTER: | 550 case GAIM_TYPE_POINTER: |
550 if ((*copy_arg = (void *)va_arg(*args, void *)) == NULL) | 551 if ((*copy_arg = (void *)va_arg(*args, void *)) == NULL) |
551 return &PL_sv_undef; | 552 return &PL_sv_undef; |
552 | 553 |