Files
libgtop/scripts/c_types.pl
2003-10-20 20:12:28 +00:00

72 lines
1.7 KiB
Perl

# Internal functions
my $c_strlen_func = sub {
local ($_) = @_;
return "strlen ($_) + 1";
};
my $c_marshal_func = sub {
my ($type, $param, $indent) = @_;
my $code = '';
$code .= sprintf ("%s_LIBGTOP_SEND_temp_len = strlen (%s)+1;\n",
$indent, $param);
$code .= sprintf ("%smemcpy (_LIBGTOP_SEND_ptr, %s, %s);\n",
$indent, "&_LIBGTOP_SEND_temp_len", "sizeof (size_t)");
$code .= sprintf ("%s_LIBGTOP_SEND_ptr += sizeof (size_t);\n", $indent);
$code .= sprintf ("%smemcpy (_LIBGTOP_DATA_ptr, %s, %s);\n",
$indent, $param, "strlen ($param)+1");
$code .= sprintf ("%s_LIBGTOP_DATA_ptr += strlen ($param)+1;\n",
$indent);
$need_temp_len = 1;
return $code;
};
my $c_demarshal_func = sub {
my ($type, $param, $indent) = @_;
my $code = '';
$code .= sprintf ("%s_LIBGTOP_demarshal_%s = _LIBGTOP_DATA_ptr;\n",
$indent, $param);
$code .= sprintf ("%sif (_LIBGTOP_TEMP_len) --_LIBGTOP_TEMP_len;\n",
$indent);
$code .= sprintf ("%s*(_LIBGTOP_DATA_ptr + _LIBGTOP_TEMP_len) = 0;\n",
$indent);
$need_temp_len = 1;
return $code;
};
# Typeinfo array fields:
# ---------------------
# * C type name
# * Flag specifying whether we need to copy the parameter into temp storage
#
$typeinfo = {'long' => ['int64_t', 0],
'ulong' => ['guint64', 0],
'pid_t' => ['pid_t', 0],
'int' => ['int', 0],
'retval' => ['int', 0],
'ushort' => ['unsigned short', 0],
'unsigned' => ['unsigned', 0],
'string' => ['const char *', 1],
};
$sizeof_funcs = {'string' => $c_strlen_func,
};
$marshal_funcs = {'string' => $c_marshal_func,
};
$demarshal_funcs = {'string' => $c_demarshal_func,
};
1;