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 */
};
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);
die("Connect failed: %s", buf);
if (timestamp) {
- ts_report("Connect time", &tv_start);
+ ts_report(&tv_start, "Connect time");
gettimeofday(&tv_connect, NULL);
}
}
if (timestamp) {
- ts_report("Authentication time", &tv_connect);
+ ts_report(&tv_connect, "Authentication time");
gettimeofday(&tv_auth, NULL);
}
free(imsg);
}
- ts_report("Total command execution time", &tv_auth);
+ ts_report(&tv_auth, "Total command execution time");
send_imap_command(nsc, 0, NULL, "LOGOUT");
get_imap_response(nsc, NULL, NULL, NULL, 0, NULL);
finish:
netsec_shutdown(nsc);
- ts_report("Total elapsed time", &tv_start);
+ ts_report(&tv_start, "Total elapsed time");
exit(0);
}
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);
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 {
*/
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);
}