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