[PHP-users 2973] Patch for PHP4-namazu-2.0.1

Youichi Iwakiri php-users@php.gr.jp
Fri, 19 Oct 2001 20:36:47 +0900


いわきりです。

塚田さんの提供されているPHP4からNamazuを呼び出す
拡張モジュールですが、以下の問題が出ましたので
パッチをあてました。

 o nmz_set_langをcallしないためApache起動ユーザの
   環境変数で動作。LANG=Cであるケースが殆どと思われます。
   上記のシステムでNamazuの検索を行った場合、わかち書き
   による検索が行えません。

ということで、functionの追加をしたパッチを送ります。
使い方は、php.iniに
namazu.lang = ja
と追加するか個別にスクリプト中で
    nmz_set_lang("ja");
と記述してください。

もう1点、nmz_fetch_fieldを修正しました。
 (修正前) 
-/* {{{ proto array nmz_fetch_field(int hlist, string field [, int limit])
 (修正後)
+/* {{{ proto array nmz_fetch_field(int hlist, string field [, int limit] [, int offset])

オフセットを指定できるようになります。
#個人的にはoffset, limitの順に並べたかったんですが
#既に利用している人がパッチあてると動かなくなるからなぁ

以下、パッチです
diff -u namazu.orig/php_namazu.c ./php_namazu.c
--- namazu.orig/php_namazu.c	Sun Sep 24 10:45:24 2000
+++ ./php_namazu.c	Fri Oct 19 19:29:42 2001
@@ -22,6 +22,7 @@
 #include "namazu/query.h"
 
 #include "php.h"
+#include "config.h"
 #include "php_config.h"
 #include "php_ini.h"
 #include "php_namazu.h"
@@ -49,6 +50,7 @@
 function_entry namazu_functions[] = {
 	PHP_FE(nmz_set_sortorder,		NULL)
 	PHP_FE(nmz_set_sortmethod,		NULL)
+	PHP_FE(nmz_set_lang,			NULL)
 	PHP_FE(nmz_set_loggingmode,		NULL)
 	PHP_FE(nmz_open,		NULL)
 	PHP_FE(nmz_close,		NULL)
@@ -136,9 +138,25 @@
 	return SUCCESS;
 }
 
+static PHP_INI_MH(OnUpdate_namazu_lang)
+{
+	NMZLS_FETCH();
+
+	if (new_value != NULL) {
+		if (strcasecmp("ja", new_value) == 0) {
+			nmz_set_lang(new_value);
+		} else {
+			nmz_set_lang("C");
+		}
+	}
+
+	return SUCCESS;
+}
+
 PHP_INI_BEGIN()
 	PHP_INI_ENTRY("namazu.sortorder", NULL, PHP_INI_ALL, OnUpdate_namazu_sortorder)
 	PHP_INI_ENTRY("namazu.sortmethod", NULL, PHP_INI_ALL, OnUpdate_namazu_sortmethod)
+	PHP_INI_ENTRY("namazu.lang", NULL, PHP_INI_ALL, OnUpdate_namazu_lang)
 	STD_PHP_INI_BOOLEAN("namazu.loggingmode", "0", PHP_INI_ALL, OnUpdateInt, loggingmode, zend_namazu_globals, namazu_globals)
 PHP_INI_END()
 
@@ -267,6 +285,27 @@
 /* }}} */
 
 
+/* {{{ proto bool nmz_set_lang(string lang)
+   Set the language */
+PHP_FUNCTION(nmz_set_lang)
+{
+	pval **arg_lang;
+
+	if (ARG_COUNT(ht) != 1 || zend_get_parameters_ex(1, &arg_lang) == FAILURE) {
+		WRONG_PARAM_COUNT;
+	}
+
+	convert_to_string_ex(arg_lang);
+	if (strcasecmp("ja", (*arg_lang)->value.str.val) == 0) {
+		nmz_set_lang("ja");
+	} else {
+		nmz_set_lang("C");
+	}
+	RETURN_TRUE;
+}
+/* }}} */
+
+
 /* {{{ proto bool nmz_set_loggingmode(bool mode)
    Set the logging mode (NMZ.slog) */
 PHP_FUNCTION(nmz_set_loggingmode)
@@ -615,14 +654,14 @@
 /* }}} */
 
 
-/* {{{ proto array nmz_fetch_field(int hlist, string field [, int limit])
+/* {{{ proto array nmz_fetch_field(int hlist, string field [, int limit] [, int offset])
    Get the field of all row in a result */
 PHP_FUNCTION(nmz_fetch_field)
 {
-	pval **arg_result, **arg_field, **arg_limit;
+	pval **arg_result, **arg_field, **arg_limit, **arg_offset;
 	php_nmzresult_t *nmzres;
 	char *buf;
-	int i, limit;
+	int i, limit, s_pos;
 	NMZLS_FETCH();
 
 	switch(ARG_COUNT(ht)) {
@@ -636,6 +675,11 @@
 			RETURN_FALSE;
 		}
 		break;
+	case 4:
+		if (zend_get_parameters_ex(4, &arg_result, &arg_field, &arg_limit, &arg_offset) == FAILURE) {
+			RETURN_FALSE;
+		}
+		break;
 	default:
 		WRONG_PARAM_COUNT;
 		break;
@@ -651,10 +695,18 @@
 	}
 
 	limit = nmzres->hlist.num;
-	if (ARG_COUNT(ht) == 3) {
+	s_pos = 0;
+	if (ARG_COUNT(ht) == 4) {
+		convert_to_long_ex(arg_offset);
+		if (limit > (*arg_offset)->value.lval) {
+			s_pos = (*arg_offset)->value.lval;
+		}
+	}
+
+	if (ARG_COUNT(ht) == 3 || ARG_COUNT(ht) == 4) {
 		convert_to_long_ex(arg_limit);
-		if (limit > (*arg_limit)->value.lval) {
-			limit = (*arg_limit)->value.lval;
+		if (limit > (s_pos + (*arg_limit)->value.lval) ) {
+			limit = s_pos + (*arg_limit)->value.lval;
 		}
 	}
 
@@ -664,7 +716,7 @@
 	}
 
 	buf = (char *)emalloc(2*BUFSIZE*sizeof(char));
-	for (i = 0; i < limit; i++) {
+	for (i = s_pos; i < limit; i++) {
 		buf[0] = '\0';
 		buf[1] = '\0';
 		nmz_get_field_data(nmzres->hlist.data[i].idxid, nmzres->hlist.data[i].docid, (*arg_field)->value.str.val, buf);
diff -u namazu.orig/php_namazu.h ./php_namazu.h
--- namazu.orig/php_namazu.h	Sun Jul  9 13:36:06 2000
+++ ./php_namazu.h	Thu Oct 18 20:20:18 2001
@@ -27,6 +27,7 @@
 /* php function registration */
 PHP_FUNCTION(nmz_set_sortorder);
 PHP_FUNCTION(nmz_set_sortmethod);
+PHP_FUNCTION(nmz_set_lang);
 PHP_FUNCTION(nmz_set_loggingmode);
 PHP_FUNCTION(nmz_open);
 PHP_FUNCTION(nmz_close);