X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=backend%2Fdvi%2Fmdvi-lib%2Futil.c;h=349d273a2fc4138d22b273761aac313cc832e2ef;hb=19a00ed1cd086dcca4b6bfeb84e0b1488b2e3089;hp=c1cc649e2b427f0421757bf9832df7e160dbf7fc;hpb=13a06349251874bd35d2f03c3fc93217cee749a2;p=evince.git diff --git a/backend/dvi/mdvi-lib/util.c b/backend/dvi/mdvi-lib/util.c index c1cc649e..349d273a 100644 --- a/backend/dvi/mdvi-lib/util.c +++ b/backend/dvi/mdvi-lib/util.c @@ -13,9 +13,10 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +#include #include #include #include @@ -114,7 +115,7 @@ void __debug(int mask, const char *format, ...) } #endif -void message(const char *format, ...) +void mdvi_message(const char *format, ...) { va_list ap; @@ -131,7 +132,7 @@ void message(const char *format, ...) va_end(ap); } -void crash(const char *format, ...) +void mdvi_crash(const char *format, ...) { va_list ap; @@ -150,7 +151,7 @@ void crash(const char *format, ...) abort(); } -void error(const char *format, ...) +void mdvi_error(const char *format, ...) { va_list ap; @@ -166,7 +167,7 @@ void error(const char *format, ...) va_end(ap); } -void warning(const char *format, ...) +void mdvi_warning(const char *format, ...) { va_list ap; @@ -182,7 +183,7 @@ void warning(const char *format, ...) va_end(ap); } -void fatal(const char *format, ...) +void mdvi_fatal(const char *format, ...) { va_list ap; @@ -208,8 +209,8 @@ void *mdvi_malloc(size_t nelems) void *ptr = malloc(nelems); if(ptr == NULL) - fatal(_("out of memory allocating %u bytes\n"), - (unsigned)nelems); + mdvi_fatal(_("out of memory allocating %u bytes\n"), + (unsigned)nelems); return ptr; } @@ -218,10 +219,10 @@ void *mdvi_realloc(void *data, size_t newsize) void *ptr; if(newsize == 0) - crash(_("attempted to reallocate with zero size\n")); + mdvi_crash(_("attempted to reallocate with zero size\n")); ptr = realloc(data, newsize); if(ptr == NULL) - fatal(_("failed to reallocate %u bytes\n"), (unsigned)newsize); + mdvi_fatal(_("failed to reallocate %u bytes\n"), (unsigned)newsize); return ptr; } @@ -230,21 +231,21 @@ void *mdvi_calloc(size_t nmemb, size_t size) void *ptr; if(nmemb == 0) - crash(_("attempted to callocate 0 members\n")); + mdvi_crash(_("attempted to callocate 0 members\n")); if(size == 0) - crash(_("attempted to callocate %u members with size 0\n"), + mdvi_crash(_("attempted to callocate %u members with size 0\n"), (unsigned)nmemb); ptr = calloc(nmemb, size); if(ptr == 0) - fatal(_("failed to allocate %ux%u bytes\n"), - (unsigned)nmemb, (unsigned)size); + mdvi_fatal(_("failed to allocate %ux%u bytes\n"), + (unsigned)nmemb, (unsigned)size); return ptr; } void mdvi_free(void *ptr) { if(ptr == NULL) - crash(_("attempted to free NULL pointer\n")); + mdvi_crash(_("attempted to free NULL pointer\n")); free(ptr); } @@ -288,6 +289,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;