[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);