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.
This commit is contained in:
Ori Bernstein 2019-12-02 13:53:57 -08:00
parent b62fda7bd1
commit b2526c7d90

View file

@ -241,10 +241,10 @@ static struct{
} ftab[] = { } ftab[] = {
"\\Answered", Fanswered, "\\Answered", Fanswered,
"\\Deleted", Fdeleted, "\\Deleted", Fdeleted,
"\\Draft", Fdraft, "\\Draft", Fdraft,
"\\Flagged", Fflagged, "\\Flagged", Fflagged,
"\\Recent", Frecent, "\\Recent", Frecent,
"\\Seen", Fseen, "\\Seen", Fseen,
"\\Stored", Fstored, "\\Stored", Fstored,
}; };
@ -252,25 +252,15 @@ static int
parseflags(char *s) parseflags(char *s)
{ {
char *f[10]; char *f[10];
int i, j, j0, n, flg; int i, j, n, r;
r = 0;
n = tokenize(s, f, nelem(f)); n = tokenize(s, f, nelem(f));
qsort(f, n, sizeof *f, (int (*)(void*,void*))strcmp); for(i = 0; i < n; i++)
j = 0; for(j = 0; j < nelem(ftab); j++)
flg = 0; if(cistrcmp(f[i], ftab[j].flag) == 0)
for(i = 0; i < n; i++){ r |= ftab[j].e;
for(j0 = j;; j++){ return r;
if(j == nelem(ftab)){
j = j0; /* restart search */
break;
}
if(cistrcmp(f[i], ftab[j].flag) == 0){
flg |= ftab[j].e;
break;
}
}
}
return flg;
} }
/* "17-Jul-1996 02:44:25 -0700" */ /* "17-Jul-1996 02:44:25 -0700" */
@ -1016,8 +1006,10 @@ again:
m->deleted = Disappear; m->deleted = Disappear;
ll = &m->next; ll = &m->next;
}else{ }else{
/* TODO: flag this as changed, plumb. */ if(m->flags != (f[i].flags & ~Frecent)){
m->flags = f[i].flags; 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; ll = &m->next;
i++; i++;
} }