Custom Search
|
Date: October 31, 2005
From: H.Yamamoto <ocean@xxxxxxxxxxxxxxx>
In-reply-to:
<TYOMLEM041XvpFVjCRG00000130@xxxxxxxxxxxxxxxxxxxxxxxx>
References:
<20051027204920.21D9.USA@xxxxxxxxxxxxxxxxx> <TYOMLEM041XvpFVjCRG00000130@xxxxxxxxxxxxxxxxxxxxxxxx>
山本です。 >1.9専用にしてみました。 試してみたのですが、 ../ruby/win32/win32.h(488) : fatal error C1070: ソ-ス ファイル '../ruby/win32/win32.h' 中で #if に対応する #endif が見つかりません。 NMAKE : fatal error U1077: 'cl' : リターン コード '0x2' Stop. というエラーが出てコンパイルできませんでした。見た感じ、パッチを当てたあとの win32/win32.h の 87 行目の #ifdef RUBY_EXPORT が閉じてないように見えます。(そしてどこで閉じればいいかわからない(汗))
Date: October 31, 2005
From: "U.Nakamura" <usa@xxxxxxxxxxxxxxxxx>
In-reply-to:
<TYOMLEM041XvpFVjCRG00000130@xxxxxxxxxxxxxxxxxxxxxxxx>
References:
<20051027204920.21D9.USA@xxxxxxxxxxxxxxxxx> <TYOMLEM041XvpFVjCRG00000130@xxxxxxxxxxxxxxxxxxxxxxxx>
こんにちは、なかむら(う)です。
In message "[ruby-dev:27610] Re: [win32] replaced symbols"
on Oct.31,2005 19:23:27, <nobuyoshi.nakada@xxxxxx> wrote:
| > 1.8に入れる勇気は(私には)ないし、1.9なら後方互換性はまだ気に
| > しなくてもいいと思うので、rb_w32__* を使わないものにして1.9に
| > 入れてみるというのはどうでしょうか?
|
| 1.9専用にしてみました。ruby.cで先にwindows.hだけインクルードされると、
| win32/win32.hでついでにwinsock2.hまでインクルードされなくなってしまって、
| WSAAPIが未定義のままになってしまうんですが、これってなんででしたっけ。
ruby.cで先にwindows.hをインクルードするのをやめる... というか
ruby.hをインクルードしてるからそれより前をばっさり消せばいい
ような気はしますが、なんで今そうなってるんでしょうね。
それはともかく、パッチは入れてもらったほうが評価が早いと思い
ますんで入れてみて欲しいところです。
| > dumpbinがないバージョンがどれなんだかよくわかんないのですが、
| > VC6のlink.exeにも-dumpオプションはあるようなので、1.9に関して
| > は移行してもいいかもしれません。
|
| どうなんですかねぇ。どういうバージョンのコンパイラ使ってるかもよく分か
| らないし。
ちょっと保留にしときますか。
それでは。
--
U.Nakamura <usa@xxxxxxxxxxxxxxxxx>
Date: October 31, 2005
From: MIYAMUKO Katsuyuki <miyamuko@xxxxxxxxxxxxxxxxx>
In-reply-to:
<d4b14b20e9470a05a13a79b46ac5a435@xxxxxxxxxxx>
References:
<d4b14b20e9470a05a13a79b46ac5a435@xxxxxxxxxxx>
みやむこです。
URABE Shyouhei aka.mput wrote:
> さて、 1.8.4-Preview1 が出たので、予定通りですと各プラットフォームで動作
> 検証する人を募る事になっています。[ruby-dev:27093]を参考にすると
> * HP-UX
HP-UX & HP C Compiler の結果です。
$ uname -srm
HP-UX B.11.11 9000/861
$ bison --version
bison (GNU Bison) 1.875
Written by Robert Corbett and Richard Stallman.
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ what `which cc`
/bin/cc:
LINT B.11.11.02 CXREF B.11.11.02
HP92453-01 B.11.11.02 HP C Compiler
$ Sep 8 2000 23:13:51 $
$ ./configure --prefix=/home/miyamuko/opt/ruby184 --program-suffix=184
--disable-ipv6
$ make
$ make install
$ make test
test succeeded
$ make test-all
:
Finished in 584.551001 seconds.
1) Failure:
test_exit_action(TestSignal) [./test/ruby/test_signal.rb:50]:
[ruby-dev:26128].
Exception raised:
Class: <Timeout::Error>
Message: <"execution expired">
---Backtrace---
/home/miyamuko/opt/ruby184/lib/ruby/1.8/timeout.rb:43:in `test_exit_action'
/home/miyamuko/opt/ruby184/lib/ruby/1.8/timeout.rb:45:in `timeout'
../test/ruby/test_signal.rb:53:in `test_exit_action'
../test/ruby/test_signal.rb:50:in `test_exit_action'
---------------
2) Error:
test_wsdl(XSD::TestEmptyCharset):
ArgumentError: No decoder found for encoding EUC-JP. Please install iconv.
/home/miyamuko/opt/ruby184/lib/ruby/1.8/rexml/encoding.rb:42:in `encoding='
/home/miyamuko/opt/ruby184/lib/ruby/1.8/rexml/source.rb:40:in `encoding='
/home/miyamuko/opt/ruby184/lib/ruby/1.8/rexml/parsers/baseparser.rb:202:in
`pull'
/home/miyamuko/opt/ruby184/lib/ruby/1.8/rexml/parsers/streamparser.rb:16:in
`parse'
/home/miyamuko/opt/ruby184/lib/ruby/1.8/rexml/document.rb:173:in
`parse_stream'
/home/miyamuko/opt/ruby184/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:27:in
`do_parse'
/home/miyamuko/opt/ruby184/lib/ruby/1.8/wsdl/xmlSchema/parser.rb:63:in
`parse'
./test/xsd/test_noencoding.rb:15:in `test_wsdl'
1217 tests, 13352 assertions, 1 failures, 1 errors
--
1) は test/ruby 配下だけ単独でやると再現しませんでした。
タイミングの問題?
Date: October 31, 2005
From: "NARUSE, Yui" <naruse@xxxxxxxxxxx>
In-reply-to:
<873bmim37m.wl%zn@xxxxxxxxxxxxx>
References:
<873bmim37m.wl%zn@xxxxxxxxxxxxx>
成瀬です。 Kazuhiro NISHIYAMA wrote: > http://www.fdiary.net/ml/ruby/msg/1039 > をみて気付いたのですが、行の途中に「^[$B」があって > 行末までに「^[(B」がない場合に、次の行でも「^[$B」の > 状態のままになっていて文字化けするようです。 デフォルトではオフになっていますが、-B2を指定しますと、 「改行のあとに強制的にASCIIの戻す」という機能が有効になり、 仰っている動作になります ‥‥‥ って、「改行の後に強制的にASCIIに戻す」ですね‥‥‥。 -- NARUSE, Yui <naruse@xxxxxxxxxxx> DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA
Date: October 31, 2005
From: nobuyoshi nakada <nobuyoshi.nakada@xxxxxx>
In-reply-to:
<20051027204920.21D9.USA@xxxxxxxxxxxxxxxxx>
References:
<TYOMLEM04FRaqbC8wSA0000011b@xxxxxxxxxxxxxxxxxxxxxxxx> <20051027204920.21D9.USA@xxxxxxxxxxxxxxxxx>
なかだです。
At Thu, 27 Oct 2005 20:55:05 +0900,
U.Nakamura wrote in [ruby-dev:27540]:
> | 以前からwin32/win32.hでの関数の置き換えが問題になることがありま
> | したが、外部に対してはDLL内のaliasで置き換えるようにしてみまし
> | た。
>
> 1.8に入れる勇気は(私には)ないし、1.9なら後方互換性はまだ気に
> しなくてもいいと思うので、rb_w32__* を使わないものにして1.9に
> 入れてみるというのはどうでしょうか?
1.9専用にしてみました。ruby.cで先にwindows.hだけインクルードされると、
win32/win32.hでついでにwinsock2.hまでインクルードされなくなってしまって、
WSAAPIが未定義のままになってしまうんですが、これってなんででしたっけ。
> | また、Daniel Bergerが[ruby-talk:162672]でいっているように、最新
> | のMicrosoftのfree compilerにはdumpbinが入っていないとすると、
> | [ruby-talk:162690]のような修正が必要になります。
>
> dumpbinがないバージョンがどれなんだかよくわかんないのですが、
> VC6のlink.exeにも-dumpオプションはあるようなので、1.9に関して
> は移行してもいいかもしれません。
どうなんですかねぇ。どういうバージョンのコンパイラ使ってるかもよく分か
らないし。
Index: configure.in
===================================================================
RCS file: /cvs/ruby/src/ruby/configure.in,v
retrieving revision 1.287
diff -U2 -p -r1.287 configure.in
--- configure.in 25 Oct 2005 16:59:14 -0000 1.287
+++ configure.in 28 Oct 2005 10:48:15 -0000
@@ -980,5 +980,5 @@ if test "$with_dln_a_out" != yes; then
cygwin*|mingw*) : ${LDSHARED="${CC} -shared -s"}
XLDFLAGS="$XLDFLAGS -Wl,--stack,0x02000000"
- DLDFLAGS="${DLDFLAGS}
-Wl,--enable-auto-import,--export-all"
+ DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-import"
: ${LIBPATHENV=""}
rb_cv_dlopen=yes ;;
@@ -1367,9 +1367,16 @@ case "$target_os" in
;;
cygwin*|mingw*)
+ if test x"$enable_shared" = xyes; then
+ LIBRUBY='lib$(RUBY_SO_NAME).dll.a'
+ LIBRUBY_DLDFLAGS='$(RUBYDEF)'
+ else
+ LIBRUBY_SO=dummy
+ LIBRUBY='lib$(RUBY_SO_NAME).a'
+ LIBRUBYARG='-l$(RUBY_SO_NAME)'
+ fi
case "$target_os" in
cygwin*)
if test x"$enable_shared" = xyes; then
LIBRUBY_SO='cyg$(RUBY_SO_NAME)'${MAJOR}${MINOR}.dll
- LIBRUBY='lib$(RUBY_SO_NAME).dll.a'
fi
AC_LIBOBJ([strftime])
@@ -1379,5 +1386,4 @@ case "$target_os" in
if test x"$enable_shared" = xyes; then
LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
- LIBRUBY='lib$(LIBRUBY_SO).a'
fi
AC_LIBOBJ([win32])
@@ -1391,9 +1397,4 @@ case "$target_os" in
FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in
SOLIBS='$(LIBS)'
- if test x"$enable_shared" = xno; then
- LIBRUBY_SO=dummy
- LIBRUBY='lib$(RUBY_SO_NAME).a'
- LIBRUBYARG='-l$(RUBY_SO_NAME)'
- fi
MINIOBJS=dmydln.o
;;
Index: ruby.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ruby.c,v
retrieving revision 1.110
diff -U2 -p -r1.110 ruby.c
--- ruby.c 20 Oct 2005 02:22:48 -0000 1.110
+++ ruby.c 31 Oct 2005 08:42:34 -0000
@@ -13,5 +13,5 @@
**********************************************************************/
-#if defined _WIN32 || defined __CYGWIN__
+#ifdef __CYGWIN__
#include <windows.h>
#endif
Index: bcc32/Makefile.sub
===================================================================
RCS file: /cvs/ruby/src/ruby/bcc32/Makefile.sub,v
retrieving revision 1.84
diff -U2 -p -r1.84 Makefile.sub
--- bcc32/Makefile.sub 25 Oct 2005 16:59:17 -0000 1.84
+++ bcc32/Makefile.sub 27 Oct 2005 03:52:56 -0000
@@ -432,5 +432,5 @@ $(LIBRUBY): $(LIBRUBY_SO)
$(RUBYDEF): $(LIBRUBY_A) $(PREP)
- $(MINIRUBY) $(srcdir)bcc32/mkexports.rb -output=$@
-base=$(RUBY_SO_NAME) $(LIBRUBY_A)
+ $(MINIRUBY) $(srcdir)win32/mkexports.rb -output=$@
-base=$(RUBY_SO_NAME) $(LIBRUBY_A)
$(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc:
rbconfig.rb
Index: cygwin/GNUmakefile.in
===================================================================
RCS file: /cvs/ruby/src/ruby/cygwin/GNUmakefile.in,v
retrieving revision 1.34
diff -U2 -p -r1.34 GNUmakefile.in
--- cygwin/GNUmakefile.in 6 Sep 2005 23:22:37 -0000 1.34
+++ cygwin/GNUmakefile.in 31 Oct 2005 08:06:14 -0000
@@ -6,7 +6,9 @@ DLLWRAP = @DLLWRAP@ --target=@target_os@
ifeq (@target_os@,cygwin)
DLL_BASE_NAME := $(subst .dll,,$(LIBRUBY_SO))
+ WIN32H =
else
DLL_BASE_NAME := $(RUBY_SO_NAME)
DLLWRAP += -mno-cygwin
+ WIN32H = win32/win32.h
VPATH += $(srcdir)/win32
endif
@@ -33,4 +35,11 @@ ruby: $(PROGRAM)
rubyw: $(WPROGRAM)
+ifeq ($(WIN32H),)
+ DLDFLAGS += -Wl,--export-all
+else
+ DLDFLAGS += -Wl,--enable-stdcall-fixup
+ DLDOBJS += ruby.def
+endif
+
$(LIBRUBY): $(RUBY_EXP) $(LIBRUBY_SO)
$(RUBY_EXP) $(LIBRUBY_SO): $(DLL_BASE_NAME).res.@OBJEXT@
@@ -60,15 +69,11 @@ $(RUBY_EXP): $(LIBRUBY_A)
GNUmakefile: $(srcdir)/cygwin/GNUmakefile.in
-ifeq (@target_os@,mingw32)
-$(OBJS) $(MAINOBJ): win32/win32.h
-endif
+$(OBJS) $(MAINOBJ): $(WIN32H)
-ifeq (@target_os@,cygwin)
-cygwin-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR).dll: $(LIBRUBY_A)
- @NM@ --extern --defined $(LIBRUBY_A) | \
- $(MINIRUBY) -ne 'BEGIN{puts "EXPORTS"}; puts
$$1+"=cyg$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)."+$$1 if / [CDT] _(.*)$$/'
>rubydll.def
- @DLLWRAP@ -s --def=rubydll.def -o $@
- @rm -f rubydll.def
-endif
+$(LIBRUBY_SO): $(if $(WIN32H),ruby.def)
+
+ruby.def: $(LIBRUBY_A) $(PREP) $(RBCONFIG)
+ $(MINIRUBY) $(srcdir)/win32/mkexports.rb -output=$@ \
+ $(if $(WIN32H),-win32h=$(WIN32H)) $(LIBRUBY_A)
clean-local::
Index: win32/Makefile.sub
===================================================================
RCS file: /cvs/ruby/src/ruby/win32/Makefile.sub,v
retrieving revision 1.105
diff -U2 -p -r1.105 Makefile.sub
--- win32/Makefile.sub 25 Oct 2005 16:59:17 -0000 1.105
+++ win32/Makefile.sub 31 Oct 2005 08:20:32 -0000
@@ -461,5 +461,5 @@ $(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $
$(RUBYDEF): $(LIBRUBY_A) $(PREP)
- $(MINIRUBY) $(srcdir)/win32/mkexports.rb -output=$@ $(LIBRUBY_A)
+ $(MINIRUBY) $(srcdir)/win32/mkexports.rb -output=$@
-win32h=$(srcdir)/win32/win32.h $(LIBRUBY_A)
{$(srcdir)/win32}.def.lib:
Index: win32/win32.c
===================================================================
RCS file: /cvs/ruby/src/ruby/win32/win32.c,v
retrieving revision 1.177
diff -U2 -p -r1.177 win32.c
--- win32/win32.c 14 Oct 2005 13:06:44 -0000 1.177
+++ win32/win32.c 28 Oct 2005 08:26:48 -0000
@@ -2010,9 +2010,9 @@ is_readable_console(SOCKET sock) /* call
static void catch_interrupt(void);
-static long
+static int
do_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
struct timeval *timeout)
{
- long r = 0;
+ int r = 0;
if (nfds == 0) {
@@ -2057,9 +2057,9 @@ subst(struct timeval *rest, const struct
}
-long
+int WSAAPI
rb_w32_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
- struct timeval *timeout)
+ struct timeval *timeout)
{
- long r;
+ int r;
fd_set pipe_rd;
fd_set cons_rd;
@@ -2195,5 +2195,5 @@ StartSockets(void)
#undef accept
-int
+int WSAAPI
rb_w32_accept(int s, struct sockaddr *addr, int *addrlen)
{
@@ -2218,5 +2218,5 @@ rb_w32_accept(int s, struct sockaddr *ad
#undef bind
-int
+int WSAAPI
rb_w32_bind(int s, const struct sockaddr *addr, int addrlen)
{
@@ -2236,5 +2236,5 @@ rb_w32_bind(int s, const struct sockaddr
#undef connect
-int
+int WSAAPI
rb_w32_connect(int s, const struct sockaddr *addr, int addrlen)
{
@@ -2262,5 +2262,5 @@ rb_w32_connect(int s, const struct socka
#undef getpeername
-int
+int WSAAPI
rb_w32_getpeername(int s, struct sockaddr *addr, int *addrlen)
{
@@ -2279,5 +2279,5 @@ rb_w32_getpeername(int s, struct sockadd
#undef getsockname
-int
+int WSAAPI
rb_w32_getsockname(int s, struct sockaddr *addr, int *addrlen)
{
@@ -2294,5 +2294,5 @@ rb_w32_getsockname(int s, struct sockadd
}
-int
+int WSAAPI
rb_w32_getsockopt(int s, int level, int optname, char *optval, int *optlen)
{
@@ -2311,5 +2311,5 @@ rb_w32_getsockopt(int s, int level, int
#undef ioctlsocket
-int
+int WSAAPI
rb_w32_ioctlsocket(int s, long cmd, u_long *argp)
{
@@ -2328,5 +2328,5 @@ rb_w32_ioctlsocket(int s, long cmd, u_lo
#undef listen
-int
+int WSAAPI
rb_w32_listen(int s, int backlog)
{
@@ -2345,5 +2345,5 @@ rb_w32_listen(int s, int backlog)
#undef recv
-int
+int WSAAPI
rb_w32_recv(int s, char *buf, int len, int flags)
{
@@ -2362,7 +2362,7 @@ rb_w32_recv(int s, char *buf, int len, i
#undef recvfrom
-int
-rb_w32_recvfrom(int s, char *buf, int len, int flags,
- struct sockaddr *from, int *fromlen)
+int WSAAPI
+rb_w32_recvfrom(int s, char *buf, int len, int flags,
+ struct sockaddr *from, int *fromlen)
{
int r;
@@ -2380,5 +2380,5 @@ rb_w32_recvfrom(int s, char *buf, int le
#undef send
-int
+int WSAAPI
rb_w32_send(int s, const char *buf, int len, int flags)
{
@@ -2397,5 +2397,5 @@ rb_w32_send(int s, const char *buf, int
#undef sendto
-int
+int WSAAPI
rb_w32_sendto(int s, const char *buf, int len, int flags,
const struct sockaddr *to, int tolen)
@@ -2415,5 +2415,5 @@ rb_w32_sendto(int s, const char *buf, in
#undef setsockopt
-int
+int WSAAPI
rb_w32_setsockopt(int s, int level, int optname, const char *optval, int
optlen)
{
@@ -2432,5 +2432,5 @@ rb_w32_setsockopt(int s, int level, int
#undef shutdown
-int
+int WSAAPI
rb_w32_shutdown(int s, int how)
{
@@ -2489,5 +2489,5 @@ open_ifs_socket(int af, int type, int pr
#undef socket
-int
+int WSAAPI
rb_w32_socket(int af, int type, int protocol)
{
@@ -2513,6 +2513,6 @@ rb_w32_socket(int af, int type, int prot
#undef gethostbyaddr
-struct hostent *
-rb_w32_gethostbyaddr (const char *addr, int len, int type)
+struct hostent * WSAAPI
+rb_w32_gethostbyaddr(const char *addr, int len, int type)
{
struct hostent *r;
@@ -2530,6 +2530,6 @@ rb_w32_gethostbyaddr (const char *addr,
#undef gethostbyname
-struct hostent *
-rb_w32_gethostbyname (const char *name)
+struct hostent * WSAAPI
+rb_w32_gethostbyname(const char *name)
{
struct hostent *r;
@@ -2547,6 +2547,6 @@ rb_w32_gethostbyname (const char *name)
#undef gethostname
-int
-rb_w32_gethostname (char *name, int len)
+int WSAAPI
+rb_w32_gethostname(char *name, int len)
{
int r;
@@ -2564,6 +2564,6 @@ rb_w32_gethostname (char *name, int len)
#undef getprotobyname
-struct protoent *
-rb_w32_getprotobyname (const char *name)
+struct protoent * WSAAPI
+rb_w32_getprotobyname(const char *name)
{
struct protoent *r;
@@ -2581,6 +2581,6 @@ rb_w32_getprotobyname (const char *name)
#undef getprotobynumber
-struct protoent *
-rb_w32_getprotobynumber (int num)
+struct protoent * WSAAPI
+rb_w32_getprotobynumber(int num)
{
struct protoent *r;
@@ -2598,6 +2598,6 @@ rb_w32_getprotobynumber (int num)
#undef getservbyname
-struct servent *
-rb_w32_getservbyname (const char *name, const char *proto)
+struct servent * WSAAPI
+rb_w32_getservbyname(const char *name, const char *proto)
{
struct servent *r;
@@ -2615,6 +2615,6 @@ rb_w32_getservbyname (const char *name,
#undef getservbyport
-struct servent *
-rb_w32_getservbyport (int port, const char *proto)
+struct servent * WSAAPI
+rb_w32_getservbyport(int port, const char *proto)
{
struct servent *r;
@@ -3446,4 +3446,10 @@ int
rb_w32_sleep(unsigned long msec)
{
+ return rb_w32_msleep(msec);
+}
+
+int WINAPI
+rb_w32_msleep(unsigned long msec)
+{
DWORD ret;
RUBY_CRITICAL(ret = wait_events(NULL, msec));
Index: win32/win32.h
===================================================================
RCS file: /cvs/ruby/src/ruby/win32/win32.h,v
retrieving revision 1.73
diff -U2 -p -r1.73 win32.h
--- win32/win32.h 14 Sep 2005 14:30:37 -0000 1.73
+++ win32/win32.h 28 Oct 2005 08:34:18 -0000
@@ -82,21 +82,20 @@ extern "C++" {
#undef utime
#define getc(_stream) rb_w32_getc(_stream)
+#define getchar() rb_w32_getc(stdin)
#define putc(_c, _stream) rb_w32_putc(_c, _stream)
+#define putchar(_c) rb_w32_putc(_c, stdout)
+#ifdef RUBY_EXPORT
#define fgetc(_stream) getc(_stream)
#define fputc(_c, _stream) putc(_c, _stream)
-#define getchar() rb_w32_getc(stdin)
-#define putchar(_c) rb_w32_putc(_c, stdout)
#define fgetchar() getchar()
#define fputchar(_c) putchar(_c)
#define utime(_p, _t) rb_w32_utime(_p, _t)
-#define strcasecmp(s1, s2) stricmp(s1, s2)
-#define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
-
#define pipe(p) _pipe(p, 2048L, O_BINARY)
#define close(h) rb_w32_close(h)
#define fclose(f) rb_w32_fclose(f)
#define getpid() rb_w32_getpid()
-#define sleep(x) rb_w32_sleep((x)*1000)
+#define sleep(x) rb_w32_msleep((x)*1000)
+#define Sleep(msec) (void)rb_w32_msleep(msec)
#ifdef __BORLANDC__
#define creat(p, m) _creat(p, m)
@@ -105,5 +104,4 @@ extern "C++" {
#define mktemp(t) _mktemp(t)
#define tell(h) _tell(h)
-#define unlink(p) _unlink(p)
#define write(h, b, l) _write(h, b, l)
#define _open _sopen
@@ -119,5 +117,4 @@ extern "C++" {
#endif
-#define fsync(h) _commit(h)
#undef stat
#define stat(path,st) rb_w32_stat(path,st)
@@ -136,4 +133,8 @@ extern "C++" {
#define unlink(p) rb_w32_unlink(p)
+#define strcasecmp(s1, s2) stricmp(s1, s2)
+#define strncasecmp(s1, s2, n) strnicmp(s1, s2, n)
+#define fsync(h) _commit(h)
+
#ifdef __MINGW32__
struct timezone {
@@ -147,31 +148,31 @@ extern rb_pid_t rb_w32_pipe_exec(const
extern int flock(int fd, int oper);
extern int rb_w32_is_socket(int);
-extern int rb_w32_accept(int, struct sockaddr *, int *);
-extern int rb_w32_bind(int, const struct sockaddr *, int);
-extern int rb_w32_connect(int, const struct sockaddr *, int);
+extern int WSAAPI rb_w32_accept(int, struct sockaddr *, int *);
+extern int WSAAPI rb_w32_bind(int, const struct sockaddr *, int);
+extern int WSAAPI rb_w32_connect(int, const struct sockaddr *, int);
extern void rb_w32_fdset(int, fd_set*);
extern void rb_w32_fdclr(int, fd_set*);
extern int rb_w32_fdisset(int, fd_set*);
-extern long rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct timeval
*);
-extern int rb_w32_getpeername(int, struct sockaddr *, int *);
-extern int rb_w32_getsockname(int, struct sockaddr *, int *);
-extern int rb_w32_getsockopt(int, int, int, char *, int *);
-extern int rb_w32_ioctlsocket(int, long, u_long *);
-extern int rb_w32_listen(int, int);
-extern int rb_w32_recv(int, char *, int, int);
-extern int rb_w32_recvfrom(int, char *, int, int, struct sockaddr *, int *);
-extern int rb_w32_send(int, const char *, int, int);
-extern int rb_w32_sendto(int, const char *, int, int, const struct sockaddr
*, int);
-extern int rb_w32_setsockopt(int, int, int, const char *, int);
-extern int rb_w32_shutdown(int, int);
-extern int rb_w32_socket(int, int, int);
+extern int WSAAPI rb_w32_select(int, fd_set *, fd_set *, fd_set *, struct
timeval *);
+extern int WSAAPI rb_w32_getpeername(int, struct sockaddr *, int *);
+extern int WSAAPI rb_w32_getsockname(int, struct sockaddr *, int *);
+extern int WSAAPI rb_w32_getsockopt(int, int, int, char *, int *);
+extern int WSAAPI rb_w32_ioctlsocket(int, long, u_long *);
+extern int WSAAPI rb_w32_listen(int, int);
+extern int WSAAPI rb_w32_recv(int, char *, int, int);
+extern int WSAAPI rb_w32_recvfrom(int, char *, int, int, struct sockaddr *,
int *);
+extern int WSAAPI rb_w32_send(int, const char *, int, int);
+extern int WSAAPI rb_w32_sendto(int, const char *, int, int, const struct
sockaddr *, int);
+extern int WSAAPI rb_w32_setsockopt(int, int, int, const char *, int);
+extern int WSAAPI rb_w32_shutdown(int, int);
+extern int WSAAPI rb_w32_socket(int, int, int);
extern SOCKET rb_w32_get_osfhandle(int);
-extern struct hostent * rb_w32_gethostbyaddr(const char *, int, int);
-extern struct hostent * rb_w32_gethostbyname(const char *);
-extern int rb_w32_gethostname(char *, int);
-extern struct protoent * rb_w32_getprotobyname(const char *);
-extern struct protoent * rb_w32_getprotobynumber(int);
-extern struct servent * rb_w32_getservbyname(const char *, const char *);
-extern struct servent * rb_w32_getservbyport(int, const char *);
+extern struct hostent *WSAAPI rb_w32_gethostbyaddr(const char *, int, int);
+extern struct hostent *WSAAPI rb_w32_gethostbyname(const char *);
+extern int WSAAPI rb_w32_gethostname(char *, int);
+extern struct protoent *WSAAPI rb_w32_getprotobyname(const char *);
+extern struct protoent *WSAAPI rb_w32_getprotobynumber(int);
+extern struct servent *WSAAPI rb_w32_getservbyname(const char *, const char
*);
+extern struct servent *WSAAPI rb_w32_getservbyport(int, const char *);
extern int rb_w32_socketpair(int, int, int, int *);
extern char * rb_w32_getenv(const char *);
@@ -289,5 +290,7 @@ extern int setgid (rb_gid_t);
extern char *rb_w32_strerror(int);
+#ifdef RUBY_EXPORT
#define strerror(e) rb_w32_strerror(e)
+#endif
#define PIPE_BUF 1024
@@ -352,19 +355,4 @@ extern char *rb_w32_strerror(int);
#define O_NONBLOCK 1
-#ifdef accept
-#undef accept
-#endif
-#define accept(s, a, l) rb_w32_accept(s, a, l)
-
-#ifdef bind
-#undef bind
-#endif
-#define bind(s, a, l) rb_w32_bind(s, a, l)
-
-#ifdef connect
-#undef connect
-#endif
-#define connect(s, a, l) rb_w32_connect(s, a, l)
-
#undef FD_SET
#define FD_SET(f, s) rb_w32_fdset(f, s)
@@ -376,127 +364,93 @@ extern char *rb_w32_strerror(int);
#define FD_ISSET(f, s) rb_w32_fdisset(f, s)
+#ifdef RUBY_EXPORT
+#undef accept
+#define accept(s, a, l) rb_w32_accept(s, a, l)
+
+#undef bind
+#define bind(s, a, l) rb_w32_bind(s, a, l)
+
+#undef connect
+#define connect(s, a, l) rb_w32_connect(s, a, l)
+
#undef select
#define select(n, r, w, e, t) rb_w32_select(n, r, w, e, t)
-#ifdef getpeername
#undef getpeername
-#endif
#define getpeername(s, a, l) rb_w32_getpeername(s, a, l)
-#ifdef getsockname
#undef getsockname
-#endif
#define getsockname(s, a, l) rb_w32_getsockname(s, a, l)
-#ifdef getsockopt
#undef getsockopt
-#endif
#define getsockopt(s, v, n, o, l) rb_w32_getsockopt(s, v, n, o, l)
-#ifdef ioctlsocket
#undef ioctlsocket
-#endif
#define ioctlsocket(s, c, a) rb_w32_ioctlsocket(s, c, a)
-#ifdef listen
#undef listen
-#endif
#define listen(s, b) rb_w32_listen(s, b)
-#ifdef recv
#undef recv
-#endif
#define recv(s, b, l, f) rb_w32_recv(s, b, l, f)
-#ifdef recvfrom
#undef recvfrom
-#endif
#define recvfrom(s, b, l, f, fr, frl) rb_w32_recvfrom(s, b, l, f, fr, frl)
-#ifdef send
#undef send
-#endif
#define send(s, b, l, f) rb_w32_send(s, b, l, f)
-#ifdef sendto
#undef sendto
-#endif
#define sendto(s, b, l, f, t, tl) rb_w32_sendto(s, b, l, f, t, tl)
-#ifdef setsockopt
#undef setsockopt
-#endif
#define setsockopt(s, v, n, o, l) rb_w32_setsockopt(s, v, n, o, l)
-#ifdef shutdown
#undef shutdown
-#endif
#define shutdown(s, h) rb_w32_shutdown(s, h)
-#ifdef socket
#undef socket
-#endif
#define socket(s, t, p) rb_w32_socket(s, t, p)
-#ifdef gethostbyaddr
#undef gethostbyaddr
-#endif
#define gethostbyaddr(a, l, t) rb_w32_gethostbyaddr(a, l, t)
-#ifdef gethostbyname
#undef gethostbyname
-#endif
#define gethostbyname(n) rb_w32_gethostbyname(n)
-#ifdef gethostname
#undef gethostname
-#endif
#define gethostname(n, l) rb_w32_gethostname(n, l)
-#ifdef getprotobyname
#undef getprotobyname
-#endif
#define getprotobyname(n) rb_w32_getprotobyname(n)
-#ifdef getprotobynumber
#undef getprotobynumber
-#endif
#define getprotobynumber(n) rb_w32_getprotobynumber(n)
-#ifdef getservbyname
#undef getservbyname
-#endif
#define getservbyname(n, p) rb_w32_getservbyname(n, p)
-#ifdef getservbyport
#undef getservbyport
-#endif
#define getservbyport(p, pr) rb_w32_getservbyport(p, pr)
-#ifdef socketpair
#undef socketpair
-#endif
#define socketpair(a, t, p, s) rb_w32_socketpair(a, t, p, s)
-#ifdef get_osfhandle
#undef get_osfhandle
-#endif
#define get_osfhandle(h) rb_w32_get_osfhandle(h)
-#ifdef getcwd
#undef getcwd
-#endif
#define getcwd(b, s) rb_w32_getcwd(b, s)
-#ifdef getenv
#undef getenv
-#endif
#define getenv(n) rb_w32_getenv(n)
-#ifdef rename
#undef rename
-#endif
#define rename(o, n) rb_w32_rename(o, n)
+#undef times
+#define times(t) rb_w32_times(t)
+#endif
+
struct tms {
long tms_utime;
@@ -506,8 +460,4 @@ struct tms {
};
-#ifdef times
-#undef times
-#endif
-#define times(t) rb_w32_times(t)
int rb_w32_times(struct tms *);
@@ -523,5 +473,5 @@ int rb_w32_close(int);
int rb_w32_fclose(FILE*);
int rb_w32_utime(const char *, const struct utimbuf *);
-#define Sleep(msec) (void)rb_w32_sleep(msec)
+int WINAPI rb_w32_msleep(unsigned long msec);
/*
Index: wince/Makefile.sub
===================================================================
RCS file: /cvs/ruby/src/ruby/wince/Makefile.sub,v
retrieving revision 1.45
diff -U2 -p -r1.45 Makefile.sub
--- wince/Makefile.sub 25 Oct 2005 16:59:18 -0000 1.45
+++ wince/Makefile.sub 26 Oct 2005 00:40:31 -0000
@@ -443,5 +443,5 @@ $(LIBRUBY): $(RUBYDEF)
$(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res
@echo. $(DLDOBJS)
- $(LDSHARED) $(MAINOBJ) $(DLDOBJS) $(LIBRUBY_A) \
+ $(LDSHARED) $(INITOBJS) $(DLDOBJS) $(LIBRUBY_A) \
$(RUBY_SO_NAME).res $(LIBS) -Fe$@ $(LDFLAGS) \
$(LIBRUBY_DLDFLAGS)
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
Date: October 31, 2005
From: keiju@xxxxxxxxxxxxx (石塚圭樹)
In-reply-to:
Yukihiro Matsumoto message of Mon, 31 Oct 2005 18:38:02 JST <1130751480.590368.13501.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1130751480.590368.13501.nullmailer@xxxxxxxxxxxxxxxxxx>
けいじゅ@いしつかです. In [ruby-dev:27606] the message: "[ruby-dev:27606] Re: Matrix class is broken without mathn", on Oct/31 18:38(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >ふーむ。ということは、invert_fromはquoを使うので良いというこ >とですね。 まだ, よく検討してないですが, よいはずです. >determinant については > > * 整数除算のまま > * rational導入quoで計算(副作用大きい) > * 違うアルゴリズムを使う > >のいずれがお好みですか? > * rational導入quoで計算(副作用大きい) で, 速度重視&結果がFloatでいい向き用にdat_f を用意する. あたりが, 無難 かと. > * 違うアルゴリズムを使う で今のアルゴリズムとあまり変わらないのがあるなら, 別なんですが, すぐ思 いつくのはかなり遅いのですし... __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@xxxxxxxxxxxxx <<---
Date: October 31, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<20051027204920.21D9.USA@xxxxxxxxxxxxxxxxx>
References:
<20051027204920.21D9.USA@xxxxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27540] Re: [win32] replaced symbols"
on Thu, 27 Oct 2005 20:55:05 +0900, "U.Nakamura" <usa@xxxxxxxxxxxxxxxxx>
writes:
|| 以前からwin32/win32.hでの関数の置き換えが問題になることがありま
|| したが、外部に対してはDLL内のaliasで置き換えるようにしてみまし
|| た。
|
|1.8に入れる勇気は(私には)ないし、1.9なら後方互換性はまだ気に
|しなくてもいいと思うので、rb_w32__* を使わないものにして1.9に
|入れてみるというのはどうでしょうか?
コミットできますか?
Date: October 31, 2005
From: Kazuhiro NISHIYAMA <zn@xxxxxxxxxxxxx>
西山和広です。 http://www.fdiary.net/ml/ruby/msg/1039 をみて気付いたのですが、行の途中に「^[$B」があって 行末までに「^[(B」がない場合に、次の行でも「^[$B」の 状態のままになっていて文字化けするようです。 RFC1468では行末では戻すことが必須のようですが、 http://yoshi01.kokugo.edu.yamaguchi-u.ac.jp/jallc/kaihou/kaihou17/toyosima.txt | この RFC1468 は、各行が必ず ASCII で始まり ASCII で終る様に規定して、ファ | イルの途中で読み始めても(つまりメールの一部が事故で欠けても)正しくコード系が | 認識出来る様してあるなど、多少冗長になるのはやむを得ない。 という意図を考慮すると、「^[(B」がなくても改行では ASCIIに戻る方が良いのではないでしょうか? -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)
Date: October 31, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<E1EWVvH-00060n-00@emperor
>
References:
<E1EWVvH-00060n-00@emperor
>
まつもと ゆきひろです
In message "Re: [ruby-dev:27605] Re: Matrix class is broken without mathn"
on Mon, 31 Oct 2005 18:28:35 +0900, keiju@xxxxxxxxxxxxx (石塚圭樹) writes:
|Matrix#detに quoはあまりふさわしくないかも, というのは,
|
|行列の要素がすべて整数ならば, detは整数になるのですが, この場合はなら
|ない, さらに, 割り算と引き算を多用するこのdetのアルゴリズムでは誤差が
|大きくなって, 整数値を返すようなdetが実際には(float的に)整数にならなく
|なる可能性がある.
|
|というかんじでしょうか?
|
|detの時は, rational.rb を require して, かつ, quoで計算するなら上記の
|問題は解決ですが, float派にはうれしくないかも.
ふーむ。ということは、invert_fromはquoを使うので良いというこ
とですね。determinant については
* 整数除算のまま
* rational導入quoで計算(副作用大きい)
* 違うアルゴリズムを使う
のいずれがお好みですか?
Date: October 31, 2005
From: keiju@xxxxxxxxxxxxx (石塚圭樹)
In-reply-to:
Yukihiro Matsumoto message of Mon, 31 Oct 2005 12:56:15 JST <1130730974.165379.9537.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1130730974.165379.9537.nullmailer@xxxxxxxxxxxxxxxxxx>
けいじゅ@いしつかです. In [ruby-dev:27601] the message: "[ruby-dev:27601] Re: Matrix class is broken without mathn", on Oct/31 12:56(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです お久しぶりです. # っていうか, この間久しぶりにあったのはいいけど, ほとんど話ができなかっ # た >|matrix.rb は Numeric#/ ではなく Numeric#quo を使えば良いのでは >|ないでしょうか。 >|Numeric#quo は正にこういう時のためのメソッドだと思います。 たしかに, なんですが... >確かに。こんなパッチを作ってみましたが、正しく動作しているで >しょうか。元メールの問題は解決しているようですが。私はどうに >も算数が苦手で。 Matrix#detに quoはあまりふさわしくないかも, というのは, 行列の要素がすべて整数ならば, detは整数になるのですが, この場合はなら ない, さらに, 割り算と引き算を多用するこのdetのアルゴリズムでは誤差が 大きくなって, 整数値を返すようなdetが実際には(float的に)整数にならなく なる可能性がある. というかんじでしょうか? detの時は, rational.rb を require して, かつ, quoで計算するなら上記の 問題は解決ですが, float派にはうれしくないかも. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@xxxxxxxxxxxxx <<---
Date: October 31, 2005
From: "URABE Shyouhei aka. mput" <root@xxxxxxxxxxx>
In-reply-to:
<436568A5.6090705@xxxxxxxxxxxx>
References:
<1130695086.457336.32358.nullmailer@xxxxxxxxxxxxxxxxxx> <436568A5.6090705@xxxxxxxxxxxx>
卜部です。 NAKAMURA, Hiroshi wrote: > なんて便利なスクリプト。週一でruby-devにPOSTするようにしてもらう、っての > は可能でしょうか。あ、Subjectもついてるといいなー。 http://mput.dip.jp/rubybugs/#open183 を作ってみました。 # ML にポストするのは手動だとめんどいし自動だとバ # グって暴走したときに皆さんに迷惑なのでちょっと...
Date: October 31, 2005
From: 桑村慎哉 <kuwa@xxxxxxxxxxxxxxxx>
In-reply-to:
<d4b14b20e9470a05a13a79b46ac5a435@xxxxxxxxxxx>
References:
<d4b14b20e9470a05a13a79b46ac5a435@xxxxxxxxxxx>
桑村です。
Solaris 8でSunのコンパイラを使うと、ext/digestで次のようにldでエラーに
なります。
ld -G -L'/usr/local/ssl/lib' -Wl,-R'/usr/local/ssl/lib' -L'../../..'
-o ../../../.ext/sparc-solaris2.8/digest/md5.so md5init.o md5ossl.o
-lruby -lcrypto -ldl -lcrypt -lm -lc
ld: オプションが正しくありません -- W
(以下略)
これは、--without-gccのときは、LDSHARED='ld -G'になるにもかかわらず、
RPATHFLAGにgcc用のフラグをセットしてしまうためです。
解決策の1つとして、--without-gccのときに、RPATHFLAG=" -R'%1\$-s'"にな
るようにすればいいので、次のようなパッチはどうでしょうか。
GCCでも、Sunのコンパイラでも、コンパイルできることを確認しました。
--- configure.in~ Wed Oct 26 01:59:57 2005
+++ configure.in Mon Oct 31 16:37:33 2005
@@ -981,7 +981,11 @@
[enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])
if test "$enable_rpath" = yes; then
LIBPATHFLAG=" -L'%1\$-s'"
- RPATHFLAG=" -Wl,-R'%1\$-s'"
+ if test "$GCC" = yes; then
+ RPATHFLAG=" -Wl,-R'%1\$-s'"
+ else
+ RPATHFLAG=" -R'%1\$-s'"
+ fi
fi
fi
AC_SUBST(LINK_SO)
--
桑村 慎哉 (株) 富士通研究所 ITコア研究所 CAD研究部
Date: October 31, 2005
From: "NAKAMURA, Hiroshi" <nakahiro@xxxxxxxxxxxx>
In-reply-to:
<1130730189.565346.9308.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1130730189.565346.9308.nullmailer@xxxxxxxxxxxxxxxxxx>
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Yukihiro Matsumoto wrote: > |> [ruby-core:6343] なひさ〜ん > > |[rubyのsoapモジュールメンテナの帽子で] > |rubyforgeにアカウントないので、どなたかcloseしていただけると助かります。 > |参照すべきリンク先は、ticket作成直後にメッセージとして入ってます。また、 > |basecamp上でも一度TODOに入れて、そしてdoneにしました。こういう使い方はど > |うですか? 合わなそう? > まつもとさん > > 見落としてました。タグはruby-Bugsのではなくruby-coreのを使っ > ていただけませんか? 使い方そのものには問題はありません。 > いや、ChangeLogにのらないwontfixとかはリプライメールも書いて > くださると見落としがないかもしれません。 どちらも了解です。そうすべきでした。 > ただMNeumannはbasecampにも参加してくれないし、ちょっと困って > るんですよねえ。 そうですね。また本でも書いてるのかしら。誰かメンテできるひと居ませんか ねぇ。XMLRPCに詳しいひと。 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (Cygwin) iD8DBQFDZaGzf6b33ts2dPkRAjkjAJ4qJYwHuR3Io4RiabdY3PPv5VFKXQCgqmYp /lBsNys0KTLcSshlC8eHq9c= =uZaE -----END PGP SIGNATURE-----
Date: October 31, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<20051031.104401.130621337.sakai@xxxxxxxxxxxxxxxxxx>
References:
<20051031.104401.130621337.sakai@xxxxxxxxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27596] Re: Matrix class is broken without mathn"
on Mon, 31 Oct 2005 10:47:27 +0900, Masahiro Sakai (酒井政裕)
<sakai@xxxxxxxxxxxxxxxxxx> writes:
|matrix.rb は Numeric#/ ではなく Numeric#quo を使えば良いのでは
|ないでしょうか。
|Numeric#quo は正にこういう時のためのメソッドだと思います。
確かに。こんなパッチを作ってみましたが、正しく動作しているで
しょうか。元メールの問題は解決しているようですが。私はどうに
も算数が苦手で。
--- lib/matrix.rb 27 Oct 2005 08:18:37 -0000 1.22
+++ lib/matrix.rb 31 Oct 2005 03:55:37 -0000
@@ -604,3 +604,3 @@ class Matrix
next if i == k
- q = a[i][k] / akk
+ q = a[i][k].quo(akk)
a[i][k] = 0
@@ -619,3 +619,3 @@ class Matrix
|j|
- a[k][j] /= akk
+ a[k][j] = a[k][j].quo(akk)
end
@@ -623,3 +623,3 @@ class Matrix
|j|
- @rows[k][j] /= akk
+ @rows[k][j] = @rows[k][j].quo(akk)
end
@@ -694,3 +694,3 @@ class Matrix
|i|
- q = a[i][k] / akk
+ q = a[i][k].quo(akk)
(k + 1).upto(size) do
@@ -760,3 +760,3 @@ class Matrix
|i|
- q = a[i][k] / akk
+ q = a[i][k].quo(akk)
(k + 1).upto(a_column_size - 1) do
@@ -927,3 +927,3 @@ class Matrix
x, y = other.coerce(self)
- x / y
+ x.quo(y)
end
Date: October 31, 2005
From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx>
In-reply-to:
<436568A5.6090705@xxxxxxxxxxxx>
References:
<436568A5.6090705@xxxxxxxxxxxx>
まつもと ゆきひろです
In message "Re: [ruby-dev:27589] Re: 1.8.4 open problems?"
on Mon, 31 Oct 2005 09:44:18 +0900, "NAKAMURA, Hiroshi"
<nakahiro@xxxxxxxxxxxx> writes:
|> [ruby-core:6343] なひさ〜ん
|[rubyのsoapモジュールメンテナの帽子で]
|rubyforgeにアカウントないので、どなたかcloseしていただけると助かります。
|参照すべきリンク先は、ticket作成直後にメッセージとして入ってます。また、
|basecamp上でも一度TODOに入れて、そしてdoneにしました。こういう使い方はど
|うですか? 合わなそう? > まつもとさん
見落としてました。タグはruby-Bugsのではなくruby-coreのを使っ
ていただけませんか? 使い方そのものには問題はありません。
いや、ChangeLogにのらないwontfixとかはリプライメールも書いて
くださると見落としがないかもしれません。
|> [ruby-core:6467] なひさ〜ん
|
|[MNeumannの知り合いの帽子で]
|なひ? 了解。連絡を取ってみます。しばらくお待ちください。
あ、すいません。純粋に間違えました。
ただMNeumannはbasecampにも参加してくれないし、ちょっと困って
るんですよねえ。
Date: October 31, 2005
From: Kouhei Yanagita <yanagi@xxxxxxxxxxxx>
柳田です。
Cygwin 環境についてです。
make test-all だと止まってしまうのですが、一つずつ実行することはできたので
失敗したものを報告します。
% for d in test/*(/)
do
./miniruby.exe ./runruby.rb --extout=.ext -- -C "./test" runner.rb
--runner=console `basename $d`
done
Loaded suite fileutils
Started
..FF...............F.....FF..............................
Finished in 23.388 seconds.
1) Failure:
test_chmod(TestFileUtils) [./fileutils/test_fileutils.rb:848]:
<448> expected but was
<420>.
2) Failure:
test_chmod_R(TestFileUtils) [./fileutils/test_fileutils.rb:859]:
<448> expected but was
<493>.
3) Failure:
test_install(TestFileUtils) [./fileutils/test_fileutils.rb:790]:
<384> expected but was
<420>.
4) Failure:
test_mkdir(TestFileUtils) [./fileutils/test_fileutils.rb:695]:
<448> expected but was
<493>.
5) Failure:
test_mkdir_p(TestFileUtils) [./fileutils/test_fileutils.rb:757]:
<448> expected but was
<493>.
57 tests, 884 assertions, 5 failures, 0 errors
420 は 0644 で、493 は 0755 です。
これは Cygwin を nontsec で動かしているためだと思うので、
このテストはこのままでよいと思います。
Loaded suite gdbm
Started
.....................F...F..EEEEEEEEEEEEEEEEEEEEEEEE...
Finished in 1.739 seconds.
1) Failure:
test_reorganize(TestGDBM) [./gdbm/test_gdbm.rb:590]:
<true> expected but was
<false>.
2) Failure:
test_s_open_create_new(TestGDBM) [./gdbm/test_gdbm.rb:84]:
<420> expected but was
<438>.
3) Error:
test_s_open_no_create(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
4) Error:
test_s_open_no_create(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
5) Error:
test_s_open_nolock(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
6) Error:
test_s_open_nolock(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
7) Error:
test_s_open_with_block(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
8) Error:
test_s_open_with_block(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
9) Error:
test_select_with_block(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
10) Error:
test_select_with_block(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
11) Error:
test_shift(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
12) Error:
test_shift(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
13) Error:
test_sync(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
14) Error:
test_sync(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
15) Error:
test_syncmode=(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
16) Error:
test_syncmode=(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
17) Error:
test_to_a(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
18) Error:
test_to_a(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
19) Error:
test_to_hash(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
20) Error:
test_to_hash(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
21) Error:
test_update(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
22) Error:
test_update(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
23) Error:
test_values(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
24) Error:
test_values(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
25) Error:
test_values_at(TestGDBM):
Errno::EACCES: Permission denied - tmptest_gdbm_
./gdbm/test_gdbm.rb:31:in `initialize'
./gdbm/test_gdbm.rb:31:in `setup'
26) Error:
test_values_at(TestGDBM):
NoMethodError: undefined method `close' for nil:NilClass
./gdbm/test_gdbm.rb:40:in `teardown'
43 tests, 572 assertions, 2 failures, 24 errors
Loaded suite openssl
Started
....................................F..........................
Finished in 9.459 seconds.
1) Failure:
test_client_auth(OpenSSL::TestSSL)
[./openssl/test_ssl.rb:157:in `test_client_auth'
./openssl/test_ssl.rb:73:in `start_server'
./openssl/test_ssl.rb:156:in `test_client_auth']:
<OpenSSL::SSL::SSLError> exception expected but was
Class: <Errno::ECONNRESET>
Message: <"Connection reset by peer">
---Backtrace---
./openssl/test_ssl.rb:160:in `connect'
./openssl/test_ssl.rb:160:in `test_client_auth'
./openssl/test_ssl.rb:157:in `test_client_auth'
./openssl/test_ssl.rb:73:in `start_server'
./openssl/test_ssl.rb:156:in `test_client_auth'
---------------
63 tests, 894 assertions, 1 failures, 0 errors
Loaded suite sdbm
Started
......................F...........
Finished in 0.32 seconds.
1) Failure:
test_s_open_error(TestSDBM) [./sdbm/test_sdbm.rb:122]:
<Errno::EACCES> exception expected but none was thrown.
34 tests, 835 assertions, 1 failures, 0 errors
Loaded suite soap
Started
............................................................................................................................................./var/tmp/ruby-1.8.4/lib/test/unit/ui/console/testrunner.rb:81:
[BUG] Segmentation fault
ruby 1.8.4 (2005-10-29) [i386-cygwin]
これは [ruby-dev:27296] と同じだと思います。
Loaded suite webrick
Started
F.................................
Finished in 13.34 seconds.
1) Failure:
test_cgi(TestWEBrickCGI)
[./webrick/test_cgi.rb:27:in `test_cgi'
/var/tmp/ruby-1.8.4/lib/net/http.rb:1049:in `request'
/var/tmp/ruby-1.8.4/lib/net/http.rb:2104:in `reading_body'
/var/tmp/ruby-1.8.4/lib/net/http.rb:1048:in `request'
/var/tmp/ruby-1.8.4/lib/net/http.rb:1033:in `request'
/var/tmp/ruby-1.8.4/lib/net/http.rb:545:in `start'
/var/tmp/ruby-1.8.4/lib/net/http.rb:1031:in `request'
./webrick/test_cgi.rb:27:in `test_cgi'
./webrick/utils.rb:26:in `start_server'
./webrick/utils.rb:34:in `start_httpserver'
./webrick/test_cgi.rb:24:in `test_cgi']:
<"/webrick.cgi"> expected but was
<"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n<HTML>\n
<HEAD><TITLE>Internal Server Error</TITLE></HEAD>\n <BODY>\n <H1>Internal
Server Error</H1>\n Premature end of script headers:
/var/tmp/ruby-1.8.4/test/webrick/webrick.cgi\n <HR>\n <ADDRESS>\n
WEBrick/1.3.1 (Ruby/1.8.4/2005-10-29) OpenSSL/0.9.8a at\n 127.0.0.1:4643\n
</ADDRESS>\n </BODY>\n</HTML>\n">.
34 tests, 322 assertions, 1 failures, 0 errors
--
Kouhei Yanagita <yanagi at shakenbu.org>
Date: October 31, 2005
From: "U.Nakamura" <usa@xxxxxxxxxxxxxxxxx>
In-reply-to:
<TYOMLEM04FRaqbC8wSA0000012b@xxxxxxxxxxxxxxxxxxxxxxxx>
References:
<20051031101553.5B7C.USA@xxxxxxxxxxxxxxxxx> <TYOMLEM04FRaqbC8wSA0000012b@xxxxxxxxxxxxxxxxxxxxxxxx>
こんにちは、なかむら(う)です。
In message "[ruby-dev:27595] Re: 1.8.4 検証を(だれが|どのように)行うか"
on Oct.31,2005 10:45:14, <nobuyoshi.nakada@xxxxxx> wrote:
| > 納得しました。rootなら何でも読めちゃうぜ、と。
|
| Process.euid.zero? ならスキップするとか?
|
| # Windows版も今のところ0が返るはず。
Windows版でこれがたまたま0を返してるってことを利用するのはな
んか違うんではないかという気がします。
それでは。
--
U.Nakamura <usa@xxxxxxxxxxxxxxxxx>
Date: October 31, 2005
From: Takahiro Kambe <taca@xxxxxxxxxxxxxxx>
In-reply-to:
<TYOMLEM04FRaqbC8wSA0000012b@xxxxxxxxxxxxxxxxxxxxxxxx>
References:
<20051031.100701.21933008.taca@xxxxxxxxxxxxxxx> <20051031101553.5B7C.USA@xxxxxxxxxxxxxxxxx> <TYOMLEM04FRaqbC8wSA0000012b@xxxxxxxxxxxxxxxxxxxxxxxx>
In message <TYOMLEM04FRaqbC8wSA0000012b@xxxxxxxxxxxxxxxxxxxxxxxx>
on Mon, 31 Oct 2005 10:45:14 +0900,
nobuyoshi nakada <nobuyoshi.nakada@xxxxxx> wrote:
> > | 要は、テストはrootのままで行ってはいけなかった、ということです。
> >
> > 納得しました。rootなら何でも読めちゃうぜ、と。
>
> Process.euid.zero? ならスキップするとか?
ここは、そうやってスキップさせるのではなく、rootでないユーザでテストを
行うべし、というのが正当ではないでしょうか。
さらに、NetBSD 1.6.2_STABLEのchroot環境も作ってみました。
$ make test
test succeeded
$ make test-all
./miniruby ./runruby.rb --extout=.ext -- -C "./test" runner.rb --runner=console
Loaded suite .
Started
...
/usr/local/src/ruby-1.8.4/.ext/i386-netbsdelf1.6.2./openssl.so: Undefined PLT
symbol "ERR_peek_last_error" (symnum = 679)
*** Error code 1
Stop.
make: stopped in /usr/local/src/ruby-1.8.4
$
うぅむ。
--
神戸 隆博 / Takahiro Kambe
Date: October 31, 2005
From: Masahiro Sakai (酒井政裕) <sakai@xxxxxxxxxxxxxxxxxx>
In-reply-to:
<1129762140.435060.18939.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<43566970.7030703@xxxxxxxxx> <1129762140.435060.18939.nullmailer@xxxxxxxxxxxxxxxxxx>
酒井といいます。 From: Yukihiro Matsumoto <matz@xxxxxxxxxxxxx> Date: Thu, 20 Oct 2005 07:48:58 +0900 > まつもと ゆきひろです > > In message "Re: [ruby-dev:27458] Matrix class is broken without mathn" > on Thu, 20 Oct 2005 00:42:46 +0900, akira yamada / やまだあきら > <akira@xxxxxxxxx> writes: > > | # Also note that the determinant of integer matrices may be incorrectly > calculated unless you > | # also <tt>require 'mathn'</tt>. This may be fixed in the future. > | > |ここでThis may be fixedとあるのですが > |matrix.rbで常に(あるいは必要なメソッドの中で) > |require "mathn"するようにするのはまずいのでしょうか? > > mathnはグローバルに挙動を変化させてしまうので、勝手にrequire > するのは望ましくないと思います。この問題を直した方が良いとは > 思いますが、別の方法によるべきでしょう。 matrix.rb は Numeric#/ ではなく Numeric#quo を使えば良いのでは ないでしょうか。 Numeric#quo は正にこういう時のためのメソッドだと思います。 -- 酒井 政裕 / Masahiro Sakai
Date: October 31, 2005
From: nobuyoshi nakada <nobuyoshi.nakada@xxxxxx>
In-reply-to:
<20051031101553.5B7C.USA@xxxxxxxxxxxxxxxxx>
References:
<1130598303.889920.29991.nullmailer@xxxxxxxxxxxxxxxxxx> <20051031.100701.21933008.taca@xxxxxxxxxxxxxxx> <20051031101553.5B7C.USA@xxxxxxxxxxxxxxxxx>
なかだです。
At Mon, 31 Oct 2005 10:17:03 +0900,
U.Nakamura wrote in [ruby-dev:27592]:
> | 要は、テストはrootのままで行ってはいけなかった、ということです。
>
> 納得しました。rootなら何でも読めちゃうぜ、と。
Process.euid.zero? ならスキップするとか?
# Windows版も今のところ0が返るはず。
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
Date: October 31, 2005
From: Kouhei Yanagita <yanagi@xxxxxxxxxxxx>
In-reply-to:
<hdayqzm6.wl%yanagi@xxxxxxxxxxxx>
References:
<ll0ccrrf.wl%yanagi@xxxxxxxxxxxx> <hdayqzm6.wl%yanagi@xxxxxxxxxxxx>
[ruby-dev:23654] でも同じ?不具合が報告されたいたようです。
試しに
% while :
do
date
./miniruby.exe ./runruby.rb --extout=.ext -- -C "./test" runner.rb
--runner=console openssl/test_ssl.rb
done | tee /var/tmp/test_ssl.log
として、openssl/test_ssl.rb のみを繰り返し実行してみましたが、
20 分ほど実行してみても、テストが止まることはありませんでした。
(念のため、直後に make test-all してみましたが、やはり止まりました)
あと、関係はないと思いますが、
ほとんどの場合
Mon Oct 31 10:03:46 2005
Loaded suite test_ssl.rb
Started
F.....
Finished in 5.283 seconds.
1) Failure:
test_client_auth(OpenSSL::TestSSL)
[./openssl/test_ssl.rb:157:in `test_client_auth'
./openssl/test_ssl.rb:73:in `start_server'
./openssl/test_ssl.rb:156:in `test_client_auth']:
<OpenSSL::SSL::SSLError> exception expected but was
Class: <Errno::ECONNRESET>
Message: <"Connection reset by peer">
---Backtrace---
./openssl/test_ssl.rb:160:in `connect'
./openssl/test_ssl.rb:160:in `test_client_auth'
./openssl/test_ssl.rb:157:in `test_client_auth'
./openssl/test_ssl.rb:73:in `start_server'
./openssl/test_ssl.rb:156:in `test_client_auth'
---------------
6 tests, 207 assertions, 1 failures, 0 errors
のように F になってしまいますが、これは常に F になるわけではなく
Mon Oct 31 10:05:14 2005
Loaded suite test_ssl.rb
Started
......
Finished in 5.293 seconds.
6 tests, 210 assertions, 0 failures, 0 errors
と、パスするときもあるようです。
% grep -c '1 failures' ../test_ssl.log
150
% grep -c '0 failures' ../test_ssl.log
26
--
Kouhei Yanagita <yanagi at shakenbu.org>
Date: October 31, 2005
From: H.Yamamoto <ocean@xxxxxxxxxxxxxxx>
In-reply-to:
<436568A5.6090705@xxxxxxxxxxxx>
References:
<1130695086.457336.32358.nullmailer@xxxxxxxxxxxxxxxxxx> <436568A5.6090705@xxxxxxxxxxxx>
山本です。 >rubyforgeにアカウントないので、どなたかcloseしていただけると助かります。 閉じておきました。
Date: October 31, 2005
From: "U.Nakamura" <usa@xxxxxxxxxxxxxxxxx>
In-reply-to:
<20051031.100701.21933008.taca@xxxxxxxxxxxxxxx>
References:
<1130598303.889920.29991.nullmailer@xxxxxxxxxxxxxxxxxx> <20051031.100701.21933008.taca@xxxxxxxxxxxxxxx>
こんにちは、なかむら(う)です。
In message "[ruby-dev:27591] Re: 1.8.4 検証を(だれが|どのように)行うか"
on Oct.31,2005 10:07:07, <taca@xxxxxxxxxxxxxxx> wrote:
| 要は、テストはrootのままで行ってはいけなかった、ということです。
納得しました。rootなら何でも読めちゃうぜ、と。
それでは。
--
U.Nakamura <usa@xxxxxxxxxxxxxxxxx>
Date: October 31, 2005
From: Takahiro Kambe <taca@xxxxxxxxxxxxxxx>
In-reply-to:
<20051031093107.5B79.USA@xxxxxxxxxxxxxxxxx> <1130598303.889920.29991.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<20051031090536.5B76.USA@xxxxxxxxxxxxxxxxx> <1130718606.371794.7354.nullmailer@xxxxxxxxxxxxxxxxxx> <20051031093107.5B79.USA@xxxxxxxxxxxxxxxxx>
In message <20051031093107.5B79.USA@xxxxxxxxxxxxxxxxx>
on Mon, 31 Oct 2005 09:34:49 +0900,
"U.Nakamura" <usa@xxxxxxxxxxxxxxxxx> wrote:
> | |しかし[ruby-dev:27569]によるとNetBSDでも?
> | |と、思ったのですが、神戸さんのところよりも古い3.99.7な環境で
> | |試した限りでは発生しませんでした。
> | |何が違うのかしら。
> |
> | これもなんとかしたいのですが。
>
> gotoyuzoさんが私や神戸さんよりも新しいNetBSD-current環境を持
> っている気がするので見てみてほしいところ。
NetBSD currentと言えども、3.9.xxの間でユーザランドにそんな違いが出るは
ずがないと思って、失敗しているテスト内容を再確認しました。結論として、
NetBSD 3.99.9と2.1_STABLEいずれも"make test-all"に成功
と、なりました。3.99.9では、
$ make test-all
./miniruby ./runruby.rb --extout=.ext -- -C "./test" runner.rb --runner=console
Loaded suite .
Started
...
Finished in 115.790311 seconds.
1304 tests, 14297 assertions, 0 failures, 0 errors
2.1_STABLEでは、
$ make test-all
./miniruby ./runruby.rb --extout=.ext -- -C "./test" runner.rb --runner=console
Loaded suite .
Started
...
Finished in 115.163536 seconds.
1304 tests, 14289 assertions, 0 failures, 0 errors
でした。
要は、テストはrootのままで行ってはいけなかった、ということです。
In message <1130598303.889920.29991.nullmailer@xxxxxxxxxxxxxxxxxx>
on Sun, 30 Oct 2005 00:04:51 +0900,
Yukihiro Matsumoto <matz@xxxxxxxxxxxxx> wrote:
> |これですが
> |
> | 1. 動作検証の手順
> | 2. 報告すべき内容
> |
> |を事前に決めていただけるとお手伝いし易いです。はい。
>
> % configure
> % make
> % make install
> % make test
> % make test-all
>
> をそれぞれ行って、失敗したらできるだけ詳細なログをください。
厳密に書くと、
% configure
% make
% su
# make install
# exit
% make test
% make test-all
といったあたりでしょう。(もちろん、sudoでも構いませんが。)
--
神戸 隆博 / Takahiro Kambe
Date: October 31, 2005
From: Kouhei Yanagita <yanagi@xxxxxxxxxxxx>
In-reply-to:
<ll0ccrrf.wl%yanagi@xxxxxxxxxxxx>
References:
<ll0ccrrf.wl%yanagi@xxxxxxxxxxxx>
[ruby-dev:27581] Re: 1.8.4 open problems?
> [ruby-dev:27553] なんででしょうねえ。make installしてないとこういう問題が起きたことがあるような
確かに、[ruby-dev:27553] では make install をしていませんでした。
改めて検証しました。
% ./configure --enable-shared --prefix=/var/tmp/ruby
% make
% make install
% make test
% make test-all
./miniruby.exe ./runruby.rb --extout=.ext -- -C "./test" runner.rb
--runner=console
Loaded suite .
Started
..............................................................................................................................................................................................................................FF...............F.....FF...................................................F...F..EEEEEEEEEEEEEEEEEEEEEEEE....................................................................................F.
(止まる。C-cで中断)
/var/tmp/ruby-1.8.4/.ext/openssl/ssl.rb:121:in `accept': Interrupt
from /var/tmp/ruby-1.8.4/.ext/openssl/ssl.rb:121:in `accept'
from ./openssl/ssl_server.rb:67
from ./openssl/ssl_server.rb:66
./openssl/test_ssl.rb:220:in `connect': Interrupt
from ./openssl/test_ssl.rb:220:in `test_parallel'
from ./openssl/test_ssl.rb:217:in `test_parallel'
from ./openssl/test_ssl.rb:73:in `start_server'
from ./openssl/test_ssl.rb:215:in `test_parallel'
from /var/tmp/ruby-1.8.4/lib/test/unit/testcase.rb:70:in `run'
from /var/tmp/ruby-1.8.4/lib/test/unit/testsuite.rb:32:in `run'
from /var/tmp/ruby-1.8.4/lib/test/unit/testsuite.rb:31:in `run'
from /var/tmp/ruby-1.8.4/lib/test/unit/testsuite.rb:32:in `run'
... 6 levels...
from /var/tmp/ruby-1.8.4/lib/test/unit/ui/testrunnerutilities.rb:27:in
`run'
from /var/tmp/ruby-1.8.4/lib/test/unit/autorunner.rb:200:in `run'
from /var/tmp/ruby-1.8.4/lib/test/unit/autorunner.rb:13:in `run'
from runner.rb:7
make: *** [test-all] Error 1
何度か make install と make test-all を繰り返してみましたが、
毎回、同様に止まります。
--
Kouhei Yanagita <yanagi at shakenbu.org>
Date: October 31, 2005
From: "NAKAMURA, Hiroshi" <nakahiro@xxxxxxxxxxxx>
In-reply-to:
<1130695086.457336.32358.nullmailer@xxxxxxxxxxxxxxxxxx>
References:
<1130695086.457336.32358.nullmailer@xxxxxxxxxxxxxxxxxx>