| 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 } |