summaryrefslogtreecommitdiff
path: root/sys/src/cmd/upas/fs
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2019-12-02 13:53:57 -0800
committerOri Bernstein <ori@eigenstate.org>2019-12-02 13:53:57 -0800
commitb2526c7d909b2ce321faef34d49b1b70434cf360 (patch)
treec3871883418b83de8267a7fa800d4219fd4abb16 /sys/src/cmd/upas/fs
parentb62fda7bd1027c29329680796c802ecb5b78fa25 (diff)
simplify flag parsing.
we've only got a few flags, a linear search is good enough, and is obviously correct; the old search wasn't.
Diffstat (limited to 'sys/src/cmd/upas/fs')
-rw-r--r--sys/src/cmd/upas/fs/imap.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/sys/src/cmd/upas/fs/imap.c b/sys/src/cmd/upas/fs/imap.c
index d5f8b99d4..5c22596a1 100644
--- a/sys/src/cmd/upas/fs/imap.c
+++ b/sys/src/cmd/upas/fs/imap.c
@@ -241,10 +241,10 @@ static struct{
} ftab[] = {
"\\Answered", Fanswered,
"\\Deleted", Fdeleted,
- "\\Draft", Fdraft,
+ "\\Draft", Fdraft,
"\\Flagged", Fflagged,
"\\Recent", Frecent,
- "\\Seen", Fseen,
+ "\\Seen", Fseen,
"\\Stored", Fstored,
};
@@ -252,25 +252,15 @@ static int
parseflags(char *s)
{
char *f[10];
- int i, j, j0, n, flg;
+ int i, j, n, r;
+ r = 0;
n = tokenize(s, f, nelem(f));
- qsort(f, n, sizeof *f, (int (*)(void*,void*))strcmp);
- j = 0;
- flg = 0;
- for(i = 0; i < n; i++){
- for(j0 = j;; j++){
- if(j == nelem(ftab)){
- j = j0; /* restart search */
- break;
- }
- if(cistrcmp(f[i], ftab[j].flag) == 0){
- flg |= ftab[j].e;
- break;
- }
- }
- }
- return flg;
+ for(i = 0; i < n; i++)
+ for(j = 0; j < nelem(ftab); j++)
+ if(cistrcmp(f[i], ftab[j].flag) == 0)
+ r |= ftab[j].e;
+ return r;
}
/* "17-Jul-1996 02:44:25 -0700" */
@@ -1016,8 +1006,10 @@ again:
m->deleted = Disappear;
ll = &m->next;
}else{
- /* TODO: flag this as changed, plumb. */
- m->flags = f[i].flags;
+ if(m->flags != (f[i].flags & ~Frecent)){
+ print("%U(/mail/fs/mbox/%s): %ux->%ulx | %s\n", f[i].uid, m->name, m->flags, f[i].flags, m->subject);
+ m->flags = f[i].flags;
+ }
ll = &m->next;
i++;
}