aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorC. McEnroe <june@causal.agency>2020-05-04 18:05:14 -0400
committerC. McEnroe <june@causal.agency>2020-05-04 18:05:14 -0400
commitb258705bb584bae3eded46c7838ecb9e4c7cd3d4 (patch)
tree2ff3b159add21465865d2744df86674c3467b269
parentUpdate IMAP parser (diff)
downloadnotemap-b258705bb584bae3eded46c7838ecb9e4c7cd3d4.tar.gz
notemap-b258705bb584bae3eded46c7838ecb9e4c7cd3d4.zip
Clean up notemap with dataCheck
-rw-r--r--notemap.c29
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;