diff --git a/configure.ac b/configure.ac index dd56ea4..99ffbda 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,6 @@ AC_PROG_CXX AC_PROG_INSTALL AC_CHECK_FUNC(gettimeofday, AC_DEFINE(HAVE_GETTIMEOFDAY, 1, [Defines if gettimeofday is available on your system])) AC_CHECK_FUNC(localtime_r, AC_DEFINE(HAVE_LOCALTIME_R, 1, [Defines if localtime_r is available on your system])) -AC_CHECK_FUNC(strndup, AC_DEFINE(HAVE_STRNDUP, 1, [Defines if strndup is available on your system])) dnl Enable these unconditionally. AC_DEFINE([OPI_SUPPORT], [1], [Generate OPI comments in PS output.]) diff --git a/goo/gmem.cc b/goo/gmem.cc index 3dce8ea..b11f2f4 100644 --- a/goo/gmem.cc +++ b/goo/gmem.cc @@ -280,3 +280,10 @@ char *copyString(char *s) { strcpy(s1, s); return s1; } + +char *gstrndup(const char *s, size_t n) { + char *s1 = (char*)gmalloc(n + 1); /* cannot return NULL for size > 0 */ + s1[n] = '\0'; + memcpy(s1, s, n); + return s1; +} diff --git a/goo/gmem.h b/goo/gmem.h index 39c2334..b1d175d 100644 --- a/goo/gmem.h +++ b/goo/gmem.h @@ -75,6 +75,11 @@ extern void gMemReport(FILE *f); */ extern char *copyString(char *s); +/* + * Allocate memory and copy a limited-length string to it. + */ +extern char *gstrndup(const char *s, size_t n); + #ifdef __cplusplus } #endif diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc index 533904b..2d9abd4 100644 --- a/poppler/GfxFont.cc +++ b/poppler/GfxFont.cc @@ -974,13 +974,7 @@ static int parseCharName(char *charName, Unicode *uBuf, int uLen, return 0; // .notdef or similar } else if (var_part != NULL) { // parse names of the form 7.oldstyle, P.swash, s.sc, etc. -#ifdef HAVE_STRNDUP - char *main_part = strndup(charName, var_part - charName); -#else - char *main_part = (char*)gmalloc(var_part - charName + 1); - main_part[var_part - charName] = '\0'; - memcpy(main_part, charName, var_part - charName); -#endif + char *main_part = gstrndup(charName, var_part - charName); GBool namesRecurse = gTrue, variantsRecurse = gFalse; int n = parseCharName(main_part, uBuf, uLen, namesRecurse, ligatures, numeric, hex, variantsRecurse);