]> diplodocus.org Git - nmh/blobdiff - uip/imaptest.c
Move the opening brace of a C function to its own line.
[nmh] / uip / imaptest.c
index baa18d15a1b3e271bc40fbea3f90704e631311f7..01d3ee52459371ece81e22929dfbd37581ca44ee 100644 (file)
@@ -44,7 +44,7 @@ struct imap_msg;
 
 struct imap_msg {
     char *command;             /* Command to send */
-    int queue;                 /* If true, queue for later delivery */
+    bool queue;                        /* If true, queue for later delivery */
     struct imap_msg *next;     /* Next pointer */
 };
 
@@ -56,6 +56,7 @@ struct imap_cmd;
 struct imap_cmd {
     char tag[16];              /* Command tag */
     struct timeval start;      /* Time command was sent */
+    char prefix[64];           /* Command prefix */
     struct imap_cmd *next;     /* Next pointer */
 };
 
@@ -72,15 +73,16 @@ static void parse_capability(const char *, unsigned int len);
 static int capability_set(const char *);
 static void clear_capability(void);
 static int have_capability(void);
-static int send_imap_command(netsec_context *, int noflush, char **errstr,
+static int send_imap_command(netsec_context *, bool noflush, char **errstr,
                             const char *fmt, ...) CHECK_PRINTF(4, 5);
 static int get_imap_response(netsec_context *, const char *token,
                             char **tokenresp, char **status, int failerr,
                             char **errstr);
 
-static void ts_report(const char *str, struct timeval *tv);
+static void ts_report(struct timeval *tv, const char *fmt, ...)
+                     CHECK_PRINTF(2, 3);
 
-static void add_msg(int queue, const char *fmt, ...) CHECK_PRINTF(2, 3);
+static void add_msg(bool queue, const char *fmt, ...) CHECK_PRINTF(2, 3);
 
 static bool timestamp = false;
 
@@ -207,7 +209,7 @@ main (int argc, char **argv)
        die("Connect failed: %s", buf);
 
     if (timestamp) {
-       ts_report("Connect time", &tv_start);
+       ts_report(&tv_start, "Connect time");
        gettimeofday(&tv_connect, NULL);
     }
 
@@ -259,7 +261,7 @@ main (int argc, char **argv)
     } else {
         char *capstring;
 
-       if (send_imap_command(nsc, 0, &errstr, "CAPABILITY") != OK) {
+       if (send_imap_command(nsc, false, &errstr, "CAPABILITY") != OK) {
            fprintf(stderr, "Unable to send CAPABILITY command: %s\n", errstr);
            goto finish;
        }
@@ -285,7 +287,7 @@ main (int argc, char **argv)
                    "has no support for STARTTLS\n");
            goto finish;
        }
-       if (send_imap_command(nsc, 0, &errstr, "STARTTLS") != OK) {
+       if (send_imap_command(nsc, false, &errstr, "STARTTLS") != OK) {
            fprintf(stderr, "Unable to issue STARTTLS: %s\n", errstr);
            goto finish;
        }
@@ -325,7 +327,7 @@ main (int argc, char **argv)
     if (!have_capability()) {
         char *capstring;
 
-       if (send_imap_command(nsc, 0, &errstr, "CAPABILITY") != OK) {
+       if (send_imap_command(nsc, false, &errstr, "CAPABILITY") != OK) {
            fprintf(stderr, "Unable to send CAPABILITY command: %s\n", errstr);
            goto finish;
        }
@@ -346,7 +348,7 @@ main (int argc, char **argv)
     }
 
     if (timestamp) {
-       ts_report("Authentication time", &tv_connect);
+       ts_report(&tv_connect, "Authentication time");
        gettimeofday(&tv_auth, NULL);
     }
 
@@ -375,7 +377,8 @@ main (int argc, char **argv)
        free(imsg);
     }
 
-    ts_report("Total command execution time", &tv_auth);
+    if (timestamp)
+       ts_report(&tv_auth, "Total command execution time");
 
     send_imap_command(nsc, 0, NULL, "LOGOUT");
     get_imap_response(nsc, NULL, NULL, NULL, 0, NULL);
@@ -383,7 +386,8 @@ main (int argc, char **argv)
 finish:
     netsec_shutdown(nsc);
 
-    ts_report("Total elapsed time", &tv_start);
+    if (timestamp)
+       ts_report(&tv_start, "Total elapsed time");
 
     exit(0);
 }
