about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--imbox.c22
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);