diff options
Diffstat (limited to 'notemap.c')
-rw-r--r-- | notemap.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/notemap.c b/notemap.c index 99a1418..b448a2a 100644 --- a/notemap.c +++ b/notemap.c @@ -348,10 +348,7 @@ next: errx(EX_CONFIG, "multiple messages matching %s", uuid); } if (resp.data.len) { - if (resp.data.ptr[0].type != Number) { - errx(EX_PROTOCOL, "invalid search result"); - } - seq = resp.data.ptr[0].number; + seq = dataCheck(resp.data.ptr[0], Number).number; fprintf( imap, "%s FETCH %" PRIu32 " ENVELOPE\r\n", Atoms[AtomFetch], seq @@ -364,19 +361,21 @@ next: ); } } + + if (resp.resp == AtomFetch) { + if (!resp.data.len) errx(EX_PROTOCOL, "missing fetch data"); + struct List items = dataCheck(resp.data.ptr[0], List).list; + if (items.len < 2) errx(EX_PROTOCOL, "missing fetch data items"); + enum Atom item = dataCheck(items.ptr[0], Atom).atom; + if (item != AtomEnvelope) continue; + + struct List envelope = dataCheck(items.ptr[1], List).list; + if (envelope.len < 1) errx(EX_PROTOCOL, "missing envelope date"); - if ( - resp.resp == AtomFetch && - resp.data.len && - resp.data.ptr[0].type == List && - resp.data.ptr[0].list.len > 1 && - resp.data.ptr[0].list.ptr[0].type == Atom && - resp.data.ptr[0].list.ptr[0].atom == AtomEnvelope && - resp.data.ptr[0].list.ptr[1].type == List - ) { - struct List envelope = resp.data.ptr[0].list.ptr[1].list; struct tm date = {0}; - char *rest = strptime(envelope.ptr[0].string, DATE_FORMAT, &date); + char *rest = strptime( + dataCheck(envelope.ptr[0], String).string, DATE_FORMAT, &date + ); if (!rest) errx(EX_PROTOCOL, "invalid envelope date format"); struct stat status; |