util: Fix build on Visual Studio

Use the fallback implementation for lround() only on pre-2013 Visual
Studio, and ensure we are clear about the types of the parameters for
lround() and scalbnf(), since Visual Studio can be quite picky on
ambiguous parameter types.  Also, use g_ascii_strcasecmp() rather than
strcasecmp() as we are already using GLib for this code and we are
assured that g_ascii_strcasemp() is available.

For scalbnf() on pre-2013 Visaul Studio, a fallback implementation is
needed, but use another forced-included header for those compilers, which
will be added later.

Also use (char)27 on Visual Studio builds as '\e' is not a recognized
escape sequence, which will do the same thing.
This commit is contained in:
Chun-wei Fan 2015-11-02 16:55:29 +08:00
parent e97835ad43
commit 998e8dda93
3 changed files with 20 additions and 18 deletions

View File

@ -41,7 +41,7 @@
#include <unistd.h> /* for isatty() */
#endif
#ifdef _MSC_VER
#if defined (_MSC_VER) && (_MSC_VER < 1800)
static inline long int
lround (double x)
{
@ -52,6 +52,8 @@ lround (double x)
}
#endif
#define ESC_E (char)27
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#define CELL_W 8
@ -298,7 +300,7 @@ block_best (const biimage_t &bi, bool *inverse)
}
if (best_s < score) {
static const char *lower[7] = {"", "", "", "", "", "", ""};
unsigned int which = lround (((best_i + 1) * 8) / bi.height);
unsigned int which = lround ((double) ((best_i + 1) * 8) / bi.height);
if (1 <= which && which <= 7) {
score = best_s;
*inverse = best_inv;
@ -330,7 +332,7 @@ block_best (const biimage_t &bi, bool *inverse)
}
if (best_s < score) {
static const char *left [7] = {"", "", "", "", "", "", ""};
unsigned int which = lround (((best_i + 1) * 8) / bi.width);
unsigned int which = lround ((double) ((best_i + 1) * 8) / bi.width);
if (1 <= which && which <= 7) {
score = best_s;
*inverse = best_inv;
@ -395,7 +397,7 @@ ansi_print_image_rgb24 (const uint32_t *data,
bi.set (cell);
if (bi.unicolor) {
if (last_bg != bi.bg) {
printf ("\e[%dm", 40 + bi.bg);
printf ("%c[%dm", ESC_E, 40 + bi.bg);
last_bg = bi.bg;
}
printf (" ");
@ -405,13 +407,13 @@ ansi_print_image_rgb24 (const uint32_t *data,
const char *c = block_best (bi, &inverse);
if (inverse) {
if (last_bg != bi.fg || last_fg != bi.bg) {
printf ("\e[%d;%dm", 30 + bi.bg, 40 + bi.fg);
printf ("%c[%d;%dm", ESC_E, 30 + bi.bg, 40 + bi.fg);
last_bg = bi.fg;
last_fg = bi.bg;
}
} else {
if (last_bg != bi.bg || last_fg != bi.fg) {
printf ("\e[%d;%dm", 40 + bi.bg, 30 + bi.fg);
printf ("%c[%d;%dm", ESC_E, 40 + bi.bg, 30 + bi.fg);
last_bg = bi.bg;
last_fg = bi.fg;
}
@ -419,7 +421,7 @@ ansi_print_image_rgb24 (const uint32_t *data,
printf ("%s", c);
}
}
printf ("\e[0m\n"); /* Reset */
printf ("%c[0m\n", ESC_E); /* Reset */
last_bg = last_fg = -1;
}
}

View File

@ -341,25 +341,25 @@ helper_cairo_create_context (double w, double h,
}
if (0)
;
else if (0 == strcasecmp (extension, "ansi"))
else if (0 == g_ascii_strcasecmp (extension, "ansi"))
constructor2 = _cairo_ansi_surface_create_for_stream;
#ifdef CAIRO_HAS_PNG_FUNCTIONS
else if (0 == strcasecmp (extension, "png"))
else if (0 == g_ascii_strcasecmp (extension, "png"))
constructor2 = _cairo_png_surface_create_for_stream;
#endif
#ifdef CAIRO_HAS_SVG_SURFACE
else if (0 == strcasecmp (extension, "svg"))
else if (0 == g_ascii_strcasecmp (extension, "svg"))
constructor = cairo_svg_surface_create_for_stream;
#endif
#ifdef CAIRO_HAS_PDF_SURFACE
else if (0 == strcasecmp (extension, "pdf"))
else if (0 == g_ascii_strcasecmp (extension, "pdf"))
constructor = cairo_pdf_surface_create_for_stream;
#endif
#ifdef CAIRO_HAS_PS_SURFACE
else if (0 == strcasecmp (extension, "ps"))
else if (0 == g_ascii_strcasecmp (extension, "ps"))
constructor = cairo_ps_surface_create_for_stream;
#ifdef HAS_EPS
else if (0 == strcasecmp (extension, "eps"))
else if (0 == g_ascii_strcasecmp (extension, "eps"))
constructor = _cairo_eps_surface_create_for_stream;
#endif
#endif
@ -478,16 +478,16 @@ helper_cairo_line_from_buffer (helper_cairo_line_t *l,
for (i = 0; i < (int) l->num_glyphs; i++)
{
l->glyphs[i].index = hb_glyph[i].codepoint;
l->glyphs[i].x = scalbn ( hb_position->x_offset + x, scale_bits);
l->glyphs[i].y = scalbn (-hb_position->y_offset + y, scale_bits);
l->glyphs[i].x = scalbn ((double) hb_position->x_offset + x, scale_bits);
l->glyphs[i].y = scalbn ((double) -hb_position->y_offset + y, scale_bits);
x += hb_position->x_advance;
y += -hb_position->y_advance;
hb_position++;
}
l->glyphs[i].index = -1;
l->glyphs[i].x = scalbn (x, scale_bits);
l->glyphs[i].y = scalbn (y, scale_bits);
l->glyphs[i].x = scalbn ((double) x, scale_bits);
l->glyphs[i].y = scalbn ((double) y, scale_bits);
if (l->num_clusters) {
memset ((void *) l->clusters, 0, l->num_clusters * sizeof (l->clusters[0]));

View File

@ -569,7 +569,7 @@ font_options_t::get_font (void) const
else
{
for (unsigned int i = 0; i < ARRAY_LENGTH (supported_font_funcs); i++)
if (0 == strcasecmp (font_funcs, supported_font_funcs[i].name))
if (0 == g_ascii_strcasecmp (font_funcs, supported_font_funcs[i].name))
{
set_font_funcs = supported_font_funcs[i].func;
break;