plugins/perl/perl-common.c

changeset 6898
e58d18e13126
parent 6897
d0f925f4f7c1
child 6920
4f4931b005cb
equal deleted inserted replaced
6897:d0f925f4f7c1 6898:e58d18e13126
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 }

mercurial