Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'utils/prompts.c')
-rw-r--r--utils/prompts.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/utils/prompts.c b/utils/prompts.c
new file mode 100644
index 00000000..d0823334
--- /dev/null
+++ b/utils/prompts.c
@@ -0,0 +1,69 @@
+/*
+ * Functions for making, destroying, and manipulating prompts_t
+ * structures.
+ */
+
+#include "putty.h"
+
+prompts_t *new_prompts(void)
+{
+ prompts_t *p = snew(prompts_t);
+ p->prompts = NULL;
+ p->n_prompts = p->prompts_size = 0;
+ p->data = NULL;
+ p->spr = SPR_INCOMPLETE;
+ p->to_server = true; /* to be on the safe side */
+ p->name = p->instruction = NULL;
+ p->name_reqd = p->instr_reqd = false;
+ p->callback = NULL;
+ p->callback_ctx = NULL;
+ p->ldisc_ptr_to_us = NULL;
+ return p;
+}
+
+void add_prompt(prompts_t *p, char *promptstr, bool echo)
+{
+ prompt_t *pr = snew(prompt_t);
+ pr->prompt = promptstr;
+ pr->echo = echo;
+ pr->result = strbuf_new_nm();
+ sgrowarray(p->prompts, p->prompts_size, p->n_prompts);
+ p->prompts[p->n_prompts++] = pr;
+}
+
+void prompt_set_result(prompt_t *pr, const char *newstr)
+{
+ strbuf_clear(pr->result);
+ put_dataz(pr->result, newstr);
+}
+
+const char *prompt_get_result_ref(prompt_t *pr)
+{
+ return pr->result->s;
+}
+
+char *prompt_get_result(prompt_t *pr)
+{
+ return dupstr(pr->result->s);
+}
+
+void free_prompts(prompts_t *p)
+{
+ size_t i;
+
+ /* If an Ldisc currently knows about us, tell it to forget us, so
+ * it won't dereference a stale pointer later. */
+ if (p->ldisc_ptr_to_us)
+ *p->ldisc_ptr_to_us = NULL;
+
+ for (i=0; i < p->n_prompts; i++) {
+ prompt_t *pr = p->prompts[i];
+ strbuf_free(pr->result);
+ sfree(pr->prompt);
+ sfree(pr);
+ }
+ sfree(p->prompts);
+ sfree(p->name);
+ sfree(p->instruction);
+ sfree(p);
+}