summaryrefslogtreecommitdiff
path: root/apps/plugins/searchengine/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/searchengine/parser.c')
-rw-r--r--apps/plugins/searchengine/parser.c35
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}