summaryrefslogtreecommitdiff
path: root/mail/courier/files/extra-patch-webmail__maildir.c
blob: a6b96b375296e06ed93cd2ee9121ddf5d01bb4cb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
--- libs/sqwebmail/maildir.c.orig	2008-07-20 05:15:08.000000000 +0200
+++ libs/sqwebmail/maildir.c	2009-06-03 22:41:49.000000000 +0200
@@ -1091,6 +1091,42 @@
 	return (rc);
 }
 
+void maildir_msgmarkfile(const char *folder, const char *file, size_t pos)
+{
+char *filename=maildir_find(folder, file);
+char *new_filename;
+
+	if (filename)
+	{
+		if ((new_filename=maildir_addflagfilename(filename, 'F')) != 0)
+		{
+			rename(filename, new_filename);
+			update_foldermsgs(folder, new_filename, pos);
+			free(new_filename);
+		}
+
+		free(filename);
+	}
+}
+
+void maildir_msgunmarkfile(const char *folder, const char *file, size_t pos)
+{
+char *filename=maildir_find(folder, file);
+char *new_filename;
+
+	if (filename)
+	{
+		if ((new_filename = strdup(filename)) != 0)
+		{
+			maildir_remflagname(new_filename, 'F');
+			rename(filename, new_filename);
+			update_foldermsgs(folder, new_filename, pos);
+			free(new_filename);
+		}
+		free(filename);
+	}
+}
+
 static char *foldercountfilename(const char *folder)
 {
 	char *f=malloc(sizeof(MAILDIRCURCACHE "/cnt.") + strlen(folder));
@@ -1604,6 +1640,29 @@
 	return (MSGTYPE_NEW);
 }
 
+/*
+** maildirfile_flag(directory, filename) - boolean:
+**
+*/
+
+int maildirfile_flag(const char *p)
+{
+const char *q=strrchr(p, '/');
+int	seen_flag=0;
+
+	if (q)	p=q;
+
+	if ( !(p=strchr(p, ':')) || *++p != '2' || *++p != ',')
+		return (0);		/* No :2,info */
+
+	++p;
+	while (p && isalpha((int)(unsigned char)*p))
+		if (*p++ == 'F')
+			seen_flag=1;
+
+	return (seen_flag);
+}
+
 static int docount(const char *fn, unsigned *new_cnt, unsigned *other_cnt)
 {
 const char *filename=strrchr(fn, '/');