diff options
-rw-r--r-- | imbox.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/imbox.c b/imbox.c index 70b1270..d3c2bf5 100644 --- a/imbox.c +++ b/imbox.c @@ -67,6 +67,13 @@ static void mboxrd(char *header, char *body) { printf("\n"); } +static void printNums(FILE *file, struct List nums) { + for (size_t i = 0; i < nums.len; ++i) { + uint32_t num = dataCheck(nums.ptr[i], Number).number; + fprintf(file, "%s%" PRIu32, (i ? "," : ""), num); + } +} + int main(int argc, char *argv[]) { int rppFlags = 0; const char *host = NULL; @@ -160,10 +167,7 @@ search:; enum Atom fetch = atom("fetch"); fprintf(imap.w, "%s FETCH ", Atoms[fetch]); - for (size_t i = 0; i < nums.len; ++i) { - uint32_t num = dataCheck(nums.ptr[i], Number).number; - fprintf(imap.w, "%s%" PRIu32, (i ? "," : ""), num); - } + printNums(imap.w, nums); fprintf( imap.w, " (BODY[HEADER.FIELDS (" FETCH_HEADERS ")] BODY[TEXT])\r\n" ); @@ -195,10 +199,7 @@ search:; if (seen) { enum Atom sto = atom("store"); fprintf(imap.w, "%s STORE ", Atoms[sto]); - for (size_t i = 0; i < nums.len; ++i) { - uint32_t num = dataCheck(nums.ptr[i], Number).number; - fprintf(imap.w, "%s%" PRIu32, (i ? "," : ""), num); - } + printNums(imap.w, nums); fprintf(imap.w, " +FLAGS.SILENT (\\Seen)\r\n"); for (; resp = respOk(imapResp(&imap)), resp.tag != sto; respFree(resp)); respFree(resp); @@ -207,10 +208,7 @@ search:; if (move) { enum Atom mov = atom("move"); fprintf(imap.w, "%s MOVE ", Atoms[mov]); - for (size_t i = 0; i < nums.len; ++i) { - uint32_t num = dataCheck(nums.ptr[i], Number).number; - fprintf(imap.w, "%s%" PRIu32, (i ? "," : ""), num); - } + printNums(imap.w, nums); fprintf(imap.w, " \"%s\"\r\n", move); for (; resp = respOk(imapResp(&imap)), resp.tag != mov; respFree(resp)); respFree(resp); |