X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/cecb13f6928246c1fc9f49c5613938b97b86da3d..055817455466c8eb60392f30bb7c689763962e17:/windows/window.c diff --git a/windows/window.c b/windows/window.c index fe90483e..17aaf1ae 100644 --- a/windows/window.c +++ b/windows/window.c @@ -158,7 +158,7 @@ static enum { } und_mode; static int descent; -#define NCFGCOLOURS 24 +#define NCFGCOLOURS 22 #define NEXTCOLOURS 240 #define NALLCOLOURS (NCFGCOLOURS + NEXTCOLOURS) static COLORREF colours[NALLCOLOURS]; @@ -542,9 +542,20 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) } /* - * Trim a colon suffix off the hostname if it's there. + * Trim a colon suffix off the hostname if it's there. In + * order to protect IPv6 address literals against this + * treatment, we do not do this if there's _more_ than one + * colon. */ - cfg.host[strcspn(cfg.host, ":")] = '\0'; + { + char *c = strchr(cfg.host, ':'); + + if (c) { + char *d = strchr(c+1, ':'); + if (!d) + *c = '\0'; + } + } /* * Remove any remaining whitespace from the hostname. @@ -635,7 +646,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) * Initialise the terminal. (We have to do this _after_ * creating the window, since the terminal is the first thing * which will call schedule_timer(), which will in turn call - * timer_change_notify() which will expect hwnd to exist. + * timer_change_notify() which will expect hwnd to exist.) */ term = term_init(&cfg, &ucsdata, NULL); logctx = log_init(NULL, &cfg); @@ -1900,7 +1911,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, GetWindowText(hwnd, cfg.wintitle, sizeof(cfg.wintitle)); prev_cfg = cfg; - if (!do_reconfig(hwnd)) + if (!do_reconfig(hwnd, back ? back->cfg_info(backhandle) : 0)) break; { @@ -2295,10 +2306,10 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, HBRUSH fillcolour, oldbrush; HPEN edge, oldpen; fillcolour = CreateSolidBrush ( - colours[(ATTR_DEFBG>>ATTR_BGSHIFT)*2]); + colours[ATTR_DEFBG>>ATTR_BGSHIFT]); oldbrush = SelectObject(hdc, fillcolour); edge = CreatePen(PS_SOLID, 0, - colours[(ATTR_DEFBG>>ATTR_BGSHIFT)*2]); + colours[ATTR_DEFBG>>ATTR_BGSHIFT]); oldpen = SelectObject(hdc, edge); /* @@ -2320,7 +2331,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, Rectangle(hdc, p.rcPaint.left, p.rcPaint.top, p.rcPaint.right, p.rcPaint.bottom); - // SelectClipRgn(hdc, NULL); + /* SelectClipRgn(hdc, NULL); */ SelectObject(hdc, oldbrush); DeleteObject(fillcolour); @@ -3234,7 +3245,7 @@ void do_cursor(Context ctx, int x, int y, wchar_t *text, int len, if (attr & TATTR_ACTCURS) { HPEN oldpen; oldpen = - SelectObject(hdc, CreatePen(PS_SOLID, 0, colours[23])); + SelectObject(hdc, CreatePen(PS_SOLID, 0, colours[261])); MoveToEx(hdc, startx, starty, NULL); LineTo(hdc, startx + dx * length, starty + dy * length); oldpen = SelectObject(hdc, oldpen); @@ -3242,7 +3253,7 @@ void do_cursor(Context ctx, int x, int y, wchar_t *text, int len, } else { for (i = 0; i < length; i++) { if (i % 2 == 0) { - SetPixel(hdc, startx, starty, colours[23]); + SetPixel(hdc, startx, starty, colours[261]); } startx += dx; starty += dy;