return 0;
break;
case SORT_PATH:
- return CASE_SORT(cia->fd->path, cib->fd->path); /* FIXME: utf8_collate */
+ return utf8_compare(cia->fd->path, cib->fd->path, options->file_sort.case_sensitive);
break;
#ifdef HAVE_STRVERSCMP
case SORT_NUMBER:
if (mask & DUPE_MATCH_PATH)
{
- if (strcmp(a->fd->path, b->fd->path) != 0) return FALSE;
+ if (utf8_compare(a->fd->path, b->fd->path, TRUE) != 0) return FALSE;
}
if (mask & DUPE_MATCH_NAME)
{
return g_strdup(text);
}
+gint utf8_compare(const gchar *s1, const gchar *s2, gboolean case_sensitive)
+{
+ gchar *s1_key, *s2_key;
+ gchar *s1_t, *s2_t;
+ gint ret;
+
+ g_assert(g_utf8_validate(s1, -1, NULL));
+ g_assert(g_utf8_validate(s2, -1, NULL));
+
+ if (!case_sensitive)
+ {
+ s1_t = g_utf8_casefold(s1, -1);
+ s2_t = g_utf8_casefold(s2, -1);
+ }
+
+ s1_key = g_utf8_collate_key(s1_t, -1);
+ s2_key = g_utf8_collate_key(s2_t, -1);
+
+ ret = strcmp(s1_key, s2_key);
+
+ g_free(s1_key);
+ g_free(s2_key);
+
+ if (!case_sensitive)
+ {
+ g_free(s1_t);
+ g_free(s2_t);
+ }
+
+ return ret;
+}
+
/* Borrowed from gtkfilesystemunix.c */
gchar *expand_tilde(const gchar *filename)
{
gdouble get_zoom_increment(void);
gchar *utf8_validate_or_convert(const gchar *text);
+gint utf8_compare(const gchar *s1, const gchar *s2, gboolean case_sensitive);
gchar *expand_tilde(const gchar *filename);
void keyboard_scroll_calc(gint *x, gint *y, GdkEventKey *event);
return sort_matchdata_dimensions(fda, fdb);
break;
case SEARCH_COLUMN_PATH:
- return CASE_SORT(fda->fd->path, fdb->fd->path); /* FIXME: utf8_collate */
+ return utf8_compare(fda->fd->path, fdb->fd->path, options->file_sort.case_sensitive);
break;
default:
break;