int mu_vgetyn (const char *fmt, va_list ap) { char repl[64]; while (1) { int rc; size_t n; mu_stream_vprintf (mu_strout, fmt, ap); mu_stream_write (mu_strout, "? ", 2, NULL); mu_stream_flush (mu_strout); if (mu_stream_read (mu_strin, repl, sizeof repl, &n) || n == 0) return 0; mu_rtrim_class (repl, MU_CTYPE_ENDLN); rc = mu_true_answer_p (repl); if (rc >= 0) return rc; /* TRANSLATORS: See msgids "nN" and "yY". */ mu_stream_printf (mu_strout, "%s", _("Please answer yes or no: ")); } return 0; /* to pacify gcc */ }
int mu_vgetans (const char *variants, const char *fmt, va_list ap) { char repl[64]; while (1) { size_t n; char *p; mu_stream_vprintf (mu_strout, fmt, ap); mu_stream_write (mu_strout, "? ", 2, NULL); mu_stream_flush (mu_strout); if (mu_stream_read (mu_strin, repl, sizeof repl, &n) || n == 0) return 0; mu_rtrim_class (repl, MU_CTYPE_ENDLN); p = strchr (variants, *repl); if (p) return *p; mu_stream_printf (mu_strout, _("Please answer one of [%s]: "), variants); } return 0; /* to pacify gcc */ }
/* Send the completion response and reset the state. */ int io_format_completion_response (mu_stream_t str, struct imap4d_command *command, int rc, const char *format, va_list ap) { int new_state; int status = 0; const char *sc = sc2string (rc); imap4d_sync (); mu_stream_printf (str, "%s %s%s ", command->tag, sc, command->name); mu_stream_vprintf (str, format, ap); mu_stream_write (str, "\n", 1, NULL); /* Reset the state. */ if (rc == RESP_OK) new_state = command->success; else if (command->failure <= state) new_state = command->failure; else new_state = STATE_NONE; if (new_state != STATE_NONE) { if (new_state == STATE_AUTH) set_xscript_level (MU_XSCRIPT_NORMAL); state = new_state; } return status; }
int io_sendf (const char *format, ...) { int status; va_list ap; va_start (ap, format); status = mu_stream_vprintf (iostream, format, ap); va_end (ap); return status; }
/* Send an untagged response. */ int io_untagged_response (int rc, const char *format, ...) { int status; va_list ap; mu_stream_printf (iostream, "* %s", sc2string (rc)); va_start (ap, format); status = mu_stream_vprintf (iostream, format, ap); va_end (ap); mu_stream_write (iostream, "\n", 1, NULL); return status; }