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