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); }
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; }