Beispiel #1
0
Datei: cdata.c Projekt: ktap/ktap
void kp_cdata_dump(ktap_state_t *ks, ktap_cdata_t *cd)
{
	switch (cd_type(ks, cd)) {
	case FFI_UINT8:	case FFI_INT8:
		kp_printf(ks, "c int(0x%01x)", cd_int(cd));
		break;
	case FFI_UINT16:	case FFI_INT16:
		kp_printf(ks, "c int(0x%02x)", cd_int(cd));
		break;
	case FFI_UINT32:	case FFI_INT32:
		kp_printf(ks, "c int(0x%04x)", cd_int(cd));
		break;
	case FFI_UINT64:	case FFI_INT64:
		kp_printf(ks, "c int(0x%08x)", cd_int(cd));
		break;
	case FFI_PTR:
		kp_printf(ks, "c pointer(0x%p)", cd_ptr(cd));
		break;
	case FFI_STRUCT:
		kp_printf(ks, "c struct(0x%p)", cd_struct(cd));
		break;
	case FFI_UNION:
		kp_printf(ks, "c union(0x%p)", cd_union(cd));
		break;
	default:
		kp_printf(ks, "unsupported cdata type %d!\n", cd_type(ks, cd));
	}
}
Beispiel #2
0
static int kplib_ffi_free(ktap_state *ks)
{
	int n = kp_arg_nr(ks);
	ktap_cdata *cd;

	if (n != 1) {
		set_nil(ks->top++);
		kp_error(ks, "wrong number of arguments\n");
		return 1;
	}

	kp_arg_check(ks, 1, KTAP_TYPE_CDATA);

	cd = cdvalue(kp_arg(ks, 1));

	if (cd_type(ks, cd) != FFI_PTR)
		kp_error(ks, "could free pointer cdata only\n");

	kp_cdata_free_ptr(ks, cd);

	return 0;
}