コード例 #1
0
ファイル: scalar.c プロジェクト: apprisi/illumos-gate
tnf_int32_t
tnf_get_int32(tnf_datum_t datum)
{
	CHECK_SCALAR(datum);
	/* LINTED pointer cast may result in improper alignment */
	return (_GET_INT32(DATUM_TNF(datum), DATUM_VAL(datum)));
}
コード例 #2
0
ファイル: scalar.c プロジェクト: apprisi/illumos-gate
static void
check_scalar(tnf_datum_t datum)
{
	CHECK_DATUM(datum);
	if (!INFO_SCALAR(DATUM_INFO(datum)))
		_tnf_error(DATUM_TNF(datum), TNF_ERR_TYPEMISMATCH);
	/* XXX Need to check for exact scalar type match as well */
}
コード例 #3
0
ファイル: record.c プロジェクト: andreiw/polaris
void
_tnf_check_record(tnf_datum_t datum)
{
	CHECK_DATUM(datum);

	/* All records must be tagged */
	if (!INFO_TAGGED(DATUM_INFO(datum)))
		_tnf_error(DATUM_TNF(datum), TNF_ERR_TYPEMISMATCH);
}
コード例 #4
0
ファイル: struct.c プロジェクト: apprisi/illumos-gate
void
_tnf_check_slots(tnf_datum_t datum)
{
	struct taginfo	*info;

	CHECK_DATUM(datum);

	info = DATUM_INFO(datum);

	/* Must be an aggregate */
	if (!(INFO_STRUCT(info) || INFO_ARRAY(info)))
		_tnf_error(DATUM_TNF(datum), TNF_ERR_TYPEMISMATCH);
}
コード例 #5
0
ファイル: scalar.c プロジェクト: apprisi/illumos-gate
tnf_float64_t
tnf_get_float64(tnf_datum_t datum)
{
	union {
		tnf_uint64_t	i64;
		tnf_float64_t	f64;
	} u;

	CHECK_SCALAR(datum);

	u.i64 = get_uint64(DATUM_TNF(datum), DATUM_VAL(datum)); /* XXX */
	return (u.f64);
}
コード例 #6
0
ファイル: struct.c プロジェクト: apprisi/illumos-gate
static struct slotinfo *
get_slotinfo(tnf_datum_t datum)
{
	struct taginfo	*info, *base_info;

	info 		= DATUM_INFO(datum);
	base_info	= INFO_DERIVED(info)? info->base: info;

	/* XXX base must not be a scalar tag */
	if (INFO_SCALAR(base_info))
		_tnf_error(DATUM_TNF(datum), TNF_ERR_BADTNF);

	return (base_info->slotinfo);
}
コード例 #7
0
ファイル: struct.c プロジェクト: apprisi/illumos-gate
static tnf_datum_t
get_slot(tnf_datum_t datum, struct slot *slot)
{
	if (slot == NULL) {
		_tnf_error(DATUM_TNF(datum), TNF_ERR_BADSLOT); /* XXX */
		return (TNF_DATUM_NULL);

	} else if (INFO_TAGGED(slot->slot_type)) {
		TNF		*tnf;
		tnf_ref32_t	*rec;

		tnf = DATUM_TNF(datum);
		/* LINTED pointer cast may result in improper alignment */
		rec = _GET_REF32(tnf, (tnf_ref32_t *)
			(DATUM_VAL(datum) + slot->slot_offset));
		/* NULL slots are allowed */
		return ((rec == TNF_NULL)? TNF_DATUM_NULL :
			RECORD_DATUM(tnf, rec));

	} else			/* inline */
		return DATUM(slot->slot_type,
			DATUM_VAL(datum) + slot->slot_offset);
}
コード例 #8
0
ファイル: scalar.c プロジェクト: apprisi/illumos-gate
tnf_float32_t
tnf_get_float32(tnf_datum_t datum)
{
	union {
		tnf_uint32_t	i32;
		tnf_float32_t	f32;
	} u;

	CHECK_SCALAR(datum);

	/* LINTED pointer cast may result in improper alignment */
	u.i32 = _GET_UINT32(DATUM_TNF(datum), DATUM_VAL(datum)); /* XXX */
	return (u.f32);
}
コード例 #9
0
ファイル: struct.c プロジェクト: apprisi/illumos-gate
char *
tnf_get_slot_name(tnf_datum_t datum, unsigned index)
{
	struct slotinfo	*slotinfo;
	struct slot	*slot;

	CHECK_SLOTS(datum);

	slotinfo 	= get_slotinfo(datum);
	slot		= get_slot_indexed(slotinfo, index);

	if (slot == NULL) {
		_tnf_error(DATUM_TNF(datum), TNF_ERR_BADSLOT); /* XXX */
		return ((char *)NULL);
	} else
		return (slot->slot_name);
}
コード例 #10
0
ファイル: struct.c プロジェクト: apprisi/illumos-gate
unsigned
tnf_get_slot_index(tnf_datum_t datum, char *name)
{
	struct slotinfo	*slotinfo;
	struct slot	*slot;

	CHECK_SLOTS(datum);

	slotinfo = get_slotinfo(datum);
	slot	 = get_slot_named(slotinfo, name);

	if (slot == NULL) {
		_tnf_error(DATUM_TNF(datum), TNF_ERR_BADSLOT); /* XXX */
		return (((unsigned)-1));
	} else
		return (((char *)slot - (char *)&slotinfo->slots[0])
			/ sizeof (struct slot));
}
コード例 #11
0
ファイル: record.c プロジェクト: andreiw/polaris
tnf_datum_t
tnf_get_tag_arg(tnf_datum_t datum)
{
	TNF		*tnf;
	tnf_ref32_t	*arg;

	CHECK_RECORD(datum);

	tnf = DATUM_TNF(datum);

	/* Should not give an error if not found */
	/* LINTED pointer cast may result in improper alignment */
	arg = _tnf_get_tag_arg(tnf, DATUM_RECORD(datum));

	if (arg == TNF_NULL)
		return (TNF_DATUM_NULL);
	else			/* repackage the tag arg with its taginfo */
		return (RECORD_DATUM(tnf, arg));
}
コード例 #12
0
ファイル: scalar.c プロジェクト: apprisi/illumos-gate
tnf_int64_t
tnf_get_int64(tnf_datum_t datum)
{
	CHECK_SCALAR(datum);
	return (get_uint64(DATUM_TNF(datum), DATUM_VAL(datum)));
}