r15564 - gnucash/trunk/packaging/win32 - On Win32, add get_dtd_installation_directory to LibOFX. Fix #406286.

Andreas Köhler andi5 at cvs.gnucash.org
Sun Feb 11 12:30:56 EST 2007


Author: andi5
Date: 2007-02-11 12:30:54 -0500 (Sun, 11 Feb 2007)
New Revision: 15564
Trac: http://svn.gnucash.org/trac/changeset/15564

Modified:
   gnucash/trunk/packaging/win32/libofx-0.8.3-patch.diff
Log:
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.


Modified: gnucash/trunk/packaging/win32/libofx-0.8.3-patch.diff
===================================================================
--- gnucash/trunk/packaging/win32/libofx-0.8.3-patch.diff	2007-02-11 04:22:52 UTC (rev 15563)
+++ gnucash/trunk/packaging/win32/libofx-0.8.3-patch.diff	2007-02-11 17:30:54 UTC (rev 15564)
@@ -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 <iostream>
  #include <fstream>
  #include <stdlib.h>
 +#include <io.h> // for mktemp() on win32/mingw
  #include <stdio.h>
  #include <string>
++#ifdef OS_WIN32
++#include <windows.h> // 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;
  
@@ -39,10 +46,35 @@
 +#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 @@
  
    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 @@
      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 @@
    int pos;
    LibofxContext *libofx_context;
  
-@@ -216,8 +245,10 @@
+@@ -216,8 +275,10 @@
    }
    s_buffer=string(s, size);
  
@@ -86,3 +118,22 @@
    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<DTD_SEARCH_PATH_NUM&&dtd_found==false;i++){
+-    dtd_path_filename=DTD_SEARCH_PATH[i];
++  for(i=-1;i<DTD_SEARCH_PATH_NUM&&dtd_found==false;i++){
++    if (i==-1) {
++#ifdef OS_WIN32
++      dtd_path_filename=get_dtd_installation_directory();
++#else
++      continue;
++#endif
++    } else {
++      dtd_path_filename=DTD_SEARCH_PATH[i];
++    }
+     dtd_path_filename.append(dtd_filename);
+     dtd_file.clear();
+     dtd_file.open(dtd_path_filename.c_str());



More information about the gnucash-changes mailing list