mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
19990922
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@534 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
70a444b0cc
commit
8aad024e3a
11 changed files with 109 additions and 35 deletions
37
ChangeLog
37
ChangeLog
|
@ -1,9 +1,38 @@
|
||||||
|
Wed Sep 22 09:20:11 1999 Masahiro Tomita <tommy@tmtm.org>
|
||||||
|
|
||||||
|
* ext/socket/socket.c: SOCKS5 support.
|
||||||
|
|
||||||
|
Wed Sep 22 00:35:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
|
* string.c (rb_str_include): should return boolean value.
|
||||||
|
|
||||||
|
* regex.c (re_compile_fastmap): wrong comparison with mbc.
|
||||||
|
|
||||||
|
* eval.c (specific_eval): default sourcefile name should be
|
||||||
|
"(eval)" for module_eval etc.
|
||||||
|
|
||||||
|
Wed Sep 22 00:06:07 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
|
||||||
|
|
||||||
|
* win32/Makefile: update rules.
|
||||||
|
|
||||||
|
* io.c (io_fread): should not assign in char, it maybe -1.
|
||||||
|
|
||||||
|
Tue Sep 21 23:57:54 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
|
* eval.c (call_trace_func): should not propagate retval in
|
||||||
|
trace_func.
|
||||||
|
|
||||||
|
Mon Sep 20 21:35:39 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
|
||||||
|
|
||||||
|
* win32/win32.c (myselect): assume non socket files are always
|
||||||
|
readable/writable.
|
||||||
|
|
||||||
Mon Sep 20 01:08:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
Mon Sep 20 01:08:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
* io.c (io_fread): should not block other threads.
|
* io.c (io_fread): should not block other threads.
|
||||||
|
|
||||||
* io.c (rb_io_synchronized): renamed from rb_io_unbuffered(); do
|
* io.c (rb_io_synchronized): renamed from rb_io_unbuffered(); do
|
||||||
not call setbuf(NULL) any more.
|
not call setbuf(NULL) anymore.
|
||||||
|
|
||||||
Sat Sep 18 13:45:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
Sat Sep 18 13:45:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
|
@ -3772,7 +3801,7 @@ Sat Mar 28 20:40:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
Sat Mar 28 16:07:11 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
|
Sat Mar 28 16:07:11 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
|
||||||
|
|
||||||
* io.c (io_closed): should not cause exception fot closed IO.
|
* io.c (io_closed): should not cause exception for closed IO.
|
||||||
|
|
||||||
* string.c (str_tr): returned nil for success.
|
* string.c (str_tr): returned nil for success.
|
||||||
|
|
||||||
|
@ -4526,7 +4555,7 @@ Fri Dec 12 00:50:25 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
* eval.c (rb_eval): new visibility status `function'.
|
* eval.c (rb_eval): new visibility status `function'.
|
||||||
|
|
||||||
* parse.y (yycompile): do not clear eval_tree. thus enable multipe
|
* parse.y (yycompile): do not clear eval_tree. thus enable multipe
|
||||||
command line script by optn `-e'.
|
command line script by option `-e'.
|
||||||
|
|
||||||
* eval.c (rb_eval): END execute just once.
|
* eval.c (rb_eval): END execute just once.
|
||||||
|
|
||||||
|
@ -5011,7 +5040,7 @@ Mon Sep 1 11:43:57 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
|
||||||
Fri Aug 29 11:10:21 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
|
Fri Aug 29 11:10:21 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
* class.c (class_instance_methods): same method names should not
|
* class.c (class_instance_methods): same method names should not
|
||||||
appear more than twice.
|
appear more than once.
|
||||||
|
|
||||||
* parse.y (yylex): spaces can follow =begin/=end.
|
* parse.y (yylex): spaces can follow =begin/=end.
|
||||||
|
|
||||||
|
|
8
eval.c
8
eval.c
|
@ -648,6 +648,10 @@ static struct tag *prot_tag;
|
||||||
prot_tag = _tag.prev; \
|
prot_tag = _tag.prev; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define POP_TMPTAG() \
|
||||||
|
prot_tag = _tag.prev; \
|
||||||
|
}
|
||||||
|
|
||||||
#define TAG_RETURN 0x1
|
#define TAG_RETURN 0x1
|
||||||
#define TAG_BREAK 0x2
|
#define TAG_BREAK 0x2
|
||||||
#define TAG_NEXT 0x3
|
#define TAG_NEXT 0x3
|
||||||
|
@ -1724,7 +1728,7 @@ call_trace_func(event, file, line, self, id, klass)
|
||||||
self?rb_f_binding(self):Qnil,
|
self?rb_f_binding(self):Qnil,
|
||||||
klass));
|
klass));
|
||||||
}
|
}
|
||||||
POP_TAG();
|
POP_TMPTAG(); /* do not propagate retval */
|
||||||
POP_FRAME();
|
POP_FRAME();
|
||||||
|
|
||||||
rb_thread_critical--;
|
rb_thread_critical--;
|
||||||
|
@ -4488,7 +4492,7 @@ specific_eval(argc, argv, klass, self)
|
||||||
VALUE *argv;
|
VALUE *argv;
|
||||||
VALUE klass, self;
|
VALUE klass, self;
|
||||||
{
|
{
|
||||||
char *file = 0;
|
char *file = "(eval)";
|
||||||
int line = 1;
|
int line = 1;
|
||||||
int iter = rb_iterator_p();
|
int iter = rb_iterator_p();
|
||||||
|
|
||||||
|
|
|
@ -271,7 +271,9 @@ if have_func(test_func)
|
||||||
have_func("uname")
|
have_func("uname")
|
||||||
end
|
end
|
||||||
if ENV["SOCKS_SERVER"] or enable_config("socks", false)
|
if ENV["SOCKS_SERVER"] or enable_config("socks", false)
|
||||||
if have_library("socks", "Rconnect")
|
if have_library("socks5", "SOCKSinit")
|
||||||
|
$CFLAGS="-DSOCKS5 -DSOCKS"
|
||||||
|
elsif have_library("socks", "Rconnect")
|
||||||
$CFLAGS="-DSOCKS"
|
$CFLAGS="-DSOCKS"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -63,9 +63,13 @@ static VALUE rb_eSocket;
|
||||||
|
|
||||||
#ifdef SOCKS
|
#ifdef SOCKS
|
||||||
VALUE rb_cSOCKSSocket;
|
VALUE rb_cSOCKSSocket;
|
||||||
|
#ifdef SOCKS5
|
||||||
|
#include <socks.h>
|
||||||
|
#else
|
||||||
void SOCKSinit();
|
void SOCKSinit();
|
||||||
int Rconnect();
|
int Rconnect();
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#define INET_CLIENT 0
|
#define INET_CLIENT 0
|
||||||
#define INET_SERVER 1
|
#define INET_SERVER 1
|
||||||
|
@ -630,12 +634,15 @@ ruby_connect(fd, sockaddr, len, socks)
|
||||||
#else
|
#else
|
||||||
# define NONBLOCKING O_NONBLOCK
|
# define NONBLOCKING O_NONBLOCK
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef SOCKS5
|
||||||
|
if (!socks)
|
||||||
#endif
|
#endif
|
||||||
fcntl(fd, F_SETFL, mode|NONBLOCKING);
|
fcntl(fd, F_SETFL, mode|NONBLOCKING);
|
||||||
#endif /* HAVE_FCNTL */
|
#endif /* HAVE_FCNTL */
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
#ifdef SOCKS
|
#if defined(SOCKS) && !defined(SOCKS5)
|
||||||
if (socks) {
|
if (socks) {
|
||||||
status = Rconnect(fd, sockaddr, len);
|
status = Rconnect(fd, sockaddr, len);
|
||||||
}
|
}
|
||||||
|
|
7
io.c
7
io.c
|
@ -449,14 +449,15 @@ io_fread(ptr, len, f)
|
||||||
FILE *f;
|
FILE *f;
|
||||||
{
|
{
|
||||||
size_t n = len;
|
size_t n = len;
|
||||||
|
int c;
|
||||||
|
|
||||||
while (n--) {
|
while (n--) {
|
||||||
*ptr = getc(f);
|
c = getc(f);
|
||||||
if (*ptr == EOF) {
|
if (c == EOF) {
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ptr++;
|
*ptr++ = c;
|
||||||
if (!READ_DATA_PENDING(f)) {
|
if (!READ_DATA_PENDING(f)) {
|
||||||
rb_thread_wait_fd(fileno(f));
|
rb_thread_wait_fd(fileno(f));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
=begin
|
=begin
|
||||||
$Date: 1999/09/17 17:41:41 $
|
$Date: 1999/09/21 21:24:07 $
|
||||||
|
|
||||||
== SIMPLE TELNET CLIANT LIBRARY
|
== SIMPLE TELNET CLIANT LIBRARY
|
||||||
|
|
||||||
telnet.rb
|
telnet.rb
|
||||||
|
|
||||||
Version 0.40
|
Version 0.50
|
||||||
|
|
||||||
Wakou Aoyama <wakou@fsinet.or.jp>
|
Wakou Aoyama <wakou@fsinet.or.jp>
|
||||||
|
|
||||||
|
@ -86,6 +86,7 @@ of cource, set sync=true or flush is necessary.
|
||||||
=== SEND STRING
|
=== SEND STRING
|
||||||
|
|
||||||
host.print("string")
|
host.print("string")
|
||||||
|
# == host.write("string\n")
|
||||||
|
|
||||||
|
|
||||||
=== TURN TELNET COMMAND INTERPRETATION
|
=== TURN TELNET COMMAND INTERPRETATION
|
||||||
|
@ -154,6 +155,12 @@ of cource, set sync=true or flush is necessary.
|
||||||
|
|
||||||
== HISTORY
|
== HISTORY
|
||||||
|
|
||||||
|
=== Version 0.50
|
||||||
|
|
||||||
|
1999/09/21 21:24:07
|
||||||
|
|
||||||
|
- add write method
|
||||||
|
|
||||||
=== Version 0.40
|
=== Version 0.40
|
||||||
|
|
||||||
1999/09/17 17:41:41
|
1999/09/17 17:41:41
|
||||||
|
@ -398,8 +405,8 @@ class Telnet < SimpleDelegator
|
||||||
EOL = CR + LF
|
EOL = CR + LF
|
||||||
v = $-v
|
v = $-v
|
||||||
$-v = false
|
$-v = false
|
||||||
VERSION = "0.40"
|
VERSION = "0.50"
|
||||||
RELEASE_DATE = "$Date: 1999/09/17 17:41:41 $"
|
RELEASE_DATE = "$Date: 1999/09/21 21:24:07 $"
|
||||||
$-v = v
|
$-v = v
|
||||||
|
|
||||||
def initialize(options)
|
def initialize(options)
|
||||||
|
@ -503,33 +510,33 @@ $-v = v
|
||||||
if IAC == $1 # handle escaped IAC characters
|
if IAC == $1 # handle escaped IAC characters
|
||||||
IAC
|
IAC
|
||||||
elsif AYT == $1 # respond to "IAC AYT" (are you there)
|
elsif AYT == $1 # respond to "IAC AYT" (are you there)
|
||||||
@sock.write("nobody here but us pigeons" + EOL)
|
self.write("nobody here but us pigeons" + EOL)
|
||||||
''
|
''
|
||||||
elsif DO[0] == $1[0] # respond to "IAC DO x"
|
elsif DO[0] == $1[0] # respond to "IAC DO x"
|
||||||
if OPT_BINARY[0] == $1[1]
|
if OPT_BINARY[0] == $1[1]
|
||||||
@telnet_option["BINARY"] = true
|
@telnet_option["BINARY"] = true
|
||||||
@sock.write(IAC + WILL + OPT_BINARY)
|
self.write(IAC + WILL + OPT_BINARY)
|
||||||
else
|
else
|
||||||
@sock.write(IAC + WONT + $1[1..1])
|
self.write(IAC + WONT + $1[1..1])
|
||||||
end
|
end
|
||||||
''
|
''
|
||||||
elsif DONT[0] == $1[0] # respond to "IAC DON'T x" with "IAC WON'T x"
|
elsif DONT[0] == $1[0] # respond to "IAC DON'T x" with "IAC WON'T x"
|
||||||
@sock.write(IAC + WONT + $1[1..1])
|
self.write(IAC + WONT + $1[1..1])
|
||||||
''
|
''
|
||||||
elsif WILL[0] == $1[0] # respond to "IAC WILL x"
|
elsif WILL[0] == $1[0] # respond to "IAC WILL x"
|
||||||
if OPT_ECHO[0] == $1[1]
|
if OPT_ECHO[0] == $1[1]
|
||||||
@sock.write(IAC + DO + OPT_ECHO)
|
self.write(IAC + DO + OPT_ECHO)
|
||||||
elsif OPT_SGA[0] == $1[1]
|
elsif OPT_SGA[0] == $1[1]
|
||||||
@telnet_option["SGA"] = true
|
@telnet_option["SGA"] = true
|
||||||
@sock.write(IAC + DO + OPT_SGA)
|
self.write(IAC + DO + OPT_SGA)
|
||||||
end
|
end
|
||||||
''
|
''
|
||||||
elsif WONT[0] == $1[0] # respond to "IAC WON'T x"
|
elsif WONT[0] == $1[0] # respond to "IAC WON'T x"
|
||||||
if OPT_ECHO[0] == $1[1]
|
if OPT_ECHO[0] == $1[1]
|
||||||
@sock.write(IAC + DONT + OPT_ECHO)
|
self.write(IAC + DONT + OPT_ECHO)
|
||||||
elsif OPT_SGA[0] == $1[1]
|
elsif OPT_SGA[0] == $1[1]
|
||||||
@telnet_option["SGA"] = false
|
@telnet_option["SGA"] = false
|
||||||
@sock.write(IAC + DONT + OPT_SGA)
|
self.write(IAC + DONT + OPT_SGA)
|
||||||
end
|
end
|
||||||
''
|
''
|
||||||
end
|
end
|
||||||
|
@ -591,6 +598,14 @@ $-v = v
|
||||||
line
|
line
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def write(string)
|
||||||
|
length = string.length
|
||||||
|
while 0 < length
|
||||||
|
IO::select(nil, [@sock])
|
||||||
|
length -= @sock.syswrite(string)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def print(string)
|
def print(string)
|
||||||
str = string.dup + "\n"
|
str = string.dup + "\n"
|
||||||
|
|
||||||
|
@ -609,7 +624,7 @@ $-v = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@sock.write(str)
|
self.write(str)
|
||||||
end
|
end
|
||||||
|
|
||||||
def cmd(options)
|
def cmd(options)
|
||||||
|
@ -624,7 +639,6 @@ $-v = v
|
||||||
string = options
|
string = options
|
||||||
end
|
end
|
||||||
|
|
||||||
IO::select(nil, [@sock])
|
|
||||||
self.print(string)
|
self.print(string)
|
||||||
if iterator?
|
if iterator?
|
||||||
waitfor({"Prompt" => match, "Timeout" => time_out}){|c| yield c }
|
waitfor({"Prompt" => match, "Timeout" => time_out}){|c| yield c }
|
||||||
|
|
4
regex.c
4
regex.c
|
@ -1112,7 +1112,7 @@ re_compile_pattern(pattern, size, bufp)
|
||||||
register const char *p = pattern;
|
register const char *p = pattern;
|
||||||
const char *nextp;
|
const char *nextp;
|
||||||
const char *pend = pattern + size;
|
const char *pend = pattern + size;
|
||||||
register unsigned c, c1;
|
register unsigned int c, c1;
|
||||||
const char *p0;
|
const char *p0;
|
||||||
int numlen;
|
int numlen;
|
||||||
|
|
||||||
|
@ -2832,7 +2832,7 @@ re_compile_fastmap(bufp)
|
||||||
while (beg <= end) {
|
while (beg <= end) {
|
||||||
/* NOTE: Charset for multi-byte chars might contain
|
/* NOTE: Charset for multi-byte chars might contain
|
||||||
single-byte chars. We must reject them. */
|
single-byte chars. We must reject them. */
|
||||||
if (beg < 0x100)
|
if (c < 0x100)
|
||||||
fastmap[beg] = 2;
|
fastmap[beg] = 2;
|
||||||
else if (ismbchar(beg))
|
else if (ismbchar(beg))
|
||||||
fastmap[beg] = 1;
|
fastmap[beg] = 1;
|
||||||
|
|
4
string.c
4
string.c
|
@ -1275,7 +1275,7 @@ rb_str_include(str, arg)
|
||||||
|
|
||||||
for (i=0; i<len; i++) {
|
for (i=0; i<len; i++) {
|
||||||
if (p[i] == c) {
|
if (p[i] == c) {
|
||||||
return INT2NUM(i);
|
return Qtrue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
|
@ -1285,7 +1285,7 @@ rb_str_include(str, arg)
|
||||||
i = rb_str_index(str, arg, 0);
|
i = rb_str_index(str, arg, 0);
|
||||||
|
|
||||||
if (i == -1) return Qfalse;
|
if (i == -1) return Qfalse;
|
||||||
return INT2NUM(i);
|
return Qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
|
|
@ -98,13 +98,13 @@ $(PROGRAM): $(LIBRUBY) $(MAINOBJ) $(LIBRUBY_SO)
|
||||||
@rm -f $@
|
@rm -f $@
|
||||||
$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) -o $@ $(LIBRUBYARG) -link /STACK:$(STACK)
|
$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) -o $@ $(LIBRUBYARG) -link /STACK:$(STACK)
|
||||||
|
|
||||||
$(LIBRUBY_A): $(OBJS)
|
$(LIBRUBY_A): $(OBJS) dmyext.obj
|
||||||
lib -nologo /OUT:$@ $(OBJS)
|
lib -nologo /OUT:$@ $(OBJS) dmyext.obj
|
||||||
|
|
||||||
rubymw.lib: ruby.def
|
rubymw.lib: ruby.def
|
||||||
lib -nologo /OUT:$@ /DEF:ruby.def
|
lib -nologo /OUT:$@ /DEF:ruby.def
|
||||||
|
|
||||||
$(LIBRUBY_SO): $(LIBRUBY_A) $(EXTOBJS)
|
$(LIBRUBY_SO): $(LIBRUBY_A) $(EXTOBJS) ruby.def
|
||||||
set LIB=.\win32;$(ORGLIBPATH)
|
set LIB=.\win32;$(ORGLIBPATH)
|
||||||
@rm -f $@
|
@rm -f $@
|
||||||
$(CC) $(LDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBY_A) $(LIBS) -o $@ -link /DLL /DEF:ruby.def
|
$(CC) $(LDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBY_A) $(LIBS) -o $@ -link /DLL /DEF:ruby.def
|
||||||
|
|
|
@ -33,6 +33,7 @@ EXPORTS
|
||||||
rb_mErrno
|
rb_mErrno
|
||||||
;eval.c
|
;eval.c
|
||||||
rb_cProc
|
rb_cProc
|
||||||
|
ruby_frame
|
||||||
rb_cThread
|
rb_cThread
|
||||||
rb_thread_tick
|
rb_thread_tick
|
||||||
rb_thread_critical
|
rb_thread_critical
|
||||||
|
@ -72,6 +73,8 @@ EXPORTS
|
||||||
rb_cRange
|
rb_cRange
|
||||||
;re.c
|
;re.c
|
||||||
rb_cRegexp
|
rb_cRegexp
|
||||||
|
;regex.c
|
||||||
|
re_mbctab
|
||||||
;ruby.c
|
;ruby.c
|
||||||
ruby_debug
|
ruby_debug
|
||||||
ruby_verbose
|
ruby_verbose
|
||||||
|
@ -370,7 +373,7 @@ EXPORTS
|
||||||
rb_fdopen
|
rb_fdopen
|
||||||
rb_file_open
|
rb_file_open
|
||||||
rb_file_sysopen
|
rb_file_sysopen
|
||||||
rb_io_unbuffered
|
rb_io_synchronized
|
||||||
rb_p
|
rb_p
|
||||||
rb_gets
|
rb_gets
|
||||||
rb_str_setter
|
rb_str_setter
|
||||||
|
|
|
@ -677,7 +677,8 @@ mypclose(FILE *fp)
|
||||||
//
|
//
|
||||||
// close the pipe
|
// close the pipe
|
||||||
//
|
//
|
||||||
CloseHandle(MyPopenRecord[i].oshandle);
|
// Closehandle() is done by fclose().
|
||||||
|
//CloseHandle(MyPopenRecord[i].oshandle);
|
||||||
fflush(fp);
|
fflush(fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
@ -1835,7 +1836,20 @@ myselect (int nfds, fd_set *rd, fd_set *wr, fd_set *ex,
|
||||||
errno = EINTR;
|
errno = EINTR;
|
||||||
break;
|
break;
|
||||||
case WSAENOTSOCK:
|
case WSAENOTSOCK:
|
||||||
errno = EBADF;
|
// assume normal files are always readable/writable
|
||||||
|
// fake read/write fd_set and return value
|
||||||
|
r = 0;
|
||||||
|
if (rd) r += rd->fd_count;
|
||||||
|
if (wr) r += wr->fd_count;
|
||||||
|
if (ex && ex->fd_count > 0) {
|
||||||
|
// exceptional condition never happen for normal files
|
||||||
|
if (r > 0)
|
||||||
|
ex->fd_count = 0;
|
||||||
|
else {
|
||||||
|
errno = EBADF;
|
||||||
|
r = SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue