Fix libofx and OFX import on win32.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@15523 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Christian Stimming 2007-02-08 13:58:29 +00:00
parent 4bb3acb10e
commit a67b94b32f
2 changed files with 89 additions and 28 deletions

View File

@ -670,6 +670,7 @@ function inst_libofx() {
--prefix=${_LIBOFX_UDIR} \ --prefix=${_LIBOFX_UDIR} \
--with-opensp-includes=${_OPENSP_UDIR}/include/OpenSP \ --with-opensp-includes=${_OPENSP_UDIR}/include/OpenSP \
--with-opensp-libs=${_OPENSP_UDIR}/lib \ --with-opensp-libs=${_OPENSP_UDIR}/lib \
CPPFLAGS="-DOS_WIN32" \
--disable-static --disable-static
make LDFLAGS="${LDFLAGS} -no-undefined" make LDFLAGS="${LDFLAGS} -no-undefined"
make install make install

View File

@ -1,28 +1,88 @@
--- lib/ofx_preproc.cpp~ Tue Jan 9 02:38:33 2007 diff -ur libofx-0.8.3/lib/ofx_preproc.cpp win32-libofx-0.8.3/lib/ofx_preproc.cpp
+++ lib/ofx_preproc.cpp Tue Feb 6 12:31:07 2007 --- libofx-0.8.3/lib/ofx_preproc.cpp Tue Jan 9 02:38:33 2007
@@ -20,6 +20,7 @@ +++ win32-libofx-0.8.3/lib/ofx_preproc.cpp Thu Feb 8 13:53:59 2007
#include <iostream> @@ -20,6 +20,7 @@
#include <fstream> #include <iostream>
#include <stdlib.h> #include <fstream>
+#include <io.h> // for mktemp() on win32/mingw #include <stdlib.h>
#include <stdio.h> +#include <io.h> // for mktemp() on win32/mingw
#include <string> #include <stdio.h>
#include "ParserEventGeneratorKit.h" #include <string>
@@ -76,7 +77,7 @@ #include "ParserEventGeneratorKit.h"
@@ -51,6 +52,32 @@
input_file.open(p_filename); "~/"};
strncpy(tmp_filename,"/tmp/libofxtmpXXXXXX",50); const unsigned int READ_BUFFER_SIZE = 1024;
- mkstemp(tmp_filename);
+ mktemp(tmp_filename); +#ifdef OS_WIN32
tmp_file.open(tmp_filename); +# define DIR_SEPARATOR_S "\\"
+#else
message_out(DEBUG,"ofx_proc_file(): Creating temp file: "+string(tmp_filename)); +# define DIR_SEPARATOR_S "/"
@@ -217,7 +218,7 @@ +#endif
s_buffer=string(s, size); +// The filenames can get quite long on windows.
+#define TMPFILEBUFSIZE 120
strncpy(tmp_filename,"/tmp/libofxtmpXXXXXX",50); +
- mkstemp(tmp_filename); +std::string get_tmp_dir()
+ mktemp(tmp_filename); +{
tmp_file.open(tmp_filename); + // Tries to mimic the behaviour of
+ // http://developer.gnome.org/doc/API/2.0/glib/glib-Miscellaneous-Utility-Functions.html#g-get-tmp-dir
message_out(DEBUG,"ofx_proc_file(): Creating temp file: "+string(tmp_filename)); +#ifdef OS_WIN32
+ char *var;
+ var = getenv("TMPDIR");
+ if (var) return var;
+ var = getenv("TMP");
+ if (var) return var;
+ var = getenv("TEMP");
+ if (var) return var;
+ return "C:\\";
+#else
+ return "/tmp";
+#endif
+}
+
/** @brief File pre-processing of OFX AND for OFC files
*
* Takes care of comment striping, dtd locating, etc.
@@ -66,7 +93,7 @@
char buffer[READ_BUFFER_SIZE];
string s_buffer;
char *filenames[3];
- char tmp_filename[50];
+ char tmp_filename[TMPFILEBUFSIZE];
libofx_context=(LibofxContext*)ctx;
@@ -75,8 +102,10 @@
message_out(DEBUG, string("ofx_proc_file():Opening file: ")+ p_filename);
input_file.open(p_filename);
- strncpy(tmp_filename,"/tmp/libofxtmpXXXXXX",50);
- mkstemp(tmp_filename);
+ std::string tmpdir = get_tmp_dir();
+ std::string tmpfiletemplate = tmpdir + DIR_SEPARATOR_S "libofxtmpXXXXXX";
+ strncpy(tmp_filename,tmpfiletemplate.c_str(),TMPFILEBUFSIZE);
+ mktemp(tmp_filename);
tmp_file.open(tmp_filename);
message_out(DEBUG,"ofx_proc_file(): Creating temp file: "+string(tmp_filename));
@@ -203,7 +232,7 @@
ofstream tmp_file;
string s_buffer;
char *filenames[3];
- char tmp_filename[50];
+ char tmp_filename[TMPFILEBUFSIZE];
int pos;
LibofxContext *libofx_context;
@@ -216,8 +245,10 @@
}
s_buffer=string(s, size);
- strncpy(tmp_filename,"/tmp/libofxtmpXXXXXX",50);
- mkstemp(tmp_filename);
+ std::string tmpdir = get_tmp_dir();
+ std::string tmpfiletemplate = tmpdir + DIR_SEPARATOR_S "libofxtmpXXXXXX";
+ strncpy(tmp_filename,tmpfiletemplate.c_str(),TMPFILEBUFSIZE);
+ mktemp(tmp_filename);
tmp_file.open(tmp_filename);
message_out(DEBUG,"ofx_proc_file(): Creating temp file: "+string(tmp_filename));