X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/fe5634f616c5bf0afdf883045dc309e82c6ac41c..a460b361fe6734325bead016ef2dd39e4da302f4:/ldisc.c diff --git a/ldisc.c b/ldisc.c index c77b5c8f..1febff3d 100644 --- a/ldisc.c +++ b/ldisc.c @@ -12,12 +12,12 @@ #include "terminal.h" #include "ldisc.h" -#define ECHOING (ldisc->cfg->localecho == LD_YES || \ - (ldisc->cfg->localecho == LD_BACKEND && \ +#define ECHOING (ldisc->cfg->localecho == FORCE_ON || \ + (ldisc->cfg->localecho == AUTO && \ (ldisc->back->ldisc(ldisc->backhandle, LD_ECHO) || \ term_ldisc(ldisc->term, LD_ECHO)))) -#define EDITING (ldisc->cfg->localedit == LD_YES || \ - (ldisc->cfg->localedit == LD_BACKEND && \ +#define EDITING (ldisc->cfg->localedit == FORCE_ON || \ + (ldisc->cfg->localedit == AUTO && \ (ldisc->back->ldisc(ldisc->backhandle, LD_EDIT) || \ term_ldisc(ldisc->term, LD_EDIT)))) @@ -65,7 +65,7 @@ void *ldisc_create(Config *mycfg, Terminal *term, Backend *back, void *backhandle, void *frontend) { - Ldisc ldisc = smalloc(sizeof(*ldisc)); + Ldisc ldisc = snew(struct ldisc_tag); ldisc->buf = NULL; ldisc->buflen = 0; @@ -87,6 +87,19 @@ void *ldisc_create(Config *mycfg, Terminal *term, return ldisc; } +void ldisc_free(void *handle) +{ + Ldisc ldisc = (Ldisc) handle; + + if (ldisc->term) + ldisc->term->ldisc = NULL; + if (ldisc->back) + ldisc->back->provide_ldisc(ldisc->backhandle, NULL); + if (ldisc->buf) + sfree(ldisc->buf); + sfree(ldisc); +} + void ldisc_send(void *handle, char *buf, int len, int interactive) { Ldisc ldisc = (Ldisc) handle; @@ -151,8 +164,8 @@ void ldisc_send(void *handle, char *buf, int len, int interactive) bsb(ldisc, plen(ldisc, ldisc->buf[ldisc->buflen - 1])); ldisc->buflen--; if (ldisc->buflen > 0 && - isspace(ldisc->buf[ldisc->buflen - 1]) && - !isspace(ldisc->buf[ldisc->buflen])) + isspace((unsigned char)ldisc->buf[ldisc->buflen-1]) && + !isspace((unsigned char)ldisc->buf[ldisc->buflen])) break; } break; @@ -248,7 +261,7 @@ void ldisc_send(void *handle, char *buf, int len, int interactive) default_case: if (ldisc->buflen >= ldisc->bufsiz) { ldisc->bufsiz = ldisc->buflen + 256; - ldisc->buf = srealloc(ldisc->buf, ldisc->bufsiz); + ldisc->buf = sresize(ldisc->buf, ldisc->bufsiz, char); } ldisc->buf[ldisc->buflen++] = c; if (ECHOING)