[#26430] compile error of missing/*.c — nobuyoshi nakada <nobuyoshi.nakada@...>
なかだです。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#26443] cvs [diff aborted]: cannot open file .cvsignore for comparing: No such file or directory — Tanaka Akira <akr@...17n.org>
最近、cvs diff に -k option を付けると、エラーになる (ことがある) ので
[#26463] String#each_byte and String#each_char — "NARUSE, Yui" <naruse@...>
成瀬です。
[#26468] $SAFE=1 の open-uri で redirect 時にエラー — Kazuhiko <kazuhiko@...>
かずひこです。
In article <m3zmsylimn.wl%kazuhiko@fdiary.net>,
まつもと ゆきひろです
In article <1120754832.716261.15867.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1120762886.189058.18880.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1120810939.815280.27104.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
前田です。
まつもと ゆきひろです
In article <42CF1918.5000603@ruby-lang.org>,
前田です。
In article <42D7C230.7030509@ruby-lang.org>,
In article <42DDBA82.7030307@ruby-lang.org>,
[#26493] can't handle \c\ — KIMURA Koichi <kbk@...>
木村です。
卜部でございます。
木村です。
[#26508] rmdir(2) on windows doesn't set ENOTDIR — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
まつもと ゆきひろです
山本です。
山本です。
[#26530] removing static variables in parse.y — nobuyoshi nakada <nobuyoshi.nakada@...>
なかだです。
[#26566] cannot compile io.c on windows — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
[#26574] SystemCallError.new("abc") => #<SystemCallError: unknown error - ab> — Tanaka Akira <akr@...17n.org>
次のように、メッセージの最後が切れます。
まつもと ゆきひろです
なかだです。
山本です。
まつもと ゆきひろです
なかだです。
山本です。
なかだです。
山本です。
なかだです。
なかだです。
まつもと ゆきひろです
山本です。
この変更があってからだと思うのですが、リンカが以下のように警告を発するよ
卜部です。自己レス
At Sat, 30 Jul 2005 02:32:38 +0900,
[#26594] test_s_open_lock failed on Solaris — Tanaka Akira <akr@...17n.org>
次のように、Solaris で test_s_open_lock が失敗します。
[#26618] Re: [ruby-cvs] ruby/ext/socket, ruby, ruby: * ext/socket/socket.c (ruby_connect): break immediately if a — Tanaka Akira <akr@...17n.org>
In article <20050728015209.0F30DC6734@lithium.ruby-lang.org>,
In article <1122518643.429222.1408.nullmailer@x31.priv.netlab.jp>,
[#26623] Ruby2.0BlockParameterNotation — SASADA Koichi <ko1@...>
ささだです。
まつもと ゆきひろです
[#26628] show information of '--enable-pthread' — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
わたなべです。
こんにちは、なかむら(う)です。
永井@知能.九工大です.
永井@知能.九工大です.
In message <20050731.094203.74726476.nagai@ai.kyutech.ac.jp>
永井@知能.九工大です.
こんにちは、なかむら(う)です。
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
まつもと ゆきひろです
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
永井@知能.九工大です.
こんにちは、なかむら(う)です。
永井@知能.九工大です.
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
[#26639] SEGV at zsuper with anonymous rest args. — nobu@...
なかだです。
まつもと ゆきひろです
山本です。
なかだです。
[ruby-dev:26508] rmdir(2) on windows doesn't set ENOTDIR
山本です。
http://cia.navi.cx/stats/project/ruby/.message/5954100 の変更ですが、
今 Windows は Dir.rmdir が Errno::ENOTDIR を出さないので動かない
と思います。そこで、下のような変更をするのはどうでしょうか。
RTL の mkdir と rmdir を API の CreateDirectory と RemoveDirectory
に置き換えることになりますが、bcc32 では元々そういう挙動(+errno のセット)
なので、問題ありません。
win32 の方は・・・ソースを見れないので確証はありませんが、単純な関数だし、
たぶん大丈夫じゃないかと思います。ビルドが通ることは確認しました。
Index: win32.c
===================================================================
RCS file: /src/ruby/win32/win32.c,v
retrieving revision 1.103.2.28
diff -u -w -b -p -r1.103.2.28 win32.c
--- win32.c 20 Jun 2005 07:53:22 -0000 1.103.2.28
+++ win32.c 10 Jul 2005 23:06:23 -0000
@@ -157,6 +157,7 @@ static struct {
{ ERROR_NEGATIVE_SEEK, EINVAL },
{ ERROR_SEEK_ON_DEVICE, EACCES },
{ ERROR_DIR_NOT_EMPTY, ENOTEMPTY },
+ { ERROR_DIRECTORY, ENOTDIR },
{ ERROR_NOT_LOCKED, EACCES },
{ ERROR_BAD_PATHNAME, ENOENT },
{ ERROR_MAX_THRDS_REACHED, EAGAIN },
@@ -3394,19 +3395,17 @@ rb_w32_snprintf(char *buf, size_t size,
return ret;
}
-#undef mkdir
-#undef rmdir
int
rb_w32_mkdir(const char *path, int mode)
{
int ret = -1;
RUBY_CRITICAL(do {
- if (mkdir(path) == -1)
+ if (CreateDirectory(path, NULL) == FALSE) {
+ errno = map_errno(GetLastError());
break;
+ }
if (chmod(path, mode) == -1) {
- int save_errno = errno;
- rmdir(path);
- errno = save_errno;
+ RemoveDirectory(path);
break;
}
ret = 0;
@@ -3418,18 +3417,22 @@ int
rb_w32_rmdir(const char *path)
{
DWORD attr;
- int ret;
- RUBY_CRITICAL({
+ int ret = -1;
+ RUBY_CRITICAL(do {
attr = GetFileAttributes(path);
if (attr != (DWORD)-1 && (attr & FILE_ATTRIBUTE_READONLY)) {
attr &= ~FILE_ATTRIBUTE_READONLY;
SetFileAttributes(path, attr);
}
- ret = rmdir(path);
- if (ret < 0 && attr != (DWORD)-1) {
+ if (RemoveDirectory(path) == FALSE) {
+ errno = map_errno(GetLastError());
+ if (attr != (DWORD)-1) {
SetFileAttributes(path, attr);
}
- });
+ break;
+ }
+ ret = 0;
+ } while (0));
return ret;
}
//////////////////////////////////////////////////////////
// パッチ適用前
E:\ruby-cvs\win32_1_8>miniruby -ve "Dir.rmdir('makefile')"
ruby 1.8.3 (2005-07-05) [i386-mswin32]
-e:1:in `rmdir': Invalid argument - makefile (Errno::EINVAL)
from -e:1
E:\ruby-cvs\bcc32_1_8>miniruby -ve "Dir.rmdir('makefile')"
ruby 1.8.3 (2005-07-05) [i386-bccwin32]
-e:1:in `rmdir': Invalid argument (Errno::EINVAL)
- makefile from -e:1
E:\ruby-cvs\bcc32_1_8>miniruby -ve "Dir.mkdir('makefile')"
ruby 1.8.3 (2005-07-05) [i386-bccwin32]
-e:1:in `mkdir': Permission denied (Errno::EACCES)
- makefile from -e:1
//////////////////////////////////////////////////////////
// パッチ適用後
E:\ruby-cvs\win32_1_8>miniruby -e "Dir.rmdir('makefile')"
-e:1:in `rmdir': Not a directory - makefile (Errno::ENOTDIR)
from -e:1
E:\ruby-cvs\bcc32_1_8>miniruby -e "Dir.rmdir('makefile')"
-e:1:in `rmdir': Not a directory (Errno::ENOTDIR)
- makefile from -e:1
E:\ruby-cvs\bcc32_1_8>miniruby -e "Dir.mkdir('makefile')"
-e:1:in `mkdir': File already exists (Errno::EEXIST)
- makefile from -e:1