| History uses fts3 with an icu-based segmenter. These changes allow |
| building a sqlite3 binary which can read those files. |
| |
| Index: src/shell.c |
| =================================================================== |
| --- src/shell.c 2009-09-04 13:37:43.000000000 -0700 |
| +++ src/shell.c 2009-09-15 11:32:08.000000000 -0700 |
| @@ -3007,6 +3007,14 @@ |
| int i; |
| int rc = 0; |
| |
| + /* Begin evanm patch. */ |
| + extern int sqlite_shell_init_icu(); |
| + if( !sqlite_shell_init_icu() ){ |
| + fprintf(stderr, "%s: warning: couldn't find icudt38.dll; " |
| + "queries against ICU FTS tables will fail.\n", argv[0]); |
| + } |
| + /* End evanm patch. */ |
| + |
| Argv0 = argv[0]; |
| main_init(&data); |
| stdin_is_interactive = isatty(0); |
| diff --git src/shell_icu_linux.c src/shell_icu_linux.c |
| new file mode 100644 |
| index 0000000..4ad0e42 |
| --- /dev/null |
| +++ src/shell_icu_linux.c |
| @@ -0,0 +1,27 @@ |
| +/* Copyright 2007 Google Inc. All Rights Reserved. |
| +**/ |
| + |
| +#include <limits.h> |
| +#include <unistd.h> |
| +#include "unicode/putil.h" |
| +#include "unicode/udata.h" |
| + |
| +/* |
| +** This function attempts to load the ICU data tables from a data file. |
| +** Returns 0 on failure, nonzero on success. |
| +** This a hack job of icu_utils.cc:Initialize(). It's Chrome-specific code. |
| +*/ |
| +int sqlite_shell_init_icu() { |
| + char bin_dir[PATH_MAX + 1]; |
| + int bin_dir_size = readlink("/proc/self/exe", bin_dir, PATH_MAX); |
| + if (bin_dir_size < 0 || bin_dir_size > PATH_MAX) |
| + return 0; |
| + bin_dir[bin_dir_size] = 0;; |
| + |
| + u_setDataDirectory(bin_dir); |
| + // Only look for the packaged data file; |
| + // the default behavior is to look for individual files. |
| + UErrorCode err = U_ZERO_ERROR; |
| + udata_setFileAccess(UDATA_ONLY_PACKAGES, &err); |
| + return err == U_ZERO_ERROR; |
| +} |
| Index: src/shell_icu_win.c |
| =================================================================== |
| --- src/shell_icu_win.c 1969-12-31 16:00:00.000000000 -0800 |
| +++ src/shell_icu_win.c 2011-03-03 14:29:11.000000000 -0700 |
| @@ -0,0 +1,32 @@ |
| +/* Copyright 2011 Google Inc. All Rights Reserved. |
| +**/ |
| + |
| +#include <windows.h> |
| +#include "unicode/udata.h" |
| + |
| +/* |
| +** This function attempts to load the ICU data tables from a DLL. |
| +** Returns 0 on failure, nonzero on success. |
| +** This a hack job of icu_utils.cc:Initialize(). It's Chrome-specific code. |
| +*/ |
| + |
| +#define ICU_DATA_SYMBOL "icudt" U_ICU_VERSION_SHORT "_dat" |
| +int sqlite_shell_init_icu() { |
| + HMODULE module; |
| + FARPROC addr; |
| + UErrorCode err; |
| + |
| + // Chrome dropped U_ICU_VERSION_SHORT from the icu data dll name. |
| + module = LoadLibrary(L"icudt.dll"); |
| + if (!module) |
| + return 0; |
| + |
| + addr = GetProcAddress(module, ICU_DATA_SYMBOL); |
| + if (!addr) |
| + return 0; |
| + |
| + err = U_ZERO_ERROR; |
| + udata_setCommonData(addr, &err); |
| + |
| + return 1; |
| +} |