diff options
Diffstat (limited to 'apps/plugins/searchengine/parser.c')
-rw-r--r-- | apps/plugins/searchengine/parser.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/apps/plugins/searchengine/parser.c b/apps/plugins/searchengine/parser.c index 62423e256f..76beab49cc 100644 --- a/apps/plugins/searchengine/parser.c +++ b/apps/plugins/searchengine/parser.c | |||
@@ -146,7 +146,8 @@ unsigned char *parseCompareString() { | |||
146 | struct token string1,string2; | 146 | struct token string1,string2; |
147 | unsigned char *ret; | 147 | unsigned char *ret; |
148 | char *s1=NULL,*s2=NULL; | 148 | char *s1=NULL,*s2=NULL; |
149 | int i,contains; | 149 | int i,i2; |
150 | int op; | ||
150 | if(syntaxerror) return 0; | 151 | if(syntaxerror) return 0; |
151 | PUTS("parseCompareString"); | 152 | PUTS("parseCompareString"); |
152 | if(currentToken->kind==TOKEN_STRING || | 153 | if(currentToken->kind==TOKEN_STRING || |
@@ -159,19 +160,12 @@ unsigned char *parseCompareString() { | |||
159 | rb->snprintf(errormsg,250,"'%d' found where STRING/STRINGID expected\n",currentToken->kind); | 160 | rb->snprintf(errormsg,250,"'%d' found where STRING/STRINGID expected\n",currentToken->kind); |
160 | return 0; | 161 | return 0; |
161 | } | 162 | } |
162 | if(currentToken->kind==TOKEN_CONTAINS || | 163 | op=currentToken->kind; |
163 | currentToken->kind==TOKEN_EQUALS) { | 164 | if(op>=TOKEN_CONTAINS&&op<=TOKEN_ENDSWITH) { |
164 | if(currentToken->kind==TOKEN_CONTAINS) { | ||
165 | contains=1; | ||
166 | PUTS("Contains"); | ||
167 | } else { | ||
168 | contains=0; | ||
169 | PUTS("Equals"); | ||
170 | } | ||
171 | parser_acceptIt(); | 165 | parser_acceptIt(); |
172 | } else { | 166 | } else { |
173 | syntaxerror=1; | 167 | syntaxerror=1; |
174 | rb->snprintf(errormsg,250,"'%d' found where CONTAINS/EQUALS expected\n",currentToken->kind); | 168 | rb->snprintf(errormsg,250,"'%d' found where STROP expected\n",op); |
175 | return 0; | 169 | return 0; |
176 | } | 170 | } |
177 | if(currentToken->kind==TOKEN_STRING || | 171 | if(currentToken->kind==TOKEN_STRING || |
@@ -196,10 +190,21 @@ unsigned char *parseCompareString() { | |||
196 | s1=getstring(&string1); | 190 | s1=getstring(&string1); |
197 | if(string2.kind==TOKEN_STRINGIDENTIFIER) | 191 | if(string2.kind==TOKEN_STRINGIDENTIFIER) |
198 | s2=getstring(&string2); | 192 | s2=getstring(&string2); |
199 | if(contains) | 193 | switch(op) { |
200 | ret[i]=rb->strcasestr(s1,s2)!=0; | 194 | case TOKEN_CONTAINS: |
201 | else | 195 | ret[i]=rb->strcasestr(s1,s2)!=0; |
202 | ret[i]=rb->strcasecmp(s1,s2)==0; | 196 | break; |
197 | case TOKEN_EQUALS: | ||
198 | ret[i]=rb->strcasecmp(s1,s2)==0; | ||
199 | break; | ||
200 | case TOKEN_STARTSWITH: | ||
201 | ret[i]=rb->strncasecmp(s1,s2,rb->strlen(s2))==0; | ||
202 | break; | ||
203 | case TOKEN_ENDSWITH: | ||
204 | i2=rb->strlen(s2); | ||
205 | ret[i]=rb->strncasecmp(s1+rb->strlen(s1)-i2,s2,i2)==0; | ||
206 | break; | ||
207 | } | ||
203 | } | 208 | } |
204 | return ret; | 209 | return ret; |
205 | } | 210 | } |