-rw-r--r-- | libopie2/opiedb/osqlitedriver.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/libopie2/opiedb/osqlitedriver.cpp b/libopie2/opiedb/osqlitedriver.cpp index eea1093..4eda9b9 100644 --- a/libopie2/opiedb/osqlitedriver.cpp +++ b/libopie2/opiedb/osqlitedriver.cpp | |||
@@ -41,6 +41,8 @@ | |||
41 | // is replaced by fromLatin1() (eilers) | 41 | // is replaced by fromLatin1() (eilers) |
42 | #define __BUGGY_LOCAL8BIT_ | 42 | #define __BUGGY_LOCAL8BIT_ |
43 | 43 | ||
44 | char *regex_raw; | ||
45 | regex_t regex_c; | ||
44 | 46 | ||
45 | using namespace Opie::DB; | 47 | using namespace Opie::DB; |
46 | using namespace Opie::DB::Internal; | 48 | using namespace Opie::DB::Internal; |
@@ -84,24 +86,27 @@ void OSQLiteDriver::setUrl( const QString& url ) { | |||
84 | void OSQLiteDriver::setOptions( const QStringList& ) { | 86 | void OSQLiteDriver::setOptions( const QStringList& ) { |
85 | } | 87 | } |
86 | 88 | ||
87 | /*------------------------------------------------------------------/* | 89 | /* |
88 | * Functions to patch a regex search into sqlite | 90 | * Functions to patch a regex search into sqlite |
89 | * -----------------------------------------------------------------*/ | 91 | */ |
90 | int sqliteRlikeCompare(const char *zPattern, const char *zString){ | 92 | int sqliteRlikeCompare(const char *zPattern, const char *zString){ |
91 | regex_t regex; | ||
92 | int res; | 93 | int res; |
93 | if ( zPattern==NULL || zString==NULL ) { | 94 | if (regex_raw == NULL || (strcmp (zPattern, regex_raw) != 0)){ |
94 | printf("One of the args was null!\n"); | 95 | if (regex_raw != NULL) { |
95 | return 0; | 96 | free(regex_raw); |
96 | } | 97 | regfree(®ex_c); |
97 | res = regcomp(®ex, zPattern, REG_EXTENDED); | 98 | } |
99 | regex_raw = (char *)malloc(strlen(zPattern)+1); | ||
100 | strncpy(regex_raw, zPattern, strlen(zPattern)+1); | ||
101 | res = regcomp(®ex_c, zPattern, REG_EXTENDED); | ||
98 | if ( res != 0 ) { | 102 | if ( res != 0 ) { |
99 | printf("Regcomp failed with code %u on string %s\n",res,zPattern); | 103 | printf("Regcomp failed with code %u on string %s\n",res,zPattern); |
100 | 104 | free(regex_raw); | |
105 | regex_raw=NULL; | ||
101 | return 0; | 106 | return 0; |
102 | } | 107 | } |
103 | res = (regexec(®ex, zString, 0, NULL, 0)==0); | 108 | } |
104 | regfree(®ex); | 109 | res = (regexec(®ex_c, zString, 0, NULL, 0)==0); |
105 | return res; | 110 | return res; |
106 | } | 111 | } |
107 | 112 | ||
@@ -142,7 +147,9 @@ bool OSQLiteDriver::open() { | |||
142 | bool OSQLiteDriver::close() { | 147 | bool OSQLiteDriver::close() { |
143 | if (m_sqlite ) | 148 | if (m_sqlite ) |
144 | sqlite_close( m_sqlite ), m_sqlite=0l; | 149 | sqlite_close( m_sqlite ), m_sqlite=0l; |
145 | 150 | free(regex_raw); | |
151 | regex_raw=NULL; | ||
152 | regfree(®ex_c); | ||
146 | return true; | 153 | return true; |
147 | } | 154 | } |
148 | 155 | ||