Commit 91836eec authored by Torsten Schönfeld's avatar Torsten Schönfeld

Fix a few integer conversion issues

Most of these changes just hush compiler warnings, but some also assert
formerly implicit assumptions.
parent 11b3ac4f
/* -*- mode: c; indent-tabs-mode: t; c-basic-offset: 8; -*- */
#define FILL_VALUES(values) \
#define FILL_VALUES(values, value_type) \
{ gint i; \
for (i = 0; i < n_values; i++) { \
GIValueInfo *value_info = g_enum_info_get_value (info, i); \
(values)[i].value = g_value_info_get_value (value_info); \
(values)[i].value = (value_type) g_value_info_get_value (value_info); \
/* FIXME: Can we assume that the strings will stick around long enough? */ \
(values)[i].value_nick = g_base_info_get_name (value_info); \
(values)[i].value_name = g_base_info_get_attribute (value_info, "c:identifier"); \
......@@ -37,10 +37,10 @@ register_unregistered_enum (GIEnumInfo *info)
n_values = g_enum_info_get_n_values (info);
if (info_type == GI_INFO_TYPE_ENUM) {
values = g_new0 (GEnumValue, n_values+1); /* zero-terminated */
FILL_VALUES ((GEnumValue *) values);
FILL_VALUES ((GEnumValue *) values, gint);
} else {
values = g_new0 (GFlagsValue, n_values+1); /* zero-terminated */
FILL_VALUES ((GFlagsValue *) values);
FILL_VALUES ((GFlagsValue *) values, guint);
}
if (info_type == GI_INFO_TYPE_ENUM) {
......
......@@ -67,7 +67,7 @@ get_field (GIFieldInfo *field_info, gpointer mem, GITransfer transfer)
g_type_info_get_tag (field_type) == GI_TYPE_TAG_INTERFACE &&
g_base_info_get_type (interface_info) == GI_INFO_TYPE_STRUCT)
{
gsize offset;
gint offset;
offset = g_field_info_get_offset (field_info);
value.v_pointer = mem + offset;
sv = arg_to_sv (&value,
......@@ -114,9 +114,9 @@ set_field (GIFieldInfo *field_info, gpointer mem, GITransfer transfer, SV *sv)
/* FIXME: No GIArgInfo and no GPerlI11nInvocationInfo here.
* What if the struct contains an object pointer, or a callback
* field? */
gsize offset = g_field_info_get_offset (field_info);
gint offset = g_field_info_get_offset (field_info);
if (!g_type_info_is_pointer (field_type)) { /* By value */
gssize size;
gsize size;
/* Enforce GI_TRANSFER_NOTHING since we will copy into
* the memory that has already been allocated inside
* 'mem' */
......@@ -162,7 +162,7 @@ set_field (GIFieldInfo *field_info, gpointer mem, GITransfer transfer, SV *sv)
else if (tag == GI_TYPE_TAG_VOID &&
g_type_info_is_pointer (field_type))
{
gsize offset = g_field_info_get_offset (field_info);
gint offset = g_field_info_get_offset (field_info);
sv_to_arg (sv, &arg, NULL, field_type,
transfer, TRUE, NULL);
G_STRUCT_MEMBER (gpointer, mem, offset) = arg.v_pointer;
......
......@@ -70,13 +70,14 @@ invoke_c_code (GICallableInfo *info,
#if GI_CHECK_VERSION (1, 29, 0)
is_skipped = g_arg_info_is_skip (arg_info);
#endif
perl_stack_pos = i
+ iinfo.constructor_offset
+ iinfo.method_offset
+ iinfo.stack_offset
perl_stack_pos = (gint) i
+ (gint) iinfo.constructor_offset
+ (gint) iinfo.method_offset
+ (gint) iinfo.stack_offset
+ iinfo.dynamic_stack_offset;
ffi_stack_pos = i
+ iinfo.method_offset;
ffi_stack_pos = (gint) i
+ (gint) iinfo.method_offset;
g_assert (perl_stack_pos >= 0 && ffi_stack_pos >= 0);
/* FIXME: Is this right? I'm confused about the relation of
* the numbers in g_callable_info_get_arg and
......@@ -310,8 +311,9 @@ _prepare_c_invocation_info (GPerlI11nCInvocationInfo *iinfo,
iinfo->target_namespace = namespace;
iinfo->target_function = function;
iinfo->stack_offset = internal_stack_offset;
iinfo->n_given_args = items - iinfo->stack_offset;
iinfo->stack_offset = (guint) internal_stack_offset;
g_assert (items >= iinfo->stack_offset);
iinfo->n_given_args = ((guint) items) - iinfo->stack_offset;
iinfo->n_invoke_args = iinfo->base.n_args;
iinfo->is_constructor = FALSE;
......@@ -356,7 +358,7 @@ _prepare_c_invocation_info (GPerlI11nCInvocationInfo *iinfo,
* we'll only use as much as we need. since function argument lists
* are typically small, this shouldn't be a big problem. */
if (iinfo->n_invoke_args) {
gint n = iinfo->n_invoke_args;
guint n = iinfo->n_invoke_args;
iinfo->in_args = gperl_alloc_temp (sizeof (GIArgument) * n);
iinfo->out_args = gperl_alloc_temp (sizeof (GIArgument) * n);
iinfo->arg_types_ffi = gperl_alloc_temp (sizeof (ffi_type *) * n);
......
......@@ -13,7 +13,8 @@ invoke_perl_code (ffi_cif* cif, gpointer resp, gpointer* args, gpointer userdata
GPerlI11nPerlInvocationInfo iinfo;
guint args_offset = 0, i;
guint in_inout;
guint n_return_values, n_returned;
guint n_return_values;
I32 n_returned;
I32 context;
SV *first_sv = NULL, *last_sv = NULL;
dGPERL_CALLBACK_MARSHAL_SP;
......@@ -165,9 +166,9 @@ invoke_perl_code (ffi_cif* cif, gpointer resp, gpointer* args, gpointer userdata
n_returned = info->sub_name
? call_method (info->sub_name, context)
: call_sv (info->code, context);
if (n_return_values != 0 && n_returned != n_return_values) {
if (n_return_values != 0 && (n_returned < 0 || ((guint) n_returned) != n_return_values)) {
ccroak ("callback returned %d values "
"but is supposed to return %d values",
"but is supposed to return %u values",
n_returned, n_return_values);
}
......
......@@ -4,6 +4,7 @@ static void
prepare_invocation_info (GPerlI11nInvocationInfo *iinfo,
GICallableInfo *info)
{
gint orig_n_args;
guint i;
dwarn ("invoke: %s\n"
......@@ -20,7 +21,9 @@ prepare_invocation_info (GPerlI11nInvocationInfo *iinfo,
dwarn (" is_function = %d, is_vfunc = %d, is_callback = %d\n",
iinfo->is_function, iinfo->is_vfunc, iinfo->is_callback);
iinfo->n_args = g_callable_info_get_n_args (info);
orig_n_args = g_callable_info_get_n_args (info);
g_assert (orig_n_args >= 0);
iinfo->n_args = (guint) orig_n_args;
if (iinfo->n_args) {
iinfo->arg_infos = gperl_alloc_temp (sizeof (GITypeInfo*) * iinfo->n_args);
......@@ -33,7 +36,7 @@ prepare_invocation_info (GPerlI11nInvocationInfo *iinfo,
}
for (i = 0 ; i < iinfo->n_args ; i++) {
iinfo->arg_infos[i] = g_callable_info_get_arg (info, i);
iinfo->arg_infos[i] = g_callable_info_get_arg (info, (gint) i);
iinfo->arg_types[i] = g_arg_info_get_type (iinfo->arg_infos[i]);
}
......
......@@ -215,7 +215,8 @@ arg_to_sv (GIArgument * arg,
SV *sv;
gchar buffer[6];
gint length = g_unichar_to_utf8 (arg->v_uint32, buffer);
sv = newSVpv (buffer, length);
g_assert (length >= 0);
sv = newSVpv (buffer, (STRLEN) length);
SvUTF8_on (sv);
return sv;
}
......
......@@ -71,7 +71,7 @@ array_to_sv (GITypeInfo *info,
for (i = 0; i < length; i++) {
GIArgument *arg;
SV *value;
arg = pointer + i * item_size;
arg = pointer + ((gsize) i) * item_size;
value = arg_to_sv (arg, param_info, item_transfer, iinfo);
if (value)
av_push (av, value);
......@@ -95,7 +95,8 @@ sv_to_array (GITransfer transfer,
GITransfer item_transfer;
GITypeInfo *param_info;
GITypeTag param_tag;
gint i, length, length_pos;
gint length_pos;
gsize i, length;
GPerlI11nArrayInfo *array_info = NULL;
GArray *array;
gpointer raw_array;
......@@ -137,7 +138,7 @@ sv_to_array (GITransfer transfer,
is_zero_terminated = g_type_info_is_zero_terminated (type_info);
item_size = size_of_type_info (param_info);
length = av_len (av) + 1;
length = (gsize) (av_len (av) + 1); /* av_len always returns at least -1 */
array = g_array_sized_new (is_zero_terminated, FALSE, item_size, length);
/* Arrays containing non-basic types as non-pointers need to be treated
......
......@@ -117,7 +117,7 @@ callback_to_sv (GICallableInfo *interface, gpointer func, GPerlI11nInvocationInf
}
arg_info = g_callable_info_get_arg (invocation_info->interface,
invocation_info->current_pos);
(gint) invocation_info->current_pos);
dwarn (" C callback at %d (%s)\n",
invocation_info->current_pos,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment