mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-04-30 23:47:59 +02:00
Fix mingw build failure when SVG fonts enabled
Add missing strndup() function. Copied the strndup() implementation from util/cairo-missing/strndup.c plus a bug fix.
This commit is contained in:
parent
1af1e11254
commit
5e0e40e3c5
4 changed files with 43 additions and 9 deletions
|
|
@ -2803,7 +2803,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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue