# HG changeset patch # User Bram Moolenaar # Date 1412867156 -7200 # Node ID 3005da486a71dc1171b3c8fe075701ea5e4b5668 # Parent 9d44b402fb1b1914043b3b5fe3596e19c50c31b0 updated for version 7.4.471 Problem: MS-Windows: When printer name contains multi-byte, the name is displayed as ???. Solution: Convert the printer name from the active codepage to 'encoding'. (Yasuhiro Matsumoto) diff --git a/src/os_mswin.c b/src/os_mswin.c --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -1635,11 +1635,33 @@ mch_print_init(prt_settings_T *psettings char_u *printer_name = (char_u *)devname + devname->wDeviceOffset; char_u *port_name = (char_u *)devname +devname->wOutputOffset; char_u *text = _("to %s on %s"); - +#ifdef FEAT_MBYTE + char_u *printer_name_orig = printer_name; + char_u *port_name_orig = port_name; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { + char_u *to_free = NULL; + int maxlen; + + acp_to_enc(printer_name, STRLEN(printer_name), &to_free, &maxlen); + if (to_free != NULL) + printer_name = to_free; + acp_to_enc(port_name, STRLEN(port_name), &to_free, &maxlen); + if (to_free != NULL) + port_name = to_free; + } +#endif prt_name = alloc((unsigned)(STRLEN(printer_name) + STRLEN(port_name) + STRLEN(text))); if (prt_name != NULL) wsprintf(prt_name, text, printer_name, port_name); +#ifdef FEAT_MBYTE + if (printer_name != printer_name_orig) + vim_free(printer_name); + if (port_name != port_name_orig) + vim_free(port_name); +#endif } GlobalUnlock(prt_dlg.hDevNames); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 471, +/**/ 470, /**/ 469,