From 52058f44f169bd2fb692da815acfe058464a8454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20K=C3=B6hler?= Date: Sun, 11 Feb 2007 17:30:54 +0000 Subject: [PATCH] On Win32, add get_dtd_installation_directory to LibOFX. Fix #406286. Determine a directory for DTDs at runtime with the help of GetModuleFileName, cf. g_win32_get_package_installation_directory, and use it for searches. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@15564 57a11ea4-9604-0410-9ed3-97b8803252fd --- packaging/win32/libofx-0.8.3-patch.diff | 63 ++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/packaging/win32/libofx-0.8.3-patch.diff b/packaging/win32/libofx-0.8.3-patch.diff index 5ea6753772..811c44c9ca 100644 --- a/packaging/win32/libofx-0.8.3-patch.diff +++ b/packaging/win32/libofx-0.8.3-patch.diff @@ -1,15 +1,22 @@ diff -ur libofx-0.8.3/lib/ofx_preproc.cpp win32-libofx-0.8.3/lib/ofx_preproc.cpp --- libofx-0.8.3/lib/ofx_preproc.cpp Tue Jan 9 02:38:33 2007 +++ win32-libofx-0.8.3/lib/ofx_preproc.cpp Thu Feb 8 13:53:59 2007 -@@ -20,6 +20,7 @@ +@@ -20,8 +20,14 @@ #include #include #include +#include // for mktemp() on win32/mingw #include #include ++#ifdef OS_WIN32 ++#include // for GetModuleFileName() ++#undef ERROR ++#undef DELETE ++#endif #include "ParserEventGeneratorKit.h" -@@ -51,6 +52,32 @@ + #include "libofx.h" + #include "messages.hh" +@@ -51,6 +57,57 @@ "~/"}; const unsigned int READ_BUFFER_SIZE = 1024; @@ -38,11 +45,36 @@ diff -ur libofx-0.8.3/lib/ofx_preproc.cpp win32-libofx-0.8.3/lib/ofx_preproc.cpp + return "/tmp"; +#endif +} ++ ++#ifdef OS_WIN32 ++std::string get_dtd_installation_directory() ++{ ++ // Partial implementation of ++ // http://developer.gnome.org/doc/API/2.0/glib/glib-Windows-Compatibility-Functions.html#g-win32-get-package-installation-directory ++ char ch_fn[MAX_PATH], *p; ++ std::string str_fn; ++ ++ if (!GetModuleFileName(NULL, ch_fn, MAX_PATH)) return ""; ++ ++ if ((p = strrchr(ch_fn, '\\')) != NULL) ++ *p = '\0'; ++ ++ p = strrchr(ch_fn, '\\'); ++ if (p && (_stricmp(p+1, "bin") == 0 || ++ _stricmp(p+1, "lib") == 0)) ++ *p = '\0'; ++ ++ str_fn = ch_fn; ++ str_fn += "\\share\\libofx\\dtd\\"; ++ ++ return str_fn; ++} ++#endif + /** @brief File pre-processing of OFX AND for OFC files * * Takes care of comment striping, dtd locating, etc. -@@ -66,7 +93,7 @@ +@@ -66,7 +123,7 @@ char buffer[READ_BUFFER_SIZE]; string s_buffer; char *filenames[3]; @@ -51,7 +83,7 @@ diff -ur libofx-0.8.3/lib/ofx_preproc.cpp win32-libofx-0.8.3/lib/ofx_preproc.cpp libofx_context=(LibofxContext*)ctx; -@@ -75,8 +102,10 @@ +@@ -75,8 +132,10 @@ message_out(DEBUG, string("ofx_proc_file():Opening file: ")+ p_filename); input_file.open(p_filename); @@ -64,7 +96,7 @@ diff -ur libofx-0.8.3/lib/ofx_preproc.cpp win32-libofx-0.8.3/lib/ofx_preproc.cpp tmp_file.open(tmp_filename); message_out(DEBUG,"ofx_proc_file(): Creating temp file: "+string(tmp_filename)); -@@ -203,7 +232,7 @@ +@@ -203,7 +262,7 @@ ofstream tmp_file; string s_buffer; char *filenames[3]; @@ -73,7 +105,7 @@ diff -ur libofx-0.8.3/lib/ofx_preproc.cpp win32-libofx-0.8.3/lib/ofx_preproc.cpp int pos; LibofxContext *libofx_context; -@@ -216,8 +245,10 @@ +@@ -216,8 +275,10 @@ } s_buffer=string(s, size); @@ -86,3 +118,22 @@ diff -ur libofx-0.8.3/lib/ofx_preproc.cpp win32-libofx-0.8.3/lib/ofx_preproc.cpp tmp_file.open(tmp_filename); message_out(DEBUG,"ofx_proc_file(): Creating temp file: "+string(tmp_filename)); +@@ -439,8 +500,16 @@ + string dtd_path_filename; + bool dtd_found=false; + +- for(i=0;i