summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-09-19 06:54:11 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-09-19 06:54:11 +0000
commit6767cd760a8f5274e238fca4567071a78ac43968 (patch)
tree870d126fba698f90bbb07a7bb67ff3aab4103796
parent67245eec7192abdc1dd0dc2510c1f6c77df89bd0 (diff)
* string.c (rb_str_init): String.new() => ""
* dir.c (dir_path): new method. * dir.c (dir_initialize): wrap DIR into struct, along with path information. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1748 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog11
-rw-r--r--ToDo4
-rw-r--r--dir.c86
-rw-r--r--eval.c2
-rw-r--r--file.c9
-rw-r--r--parse.y1
-rw-r--r--regex.c10
-rw-r--r--string.c17
-rw-r--r--version.h4
9 files changed, 94 insertions, 50 deletions
diff --git a/ChangeLog b/ChangeLog
index b5f11bea3d..f7812ab511 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Tue Sep 18 11:44:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_init): String.new() => ""
+
+Tue Sep 11 20:53:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_path): new method.
+
+ * dir.c (dir_initialize): wrap DIR into struct, along with path
+ information.
+
Sat Sep 8 07:13:42 2001 Wakou Aoyama <wakou@fsinet.or.jp>
* lib/net/telnet.rb: waitfor(): improvement. thanks to
diff --git a/ToDo b/ToDo
index c1f4824254..b9bf9b2a5b 100644
--- a/ToDo
+++ b/ToDo
@@ -28,7 +28,7 @@ Language Spec.
* jar like combined library package.
* resumable Exception via Exception#resume.
* method combination, e.g. before, after, around, etc.
-* .. or something like defactive in Emacs.
+* .. or something like defadvice in Emacs.
Hacking Interpreter
@@ -87,7 +87,7 @@ Standard Libraries
* library to load per-user profile seeking .ruby_profile or ruby.ini file.
* warning framework (warn, warning for Ruby level)
* marshal should not depend on sprintf/strtod (works bad for locale).
-* ternary arg - a.pow(b,c) == a**b%c
+* ternary arg pow: a.pow(b,c) == a**b%c
Extension Libraries
diff --git a/dir.c b/dir.c
index f21051587e..567d49a86c 100644
--- a/dir.c
+++ b/dir.c
@@ -234,11 +234,16 @@ fnmatch(pat, string, flags)
VALUE rb_cDir;
+struct dir_data {
+ DIR *dir;
+ char *path;
+};
+
static void
free_dir(dir)
- DIR *dir;
+ struct dir_data *dir;
{
- if (dir) closedir(dir);
+ if (dir && dir->dir) closedir(dir->dir);
}
static VALUE dir_close _((VALUE));
@@ -249,8 +254,11 @@ dir_s_new(argc, argv, klass)
VALUE *argv;
VALUE klass;
{
- VALUE obj = Data_Wrap_Struct(klass, 0, free_dir, 0);
+ struct dir_data *dirp;
+ VALUE obj = Data_Make_Struct(klass, struct dir_data, 0, free_dir, dirp);
+ dirp->dir = NULL;
+ dirp->path = NULL;
rb_obj_call_init(obj, argc, argv);
return obj;
@@ -260,22 +268,25 @@ static VALUE
dir_initialize(dir, dirname)
VALUE dir, dirname;
{
- DIR *dirp;
+ struct dir_data *dp;
SafeStringValue(dirname);
- if (DATA_PTR(dir)) closedir(DATA_PTR(dir));
- DATA_PTR(dir) = NULL;
- dirp = opendir(RSTRING(dirname)->ptr);
- if (dirp == NULL) {
+ Data_Get_Struct(dir, struct dir_data, dp);
+ if (dp->dir) closedir(dp->dir);
+ if (dp->path) free(dp->path);
+ dp->dir = NULL;
+ dp->path = NULL;
+ dp->dir = opendir(RSTRING(dirname)->ptr);
+ if (dp->dir == NULL) {
if (errno == EMFILE || errno == ENFILE) {
rb_gc();
- dirp = opendir(RSTRING(dirname)->ptr);
+ dp->dir = opendir(RSTRING(dirname)->ptr);
}
- if (dirp == NULL) {
+ if (dp->dir == NULL) {
rb_sys_fail(RSTRING(dirname)->ptr);
}
}
- DATA_PTR(dir) = dirp;
+ dp->path = strdup(RSTRING(dirname)->ptr);
return dir;
}
@@ -284,7 +295,8 @@ static VALUE
dir_s_open(klass, dirname)
VALUE klass, dirname;
{
- VALUE dir = Data_Wrap_Struct(klass, 0, free_dir, 0);
+ struct dir_data *dp;
+ VALUE dir = Data_Make_Struct(klass, struct dir_data, 0, free_dir, dp);
dir_initialize(dir, dirname);
if (rb_block_given_p()) {
@@ -301,22 +313,34 @@ dir_closed()
}
#define GetDIR(obj, dirp) {\
- Data_Get_Struct(obj, DIR, dirp);\
- if (dirp == NULL) dir_closed();\
+ Data_Get_Struct(obj, struct dir_data, dirp);\
+ if (dirp->dir == NULL) dir_closed();\
+}
+
+static VALUE
+dir_path(dir)
+ VALUE dir;
+{
+ struct dir_data *dirp;
+
+ GetDIR(dir, dirp);
+ if (!dirp->path) return Qnil;
+ return rb_str_new2(dirp->path);
}
static VALUE
dir_read(dir)
VALUE dir;
{
- DIR *dirp;
+ struct dir_data *dirp;
struct dirent *dp;
GetDIR(dir, dirp);
errno = 0;
- dp = readdir(dirp);
- if (dp)
+ dp = readdir(dirp->dir);
+ if (dp) {
return rb_tainted_str_new(dp->d_name, NAMLEN(dp));
+ }
else if (errno == 0) { /* end of stream */
return Qnil;
}
@@ -330,13 +354,13 @@ static VALUE
dir_each(dir)
VALUE dir;
{
- DIR *dirp;
+ struct dir_data *dirp;
struct dirent *dp;
GetDIR(dir, dirp);
- for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
+ for (dp = readdir(dirp->dir); dp != NULL; dp = readdir(dirp->dir)) {
rb_yield(rb_tainted_str_new(dp->d_name, NAMLEN(dp)));
- if (DATA_PTR(dir) == NULL) dir_closed();
+ if (dirp->dir == NULL) dir_closed();
}
return dir;
}
@@ -346,11 +370,11 @@ dir_tell(dir)
VALUE dir;
{
#ifdef HAVE_TELLDIR
- DIR *dirp;
+ struct dir_data *dirp;
long pos;
GetDIR(dir, dirp);
- pos = telldir(dirp);
+ pos = telldir(dirp->dir);
return rb_int2inum(pos);
#else
rb_notimplement();
@@ -361,11 +385,11 @@ static VALUE
dir_seek(dir, pos)
VALUE dir, pos;
{
- DIR *dirp;
+ struct dir_data *dirp;
#ifdef HAVE_SEEKDIR
GetDIR(dir, dirp);
- seekdir(dirp, NUM2INT(pos));
+ seekdir(dirp->dir, NUM2INT(pos));
return dir;
#else
rb_notimplement();
@@ -376,10 +400,10 @@ static VALUE
dir_rewind(dir)
VALUE dir;
{
- DIR *dirp;
+ struct dir_data *dirp;
GetDIR(dir, dirp);
- rewinddir(dirp);
+ rewinddir(dirp->dir);
return dir;
}
@@ -387,12 +411,11 @@ static VALUE
dir_close(dir)
VALUE dir;
{
- DIR *dirp;
+ struct dir_data *dirp;
- Data_Get_Struct(dir, DIR, dirp);
- if (dirp == NULL) dir_closed();
- closedir(dirp);
- DATA_PTR(dir) = NULL;
+ GetDIR(dir, dirp);
+ closedir(dirp->dir);
+ dirp->dir = NULL;
return Qnil;
}
@@ -978,6 +1001,7 @@ Init_Dir()
rb_define_singleton_method(rb_cDir, "entries", dir_entries, 1);
rb_define_method(rb_cDir,"initialize", dir_initialize, 1);
+ rb_define_method(rb_cDir,"path", dir_path, 0);
rb_define_method(rb_cDir,"read", dir_read, 0);
rb_define_method(rb_cDir,"each", dir_each, 0);
rb_define_method(rb_cDir,"rewind", dir_rewind, 0);
diff --git a/eval.c b/eval.c
index 0655cadc5e..8cbdb94e46 100644
--- a/eval.c
+++ b/eval.c
@@ -8211,7 +8211,7 @@ rb_thread_abort_exc_set(thread, val)
th->errinfo = Qnil;\
th->last_status = 0;\
th->last_line = 0;\
- th->last_match = 0;\
+ th->last_match = Qnil;\
th->abort = 0;\
th->priority = 0;\
th->gid = 1;\
diff --git a/file.c b/file.c
index dbc9ac1c2a..68b658991e 100644
--- a/file.c
+++ b/file.c
@@ -76,7 +76,7 @@ static VALUE rb_cStat;
static int
apply2files(func, vargs, arg)
- int (*func)();
+ void (*func)();
VALUE vargs;
void *arg;
{
@@ -87,8 +87,7 @@ apply2files(func, vargs, arg)
for (i=0; i<args->len; i++) {
path = args->ptr[i];
SafeStringValue(path);
- if ((*func)(RSTRING(path)->ptr, arg) < 0)
- rb_sys_fail(RSTRING(path)->ptr);
+ (*func)(RSTRING(path)->ptr, arg);
}
return args->len;
@@ -913,7 +912,7 @@ chmod_internal(path, mode)
const char *path;
int mode;
{
- if (chmod(path, mode) == -1)
+ if (chmod(path, mode) < 0)
rb_sys_fail(path);
}
@@ -963,7 +962,7 @@ lchmod_internal(path, mode)
const char *path;
int mode;
{
- if (lchmod(path, mode) == -1)
+ if (lchmod(path, mode) < 0)
rb_sys_fail(path);
}
diff --git a/parse.y b/parse.y
index c39b2ca3d0..c0e14530ce 100644
--- a/parse.y
+++ b/parse.y
@@ -3459,7 +3459,6 @@ yylex()
c = tLPAREN_ARG;
}
else if (lex_state == EXPR_ARG) {
- rb_warning("%s (...) interpreted as method call", tok());
c = tLPAREN_ARG;
yylval.id = last_id;
}
diff --git a/regex.c b/regex.c
index 49832ad1d4..f121d48db2 100644
--- a/regex.c
+++ b/regex.c
@@ -1271,13 +1271,9 @@ re_compile_pattern(pattern, size, bufp)
if (bufp->allocated == 0) {
bufp->allocated = INIT_BUF_SIZE;
- if (bufp->buffer)
- /* EXTEND_BUFFER loses when bufp->allocated is 0. */
- bufp->buffer = (char*)xrealloc(bufp->buffer, INIT_BUF_SIZE);
- else
- /* Caller did not allocate a buffer. Do it for them. */
- bufp->buffer = (char*)xmalloc(INIT_BUF_SIZE);
- if (!bufp->buffer) goto memory_exhausted;
+ /* EXTEND_BUFFER loses when bufp->allocated is 0. */
+ bufp->buffer = (char*)xrealloc(bufp->buffer, INIT_BUF_SIZE);
+ if (!bufp->buffer) goto memory_exhausted; /* this not happen */
begalt = b = bufp->buffer;
}
diff --git a/string.c b/string.c
index 00c139cb91..5dea1c7ab2 100644
--- a/string.c
+++ b/string.c
@@ -302,6 +302,21 @@ rb_str_s_new(argc, argv, klass)
return str;
}
+static VALUE rb_str_replace _((VALUE, VALUE));
+
+static VALUE
+rb_str_init(argc, argv, str)
+ int argc;
+ VALUE *argv;
+ VALUE str;
+{
+ VALUE orig;
+
+ if (rb_scan_args(argc, argv, "01", &orig) == 1)
+ rb_str_replace(str, orig);
+ return str;
+}
+
static VALUE
rb_str_length(str)
VALUE str;
@@ -2992,7 +3007,7 @@ Init_String()
rb_include_module(rb_cString, rb_mComparable);
rb_include_module(rb_cString, rb_mEnumerable);
rb_define_singleton_method(rb_cString, "new", rb_str_s_new, -1);
- rb_define_method(rb_cString, "initialize", rb_str_replace, 1);
+ rb_define_method(rb_cString, "initialize", rb_str_init, -1);
rb_define_method(rb_cString, "clone", rb_str_clone, 0);
rb_define_method(rb_cString, "dup", rb_str_dup, 0);
rb_define_method(rb_cString, "<=>", rb_str_cmp_m, 1);
diff --git a/version.h b/version.h
index 44bf42e8ef..8b9bc190dd 100644
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
#define RUBY_VERSION "1.7.1"
-#define RUBY_RELEASE_DATE "2001-09-08"
+#define RUBY_RELEASE_DATE "2001-09-19"
#define RUBY_VERSION_CODE 171
-#define RUBY_RELEASE_CODE 20010908
+#define RUBY_RELEASE_CODE 20010919