diff -r 9ad06889a5d1 sys/src/cmd/upas/fs/imap.c --- a/sys/src/cmd/upas/fs/imap.c Mon Nov 18 01:06:02 2019 -0800 +++ b/sys/src/cmd/upas/fs/imap.c Mon Nov 18 19:33:19 2019 -0800 @@ -35,6 +35,7 @@ uvlong uid; ulong sizes; ulong dates; + ulong flags; } Fetchi; typedef struct Imap Imap; @@ -230,26 +231,29 @@ "\\Stored", Fstored, }; -static void -parseflags(Message *m, char *s) +static int +parseflags(char *s) { char *f[10]; - int i, j, j0, n; + int i, j, j0, n, flg; n = tokenize(s, f, nelem(f)); qsort(f, n, sizeof *f, (int (*)(void*,void*))strcmp); j = 0; - for(i = 0; i < n; i++) + flg = 0; + for(i = 0; i < n; i++){ for(j0 = j;; j++){ if(j == nelem(ftab)){ j = j0; /* restart search */ break; } - if(strcmp(f[i], ftab[j].flag) == 0){ - m->flags |= ftab[j].e; + if(cistrcmp(f[i], ftab[j].flag) == 0){ + flg |= ftab[j].e; break; } } + } + return flg; } /* "17-Jul-1996 02:44:25 -0700" */ @@ -356,8 +360,13 @@ if(imap->nuid < imap->muid) imap->f[imap->nuid].uid = v; }else if(strcmp(f[i], "flags") == 0){ + print("flags: %s\n", f[i + 1]); + l = parseflags(f[i + 1]); + idprint(imap, "ids: %d, %d, flags: %s (%lx)\n", imap->nuid, imap->muid, f[i + 1], l); if(m) - parseflags(m, f[i + 1]); + m->flags = l; + if(imap->nuid < imap->muid) + imap->f[imap->nuid].flags = l; }else if(strncmp(f[i], "body[]", 6) == 0){ s = f[i]+6; o = 0; @@ -949,6 +958,7 @@ m->imapuid = f[i].uid; m->fileid = datesec(imap, i); m->size = f[i].sizes; + m->flags = f[i].flags; m->next = *ll; *ll = m; ll = &m->next;