libpurple/plugins/perl/perl-common.c

changeset 35965
65d585472765
parent 35812
48c6ee645ca1
child 36002
31a8779e91d4
--- a/libpurple/plugins/perl/perl-common.c	Wed Apr 30 22:20:16 2014 +0200
+++ b/libpurple/plugins/perl/perl-common.c	Wed Apr 30 22:42:21 2014 +0200
@@ -44,7 +44,10 @@
 {
 	SV *sv;
 
-	sv = newSViv((IV)object);
+	PURPLE_STATIC_ASSERT(sizeof(IV) >= sizeof(void *),
+		sv_can_not_hold_a_pointer);
+
+	sv = newSViv((IV)(gintptr)object);
 
 	sv_magic(sv, NULL, '~', NULL, 0);
 
@@ -383,15 +386,15 @@
 purple_perl_data_from_sv(GType type, SV *sv)
 {
 	switch (type) {
-		case G_TYPE_BOOLEAN: return (void *)SvIV(sv);
-		case G_TYPE_INT:     return (void *)SvIV(sv);
-		case G_TYPE_UINT:    return (void *)SvUV(sv);
-		case G_TYPE_LONG:    return (void *)SvIV(sv);
-		case G_TYPE_ULONG:   return (void *)SvUV(sv);
-		case G_TYPE_INT64:   return (void *)SvIV(sv);
-		case G_TYPE_UINT64:  return (void *)SvUV(sv);
+		case G_TYPE_BOOLEAN: return (void *)(gintptr)SvIV(sv);
+		case G_TYPE_INT:     return (void *)(gintptr)SvIV(sv);
+		case G_TYPE_UINT:    return (void *)(gintptr)SvUV(sv);
+		case G_TYPE_LONG:    return (void *)(gintptr)SvIV(sv);
+		case G_TYPE_ULONG:   return (void *)(gintptr)SvUV(sv);
+		case G_TYPE_INT64:   return (void *)(gintptr)SvIV(sv);
+		case G_TYPE_UINT64:  return (void *)(gintptr)SvUV(sv);
 		case G_TYPE_STRING:  return g_strdup(SvPVutf8_nolen(sv));
-		case G_TYPE_POINTER: return (void *)SvIV(sv);
+		case G_TYPE_POINTER: return (void *)(gintptr)SvIV(sv);
 	}
 
 	return NULL;
@@ -580,7 +583,7 @@
 			if ((*copy_arg = (void *)va_arg(*args, void *)) == NULL)
 				return &PL_sv_undef;
 
-			return newSViv((IV)*copy_arg);
+			return newSViv((IV)(gintptr)*copy_arg);
 
 		default:
 			if ((*copy_arg = va_arg(*args, void *)) == NULL)

mercurial