@@ -635,7 +639,7 @@ imap_sasl_callback(enum sasl_message_type mtype, unsigned const char *indata,
  */
 
 static int
-send_imap_command(netsec_context *nsc, int noflush, char **errstr,
+send_imap_command(netsec_context *nsc, bool noflush, char **errstr,
                  const char *fmt, ...)
 {
     static unsigned int seq = 0;       /* Tag sequence number */
@@ -647,8 +651,19 @@ send_imap_command(netsec_context *nsc, int noflush, char **errstr,
 
     snprintf(cmd->tag, sizeof(cmd->tag), "A%u ", seq++);
 
-    if (timestamp)
+    if (timestamp) {
+       char *p;
+       va_start(ap, fmt);
+       vsnprintf(cmd->prefix, sizeof(cmd->prefix), fmt, ap);
+       va_end(ap);
+
+       p = strchr(cmd->prefix, ' ');
+
+       if (p)
+           *p = '\0';
+
        gettimeofday(&cmd->start, NULL);
+    }
 
     if (netsec_write(nsc, cmd->tag, strlen(cmd->tag), errstr) != OK) {
        free(cmd);
@@ -689,7 +704,7 @@ get_imap_response(netsec_context *nsc, const char *token, char **tokenresponse,
 {
     char *line;
     struct imap_cmd *cmd;
-    int numerrs = 0;
+    bool numerrs = false;
 
     if (tokenresponse)
        *tokenresponse = NULL;
@@ -709,7 +724,8 @@ getline:
            if (has_prefix(line, cmdqueue->tag)) {
                cmd = cmdqueue;
                if (timestamp)
-                   ts_report("Command execution time", &cmd->start);
+                   ts_report(&cmd->start, "Command (%s) execution time",
+                             cmd->prefix);
                cmdqueue = cmd->next;
                free(cmd);
            } else {
@@ -719,7 +735,7 @@ getline:
                        cmd->next = cmd->next->next;
                        if (failerr && strncmp(line + strlen(cmd2->tag),
                                                        "OK ", 3) != 0) {
-                           numerrs++;
+                           numerrs = true;
                            netsec_err(errstr, "%s", line + strlen(cmd2->tag));
                        }
                        free(cmd2);
@@ -735,7 +751,7 @@ getline:
        }
     }
 
-    return numerrs == 0 ? OK : NOTOK;
+    return numerrs ? NOTOK : OK;
 }
 
 /*
@@ -743,7 +759,7 @@ getline:
  */
 
 static void
-add_msg(int queue, const char *fmt, ...)
+add_msg(bool queue, const char *fmt, ...)
 {
     struct imap_msg *imsg;
     va_list ap;
@@ -779,15 +795,20 @@ add_msg(int queue, const char *fmt, ...)
  */
 
 static void
-ts_report(const char *str, struct timeval *tv)
+ts_report(struct timeval *tv, const char *fmt, ...)
 {
     struct timeval now;
     double delta;
+    va_list ap;
 
     gettimeofday(&now, NULL);
 
     delta = ((double) now.tv_sec) - ((double) tv->tv_sec) +
            (now.tv_usec / 1E6 - tv->tv_usec / 1E6);
 
-    printf("%s: %f sec\n", str, delta);
+    va_start(ap, fmt);
+    vfprintf(stdout, fmt, ap);
+    va_end(ap);
+
+    printf(": %f sec\n", delta);
 }