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

[MD:1069]script execution on 1.03a3



堀口です.

At 08 Mar 1999 09:51:12 +0900, Miyashita Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxx> wrote in <uaexoercv.fsf@xxxxxxxxxxxxxxxxx>
> >    ・mw32script-argument-editing-function で, mw32script で与えら
> >      れたプログラム名が絶対パスでなかったら exec-path にしたがっ
> >      て絶対パスに展開する.
> 
> 絶対パスに展開するのは、Argument Editing前に行うべきです。
> この時点で余計な仕様の変更をすることは、好ましくないと思います。

 そういう気はしていたのですが(^^;), そうすると

  a) openp(exec_only) で×であった場合はファイルの中を覗いて最初
    の行が #! で始まっていたら実行ファイルとして扱う.

  b) call-process/start-process の中で openp が nil を返したとき
    は再度 opnep(!exec_only)を行って処理を続行する.

  c) openp で exec_only が指定されていても無視して処理を続ける.

 多分, opnep の外から見て一番オリジナル版に近いのは(a)の処理だと
思うのですが...

> >    ・start-process@xxxxxxxxx でも call-process@xxxxxxxxxx と同様
> >      に openp の失敗を一旦無視するように修正.
> > 
> 
> これは、私が忘れました。
> まあ、このような方針で変更します。

 こちらをこの方針で進めるということは openp は nil を返してしまっ
てよいと言うことになるので, ここでとる方針は (b)ですか?

 というわけで callproc と process を修正して, それに伴って現れた 
w32proc.c のバグも修正しました.

> patchを作ってくださると嬉しいです。
> 
> from himi
> # 私は現在ETLでMULE-UCSまわりの仕事をしていますので、後になります。^^;;;

 というわけで私がやってしまいました. こんなかんじでよろしいでしょ
うか.

#うーん, 格好の逃避ネタ;_;
--
堀口恭太郎.
*** process.c.org	Thu Feb 04 15:43:36 1999
--- process.c	Mon Mar 08 11:44:08 1999
***************
*** 1164,1171 ****
--- 1164,1183 ----
        GCPRO4 (name, program, buffer, current_dir);
        openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 1);
        UNGCPRO;
+ 
        if (NILP (tem))
+ #ifndef MEADOW      /* For argument editing, check it later */
  	report_file_error ("Searching for program", Fcons (program, Qnil));
+ #else
+ 	{
+ 	  /* Search for file(maybe a script) again; barf if not found.  */
+ 	  GCPRO4 (name, program, buffer, current_dir);
+ 	  openp (Vexec_path, program, EXEC_SUFFIXES, &tem, 0);
+ 	  UNGCPRO;
+ 	  if(NILP (tem))
+ 	    report_file_error ("Searching for program", Fcons (program, Qnil));
+ 	}
+ #endif
        tem = Fexpand_file_name (tem, Qnil);
        new_argv[0] = XSTRING (tem)->data;
      }
*** callproc.c.org	Wed Feb 24 18:49:48 1999
--- callproc.c	Mon Mar 08 11:42:04 1999
***************
*** 402,408 ****
        close (filefd);
        report_file_error ("Searching for program", Fcons (args[0], Qnil));
  #else
!       path = args[0];
  #endif
      }
    new_argv[0] = XSTRING (path)->data;
--- 402,420 ----
        close (filefd);
        report_file_error ("Searching for program", Fcons (args[0], Qnil));
  #else
!       /* Search for file(maybe a script) again; barf if not found.  */
!       {
! 	struct gcpro gcpro1;
! 	
! 	GCPRO1 (current_dir);
! 	openp (Vexec_path, args[0], EXEC_SUFFIXES, &path, 0);
! 	UNGCPRO;
!       }
!       if(NILP (path))
! 	{
! 	  close (filefd);
! 	  report_file_error ("Searching for program", Fcons (args[0], Qnil));
! 	}
  #endif
      }
    new_argv[0] = XSTRING (path)->data;
*** w32proc.c.org	Sat Feb 27 19:36:26 1999
--- w32proc.c	Mon Mar 08 11:53:12 1999
***************
*** 863,872 ****
        UNGCPRO;
        if (NILP (full))
  	{
! 	  struct stat st;
! 	  if (stat (cmdname, &st) == 0)
! 	    errno = ENOEXEC;
! 	  return -1;
  	}
      }
  
--- 863,873 ----
        UNGCPRO;
        if (NILP (full))
  	{
! 	  /* Script file does not have valid exec suffixes. Search again for
!              script file. */
! 	  openp (Vexec_path, program, EXEC_SUFFIXES, &full, 0);
! 	  if (NILP (full))
! 	    return -1;
  	}
      }