From 129a928aec087bae7b498aa345c806699d0b31a1 Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 2 Oct 2011 13:53:58 +0000 Subject: [PATCH] Move a recently introduced utility function out of the file in which I declared it static, and into winutils.c where it can be more generally accessible. git-svn-id: svn://svn.tartarus.org/sgt/putty@9318 cda61777-01e9-0310-a592-d414129be87e --- windows/winctrls.c | 18 ++---------------- windows/winstuff.h | 1 + windows/winutils.c | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/windows/winctrls.c b/windows/winctrls.c index fa79e649..c9300cdd 100644 --- a/windows/winctrls.c +++ b/windows/winctrls.c @@ -2098,26 +2098,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 +2298,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; diff --git a/windows/winstuff.h b/windows/winstuff.h index e8b70d4e..13ec3d85 100644 --- a/windows/winstuff.h +++ b/windows/winstuff.h @@ -287,6 +287,7 @@ BOOL request_file(filereq *state, OPENFILENAME *of, int preserve, int save); filereq *filereq_new(void); void filereq_free(filereq *state); int message_box(LPCTSTR text, LPCTSTR caption, DWORD style, DWORD helpctxid); +char *GetDlgItemText_alloc(HWND hwnd, int id); void split_into_argv(char *, int *, char ***, char ***); /* diff --git a/windows/winutils.c b/windows/winutils.c index 40f1f4a7..2e0183d3 100644 --- a/windows/winutils.c +++ b/windows/winutils.c @@ -151,6 +151,25 @@ void pgp_fingerprints(void) } /* + * Handy wrapper around GetDlgItemText which doesn't make you invent + * an arbitrary length limit on the output string. Returned string is + * dynamically allocated; caller must free. + */ +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; +} + +/* * Split a complete command line into argc/argv, attempting to do * it exactly the same way Windows itself would do it (so that * console utilities, which receive argc and argv from Windows, -- 2.11.0