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/