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