[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:1053]script execution on 1.03a3



堀口です. なんかちょっと見ないうちに a3 ですね. で, さっそく試し
てみました.
  
 スクリプト実行関係がうまく動いていなかったのを直しました. 見ての
とおり Mew も動いています. パッチは添付しています.

 call-process 関係の状況はこのような感じ

   ・Fcall_process は openp が与えられたプログラムファイル名を絶
     対パスに展開して返すことを要求しているらしい.

   ・1.01 ではスクリプトファイルでもとりあえず実行ファイルとみな
     して絶対パスに展開しているが, 1.03 では openp が使っている 
     sys_access@xxxxx がDOSの実行ファイルの拡張子をもたいないとOK
     を返さないため, 絶対パスへの展開を行わない.

   ・というわけで mw32script-argument-editing-function の (car
     argument) は 1.01 では絶対パスであるので正常に動作.  1.03 で
     はファイル名のみとなっているため, mw32script-resolve-script 
     の中で勝手にカレントディレクトリを元に間違った 
     expand-file-name をしてしまう.

 さらに start-process がらみでは

   ・call-process では openp の失敗を一旦無視するようにしているが,
     start-process ではその処置を行っていない.


 この不具合への対策として行った修正は以下のとおり.

   ・mw32script-argument-editing-function で, mw32script で与えら
     れたプログラム名が絶対パスでなかったら exec-path にしたがっ
     て絶対パスに展開する.

   ・start-process@xxxxxxxxx でも call-process@xxxxxxxxxx と同様
     に openp の失敗を一旦無視するように修正.

 の2点となぜかわたしのところの環境では CSTR_EQUAL がないと言って
コンパイラが怒ります. さらにディスクの中をあさってもそのようなも
のが書かれているヘッダファイルが見当たりません.

 仕方がないので w32.c で CSTR_EQUAL がなければ無理やり定義するよ
うにしてしまいました. (0 で正しいんですよね?)

-- 
堀口恭太郎.
*** src/w32.c.org	Fri Feb 19 11:03:28 1999
--- src/w32.c	Tue Mar 02 22:51:00 1999
***************
*** 62,67 ****
--- 62,71 ----
  #include <pwd.h>
  
  #include <windows.h>
+  
+ #ifndef CSTR_EQUAL
+ #define CSTR_EQUAL 0    /* Why should I define this symbol? */
+ #endif
  
  #ifdef MEADOW
  #include "mw32reg.h"
*** src/process.c.org	Thu Feb 04 15:43:36 1999
--- src/process.c	Tue Mar 02 22:50:38 1999
***************
*** 1164,1173 ****
--- 1164,1178 ----
        GCPRO4 (name, program, buffer, current_dir);
        openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 1);
        UNGCPRO;
+ 
+ #ifndef MEADOW      /* For argument editing, check it later */
        if (NILP (tem))
  	report_file_error ("Searching for program", Fcons (program, Qnil));
        tem = Fexpand_file_name (tem, Qnil);
        new_argv[0] = XSTRING (tem)->data;
+ #else
+       new_argv[0] = XSTRING (program)->data;
+ #endif
      }
    else
      {
*** lisp/international/mw32script.el.org	Tue Feb 17 01:44:26 1998
--- lisp/international/mw32script.el	Tue Mar 02 22:51:34 1999
***************
*** 142,147 ****
--- 142,160 ----
  	(funcall default-process-argument-editing-function argument)
        (and mw32script-resolve-extention
  	   (setq sargs (mw32script-resolve-extention argv0)))
+ 
+       ;; if argv0 is not absolute, expand it with exec-path
+       (if (not (file-name-absolute-p argv0))
+ 	  (catch 'found
+ 	    (let ((path exec-path))
+ 	      (while path
+ 		(if (file-exists-p (expand-file-name argv0 (car path)))
+ 		    (progn
+ 		      (setq argv0 (expand-file-name argv0 (car path))
+ 			    argument (cons argv0 (cdr argument)))
+ 		      (throw 'found t)))
+ 		(setq path (cdr path))))))
+ 
        (and mw32script-resolve-script
  	   (or (not sargs) (eq sargs 'notfound))
  	   (setq sargs (mw32script-resolve-script argv0)))