示例#1
0
/*
 * Compare two strings.
 * Plain symbol-by-symbol comparison.
 */
int
top_level_str_coll(const struct bwstring *s1, const struct bwstring *s2)
{

	if (default_sort_mods->rflag) {
		const struct bwstring *tmp;

		tmp = s1;
		s1 = s2;
		s2 = tmp;
	}

	return (bwscoll(s1, s2, 0));
}
示例#2
0
文件: coll.c 项目: AhmadTux/freebsd
/*
 * Implements random sort (-R).
 */
static int
randomcoll(struct key_value *kv1, struct key_value *kv2, size_t offset)
{
	struct bwstring *s1, *s2;
	MD5_CTX ctx1, ctx2;
	char *b1, *b2;

	UNUSED_ARG(offset);

	s1 = kv1->k;
	s2 = kv2->k;

	if (debug_sort) {
		bwsprintf(stdout, s1, "; k1=<", ">");
		bwsprintf(stdout, s2, ", k2=<", ">");
	}

	if (s1 == s2)
		return (0);

	memcpy(&ctx1,&md5_ctx,sizeof(MD5_CTX));
	memcpy(&ctx2,&md5_ctx,sizeof(MD5_CTX));

	MD5Update(&ctx1, bwsrawdata(s1), bwsrawlen(s1));
	MD5Update(&ctx2, bwsrawdata(s2), bwsrawlen(s2));
	b1 = MD5End(&ctx1, NULL);
	b2 = MD5End(&ctx2, NULL);
	if (b1 == NULL) {
		if (b2 == NULL)
			return (0);
		else {
			sort_free(b2);
			return (-1);
		}
	} else if (b2 == NULL) {
		sort_free(b1);
		return (+1);
	} else {
		int cmp_res;

		cmp_res = strcmp(b1,b2);
		sort_free(b1);
		sort_free(b2);

		if (!cmp_res)
			cmp_res = bwscoll(s1, s2, 0);

		return (cmp_res);
	}
}
示例#3
0
/*
 * Implements string sort.
 */
static int
wstrcoll(struct key_value *kv1, struct key_value *kv2, size_t offset)
{

	if (debug_sort) {
		if (offset)
			printf("; offset=%d\n", (int) offset);
		bwsprintf(stdout, kv1->k, "; k1=<", ">");
		printf("(%zu)", BWSLEN(kv1->k));
		bwsprintf(stdout, kv2->k, ", k2=<", ">");
		printf("(%zu)", BWSLEN(kv2->k));
	}

	return (bwscoll(kv1->k, kv2->k, offset));
}