summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-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);
td>June McEnroe 2019-11-08Avoid calling getopt_long again after it returns -1June McEnroe On GNU, calling getopt_long again will reset optind back to the first non-option argument, which would cause an infinite loop of reading the same configurtion file forever. 2019-11-08Only change AWAY status for registered clientsJune McEnroe Turns out I did eventually fix this, because I may want to implement "passive clients" for logging or notification stuff, which wouldn't affect AWAY status either. 2019-11-07Just write the example normallyJune McEnroe 2019-11-07Include path in readlinkat errorJune McEnroe 2019-11-07Call clientConsume before clientRecvJune McEnroe This might reduce the frequency of a client getting its own message back because it was behind in the ring when it sent it. 2019-11-06Use -l:filename in Linux.mkJune McEnroe 2019-11-06Fix compat.h for #defined strlcpyJune McEnroe 2019-11-06Allow unsetting LIBRESSL_PREFIXJune McEnroe 2019-11-06Document calico service configurationJune McEnroe 2019-11-06Document SASL EXTERNAL configuration in more detailJune McEnroe 2019-11-06Document pounce service configurationJune McEnroe 2019-11-06Mention Darwin and GNU/Linux in READMEJune McEnroe 2019-11-06Assume LibreSSL from brew on DarwinJune McEnroe 2019-11-06Remove -DNO_EXPLICIT_BZERO from Darwin.mkJune McEnroe 2019-11-06Don't install rc scripts or dirs on LinuxJune McEnroe