Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: 2003/11/07 -> 2003/11/08 update gets no Warning
寺西です。
Tadamasa Teranishi wrote:
>
> パス指定なしで起動した際に、きちんと namazu.cgi のあるディレクトリを
> 取り出せるようにデバッグすることも必要かと。
ということで、作ってみました。
static int get_program_pathname(char *dest, const char *program);
#define PATH_SEPARATOR ":"
static int
get_program_pathname(char *dest, const char *program)
{
int i;
char *path, *p;
int win32 = 0;
#if defined(_WIN32) || defined(__EMX__)
win32 = 1;
#endif
dest[0] = '\0';
for (i = strlen(program) - 1; i >= 0; i--) {
if (program[i] == '/' || (win32 && program[i] == '\\')) {
return -1;
}
}
path = getenv("PATH");
p = strtok(path, PATH_SEPARATOR);
while(p) {
if (strlen(p) + strlen(program) + 1 < BUFSIZE) {
strncpy(dest, p, BUFSIZE - 1);
strncat(dest, "/", BUFSIZE - strlen(dest) - 1);
strncat(dest, program, BUFSIZE - strlen(dest) - 1);
dest[BUFSIZE - 1] = '\0';
if (nmz_is_file_exists(dest)) {
int i;
for (i = strlen(dest) - 1; i >= 0; i--) {
if (dest[i] == '/' || (win32 && dest[i] == '\\')) {
dest[i + 1] = '\0';
return 0;
}
}
return -1;
}
}
else {
return -1;
}
p = strtok(NULL, PATH_SEPARATOR);
}
return -1;
}
src/namazu-cgi.c の combine_pathname() 呼び出し部分を以下のように
変えれば良いものと思います。
if (get_program_pathname(fname, argv[0]) == 0) {
strncat(fname, ".namazurc", BUFSIZE - strlen(fname) - 1);
fname[BUFSIZE - 1] = '\0';
}
else {
combine_pathname(fname, argv[0], ".namazurc");
}
if (nmz_is_file_exists(fname)) {
set_namazurc(fname);
}
なお、このままでは
> 2. src/namazu-cgi.cmd を修正して combine_pathname によって生成されたファ
> イル名がなければ current directory にアクセスを試みるようにする
> 3. namazu-cgi-xxx で生成する .namazurc を src/.libs/ の下にも作る
のどちらかをしないと、make check は libtools が 1.4 でも 1.5 でも
FAIL します。
なので、2 の対策を行うのなら、以下のようにすれば良いものと思います。
(未確認)
if (get_program_pathname(fname, argv[0]) == 0) {
strncat(fname, ".namazurc", BUFSIZE - strlen(fname) - 1);
fname[BUFSIZE - 1] = '\0';
}
else {
combine_pathname(fname, argv[0], ".namazurc");
}
if (nmz_is_file_exists(fname)) {
set_namazurc(fname);
}
else if (nmz_is_file_exists(".namazurc")) {
set_namazurc(".namazurc");
}
これにより、.namazurc の読み込み処理が
1. namazu.cgi のあるディレクトリの .namazurc
2. もしなければカレントディレクトリの .namazurc
ということになりますので、
http://www.namazu.org/doc/manual.html.ja#namazurc の内容を
修正するなら
1. $(sysconfdir)/$(PACKAGE)/namazurc
通常は /usr/local/etc/namazu/namazurc
2. ~/.namazurc
3. -f, --config=FILE オプションで指定した namazurc
(CGIの場合は namazu.cgi を設置したディレクトリ の .namazurc
もしなければカレントディレクトリの .namazurc)
ということになります。
これで解決と思ったのですが、困ったことに Win32 環境(VC++)では
PATH のセパレータが ':' ではなく ';' であることに気づきました。
Cygwin は ':' なので、以下のようにでもセパレータを定義すれば
よいのかな?
OS/2 も ';' のようですが、他の環境で ':' 以外のセパレータを使って
いるものはありますか?
#if (defined (_WIN32) && !defined (__CYGWIN__)) || defined(__EMX__)
# define PATH_SEPARATOR ";"
#else
# define PATH_SEPARATOR ":"
#endif
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E