More Linux compatibility fixes
This commit is contained in:
@@ -15,7 +15,6 @@ AC_PROG_YACC
|
|||||||
# Checks for libraries.
|
# Checks for libraries.
|
||||||
PKG_CHECK_MODULES([libxml2], [libxml-2.0])
|
PKG_CHECK_MODULES([libxml2], [libxml-2.0])
|
||||||
PKG_CHECK_MODULES([libxslt], [libxslt])
|
PKG_CHECK_MODULES([libxslt], [libxslt])
|
||||||
AC_CHECK_LIB([bsd], [strlcpy], [ PKG_CHECK_MODULES([libbsd], [libbsd]) ])
|
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
|
|||||||
@@ -11,22 +11,24 @@ Options options = { .progname = NULL, .datadir = DATADIR, .styleSheetName = "htm
|
|||||||
char*
|
char*
|
||||||
datadir(const char* progname) {
|
datadir(const char* progname) {
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
const char* progdir = dirname(progname);
|
char* progname_copy = strdup(progname);
|
||||||
|
const char* progdir = dirname(progname_copy);
|
||||||
char* local_datadir = NULL;
|
char* local_datadir = NULL;
|
||||||
char result[PATH_MAX];
|
char result[PATH_MAX];
|
||||||
int l = strlen(progdir) + 9;
|
int l = strlen(progdir) + 9;
|
||||||
|
|
||||||
if (stat(DATADIR, &sb) == 0) {
|
if (stat(DATADIR, &sb) == 0) {
|
||||||
if (S_ISDIR(sb.st_mode)) {
|
if (S_ISDIR(sb.st_mode)) {
|
||||||
|
free(progname_copy);
|
||||||
return strdup(DATADIR);
|
return strdup(DATADIR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
local_datadir = malloc(l);
|
local_datadir = malloc(l);
|
||||||
strlcpy(local_datadir, progdir, l);
|
snprintf(local_datadir, l, "%s/../data", progdir);
|
||||||
strlcat(local_datadir, "/../data", l);
|
|
||||||
realpath(local_datadir, result);
|
realpath(local_datadir, result);
|
||||||
free(local_datadir);
|
free(local_datadir);
|
||||||
|
free(progname_copy);
|
||||||
if (stat(result, &sb) == 0) {
|
if (stat(result, &sb) == 0) {
|
||||||
if (S_ISDIR(sb.st_mode)) {
|
if (S_ISDIR(sb.st_mode)) {
|
||||||
return strdup(result);
|
return strdup(result);
|
||||||
@@ -74,9 +76,7 @@ void InitOptions(int argc, const char* argv[]) {
|
|||||||
char*
|
char*
|
||||||
OptionsDataFile(const char* fname) {
|
OptionsDataFile(const char* fname) {
|
||||||
char result[PATH_MAX], *t = malloc(strlen(options.datadir) + strlen(fname) + 2);
|
char result[PATH_MAX], *t = malloc(strlen(options.datadir) + strlen(fname) + 2);
|
||||||
strlcpy(t, options.datadir, PATH_MAX);
|
snprintf(t, PATH_MAX, "%s/%s", options.datadir, fname);
|
||||||
strlcat(t, "/", PATH_MAX);
|
|
||||||
strlcat(t, fname, PATH_MAX);
|
|
||||||
realpath(t, result);
|
realpath(t, result);
|
||||||
free(t);
|
free(t);
|
||||||
return strdup(result);
|
return strdup(result);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <libxml/tree.h>
|
#include <libxml/tree.h>
|
||||||
#include <libxslt/xslt.h>
|
#include <libxslt/xslt.h>
|
||||||
@@ -11,8 +12,7 @@ applyStyleSheet(xmlDocPtr document, const char* styleSheetName) {
|
|||||||
xsltStylesheetPtr xsl = NULL;
|
xsltStylesheetPtr xsl = NULL;
|
||||||
xmlDocPtr res = NULL;
|
xmlDocPtr res = NULL;
|
||||||
|
|
||||||
strlcpy(t, styleSheetName, l);
|
snprintf(t, l, "%s.xsl", styleSheetName);
|
||||||
strlcat(t, ".xsl", l);
|
|
||||||
styleSheetFileName = OptionsDataFile(t);
|
styleSheetFileName = OptionsDataFile(t);
|
||||||
free(t);
|
free(t);
|
||||||
fprintf(stderr, "Loading stylesheet %s ...\n", styleSheetFileName);
|
fprintf(stderr, "Loading stylesheet %s ...\n", styleSheetFileName);
|
||||||
|
|||||||
Reference in New Issue
Block a user