summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--configure.in2
-rw-r--r--enum.c2
-rw-r--r--ext/socket/socket.c13
-rw-r--r--parse.y3
5 files changed, 23 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index c07eea1e95..a5c0d9b75d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Thu Aug 1 17:47:15 2002 Tachino Nobuhiro <tachino@jp.fujitsu.com>
+
+ * parse.y (tokadd_string): ignore backslashed spaces in %w.
+
+Thu Aug 1 14:14:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_find): do not use rb_eval_cmd(); should not accept
+ a string for if_none.
+
Wed Jul 31 14:11:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (rb_undef): undef should be done for klass, not ruby_class.
diff --git a/configure.in b/configure.in
index 7ce581d79e..7090fd1e5f 100644
--- a/configure.in
+++ b/configure.in
@@ -308,7 +308,7 @@ AC_CHECK_FUNCS(ftello)
AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\
strchr strstr strtoul crypt flock vsnprintf\
isinf isnan finite hypot acosh)
-AC_CHECK_FUNCS(fmod killpg drand48 random wait4 waitpid syscall chroot fsync\
+AC_CHECK_FUNCS(fmod killpg wait4 waitpid syscall chroot fsync\
truncate chsize times utimes fcntl lockf lstat symlink readlink\
setitimer setruid seteuid setreuid setresuid setproctitle\
setrgid setegid setregid setresgid pause lchown lchmod\
diff --git a/enum.c b/enum.c
index f426bc3303..c8831fb7b9 100644
--- a/enum.c
+++ b/enum.c
@@ -90,7 +90,7 @@ enum_find(argc, argv, obj)
}
rb_gc_force_recycle((VALUE)memo);
if (!NIL_P(if_none)) {
- rb_eval_cmd(if_none, rb_ary_new2(0), 0);
+ return rb_funcall(if_none, rb_intern("call"), 0, 0);
}
return Qnil;
}
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index eb99695a9c..1e91c38c67 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -434,6 +434,7 @@ s_recvfrom(sock, argc, argv, from)
char buf[1024];
socklen_t alen = sizeof buf;
VALUE len, flg;
+ long slen;
int fd, flags;
rb_scan_args(argc, argv, "11", &len, &flg);
@@ -447,16 +448,16 @@ s_recvfrom(sock, argc, argv, from)
}
fd = fileno(fptr->f);
- str = rb_tainted_str_new(0, NUM2INT(len));
+ slen = NUM2INT(len);
+ str = rb_tainted_str_new(0, slen);
retry:
rb_thread_wait_fd(fd);
TRAP_BEG;
- RSTRING(str)->len = recvfrom(fd, RSTRING(str)->ptr, RSTRING(str)->len, flags,
- (struct sockaddr*)buf, &alen);
+ slen = recvfrom(fd, RSTRING(str)->ptr, slen, flags, (struct sockaddr*)buf, &alen);
TRAP_END;
- if (RSTRING(str)->len < 0) {
+ if (slen < 0) {
switch (errno) {
case EINTR:
rb_thread_schedule();
@@ -464,6 +465,10 @@ s_recvfrom(sock, argc, argv, from)
}
rb_sys_fail("recvfrom(2)");
}
+ if (slen < RSTRING(str)->len) {
+ RSTRING(str)->len = slen;
+ RSTRING(str)->ptr[slen] = '\0';
+ }
rb_obj_taint(str);
switch (from) {
case RECV_RECV:
diff --git a/parse.y b/parse.y
index 17c885957f..e8f946295a 100644
--- a/parse.y
+++ b/parse.y
@@ -2836,6 +2836,9 @@ tokadd_string(func, term, paren)
if (func & STR_FUNC_ESCAPE) tokadd('\\');
c = read_escape();
}
+ else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
+ /* ignore backslashed spaces in %w */
+ }
else if (c != term && !(paren && c == paren)) {
tokadd('\\');
}