X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/962468d4b96c33869e9131eb42a0c784591f5884..3d5040f8f85f049cbb072a827a6184b4b4314b08:/windows/winctrls.c diff --git a/windows/winctrls.c b/windows/winctrls.c index fa79e649..72d462ed 100644 --- a/windows/winctrls.c +++ b/windows/winctrls.c @@ -448,6 +448,8 @@ char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines) if (lines) *lines = nlines; + sfree(pwidths); + return ret; } @@ -1291,6 +1293,7 @@ void winctrl_remove(struct winctrls *wc, struct winctrl *c) { struct winctrl *ret; ret = del234(wc->byctrl, c); + assert(ret == c); ret = del234(wc->byid, c); assert(ret == c); } @@ -1665,7 +1668,9 @@ void winctrl_layout(struct dlgparam *dp, struct winctrls *wc, winctrl_add_shortcuts(dp, c); if (actual_base_id == base_id) base_id += num_ids; - } + } else { + sfree(data); + } if (colstart >= 0) { /* @@ -2098,26 +2103,12 @@ void dlg_editbox_set(union control *ctrl, void *dlg, char const *text) SetDlgItemText(dp->hwnd, c->base_id+1, text); } -static char *getdlgitemtext_alloc(HWND hwnd, int id) -{ - char *ret = NULL; - int size = 0; - - do { - size = size * 4 / 3 + 512; - ret = sresize(ret, size, char); - GetDlgItemText(hwnd, id, ret, size); - } while (!memchr(ret, '\0', size-1)); - - return ret; -} - char *dlg_editbox_get(union control *ctrl, void *dlg) { struct dlgparam *dp = (struct dlgparam *)dlg; struct winctrl *c = dlg_findbyctrl(dp, ctrl); assert(c && c->ctrl->generic.type == CTRL_EDITBOX); - return getdlgitemtext_alloc(dp->hwnd, c->base_id+1); + return GetDlgItemText_alloc(dp->hwnd, c->base_id+1); } /* The `listbox' functions can also apply to combo boxes. */ @@ -2312,7 +2303,7 @@ Filename *dlg_filesel_get(union control *ctrl, void *dlg) char *tmp; Filename *ret; assert(c && c->ctrl->generic.type == CTRL_FILESELECT); - tmp = getdlgitemtext_alloc(dp->hwnd, c->base_id+1); + tmp = GetDlgItemText_alloc(dp->hwnd, c->base_id+1); ret = filename_from_str(tmp); sfree(tmp); return ret; @@ -2380,6 +2371,8 @@ void dlg_set_focus(union control *ctrl, void *dlg) struct winctrl *c = dlg_findbyctrl(dp, ctrl); int id; HWND ctl; + if (!c) + return; switch (ctrl->generic.type) { case CTRL_EDITBOX: id = c->base_id + 1; break; case CTRL_RADIO: