diff options
Diffstat (limited to 'external/hunspell/hunspell-fdo48017-wfopen.patch')
-rw-r--r-- | external/hunspell/hunspell-fdo48017-wfopen.patch | 114 |
1 files changed, 9 insertions, 105 deletions
diff --git a/external/hunspell/hunspell-fdo48017-wfopen.patch b/external/hunspell/hunspell-fdo48017-wfopen.patch index 37203be5c3f9..14f1db726020 100644 --- a/external/hunspell/hunspell-fdo48017-wfopen.patch +++ b/external/hunspell/hunspell-fdo48017-wfopen.patch @@ -1,115 +1,19 @@ diff -ru hunspell/src/hunspell/csutil.cxx build/hunspell/src/hunspell/csutil.cxx --- hunspell/src/hunspell/csutil.cxx 2011-02-02 11:35:43.000000000 +0100 +++ build/hunspell/src/hunspell/csutil.cxx 2014-04-24 19:42:01.373285409 +0200 -@@ -17,6 +17,11 @@ - unsigned short clower; - }; - -+#ifdef _WIN32 -+#include <windows.h> -+#include <wchar.h> -+#endif -+ - #ifdef OPENOFFICEORG - # include <unicode/uchar.h> - #else -@@ -51,6 +51,26 @@ - static struct unicode_info2 * utf_tbl = NULL; - static int utf_tbl_count = 0; // utf_tbl can be used by multiple Hunspell instances - -+FILE * myfopen(const char * path, const char * mode) { -+#ifdef _WIN32 -+#define WIN32_LONG_PATH_PREFIX "\\\\?\\" -+ if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) { -+ int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); -+ wchar_t *buff = (wchar_t *) malloc(len * sizeof(wchar_t)); +@@ -57,9 +57,14 @@ + if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) { + int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); + wchar_t *buff = (wchar_t *) malloc(len * sizeof(wchar_t)); + wchar_t *buff2 = (wchar_t *) malloc(len * sizeof(wchar_t)); + FILE * f = NULL; -+ MultiByteToWideChar(CP_UTF8, 0, path, -1, buff, len); + MultiByteToWideChar(CP_UTF8, 0, path, -1, buff, len); +- FILE * f = _wfopen(buff, (strcmp(mode, "r") == 0) ? L"r" : L"rb"); + if (_wfullpath( buff2, buff, len ) != NULL) { + f = _wfopen(buff2, (strcmp(mode, "r") == 0) ? L"r" : L"rb"); + } -+ free(buff); + free(buff); + free(buff2); -+ return f; -+ } -+#endif -+ return fopen(path, mode); -+} -+ - /* only UTF-16 (BMP) implementation */ - char * u16_u8(char * dest, int size, const w_char * src, int srclen) { - signed char * u8 = (signed char *)dest; -diff -ru hunspell/src/hunspell/csutil.hxx build/hunspell/src/hunspell/csutil.hxx ---- hunspell/src/hunspell/csutil.hxx 2010-09-06 09:58:53.000000000 +0200 -+++ build/hunspell/src/hunspell/csutil.hxx 2014-04-24 19:42:01.373285409 +0200 -@@ -52,6 +52,9 @@ - #define FORBIDDENWORD 65510 - #define ONLYUPCASEFLAG 65511 - -+// fopen or optional _wfopen to fix long pathname problem of WIN32 -+LIBHUNSPELL_DLL_EXPORTED FILE * myfopen(const char * path, const char * mode); -+ - // convert UTF-16 characters to UTF-8 - LIBHUNSPELL_DLL_EXPORTED char * u16_u8(char * dest, int size, const w_char * src, int srclen); - -diff -ru hunspell/src/hunspell/dictmgr.cxx build/hunspell/src/hunspell/dictmgr.cxx ---- hunspell/src/hunspell/dictmgr.cxx 2010-06-02 21:33:59.000000000 +0200 -+++ build/hunspell/src/hunspell/dictmgr.cxx 2014-04-24 19:42:01.381285408 +0200 -@@ -5,6 +5,7 @@ - #include <stdio.h> - - #include "dictmgr.hxx" -+#include "csutil.hxx" - - DictMgr::DictMgr(const char * dictpath, const char * etype) : numdict(0) - { -@@ -57,7 +58,7 @@ - - // open the dictionary list file - FILE * dictlst; -- dictlst = fopen(dictpath,"r"); -+ dictlst = myfopen(dictpath,"r"); - if (!dictlst) { - return 1; + return f; } -diff -ru hunspell/src/hunspell/filemgr.cxx build/hunspell/src/hunspell/filemgr.cxx ---- hunspell/src/hunspell/filemgr.cxx 2010-04-14 11:42:03.000000000 +0200 -+++ build/hunspell/src/hunspell/filemgr.cxx 2014-04-25 00:44:05.049789586 +0200 -@@ -6,6 +6,7 @@ - #include <stdio.h> - - #include "filemgr.hxx" -+#include "csutil.hxx" - - int FileMgr::fail(const char * err, const char * par) { - fprintf(stderr, err, par); -@@ -15,7 +16,7 @@ - FileMgr::FileMgr(const char * file, const char * key) { - linenum = 0; - hin = NULL; -- fin = fopen(file, "r"); -+ fin = myfopen(file, "r"); - if (!fin) { - // check hzipped file - char * st = (char *) malloc(strlen(file) + strlen(HZIP_EXTENSION) + 1); -diff -ru hunspell/src/hunspell/hunzip.cxx build/hunspell/src/hunspell/hunzip.cxx ---- hunspell/src/hunspell/hunzip.cxx 2010-04-27 16:07:14.000000000 +0200 -+++ build/hunspell/src/hunspell/hunzip.cxx 2014-04-24 19:42:01.381285408 +0200 -@@ -3,6 +3,7 @@ - #include <stdio.h> - - #include "hunzip.hxx" -+#include "csutil.hxx" - - #define CODELEN 65536 - #define BASEBITREC 5000 -@@ -38,7 +38,7 @@ - - if (!filename) return -1; - -- fin = fopen(filename, "rb"); -+ fin = myfopen(filename, "rb"); - if (!fin) return -1; - - // read magic number + #endif |