diff --git a/configure.ac b/configure.ac index 892b0ba..2c4b902 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,6 @@ AC_PROG_YACC # Checks for libraries. PKG_CHECK_MODULES([libxml2], [libxml-2.0]) PKG_CHECK_MODULES([libxslt], [libxslt]) -AC_CHECK_LIB([bsd], [strlcpy], [ PKG_CHECK_MODULES([libbsd], [libbsd]) ]) # Checks for header files. AC_FUNC_ALLOCA diff --git a/src/options.c b/src/options.c index 79c5e53..7df0b81 100644 --- a/src/options.c +++ b/src/options.c @@ -11,22 +11,24 @@ Options options = { .progname = NULL, .datadir = DATADIR, .styleSheetName = "htm char* datadir(const char* progname) { struct stat sb; - const char* progdir = dirname(progname); + char* progname_copy = strdup(progname); + const char* progdir = dirname(progname_copy); char* local_datadir = NULL; char result[PATH_MAX]; int l = strlen(progdir) + 9; if (stat(DATADIR, &sb) == 0) { if (S_ISDIR(sb.st_mode)) { + free(progname_copy); return strdup(DATADIR); } } local_datadir = malloc(l); - strlcpy(local_datadir, progdir, l); - strlcat(local_datadir, "/../data", l); + snprintf(local_datadir, l, "%s/../data", progdir); realpath(local_datadir, result); free(local_datadir); + free(progname_copy); if (stat(result, &sb) == 0) { if (S_ISDIR(sb.st_mode)) { return strdup(result); @@ -74,9 +76,7 @@ void InitOptions(int argc, const char* argv[]) { char* OptionsDataFile(const char* fname) { char result[PATH_MAX], *t = malloc(strlen(options.datadir) + strlen(fname) + 2); - strlcpy(t, options.datadir, PATH_MAX); - strlcat(t, "/", PATH_MAX); - strlcat(t, fname, PATH_MAX); + snprintf(t, PATH_MAX, "%s/%s", options.datadir, fname); realpath(t, result); free(t); return strdup(result); diff --git a/src/xslt.c b/src/xslt.c index 3840f01..511ebd8 100644 --- a/src/xslt.c +++ b/src/xslt.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -11,8 +12,7 @@ applyStyleSheet(xmlDocPtr document, const char* styleSheetName) { xsltStylesheetPtr xsl = NULL; xmlDocPtr res = NULL; - strlcpy(t, styleSheetName, l); - strlcat(t, ".xsl", l); + snprintf(t, l, "%s.xsl", styleSheetName); styleSheetFileName = OptionsDataFile(t); free(t); fprintf(stderr, "Loading stylesheet %s ...\n", styleSheetFileName);