예제 #1
0
SDB_API void sdb_array_sort(Sdb *s, const char *key, ut32 cas) {
	char *nstr, *str, **strs;
	int lstr, j, i;
	str = sdb_get_len (s, key, &lstr, 0);
	if (!str) {
		return;
	}
	if (!*str) {
		free (str);
		return;
	}
	strs = sdb_fmt_array (str);
	for (i = 0; strs[i]; i++) {
		//nothing to see here
	}
	qsort (strs, i, sizeof (char*), cstring_cmp);
	nstr = str;
	for (i = 0; strs[i]; i++) {
		j = strlen (strs[i]);
		memcpy (nstr, strs[i], j);
		nstr += j;
		*(nstr++) = SDB_RS;
	}
	if (nstr > str) {
		*(--nstr) = '\0';
	} else {
		*nstr = '\0';
	}
	sdb_set_owned (s, key, str, cas);
	free (strs);
}
예제 #2
0
파일: array.c 프로젝트: AmesianX/radare2
SDB_API void sdb_array_sort_num(Sdb *s, const char *key, ut32 cas) {
	char *ret, *nstr, *str;
	int lstr;
	ut64 *nums;
	str = sdb_get_len (s, key, &lstr, 0);
	if (!str) return;
	if (!*str) {
		free (str);
		return;
	}
	nums = sdb_fmt_array_num (str);
	qsort (nums + 1, (int)*nums, sizeof (ut64), int_cmp);
	nstr = str;
	memset (nstr, 'q', *nums);
	nstr += *nums;
	*nstr = '\0';
	ret = sdb_fmt_tostr (nums + 1, str);
	sdb_set_owned (s, key, ret, cas);
	free (str);
	free (nums);
	return;
}