pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: pkgsrc/emulators/qemu
Module Name: pkgsrc
Committed By: kamil
Date: Sat Apr 27 18:00:46 UTC 2019
Modified Files:
pkgsrc/emulators/qemu: Makefile distinfo
pkgsrc/emulators/qemu/patches: patch-ui_curses.c
Log Message:
qemu: Switch curses.c patches to the ones pending upstream
* fix compatibility with NetBSD curses(3)
https://patchwork.ozlabs.org/patch/1092056/
* fix portability of iconv(3) usage
https://patchwork.ozlabs.org/patch/1092057/
Both work better than the existing one. Borders are printed now correctly.
Bump PKGREVISION
To generate a diff of this commit:
cvs rdiff -u -r1.206 -r1.207 pkgsrc/emulators/qemu/Makefile
cvs rdiff -u -r1.147 -r1.148 pkgsrc/emulators/qemu/distinfo
cvs rdiff -u -r1.2 -r1.3 pkgsrc/emulators/qemu/patches/patch-ui_curses.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: pkgsrc/emulators/qemu/Makefile
diff -u pkgsrc/emulators/qemu/Makefile:1.206 pkgsrc/emulators/qemu/Makefile:1.207
--- pkgsrc/emulators/qemu/Makefile:1.206 Thu Apr 25 23:54:46 2019
+++ pkgsrc/emulators/qemu/Makefile Sat Apr 27 18:00:46 2019
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.206 2019/04/25 23:54:46 kamil Exp $
+# $NetBSD: Makefile,v 1.207 2019/04/27 18:00:46 kamil Exp $
DISTNAME= qemu-4.0.0
-PKGREVISION= 4
+PKGREVISION= 5
CATEGORIES= emulators
MASTER_SITES= https://download.qemu.org/
EXTRACT_SUFX= .tar.xz
Index: pkgsrc/emulators/qemu/distinfo
diff -u pkgsrc/emulators/qemu/distinfo:1.147 pkgsrc/emulators/qemu/distinfo:1.148
--- pkgsrc/emulators/qemu/distinfo:1.147 Thu Apr 25 23:54:46 2019
+++ pkgsrc/emulators/qemu/distinfo Sat Apr 27 18:00:46 2019
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.147 2019/04/25 23:54:46 kamil Exp $
+$NetBSD: distinfo,v 1.148 2019/04/27 18:00:46 kamil Exp $
SHA1 (qemu-4.0.0.tar.xz) = 74cfb8f4724d9651fdd354560f2d291887b32cad
RMD160 (qemu-4.0.0.tar.xz) = 58135f00c391823edce780d55a816f29dd73c34b
@@ -21,4 +21,4 @@ SHA1 (patch-target_hppa_insns.decode) =
SHA1 (patch-target_hppa_mem__helper.c) = 080d99b2a6dc7f5ab1df04ef6c316e5dcd133753
SHA1 (patch-target_hppa_translate.c) = 8bdeaba3f19204ffd5465d33a44380bbcbfd7a57
SHA1 (patch-target_i386_kvm-stub.c) = 4cd2b7a8d8d8a317829f982b5acff7fdf2479d9f
-SHA1 (patch-ui_curses.c) = 1809e6a35cc920dc42dbdef8ee8844d0108a8db7
+SHA1 (patch-ui_curses.c) = a8bd6ad93d53d6cfba3b6853aff5702fe40ae944
Index: pkgsrc/emulators/qemu/patches/patch-ui_curses.c
diff -u pkgsrc/emulators/qemu/patches/patch-ui_curses.c:1.2 pkgsrc/emulators/qemu/patches/patch-ui_curses.c:1.3
--- pkgsrc/emulators/qemu/patches/patch-ui_curses.c:1.2 Thu Apr 25 23:54:46 2019
+++ pkgsrc/emulators/qemu/patches/patch-ui_curses.c Sat Apr 27 18:00:46 2019
@@ -1,284 +1,287 @@
-$NetBSD: patch-ui_curses.c,v 1.2 2019/04/25 23:54:46 kamil Exp $
+$NetBSD: patch-ui_curses.c,v 1.3 2019/04/27 18:00:46 kamil Exp $
-* For NetBSD curses
-* Switch unportable iconv(3) UCS-2 <-> wchar_t conversions
- to a portable algorithm with an intermediate step with
- multibyte sequences
+ * fix compatibility with NetBSD curses(3)
+
+https://patchwork.ozlabs.org/patch/1092056/
+
+ * fix portability of iconv(3) usage
+
+https://patchwork.ozlabs.org/patch/1092057/
--- ui/curses.c.orig 2019-04-23 18:14:46.000000000 +0000
+++ ui/curses.c
-@@ -46,6 +46,11 @@
- #define FONT_HEIGHT 16
- #define FONT_WIDTH 8
-
-+#if defined(__NetBSD__)
-+#define chars vals
-+#define attr attributes
-+#endif
-+
- enum maybe_keycode {
- CURSES_KEYCODE,
- CURSES_CHAR,
-@@ -400,6 +405,8 @@ static void curses_atexit(void)
+@@ -66,20 +66,22 @@ static void curses_update(DisplayChangeL
+ {
+ console_ch_t *line;
+ cchar_t curses_line[width];
++ wchar_t wch[CCHARW_MAX];
++ attr_t attrs;
++ short colors;
++ int ret;
+
+ line = screen + y * width;
+ for (h += y; y < h; y ++, line += width) {
+ for (x = 0; x < width; x++) {
+ chtype ch = line[x] & 0xff;
+ chtype at = line[x] & ~0xff;
+- if (vga_to_curses[ch].chars[0]) {
+- curses_line[x] = vga_to_curses[ch];
+- } else {
+- curses_line[x] = (cchar_t) {
+- .chars[0] = ch,
+- };
++ ret = getcchar(&vga_to_curses[ch], wch, &attrs, &colors, NULL);
++ if (ret == ERR || wch[0] == 0) {
++ wch[0] = ch;
++ wch[1] = 0;
+ }
+- curses_line[x].attr |= at;
++ setcchar(&curses_line[x], wch, at, 0, NULL);
+ }
+ mvwadd_wchnstr(screenpad, y, 0, curses_line, width);
+ }
+@@ -400,65 +402,106 @@ static void curses_atexit(void)
endwin();
}
++/*
++ * In the following:
++ * - fch is the font glyph number
++ * - uch is the unicode value
++ * - wch is the wchar_t value (may not be unicode, e.g. on BSD/solaris)
++ * - mbch is the native local-dependent multibyte representation
++ */
+
-+#if 0
/* Setup wchar glyph for one UCS-2 char */
- static void convert_ucs(int glyph, uint16_t ch, iconv_t conv)
+-static void convert_ucs(int glyph, uint16_t ch, iconv_t conv)
++static void convert_ucs(unsigned char fch, uint16_t uch, iconv_t conv)
{
-@@ -653,6 +660,253 @@ static void font_setup(void)
- iconv_close(wchar_to_ucs_conv);
- iconv_close(font_conv);
- }
-+#else
-+static void convert_ucs(int glyph, uint16_t ch, iconv_t conv)
-+{
-+ char nch[MB_CUR_MAX];
-+ wchar_t wch;
-+ char *pch, *pwch, *pnch;
-+ size_t sch, swch, snch;
-+
-+ pch = (char *) &ch;
-+ pwch = (char *) &wch;
-+ pnch = (char *) nch;
-+ sch = sizeof(ch);
-+ swch = sizeof(wch);
-+ snch = sizeof(nch);
-+
-+ if (iconv(conv, &pch, &sch, &pnch, &snch) == (size_t) -1) {
-+ fprintf(stderr, "Could not convert 0x%04x from UCS-2 to a multibyte character: %s\n",
-+ ch, strerror(errno));
+- wchar_t wch;
+- char *pch, *pwch;
+- size_t sch, swch;
+-
+- pch = (char *) &ch;
+- pwch = (char *) &wch;
+- sch = sizeof(ch);
+- swch = sizeof(wch);
+-
+- if (iconv(conv, &pch, &sch, &pwch, &swch) == (size_t) -1) {
+- fprintf(stderr, "Could not convert 0x%04x from UCS-2 to WCHAR_T: %s\n",
+- ch, strerror(errno));
+- } else {
+- vga_to_curses[glyph].chars[0] = wch;
++ char mbch[MB_CUR_MAX];
++ wchar_t wch[2];
++ char *puch, *pmbch;
++ size_t such, smbch;
++
++ puch = (char *) &uch;
++ pmbch = (char *) mbch;
++ such = sizeof(uch);
++ smbch = sizeof(mbch);
++
++ if (iconv(conv, &puch, &such, &pmbch, &smbch) == (size_t) -1) {
++ fprintf(stderr, "Could not convert 0x%04x "
++ "from UCS-2 to a multibyte character: %s\n",
++ uch, strerror(errno));
+ return;
+ }
+
-+ if (mbtowc(&wch, nch, sizeof(nch) - snch) == -1) {
-+ fprintf(stderr, "Could not convert 0x%04x from a multibyte character to wchar_t: %s\n",
-+ ch, strerror(errno));
++ if (mbtowc(&wch[0], mbch, sizeof(mbch) - smbch) == -1) {
++ fprintf(stderr, "Could not convert 0x%04x "
++ "from a multibyte character to wchar_t: %s\n",
++ uch, strerror(errno));
+ return;
-+ }
-+ vga_to_curses[glyph].chars[0] = wch;
-+}
+ }
+
-+static void convert_font(unsigned char ch)
-+{
-+ wchar_t wch;
-+
-+ mbtowc(&wch, (char *)&ch, 1);
-+ vga_to_curses[ch].chars[0] = wch;
-+}
-+
-+/* Convert one wchar to UCS-2 */
-+static uint16_t get_ucs(wchar_t wch, iconv_t conv)
-+{
-+ char nch[MB_CUR_MAX];
-+ char *pnch;
-+ size_t snch;
-+
-+ uint16_t ch;
-+ char *pch;
-+ size_t sch;
-+
-+ pnch = (char *) nch;
-+ pch = (char *) &ch;
-+ sch = sizeof(ch);
-+
-+ if ((snch = wctomb(nch, wch)) == -1) {
-+ fprintf(stderr, "Could not convert 0x%04x from wchar_t to a multibyte character: %s\n",
-+ ch, strerror(errno));
-+ return 0xFFFD;
++ wch[1] = 0;
++ setcchar(&vga_to_curses[fch], wch, 0, 0, NULL);
+ }
+
+ /* Setup wchar glyph for one font character */
+-static void convert_font(unsigned char ch, iconv_t conv)
++static void convert_font(unsigned char fch, iconv_t conv)
+ {
+- wchar_t wch;
+- char *pch, *pwch;
+- size_t sch, swch;
+-
+- pch = (char *) &ch;
+- pwch = (char *) &wch;
+- sch = sizeof(ch);
+- swch = sizeof(wch);
+-
+- if (iconv(conv, &pch, &sch, &pwch, &swch) == (size_t) -1) {
+- fprintf(stderr, "Could not convert 0x%02x from %s to WCHAR_T: %s\n",
+- ch, font_charset, strerror(errno));
+- } else {
+- vga_to_curses[ch].chars[0] = wch;
++ char mbch[MB_CUR_MAX];
++ wchar_t wch[2];
++ char *pfch, *pmbch;
++ size_t sfch, smbch;
++
++ pfch = (char *) &fch;
++ pmbch = (char *) &mbch;
++ sfch = sizeof(fch);
++ smbch = sizeof(mbch);
++
++ if (iconv(conv, &pfch, &sfch, &pmbch, &smbch) == (size_t) -1) {
++ fprintf(stderr, "Could not convert font glyph 0x%02x "
++ "from %s to a multibyte character: %s\n",
++ fch, font_charset, strerror(errno));
++ return;
+ }
+
-+ if (iconv(conv, &sch, &snch, &pch, &sch) == (size_t) -1) {
-+ fprintf(stderr, "Could not convert 0x%04x from a multibyte character to UCS-2 : %s\n",
-+ ch, strerror(errno));
++ if (mbtowc(&wch[0], mbch, sizeof(mbch) - smbch) == -1) {
++ fprintf(stderr, "Could not convert font glyph 0x%02x "
++ "from a multibyte character to wchar_t: %s\n",
++ fch, strerror(errno));
++ return;
+ }
++
++ wch[1] = 0;
++ setcchar(&vga_to_curses[fch], wch, 0, 0, NULL);
+ }
+
+ /* Convert one wchar to UCS-2 */
+ static uint16_t get_ucs(wchar_t wch, iconv_t conv)
+ {
+- uint16_t ch;
+- char *pch, *pwch;
+- size_t sch, swch;
+-
+- pch = (char *) &ch;
+- pwch = (char *) &wch;
+- sch = sizeof(ch);
+- swch = sizeof(wch);
+-
+- if (iconv(conv, &pwch, &swch, &pch, &sch) == (size_t) -1) {
+- fprintf(stderr, "Could not convert 0x%02lx from WCHAR_T to UCS-2: %s\n",
+- (unsigned long)wch, strerror(errno));
++ char mbch[MB_CUR_MAX];
++ uint16_t uch;
++ char *pmbch, *puch;
++ size_t smbch, such;
++ int ret;
++
++ ret = wctomb(mbch, wch);
++ if (ret == -1) {
++ fprintf(stderr, "Could not convert 0x%04x "
++ "from wchar_t to a multibyte character: %s\n",
++ wch, strerror(errno));
+ return 0xFFFD;
+ }
+
-+ return ch;
-+}
-+
-+static void font_setup(void)
-+{
++ pmbch = (char *) mbch;
++ puch = (char *) &uch;
++ smbch = ret;
++ such = sizeof(uch);
++
++ if (iconv(conv, &pmbch, &smbch, &puch, &such) == (size_t) -1) {
++ fprintf(stderr, "Could not convert 0x%04x "
++ "from a multibyte character to UCS-2 : %s\n",
++ wch, strerror(errno));
+ return 0xFFFD;
+ }
+
+- return ch;
++ return uch;
+ }
+
+ /*
+@@ -466,6 +509,11 @@ static uint16_t get_ucs(wchar_t wch, ico
+ */
+ static void font_setup(void)
+ {
+ iconv_t ucs2_to_nativecharset;
+ iconv_t nativecharset_to_ucs2;
++ iconv_t font_conv;
+ int i;
+
-+ /*
-+ * Control characters are normally non-printable, but VGA does have
-+ * well-known glyphs for them.
-+ */
-+ static uint16_t control_characters[0x20] = {
-+ 0x0020,
-+ 0x263a,
-+ 0x263b,
-+ 0x2665,
-+ 0x2666,
-+ 0x2663,
-+ 0x2660,
-+ 0x2022,
-+ 0x25d8,
-+ 0x25cb,
-+ 0x25d9,
-+ 0x2642,
-+ 0x2640,
-+ 0x266a,
-+ 0x266b,
-+ 0x263c,
-+ 0x25ba,
-+ 0x25c4,
-+ 0x2195,
-+ 0x203c,
-+ 0x00b6,
-+ 0x00a7,
-+ 0x25ac,
-+ 0x21a8,
-+ 0x2191,
-+ 0x2193,
-+ 0x2192,
-+ 0x2190,
-+ 0x221f,
-+ 0x2194,
-+ 0x25b2,
-+ 0x25bc
-+ };
-+
+ /*
+ * Control characters are normally non-printable, but VGA does have
+ * well-known glyphs for them.
+@@ -505,30 +553,25 @@ static void font_setup(void)
+ 0x25bc
+ };
+
+- iconv_t ucs_to_wchar_conv;
+- iconv_t wchar_to_ucs_conv;
+- iconv_t font_conv;
+- int i;
+-
+- ucs_to_wchar_conv = iconv_open("WCHAR_T", "UCS-2");
+- if (ucs_to_wchar_conv == (iconv_t) -1) {
+ ucs2_to_nativecharset = iconv_open(nl_langinfo(CODESET), "UCS-2");
+ if (ucs2_to_nativecharset == (iconv_t) -1) {
-+ fprintf(stderr, "Could not convert font glyphs from UCS-2: '%s'\n",
-+ strerror(errno));
-+ exit(1);
-+ }
-+
+ fprintf(stderr, "Could not convert font glyphs from UCS-2: '%s'\n",
+ strerror(errno));
+ exit(1);
+ }
+
+- wchar_to_ucs_conv = iconv_open("UCS-2", "WCHAR_T");
+- if (wchar_to_ucs_conv == (iconv_t) -1) {
+- iconv_close(ucs_to_wchar_conv);
+ nativecharset_to_ucs2 = iconv_open("UCS-2", nl_langinfo(CODESET));
+ if (nativecharset_to_ucs2 == (iconv_t) -1) {
-+ fprintf(stderr, "Could not convert font glyphs to UCS-2: '%s'\n",
-+ strerror(errno));
-+ exit(1);
-+ }
-+
-+ /* Control characters */
-+ for (i = 0; i <= 0x1F; i++) {
++ iconv_close(ucs2_to_nativecharset);
+ fprintf(stderr, "Could not convert font glyphs to UCS-2: '%s'\n",
+ strerror(errno));
+ exit(1);
+ }
+
+- font_conv = iconv_open("WCHAR_T", font_charset);
++ font_conv = iconv_open(nl_langinfo(CODESET), font_charset);
+ if (font_conv == (iconv_t) -1) {
+- iconv_close(ucs_to_wchar_conv);
+- iconv_close(wchar_to_ucs_conv);
++ iconv_close(ucs2_to_nativecharset);
++ iconv_close(nativecharset_to_ucs2);
+ fprintf(stderr, "Could not convert font glyphs from %s: '%s'\n",
+ font_charset, strerror(errno));
+ exit(1);
+@@ -536,7 +579,7 @@ static void font_setup(void)
+
+ /* Control characters */
+ for (i = 0; i <= 0x1F; i++) {
+- convert_ucs(i, control_characters[i], ucs_to_wchar_conv);
+ convert_ucs(i, control_characters[i], ucs2_to_nativecharset);
-+ }
-+
-+ for (i = 0x20; i <= 0xFF; i++) {
-+ convert_font(i);
-+ }
-+
-+ /* DEL */
+ }
+
+ for (i = 0x20; i <= 0xFF; i++) {
+@@ -544,12 +587,21 @@ static void font_setup(void)
+ }
+
+ /* DEL */
+- convert_ucs(0x7F, 0x2302, ucs_to_wchar_conv);
+ convert_ucs(0x7F, 0x2302, ucs2_to_nativecharset);
-+
-+ if (strcmp(nl_langinfo(CODESET), "UTF-8")) {
-+ /* Non-Unicode capable, use termcap equivalents for those available */
-+ for (i = 0; i <= 0xFF; i++) {
-+ switch (get_ucs(vga_to_curses[i].chars[0], nativecharset_to_ucs2)) {
-+ case 0x00a3:
-+ vga_to_curses[i] = *WACS_STERLING;
-+ break;
-+ case 0x2591:
-+ vga_to_curses[i] = *WACS_BOARD;
-+ break;
-+ case 0x2592:
-+ vga_to_curses[i] = *WACS_CKBOARD;
-+ break;
-+ case 0x2502:
-+ vga_to_curses[i] = *WACS_VLINE;
-+ break;
-+ case 0x2524:
-+ vga_to_curses[i] = *WACS_RTEE;
-+ break;
-+ case 0x2510:
-+ vga_to_curses[i] = *WACS_URCORNER;
-+ break;
-+ case 0x2514:
-+ vga_to_curses[i] = *WACS_LLCORNER;
-+ break;
-+ case 0x2534:
-+ vga_to_curses[i] = *WACS_BTEE;
-+ break;
-+ case 0x252c:
-+ vga_to_curses[i] = *WACS_TTEE;
-+ break;
-+ case 0x251c:
-+ vga_to_curses[i] = *WACS_LTEE;
-+ break;
-+ case 0x2500:
-+ vga_to_curses[i] = *WACS_HLINE;
-+ break;
-+ case 0x253c:
-+ vga_to_curses[i] = *WACS_PLUS;
-+ break;
-+ case 0x256c:
-+ vga_to_curses[i] = *WACS_LANTERN;
-+ break;
-+ case 0x256a:
-+ vga_to_curses[i] = *WACS_NEQUAL;
-+ break;
-+ case 0x2518:
-+ vga_to_curses[i] = *WACS_LRCORNER;
-+ break;
-+ case 0x250c:
-+ vga_to_curses[i] = *WACS_ULCORNER;
-+ break;
-+ case 0x2588:
-+ vga_to_curses[i] = *WACS_BLOCK;
-+ break;
-+ case 0x03c0:
-+ vga_to_curses[i] = *WACS_PI;
-+ break;
-+ case 0x00b1:
-+ vga_to_curses[i] = *WACS_PLMINUS;
-+ break;
-+ case 0x2265:
-+ vga_to_curses[i] = *WACS_GEQUAL;
-+ break;
-+ case 0x2264:
-+ vga_to_curses[i] = *WACS_LEQUAL;
-+ break;
-+ case 0x00b0:
-+ vga_to_curses[i] = *WACS_DEGREE;
-+ break;
-+ case 0x25a0:
-+ vga_to_curses[i] = *WACS_BULLET;
-+ break;
-+ case 0x2666:
-+ vga_to_curses[i] = *WACS_DIAMOND;
-+ break;
-+ case 0x2192:
-+ vga_to_curses[i] = *WACS_RARROW;
-+ break;
-+ case 0x2190:
-+ vga_to_curses[i] = *WACS_LARROW;
-+ break;
-+ case 0x2191:
-+ vga_to_curses[i] = *WACS_UARROW;
-+ break;
-+ case 0x2193:
-+ vga_to_curses[i] = *WACS_DARROW;
-+ break;
-+ case 0x23ba:
-+ vga_to_curses[i] = *WACS_S1;
-+ break;
-+ case 0x23bb:
-+ vga_to_curses[i] = *WACS_S3;
-+ break;
-+ case 0x23bc:
-+ vga_to_curses[i] = *WACS_S7;
-+ break;
-+ case 0x23bd:
-+ vga_to_curses[i] = *WACS_S9;
-+ break;
-+ }
-+ }
-+ }
-+
+
+ if (strcmp(nl_langinfo(CODESET), "UTF-8")) {
+ /* Non-Unicode capable, use termcap equivalents for those available */
+ for (i = 0; i <= 0xFF; i++) {
+- switch (get_ucs(vga_to_curses[i].chars[0], wchar_to_ucs_conv)) {
++ wchar_t wch[CCHARW_MAX];
++ attr_t attr;
++ short color;
++ int ret;
++
++ ret = getcchar(&vga_to_curses[i], wch, &attr, &color, NULL);
++ if (ret == ERR)
++ continue;
++
++ switch (get_ucs(wch[0], nativecharset_to_ucs2)) {
+ case 0x00a3:
+ vga_to_curses[i] = *WACS_STERLING;
+ break;
+@@ -649,8 +701,8 @@ static void font_setup(void)
+ }
+ }
+ }
+- iconv_close(ucs_to_wchar_conv);
+- iconv_close(wchar_to_ucs_conv);
+ iconv_close(ucs2_to_nativecharset);
+ iconv_close(nativecharset_to_ucs2);
-+}
-+#endif
-+
+ iconv_close(font_conv);
+ }
- static void curses_setup(void)
- {
Home |
Main Index |
Thread Index |
Old Index