Exemplo n.º 1
0
static int
invalidcmp(Dt_t* dict, void* a, void* b, Dtdisc_t* disc)
{
	Invalid_t*	ap = (Invalid_t*)a;
	Invalid_t*	bp = (Invalid_t*)b;
	size_t		az;
	size_t		bz;
	int		r;

	if (!(r = strcmp(ap->variable->name, bp->variable->name)))
	{
		if (cxisstring(ap->variable->type) || cxisbuffer(ap->variable->type))
		{
			az = ap->value.buffer.size;
			bz = bp->value.buffer.size;
			if (!(r = memcmp(ap->value.buffer.data, bp->value.buffer.data, az < bz ? az : bz)))
			{
				if (az < bz)
					r = -1;
				if (az > bz)
					r = 1;
			}
		}
		else if (ap->value.number < bp->value.number)
			r = -1;
		else if (ap->value.number > bp->value.number)
			r = 1;
	}
	return r;
}
Exemplo n.º 2
0
static int
ordercmp(Dt_t* dict, void* a, void* b, Dtdisc_t* disc)
{
	State_t*	state = (State_t*)disc;
	File_t*		ap = (File_t*)a;
	File_t*		bp = (File_t*)b;
	Key_t*		kp;
	size_t		az;
	size_t		bz;
	int		k;
	int		r;

	for (k = 0, kp = state->keys; k < state->nkeys; k++, kp = kp->next)
		if (cxisstring(kp->variable->type) || cxisbuffer(kp->variable->type))
		{
			az = ap->data[k].value.buffer.size;
			bz = bp->data[k].value.buffer.size;
			if (r = memcmp(ap->data[k].value.buffer.data, bp->data[k].value.buffer.data, az < bz ? az : bz))
				return (r < 0) ? -kp->sense : kp->sense;
			if (az < bz)
				return -kp->sense;
			if (az > bz)
				return kp->sense;
		}
		else if (ap->data[k].value.number < bp->data[k].value.number)
			return -kp->sense;
		else if (ap->data[k].value.number > bp->data[k].value.number)
			return kp->sense;
	if (ap < bp)
		return -1;
	if (ap > bp)
		return 1;
	return 0;
}