1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-01 08:17:38 +00:00

(add_menu_item): Don't use multibyte string functions on

unicode strings.
This commit is contained in:
Jason Rumney 2007-06-17 22:11:16 +00:00
parent 624e5973f3
commit ff25d11542
2 changed files with 51 additions and 22 deletions

View File

@ -1,3 +1,8 @@
2007-06-17 Jason Rumney <jasonr@gnu.org>
* w32menu.c (add_menu_item): Don't use multibyte string functions on
unicode strings.
2007-06-16 Juanma Barranquero <lekktu@gmail.com>
* xdisp.c (syms_of_xdisp) <auto-resize-tool-bars>:

View File

@ -2291,29 +2291,53 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item)
/* Quote any special characters within the menu item's text and
key binding. */
nlen = orig_len = strlen (out_string);
for (p = out_string; *p; p = _mbsinc (p))
{
if (_mbsnextc (p) == '&')
nlen++;
}
if (unicode_append_menu)
{
/* With UTF-8, & cannot be part of a multibyte character. */
for (p = out_string; *p; p++)
{
if (*p == '&')
nlen++;
}
}
else
{
/* If encoded with the system codepage, use multibyte string
functions in case of multibyte characters that contain '&'. */
for (p = out_string; *p; p = _mbsinc (p))
{
if (_mbsnextc (p) == '&')
nlen++;
}
}
if (nlen > orig_len)
{
p = out_string;
out_string = alloca (nlen + 1);
q = out_string;
while (*p)
{
if (_mbsnextc (p) == '&')
{
_mbsncpy (q, p, 1);
q = _mbsinc (q);
}
_mbsncpy (q, p, 1);
p = _mbsinc (p);
q = _mbsinc (q);
}
*q = '\0';
}
{
p = out_string;
out_string = alloca (nlen + 1);
q = out_string;
while (*p)
{
if (unicode_append_menu)
{
if (*p == '&')
*q++ = *p;
*q++ = *p++;
}
else
{
if (_mbsnextc (p) == '&')
{
_mbsncpy (q, p, 1);
q = _mbsinc (q);
}
_mbsncpy (q, p, 1);
p = _mbsinc (p);
q = _mbsinc (q);
}
}
*q = '\0';
}
if (item != NULL)
fuFlags = MF_POPUP;