mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-06 04:38:04 +02:00
Merge branch 'mingw-fixes' into 'master'
Fix mingw build failure when SVG fonts enabled See merge request cairo/cairo!389
This commit is contained in:
commit
13a0474641
11 changed files with 90 additions and 67 deletions
|
|
@ -890,12 +890,10 @@ cairo_cff_font_read_name (cairo_cff_font_t *font)
|
|||
len -= 7;
|
||||
}
|
||||
}
|
||||
font->ps_name = _cairo_malloc (len + 1);
|
||||
if (unlikely (font->ps_name == NULL))
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
memcpy (font->ps_name, p, len);
|
||||
font->ps_name[len] = 0;
|
||||
font->ps_name = _cairo_strndup ((char*)p, len);
|
||||
if (unlikely (font->ps_name == NULL))
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
status = _cairo_escape_ps_name (&font->ps_name);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2768,6 +2768,7 @@ _cairo_ft_scaled_glyph_init_record_colr_v0_glyph (cairo_ft_scaled_font_t *scaled
|
|||
path = _cairo_path_create (path_fixed, cr);
|
||||
_cairo_path_fixed_destroy (path_fixed);
|
||||
cairo_append_path(cr, path);
|
||||
cairo_path_destroy (path);
|
||||
cairo_fill (cr);
|
||||
}
|
||||
|
||||
|
|
@ -2803,7 +2804,7 @@ _cairo_ft_scaled_glyph_init_record_svg_glyph (cairo_ft_scaled_font_t *scaled_fon
|
|||
unsigned int num_palette_entries;
|
||||
|
||||
/* Create NULL terminated SVG document */
|
||||
svg_document = strndup((const char*)svg_doc->svg_document, svg_doc->svg_document_length);
|
||||
svg_document = _cairo_strndup ((const char*)svg_doc->svg_document, svg_doc->svg_document_length);
|
||||
|
||||
recording_surface =
|
||||
cairo_recording_surface_create (CAIRO_CONTENT_COLOR_ALPHA, NULL);
|
||||
|
|
|
|||
|
|
@ -888,6 +888,33 @@ _cairo_strtod (const char *nptr, char **endptr)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRNDUP
|
||||
char *
|
||||
_cairo_strndup (const char *s, size_t n)
|
||||
{
|
||||
const char *end;
|
||||
size_t len;
|
||||
char *sdup;
|
||||
|
||||
if (s == NULL)
|
||||
return NULL;
|
||||
|
||||
end = memchr (s, 0, n);
|
||||
if (end)
|
||||
len = end - s;
|
||||
else
|
||||
len = n;
|
||||
|
||||
sdup = (char *) _cairo_malloc (len + 1);
|
||||
if (sdup != NULL) {
|
||||
memcpy (sdup, s, len);
|
||||
sdup[len] = '\0';
|
||||
}
|
||||
|
||||
return sdup;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* _cairo_fopen:
|
||||
* @filename: filename to open
|
||||
|
|
|
|||
|
|
@ -3535,9 +3535,10 @@ _cairo_pdf_surface_emit_ccitt_image (cairo_pdf_surface_t *surface,
|
|||
return CAIRO_INT_STATUS_UNSUPPORTED;
|
||||
|
||||
/* ensure params_string is null terminated */
|
||||
params = malloc (ccitt_params_string_len + 1);
|
||||
memcpy (params, ccitt_params_string, ccitt_params_string_len);
|
||||
params[ccitt_params_string_len] = 0;
|
||||
params = _cairo_strndup ((const char *)ccitt_params_string, ccitt_params_string_len);
|
||||
if (unlikely (params == NULL))
|
||||
return _cairo_surface_set_error (&surface->base, CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
status = _cairo_tag_parse_ccitt_params (params, &ccitt_params);
|
||||
if (unlikely(status))
|
||||
return source->status;
|
||||
|
|
|
|||
|
|
@ -3061,9 +3061,10 @@ _cairo_ps_surface_emit_ccitt_image (cairo_ps_surface_t *surface,
|
|||
return CAIRO_INT_STATUS_UNSUPPORTED;
|
||||
|
||||
/* ensure params_string is null terminated */
|
||||
ccitt_params_string = malloc (ccitt_params_data_len + 1);
|
||||
memcpy (ccitt_params_string, ccitt_params_data, ccitt_params_data_len);
|
||||
ccitt_params_string[ccitt_params_data_len] = 0;
|
||||
ccitt_params_string = _cairo_strndup ((const char *)ccitt_params_data, ccitt_params_data_len);
|
||||
if (unlikely (ccitt_params_string == NULL))
|
||||
return _cairo_surface_set_error (&surface->base, CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
status = _cairo_tag_parse_ccitt_params (ccitt_params_string, &ccitt_params);
|
||||
if (unlikely(status))
|
||||
return status;
|
||||
|
|
@ -3246,9 +3247,10 @@ _cairo_ps_surface_emit_eps (cairo_ps_surface_t *surface,
|
|||
return CAIRO_INT_STATUS_UNSUPPORTED;
|
||||
|
||||
/* ensure params_string is null terminated */
|
||||
params_string = malloc (eps_params_string_len + 1);
|
||||
memcpy (params_string, eps_params_string, eps_params_string_len);
|
||||
params_string[eps_params_string_len] = 0;
|
||||
params_string = _cairo_strndup ((const char *)eps_params_string, eps_params_string_len);
|
||||
if (unlikely (params_string == NULL))
|
||||
return _cairo_surface_set_error (&surface->base, CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
status = _cairo_tag_parse_eps_params (params_string, &eps_params);
|
||||
if (unlikely(status))
|
||||
return status;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
|
||||
/* cairo - a vector graphics library with display and print output
|
||||
*
|
||||
* Copyright © 2003 University of Southern California
|
||||
|
|
@ -404,12 +405,10 @@ _cairo_sub_font_glyph_lookup_unicode (cairo_scaled_font_t *scaled_font,
|
|||
if (unicode != (uint32_t) -1) {
|
||||
len = _cairo_ucs4_to_utf8 (unicode, buf);
|
||||
if (len > 0) {
|
||||
*utf8_out = _cairo_malloc (len + 1);
|
||||
if (unlikely (*utf8_out == NULL))
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
*utf8_out = _cairo_strndup (buf, len);
|
||||
if (unlikely (*utf8_out == NULL))
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
memcpy (*utf8_out, buf, len);
|
||||
(*utf8_out)[len] = 0;
|
||||
*utf8_len_out = len;
|
||||
}
|
||||
}
|
||||
|
|
@ -441,12 +440,10 @@ _cairo_sub_font_glyph_map_to_unicode (cairo_sub_font_glyph_t *sub_font_glyph,
|
|||
}
|
||||
} else {
|
||||
/* No existing mapping. Use the requested mapping */
|
||||
sub_font_glyph->utf8 = _cairo_malloc (utf8_len + 1);
|
||||
if (unlikely (sub_font_glyph->utf8 == NULL))
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
sub_font_glyph->utf8 = _cairo_strndup (utf8, utf8_len);
|
||||
if (unlikely (sub_font_glyph->utf8 == NULL))
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
memcpy (sub_font_glyph->utf8, utf8, utf8_len);
|
||||
sub_font_glyph->utf8[utf8_len] = 0;
|
||||
sub_font_glyph->utf8_len = utf8_len;
|
||||
*is_mapped = TRUE;
|
||||
}
|
||||
|
|
@ -612,13 +609,11 @@ _cairo_sub_font_map_glyph (cairo_sub_font_t *sub_font,
|
|||
if (ucs4_len == 1) {
|
||||
font_unicode = ucs4[0];
|
||||
free (font_utf8);
|
||||
font_utf8 = _cairo_malloc (text_utf8_len + 1);
|
||||
if (font_utf8 == NULL) {
|
||||
free (ucs4);
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
font_utf8 = _cairo_strndup (text_utf8, text_utf8_len);
|
||||
if (font_utf8 == NULL) {
|
||||
free (ucs4);
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
}
|
||||
memcpy (font_utf8, text_utf8, text_utf8_len);
|
||||
font_utf8[text_utf8_len] = 0;
|
||||
font_utf8_len = text_utf8_len;
|
||||
}
|
||||
free (ucs4);
|
||||
|
|
|
|||
|
|
@ -311,13 +311,13 @@ typedef struct _cairo_svg_glyph_render {
|
|||
} cairo_svg_glyph_render_t;
|
||||
|
||||
|
||||
#define ERROR 1
|
||||
#define WARNING 2
|
||||
#define INFO 3
|
||||
#define SVG_RENDER_ERROR 1
|
||||
#define SVG_RENDER_WARNING 2
|
||||
#define SVG_RENDER_INFO 3
|
||||
|
||||
#define print_error(render, ...) cairo_svg_glyph_render_printf(render, ERROR, ##__VA_ARGS__)
|
||||
#define print_warning(render, ...) cairo_svg_glyph_render_printf(render, WARNING, ##__VA_ARGS__)
|
||||
#define print_info(render, ...) cairo_svg_glyph_render_printf(render, INFO, ##__VA_ARGS__)
|
||||
#define print_error(render, ...) cairo_svg_glyph_render_printf(render, SVG_RENDER_ERROR, ##__VA_ARGS__)
|
||||
#define print_warning(render, ...) cairo_svg_glyph_render_printf(render, SVG_RENDER_WARNING, ##__VA_ARGS__)
|
||||
#define print_info(render, ...) cairo_svg_glyph_render_printf(render, SVG_RENDER_INFO, ##__VA_ARGS__)
|
||||
|
||||
static void
|
||||
cairo_svg_glyph_render_printf (cairo_svg_glyph_render_t *svg_render,
|
||||
|
|
@ -333,10 +333,10 @@ cairo_svg_glyph_render_printf (cairo_svg_glyph_render_t *svg_render,
|
|||
|
||||
if (svg_render->debug >= level ) {
|
||||
switch (level) {
|
||||
case ERROR:
|
||||
case SVG_RENDER_ERROR:
|
||||
printf("ERROR: ");
|
||||
break;
|
||||
case WARNING:
|
||||
case SVG_RENDER_WARNING:
|
||||
printf("WARNING: ");
|
||||
break;
|
||||
}
|
||||
|
|
@ -453,7 +453,7 @@ lookup_url_element (cairo_svg_glyph_render_t *svg_render, const char *url)
|
|||
|
||||
const char *end = strpbrk(p, WHITE_SPACE_CHARS ")");
|
||||
if (end) {
|
||||
char *id = strndup (p, end - p);
|
||||
char *id = _cairo_strndup (p, end - p);
|
||||
element = lookup_element (svg_render, id);
|
||||
free (id);
|
||||
}
|
||||
|
|
@ -812,7 +812,7 @@ get_color (cairo_svg_glyph_render_t *svg_render,
|
|||
if (!end || end == s)
|
||||
return FALSE;
|
||||
|
||||
char *fallback = strndup (s, end - s);
|
||||
char *fallback = _cairo_strndup (s, end - s);
|
||||
cairo_bool_t success = get_color (svg_render, fallback, color);
|
||||
free (fallback);
|
||||
return success;
|
||||
|
|
@ -920,7 +920,7 @@ parse_error (cairo_svg_glyph_render_t *svg_render,
|
|||
const char *start;
|
||||
const char *end;
|
||||
|
||||
if (svg_render->debug >= ERROR) {
|
||||
if (svg_render->debug >= SVG_RENDER_ERROR) {
|
||||
printf("ERROR: ");
|
||||
va_start (ap, fmt);
|
||||
vprintf (fmt, ap);
|
||||
|
|
@ -965,7 +965,7 @@ append_attribute (cairo_svg_element_t *element, svg_attribute_t *attribute)
|
|||
end = strchr (p, ':');
|
||||
if (!end || end == p)
|
||||
break;
|
||||
attr.name = strndup (p, end - p);
|
||||
attr.name = _cairo_strndup (p, end - p);
|
||||
p = end + 1;
|
||||
p = skip_space(p);
|
||||
end = strchr (p, ';');
|
||||
|
|
@ -974,7 +974,7 @@ append_attribute (cairo_svg_element_t *element, svg_attribute_t *attribute)
|
|||
if (end == p)
|
||||
goto split_style_fail;
|
||||
|
||||
attr.value = strndup (p, end - p);
|
||||
attr.value = _cairo_strndup (p, end - p);
|
||||
if (*end)
|
||||
p = end + 1;
|
||||
|
||||
|
|
@ -1067,7 +1067,7 @@ parse_attributes (cairo_svg_glyph_render_t *svg_render,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
attr.name = strndup (p, end - p);
|
||||
attr.name = _cairo_strndup (p, end - p);
|
||||
p = end;
|
||||
|
||||
p = skip_space (p);
|
||||
|
|
@ -1092,7 +1092,7 @@ parse_attributes (cairo_svg_glyph_render_t *svg_render,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
attr.value = strndup (p, end - p);
|
||||
attr.value = _cairo_strndup (p, end - p);
|
||||
p = end + 1;
|
||||
|
||||
if (!append_attribute (element, &attr))
|
||||
|
|
@ -1229,7 +1229,7 @@ parse_svg (cairo_svg_glyph_render_t *svg_render,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
name = strndup (p, end - p);
|
||||
name = _cairo_strndup (p, end - p);
|
||||
p = end;
|
||||
p = skip_space (p);
|
||||
if (*p != '>') {
|
||||
|
|
@ -1275,7 +1275,7 @@ parse_svg (cairo_svg_glyph_render_t *svg_render,
|
|||
goto fail;
|
||||
}
|
||||
|
||||
name = strndup (p, end - p);
|
||||
name = _cairo_strndup (p, end - p);
|
||||
p = end;
|
||||
|
||||
new_elem = create_element (CONTAINER_ELEMENT, name);
|
||||
|
|
@ -3115,7 +3115,7 @@ _cairo_render_svg_glyph (const char *svg_document,
|
|||
if (strlen (s) > 0)
|
||||
svg_render->debug = atoi (s);
|
||||
else
|
||||
svg_render->debug = ERROR;
|
||||
svg_render->debug = SVG_RENDER_ERROR;
|
||||
}
|
||||
|
||||
svg_render->cr = cr;
|
||||
|
|
|
|||
|
|
@ -366,12 +366,9 @@ parse_name (const char *attributes, const char *p, const char **end, char **s)
|
|||
p2++;
|
||||
|
||||
len = p2 - p;
|
||||
name = _cairo_malloc (len + 1);
|
||||
name = _cairo_strndup (p, len);
|
||||
if (unlikely (name == NULL))
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
memcpy (name, p, len);
|
||||
name[len] = 0;
|
||||
*s = name;
|
||||
*end = p2;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
/* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
|
||||
/* cairo - a vector graphics library with display and print output
|
||||
*
|
||||
* Copyright © 2004 Red Hat, Inc
|
||||
|
|
@ -1470,14 +1471,10 @@ find_name (tt_name_t *name, unsigned long size, int name_id, int platform, int e
|
|||
if (offset + len > size)
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
str = _cairo_malloc (len + 1);
|
||||
str = _cairo_strndup (((char*)name) + offset, len);
|
||||
if (str == NULL)
|
||||
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
|
||||
memcpy (str,
|
||||
((char*)name) + offset,
|
||||
len);
|
||||
str[len] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1531,13 +1528,7 @@ find_name (tt_name_t *name, unsigned long size, int name_id, int platform, int e
|
|||
}
|
||||
}
|
||||
if (has_tag) {
|
||||
p = _cairo_malloc (len - 6);
|
||||
if (unlikely (p == NULL)) {
|
||||
status =_cairo_error (CAIRO_STATUS_NO_MEMORY);
|
||||
goto fail;
|
||||
}
|
||||
memcpy (p, str + 7, len - 7);
|
||||
p[len-7] = 0;
|
||||
p = _cairo_strndup (str + 7, len - 7);
|
||||
free (str);
|
||||
str = p;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -943,6 +943,13 @@ _cairo_get_locale_decimal_point (void);
|
|||
cairo_private double
|
||||
_cairo_strtod (const char *nptr, char **endptr);
|
||||
|
||||
#ifdef HAVE_STRNDUP
|
||||
#define _cairo_strndup strndup
|
||||
#else
|
||||
cairo_private char *
|
||||
_cairo_strndup (const char *s, size_t n);
|
||||
#endif
|
||||
|
||||
/* cairo-path-fixed.c */
|
||||
cairo_private cairo_path_fixed_t *
|
||||
_cairo_path_fixed_create (void);
|
||||
|
|
|
|||
|
|
@ -37,15 +37,19 @@ char *
|
|||
strndup (const char *s,
|
||||
size_t n)
|
||||
{
|
||||
const char *end;
|
||||
size_t len;
|
||||
char *sdup;
|
||||
|
||||
if (s == NULL)
|
||||
return NULL;
|
||||
|
||||
len = strlen (s);
|
||||
if (len > n)
|
||||
end = memchr (s, 0, n);
|
||||
if (end)
|
||||
len = end - s;
|
||||
else
|
||||
len = n;
|
||||
|
||||
sdup = (char *) _cairo_malloc (len + 1);
|
||||
if (sdup != NULL) {
|
||||
memcpy (sdup, s, len);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue