summaryrefslogtreecommitdiff
path: root/ext/mnogosearch
diff options
context:
space:
mode:
authorSergey Kartashoff <gluke@php.net>2002-09-01 14:11:46 +0000
committerSergey Kartashoff <gluke@php.net>2002-09-01 14:11:46 +0000
commite32f35eb4ef3909c8a8135ab7ed2ea0e92343b68 (patch)
treef2aa1731833eceed50ed1edbc38ca64569787adc /ext/mnogosearch
parent714c19fe66dd5feef380eccb4606be5193381c13 (diff)
downloadphp-git-e32f35eb4ef3909c8a8135ab7ed2ea0e92343b68.tar.gz
- Udm_Cat_Path, Udm_Cat_List, Udm_Get_Doc_Count functions have been fixed
to work with mnogosearch-3.2.6 and later. - Removed search words highlighting while getting document URL in mnogosearch extention
Diffstat (limited to 'ext/mnogosearch')
-rw-r--r--ext/mnogosearch/php_mnogo.c99
1 files changed, 63 insertions, 36 deletions
diff --git a/ext/mnogosearch/php_mnogo.c b/ext/mnogosearch/php_mnogo.c
index b9846df89b..0b0a62ddc6 100644
--- a/ext/mnogosearch/php_mnogo.c
+++ b/ext/mnogosearch/php_mnogo.c
@@ -393,13 +393,22 @@ DLEXPORT PHP_MINFO_FUNCTION(mnogosearch)
php_info_print_table_end();
}
-ssize_t UdmRecvAll(int s, void *buf, size_t len, int flags) {
- size_t received = 0, r;
- char *b = buf;
- while ( (received < len) && ((r = recv(s, &b[received], len - received, flags)) >= 0 ) ) {
- received += r;
- }
- return received;
+static char* MyRemoveHiLightDup(const char *s){
+ size_t len=strlen(s)+1;
+ char *res=malloc(len);
+ char *d;
+
+ for(d=res;s[0];s++){
+ switch(s[0]){
+ case '\2':
+ case '\3':
+ break;
+ default:
+ *d++=*s;
+ }
+ }
+ *d='\0';
+ return res;
}
/* {{{ proto int udm_alloc_agent(string dbaddr [, string dbmode])
@@ -1363,6 +1372,17 @@ DLEXPORT PHP_FUNCTION(udm_crc32)
#endif
#if UDM_VERSION_ID == 30203
+
+static ssize_t UdmRecvAll(int s, void *buf, size_t len, int flags) {
+ size_t received = 0, r;
+ char *b = buf;
+ while ( (received < len) && ((r = recv(s, &b[received], len - received, flags)) >= 0 ) ) {
+ received += r;
+ }
+ return received;
+}
+
+
/* {{{ proto int udm_open_stored(int agent, string storedaddr)
Open connection to stored */
DLEXPORT PHP_FUNCTION(udm_open_stored)
@@ -1537,11 +1557,13 @@ DLEXPORT PHP_FUNCTION(udm_make_excerpt)
ZEND_FETCH_RESOURCE(Res, UDM_RESULT *, yyres, -1, "mnoGoSearch-Result", le_res);
if(row<Res->num_rows){
- const char *al;
+ char *al;
char *Excerpt;
- al = UdmVarListFindStr(&(Res->Doc[row].Sections), "URL", "");
+ al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), "URL", "")));
UdmVarListReplaceInt(&(Res->Doc[row].Sections), "STORED_ID", UdmCRC32(al, strlen(al)));
+ free(al);
+
Excerpt = UdmExcerptDoc(Agent, Res, &(Res->Doc[row]), 256);
if (Excerpt != NULL) {
@@ -1554,7 +1576,6 @@ DLEXPORT PHP_FUNCTION(udm_make_excerpt)
UdmVarListReplaceInt(&(Res->Doc[row].Sections),"ST",0);
RETURN_FALSE;
}
-
}else{
php_error(E_WARNING,"%s(): row number too large", get_active_function_name(TSRMLS_C));
RETURN_FALSE;
@@ -1629,7 +1650,14 @@ DLEXPORT PHP_FUNCTION(udm_get_res_field)
switch(field){
case UDM_FIELD_URL:
#if UDM_VERSION_ID >= 30204
+ {
+ char *al;
+ al = (char *)MyRemoveHiLightDup((const char *)(UdmVarListFindStr(&(Res->Doc[row].Sections), "URL", "")));
+ UdmVarListReplaceStr(&Res->Doc[row].Sections,"URL",al);
+ free(al);
+
RETURN_STRING((char *)UdmVarListFindStr(&Res->Doc[row].Sections,"URL",""),1);
+ }
#else
RETURN_STRING((Res->Doc[row].url)?(Res->Doc[row].url):"",1);
#endif
@@ -1995,7 +2023,11 @@ DLEXPORT PHP_FUNCTION(udm_cat_list)
pval ** yycat, ** yyagent;
UDM_AGENT * Agent;
char *cat;
+#if UDM_VERSION_ID >= 30204
+ UDM_CATEGORY C;
+#else
UDM_CATEGORY *c=NULL;
+#endif
char *buf=NULL;
int id=-1;
@@ -2015,10 +2047,9 @@ DLEXPORT PHP_FUNCTION(udm_cat_list)
cat = Z_STRVAL_PP(yycat);
#if UDM_VERSION_ID >= 30204
- if (NULL==(c=(UDM_CATEGORY *)malloc(sizeof(UDM_CATEGORY)))) RETURN_FALSE;
- if (NULL==(c->Category=malloc(sizeof(UDM_CATITEM)))) RETURN_FALSE;
- strncpy(c->addr,cat,sizeof(c->addr)-1);
- if(UdmCatAction(Agent,c,UDM_CAT_ACTION_LIST,Agent->Conf->db)){
+ bzero(&C,sizeof(C));
+ strncpy(C.addr,cat,sizeof(C.addr)-1);
+ if(!UdmCatAction(Agent,&C,UDM_CAT_ACTION_LIST,Agent->Conf->db)){
#else
if((c=UdmCatList(Agent,cat))){
#endif
@@ -2033,11 +2064,10 @@ DLEXPORT PHP_FUNCTION(udm_cat_list)
#if UDM_VERSION_ID >= 30204
{
int i;
- for(i==0;i<c->ncategories;i++){
- snprintf(buf, UDMSTRSIZ, "%s%s",c->Category[i].link[0]?"@ ":"", c->Category[i].name);
- add_next_index_string(return_value, c->Category[i].link[0]?c->Category[i].link:c->Category[i].path, 1);
+ for(i=0;i<C.ncategories;i++){
+ snprintf(buf, UDMSTRSIZ, "%s%s",C.Category[i].link[0]?"@ ":"", C.Category[i].name);
+ add_next_index_string(return_value, C.Category[i].link[0]?C.Category[i].link:C.Category[i].path, 1);
add_next_index_string(return_value, buf, 1);
- c++;
}
}
#else
@@ -2049,11 +2079,7 @@ DLEXPORT PHP_FUNCTION(udm_cat_list)
}
#endif
free(buf);
-#if UDM_VERSION_ID >= 30204
- free(c->Category);
- free(c);
-#endif
-} else {
+ } else {
RETURN_FALSE;
}
}
@@ -2066,7 +2092,11 @@ DLEXPORT PHP_FUNCTION(udm_cat_path)
pval ** yycat, ** yyagent;
UDM_AGENT * Agent;
char *cat;
+#if UDM_VERSION_ID >= 30204
+ UDM_CATEGORY C;
+#else
UDM_CATEGORY *c=NULL;
+#endif
char *buf=NULL;
int id=-1;
@@ -2086,10 +2116,9 @@ DLEXPORT PHP_FUNCTION(udm_cat_path)
cat = Z_STRVAL_PP(yycat);
#if UDM_VERSION_ID >= 30204
- if (NULL==(c=(UDM_CATEGORY *)malloc(sizeof(UDM_CATEGORY)))) RETURN_FALSE;
- if (NULL==(c->Category=malloc(sizeof(UDM_CATITEM)))) RETURN_FALSE;
- strncpy(c->addr,cat,sizeof(c->addr)-1);
- if(UdmCatAction(Agent,c,UDM_CAT_ACTION_PATH,Agent->Conf->db)){
+ bzero(&C,sizeof(C));
+ strncpy(C.addr,cat,sizeof(C.addr)-1);
+ if(!UdmCatAction(Agent,&C,UDM_CAT_ACTION_PATH,Agent->Conf->db)){
#else
if((c=UdmCatPath(Agent,cat))){
#endif
@@ -2104,11 +2133,10 @@ DLEXPORT PHP_FUNCTION(udm_cat_path)
#if UDM_VERSION_ID >= 30204
{
int i;
- for(i==0;i<c->ncategories;i++){
- snprintf(buf, UDMSTRSIZ, "%s%s",c->Category[i].link[0]?"@ ":"", c->Category[i].name);
- add_next_index_string(return_value, c->Category[i].link[0]?c->Category[i].link:c->Category[i].path, 1);
+ for(i=0;i<C.ncategories;i++){
+ snprintf(buf, UDMSTRSIZ, "%s%s",C.Category[i].link[0]?"@ ":"", C.Category[i].name);
+ add_next_index_string(return_value, C.Category[i].link[0]?C.Category[i].link:C.Category[i].path, 1);
add_next_index_string(return_value, buf, 1);
- c++;
}
}
#else
@@ -2120,10 +2148,6 @@ DLEXPORT PHP_FUNCTION(udm_cat_path)
}
#endif
free(buf);
-#if UDM_VERSION_ID >= 30204
- free(c->Category);
- free(c);
-#endif
} else {
RETURN_FALSE;
}
@@ -2151,7 +2175,10 @@ DLEXPORT PHP_FUNCTION(udm_get_doc_count)
break;
}
ZEND_FETCH_RESOURCE(Agent, UDM_AGENT *, yyagent, id, "mnoGoSearch-Agent", le_link);
-#if UDM_VERSION_ID >= 30204
+#if UDM_VERSION_ID >= 30207
+ if (!Agent->doccount) UdmURLAction(Agent,NULL,UDM_URL_ACTION_DOCCOUNT,Agent->Conf->db);
+ RETURN_LONG(Agent->doccount);
+#elif UDM_VERSION_ID >= 30204
RETURN_LONG(UdmURLAction(Agent,NULL,UDM_URL_ACTION_DOCCOUNT,Agent->Conf->db));
#else
RETURN_LONG(UdmGetDocCount(Agent));