From d24b16f917ca749e9ffebbec8eca0ee791e1b67a Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Thu, 20 Dec 2007 10:12:52 +0000 Subject: Add ps specials support in dvi backend when libspectre is present. Fixes 2007-12-20 Carlos Garcia Campos * backend/dvi/Makefile.am: * backend/dvi/cairo-device.c: (dvi_cairo_draw_ps), (mdvi_cairo_device_init): * backend/dvi/mdvi-lib/common.h: * backend/dvi/mdvi-lib/mdvi.h: * backend/dvi/mdvi-lib/sp-epsf.c: (epsf_special): * backend/dvi/mdvi-lib/util.c: (mdvi_strrstr), (mdvi_build_path_from_cwd): Add ps specials support in dvi backend when libspectre is present. Fixes bug #386005. svn path=/trunk/; revision=2775 --- (limited to 'backend/dvi/mdvi-lib/util.c') diff --git a/backend/dvi/mdvi-lib/util.c b/backend/dvi/mdvi-lib/util.c index c1cc649..788b774 100644 --- a/backend/dvi/mdvi-lib/util.c +++ b/backend/dvi/mdvi-lib/util.c @@ -288,6 +288,60 @@ void *mdvi_memdup(const void *data, size_t length) return ptr; } +char *mdvi_strrstr (const char *haystack, const char *needle) +{ + size_t i; + size_t needle_len; + size_t haystack_len; + const char *p; + + needle_len = strlen (needle); + haystack_len = strlen (haystack); + + if (needle_len == 0) + return NULL; + + if (haystack_len < needle_len) + return (char *)haystack; + + p = haystack + haystack_len - needle_len; + while (p >= haystack) { + for (i = 0; i < needle_len; i++) + if (p[i] != needle[i]) + goto next; + + return (char *)p; + + next: + p--; + } + + return NULL; +} + +char *mdvi_build_path_from_cwd (const char *path) +{ + char *ptr; + char *buf = NULL; + size_t buf_size = 512; + + while (1) { + buf = mdvi_realloc (buf, buf_size); + if ((ptr = getcwd (buf, buf_size)) == NULL && errno == ERANGE) { + buf_size *= 2; + } else { + buf = ptr; + break; + } + } + + buf = mdvi_realloc (buf, strlen (buf) + strlen (path) + 2); + strcat (buf, "/"); + strncat (buf, path, strlen (path)); + + return buf; +} + double unit2pix_factor(const char *spec) { double val; -- cgit v0.9.1