Xstrdup_a(str1, s1, return -1);
Xstrdup_a(str2, s2, return -1);
- trim_subject(str1);
- trim_subject(str2);
+ trim_subject_for_compare(str1);
+ trim_subject_for_compare(str2);
if (!*str1 || !*str2) return -1;
return strcmp(str1, str2);
}
-void trim_subject(gchar *str)
+gint subject_compare_for_sort(const gchar *s1, const gchar *s2)
+{
+ gchar *str1, *str2;
+
+ if (!s1 || !s2) return -1;
+ if (!*s1 || !*s2) return -1;
+
+ Xstrdup_a(str1, s1, return -1);
+ Xstrdup_a(str2, s2, return -1);
+
+ trim_subject_for_sort(str1);
+ trim_subject_for_sort(str2);
+
+ if (!*str1 || !*str2) return -1;
+
+ return strcasecmp(str1, str2);
+}
+
+void trim_subject_for_compare(gchar *str)
{
gchar *srcp;
}
}
+void trim_subject_for_sort(gchar *str)
+{
+ gchar *srcp;
+
+ g_strstrip(str);
+
+ while (!strncasecmp(str, "Re:", 3)) {
+ srcp = str + 3;
+ while (isspace(*srcp)) srcp++;
+ memmove(str, srcp, strlen(srcp) + 1);
+ }
+}
+
+void trim_subject(gchar *str)
+{
+ register gchar *srcp, *destp;
+ gchar op, cl;
+ gint in_brace;
+
+ destp = str;
+ while (!strncasecmp(destp, "Re:", 3)) {
+ destp += 3;
+ while (isspace(*destp)) destp++;
+ }
+
+ if (*destp == '[') {
+ op = '[';
+ cl = ']';
+ } else if (*destp == '(') {
+ op = '(';
+ cl = ')';
+ } else
+ return;
+
+ srcp = destp + 1;
+ in_brace = 1;
+ while (*srcp) {
+ if (*srcp == op)
+ in_brace++;
+ else if (*srcp == cl)
+ in_brace--;
+ srcp++;
+ if (in_brace == 0)
+ break;
+ }
+ while (isspace(*srcp)) srcp++;
+ memmove(destp, srcp, strlen(srcp) + 1);
+}
+
void eliminate_parenthesis(gchar *str, gchar op, gchar cl)
{
register gchar *srcp, *destp;