[Gauche-devel-jp] Re: gosh の開発で行き詰まった

Back to archive index

shelarcy shela****@capel*****
2004年 7月 10日 (土) 18:04:37 JST


On Fri, 09 Jul 2004 13:26:53 -1000 (HST), Shiro Kawai <shiro****@lava*****> 
wrote:
> ひさびさにWindows立ち上げてWindows Updateをかけてました。
> 再起動してほっといて気づいたらLinuxが立ち上がってた…というのを
> 何度もやってしまう。

ご苦労様です。どちらかで暮らしていると使い分けるのは大変ですよね。

>> もしや、と思ってスタブを外してみたらうまく動きました。
>> 元の patch での GUI アプリケーション生成の際に障害が出ていたということな
>> のかな?
>
> ああ、そうかもしれません。有野さんはコンソールのreplは要らなくて
> 別の用途に使いたいってことだったと思います。
>
> libgauche.dll自体はコンソール無しでも動いてほしいでしょうから、
> 標準出力、エラー出力関係はなんとかする必要がありそうですね。

そのあたりどうやって処理しようかな?

>> これで逃げているのがよくないんですよね。……でも、geteuid、getuid、
>> getegid、getgid あたりって存在しないし……
>
> ここはsys-accessでファイルの存在チェックをやってるとこですね。
> geteuid etc.の項はunixのsuid/sgidプログラムでセキュリティホールを
> 作らないようにするためのものなので、Windowsではチェック部分を
> 飛ばしていいと思います。access(2)が無ければ、同等のWindows APIに
> 置き換えちゃって下さい。

とりあえずこんな感じで。access は mingw にはあるので。

--- C:\develop\Gauche-0.8\src\syslib.stub.1~	Fri Jul 09 08:19:47 2004
+++ syslib.stub	Sat Jul 10 17:01:34 2004
@@ -438,14 +438,15 @@
  (define-enum X_OK)
  (define-enum F_OK)

-(if "!defined(WIN32_NATIVE)"
  (define-cproc sys-access (pathname::<string> amode::<int>)
    "int r;
+#ifndef WIN32_NATIVE
    if (geteuid() != getuid() || getegid() != getgid()) {
      Scm_Error(\"cannot use sys-access in suid/sgid program.\");
    }
+#endif
    SCM_SYSCALL(r, access(Scm_GetStringConst(pathname), amode));
-  SCM_RETURN((r == 0)? SCM_TRUE : SCM_FALSE);"))
+  SCM_RETURN((r == 0)? SCM_TRUE : SCM_FALSE);")

  (define-cproc sys-chdir (pathname::<string>)
    " int r;


--- syslib.c.1~	Tue Jul 06 14:50:04 2004
+++ syslib.c	Sat Jul 10 16:59:17 2004
@@ -1138,8 +1138,6 @@
  static SCM_DEFINE_STRING_CONST(syslib_F_OK__VAR__NAME, "F_OK", 4, 4);
  static ScmObj syslib_F_OK__VAR = SCM_UNBOUND;

-#ifndef WIN32_NATIVE
-
  static ScmObj syslib_sys_access(ScmObj *SCM_FP, int SCM_ARGCNT, void 
*data_)
  {
    ScmObj pathname_scm;
@@ -1155,9 +1153,11 @@
    amode = Scm_GetInteger(amode_scm);
    {
  int r;
+#ifndef WIN32_NATIVE
    if (geteuid() != getuid() || getegid() != getgid()) {
      Scm_Error("cannot use sys-access in suid/sgid program.");
    }
+#endif
    SCM_SYSCALL(r, access(Scm_GetStringConst(pathname), amode));
    SCM_RETURN((r == 0)? SCM_TRUE : SCM_FALSE);
    }
@@ -1166,8 +1166,6 @@
  static SCM_DEFINE_STRING_CONST(syslib_sys_access__NAME, "sys-access", 10, 
10);
  static SCM_DEFINE_SUBR(syslib_sys_access__STUB, 2, 0, 
SCM_OBJ(&syslib_sys_access__NAME), syslib_sys_access, NULL, NULL);

-#endif /* !WIN32_NATIVE */
-
  static ScmObj syslib_sys_chdir(ScmObj *SCM_FP, int SCM_ARGCNT, void 
*data_)
  {
    ScmObj pathname_scm;
@@ -2014,9 +2012,7 @@
  #endif
    SCM_DEFINE(module, "sys-chmod", SCM_OBJ(&syslib_sys_chmod__STUB));
    SCM_DEFINE(module, "sys-chdir", SCM_OBJ(&syslib_sys_chdir__STUB));
-#ifndef WIN32_NATIVE
    SCM_DEFINE(module, "sys-access", SCM_OBJ(&syslib_sys_access__STUB));
-#endif
    syslib_F_OK__VAR = Scm_Intern(&syslib_F_OK__VAR__NAME);
    Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(syslib_F_OK__VAR)), 
SCM_OBJ(Scm_MakeInteger(F_OK)));
    syslib_X_OK__VAR = Scm_Intern(&syslib_X_OK__VAR__NAME);



>> そのあたりはちゃんとしたものが出来上がったら shiro さんにやってもらいた
>> いと思います。autotools 使えないので……。
>
> ふーむ。私がやるとすると、cygwin+mingwでconfigureを走らせる、
> という方向に行きそうな気がします。それで動いてしまうなら敢えて
> boostを触る必要もなさそうな。

すると、そのあたり私が autotools も make も使えないのでリファレンスとして
提供するという方針になるのかな?


>> 見たところ存在するのは
> [...]
>> のようですが、これでどうにかなるのかな?
>> signal 関係良く分からない……。
>
> シグナルをブロックするコールってのがどっかにあると思うんですが…
> (でないと使い物にならない)。

raise で割り込むってわけにはいきませんよね。
さて、どうするべきか?

http://mingw.biggie.jp/reference/signal.html
http://mingw.biggie.jp/reference/raise.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/raise.3.html


>> > - bignum.c冒頭のallocaまわりのパッチがよく分からないんですが、今のだと
>> >   ちょっとまずくないかしら。
>>
>> そのあたりは、元の patch がそうなってたからそうしたという形なので、直す
>> 必要があれば直します。
>
> ここは後でなんとかなるので後回しでいいでしょう。

了解。


-- 
shelarcy <shela****@capel*****>
http://page.freett.com/shelarcy/



Gauche-devel-jp メーリングリストの案内
Back to archive index