curses: fix garbling when chtype != long
Qemu currently assumes that chtype is typedef'd to unsigned long, but this is not necessarily the case (ncurses, for instance, can configure this at build-time). This patch uses the predefined chtype if qemu is configured for curses support and falls back to unsigned long otherwise. Fixes bug 568614. Signed-off-by: Devin J. Pohly <djpohly+launchpad@gmail.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
3b86b13ab0
commit
df00bed0fa
|
@ -343,6 +343,7 @@ static const uint32_t dmask4[4] = {
|
||||||
|
|
||||||
static uint32_t color_table[2][8];
|
static uint32_t color_table[2][8];
|
||||||
|
|
||||||
|
#ifndef CONFIG_CURSES
|
||||||
enum color_names {
|
enum color_names {
|
||||||
COLOR_BLACK = 0,
|
COLOR_BLACK = 0,
|
||||||
COLOR_RED = 1,
|
COLOR_RED = 1,
|
||||||
|
@ -353,6 +354,7 @@ enum color_names {
|
||||||
COLOR_CYAN = 6,
|
COLOR_CYAN = 6,
|
||||||
COLOR_WHITE = 7
|
COLOR_WHITE = 7
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static const uint32_t color_table_rgb[2][8] = {
|
static const uint32_t color_table_rgb[2][8] = {
|
||||||
{ /* dark */
|
{ /* dark */
|
||||||
|
|
|
@ -328,7 +328,12 @@ static inline int ds_get_bytes_per_pixel(DisplayState *ds)
|
||||||
return ds->surface->pf.bytes_per_pixel;
|
return ds->surface->pf.bytes_per_pixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_CURSES
|
||||||
|
#include <curses.h>
|
||||||
|
typedef chtype console_ch_t;
|
||||||
|
#else
|
||||||
typedef unsigned long console_ch_t;
|
typedef unsigned long console_ch_t;
|
||||||
|
#endif
|
||||||
static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
|
static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
|
||||||
{
|
{
|
||||||
if (!(ch & 0xff))
|
if (!(ch & 0xff))
|
||||||
|
|
Reference in New Issue