summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-01-18 09:08:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1999-01-18 09:08:52 +0000
commit41d0ebf4660c74a92bfd9484bd3659d5367d2d76 (patch)
treef046d437bf3c46562223d3639ff5401297e3cd62
parent9f72c385f295637f8c7b3ed7a159cb7cfa9752ef (diff)
1.2.2 PR1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@366 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--Makefile.in6
-rw-r--r--config.guess2
-rw-r--r--configure2
-rw-r--r--configure.in2
-rw-r--r--eval.c14
-rw-r--r--ext/extmk.rb.in2
-rw-r--r--ext/tk/lib/tkfont.rb2
-rw-r--r--hash.c22
-rw-r--r--lib/ftools.rb3
-rw-r--r--missing/nt.c2
-rw-r--r--missing/setenv.c10
-rw-r--r--missing/vsnprintf.c3
-rw-r--r--pack.c2
-rw-r--r--parse.y6
-rw-r--r--ruby.1173
-rw-r--r--time.c2
-rw-r--r--version.h4
-rw-r--r--win32/Makefile5
19 files changed, 153 insertions, 117 deletions
diff --git a/ChangeLog b/ChangeLog
index 68be1514b7..6fbf74be01 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Mon Jan 18 13:02:27 1999 Kuroda Jun <jkuro@dwe.co.j>
+
+ * hash.c (env_keys): strchr() may return NULL.
+
+Sun Jan 17 19:45:37 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * pack.c (pack_pack): nil packing caused SEGV.
+
Mon Jan 11 16:52:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* version 1.2.1 (stable) released.
diff --git a/Makefile.in b/Makefile.in
index 35e947b725..9f476166e9 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -147,9 +147,6 @@ mkdir.o: @srcdir@/missing/mkdir.c
setenv.o: @srcdir@/missing/setenv.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/setenv.c
-vsnprintf.o: @srcdir@/missing/vsnprintf.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/vsnprintf.c
-
strcasecmp.o: @srcdir@/missing/strcasecmp.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strcasecmp.c
@@ -174,6 +171,9 @@ strtol.o: @srcdir@/missing/strtol.c
strtoul.o: @srcdir@/missing/strtoul.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strtoul.c
+vsnprintf.o: @srcdir@/missing/vsnprintf.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/vsnprintf.c
+
nt.o: @srcdir@/missing/nt.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/nt.c
diff --git a/config.guess b/config.guess
index 0fdc826ba0..042d209871 100644
--- a/config.guess
+++ b/config.guess
@@ -779,7 +779,7 @@ EOF
news*:NEWS-OS:*:6*)
echo mips-sony-newsos6
exit 0 ;;
- R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv`echo ${UNAME_RELEASE} | sed -n 's/\([.0-9]*\).*/\1/p'`
else
diff --git a/configure b/configure
index b0f9543d22..de6e9dc743 100644
--- a/configure
+++ b/configure
@@ -2690,7 +2690,7 @@ fi
echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6
test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.o"
-for ac_func in dup2 memmove mkdir strcasecmp strerror strftime\
+for ac_func in dup2 setenv memmove mkdir strcasecmp strerror strftime\
strchr strstr strtoul strdup crypt flock vsnprintf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
diff --git a/configure.in b/configure.in
index c7b70a004a..67b634f1c7 100644
--- a/configure.in
+++ b/configure.in
@@ -170,7 +170,7 @@ AC_TYPE_SIGNAL
AC_FUNC_ALLOCA
AC_FUNC_VFORK
AC_FUNC_MEMCMP
-AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strerror strftime\
+AC_REPLACE_FUNCS(dup2 setenv memmove mkdir strcasecmp strerror strftime\
strchr strstr strtoul strdup crypt flock vsnprintf)
AC_CHECK_FUNCS(fmod killpg drand48 random wait4 waitpid syscall getcwd\
truncate chsize times utimes fcntl lockf setitimer\
diff --git a/eval.c b/eval.c
index 001f07d9fc..a8e8329d7a 100644
--- a/eval.c
+++ b/eval.c
@@ -3478,11 +3478,13 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper)
}
break;
- /* for re-scoped/renamed method */
- case NODE_ZSUPER:
- /* for attr get/set */
- case NODE_ATTRSET:
- case NODE_IVAR:
+
+ case NODE_IVAR: /* for attr get */
+ if (argc != 0) {
+ ArgError("Wrong # of arguments(%d for 0)", argc);
+ }
+ case NODE_ATTRSET: /* for attr set */
+ case NODE_ZSUPER: /* for re-scoped/renamed method */
result = rb_eval(recv, body);
break;
@@ -4280,7 +4282,7 @@ f_require(obj, fname)
VALUE obj, fname;
{
char *ext, *file, *feature, *buf; /* OK */
- VALUE load;
+ volatile VALUE load;
Check_SafeStr(fname);
if (rb_provided(RSTRING(fname)->ptr))
diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in
index ebbcf84d93..bb0e042371 100644
--- a/ext/extmk.rb.in
+++ b/ext/extmk.rb.in
@@ -409,7 +409,7 @@ def extmake(target)
return if $nodynamic and not $static
$objs = nil
- $libs = PLATFORM =~ /cygwin32|beos|openstep|nextstep|rhapsody/ ? nil : "-lc"
+ $libs = PLATFORM =~ /cygwin|beos|openstep|nextstep|rhapsody/ ? nil : "-lc"
$local_libs = nil # to be assigned in extconf.rb
$CFLAGS = nil
$LDFLAGS = nil
diff --git a/ext/tk/lib/tkfont.rb b/ext/tk/lib/tkfont.rb
index e0394dc880..421988aeca 100644
--- a/ext/tk/lib/tkfont.rb
+++ b/ext/tk/lib/tkfont.rb
@@ -90,7 +90,7 @@ class TkFont
raise RuntimeError, "unknown option '-font'"
end
fnt = tk_split_simplelist(font_prop)[4]
- if fnt == []
+ if fnt == ""
TkFont.new(nil, nil).call_font_configure(path, *(args + [{}]))
else
begin
diff --git a/hash.c b/hash.c
index cd00832a39..3f1ce8cb84 100644
--- a/hash.c
+++ b/hash.c
@@ -963,6 +963,10 @@ env_keys()
env = environ;
while (*env) {
char *s = strchr(*env, '=');
+ if (!s) {
+ env++;
+ continue;
+ }
ary_push(ary, str_taint(str_new(*env, s-*env)));
env++;
}
@@ -985,6 +989,10 @@ env_values()
env = environ;
while (*env) {
char *s = strchr(*env, '=');
+ if (!s) {
+ env++;
+ continue;
+ }
ary_push(ary, str_taint(str_new2(s+1)));
env++;
}
@@ -1050,6 +1058,10 @@ env_to_a()
env = environ;
while (*env) {
char *s = strchr(*env, '=');
+ if (!s) {
+ env++;
+ continue;
+ }
ary_push(ary, assoc_new(str_taint(str_new(*env, s-*env)),
str_taint(str_new2(s+1))));
env++;
@@ -1095,13 +1107,19 @@ env_has_value(dmy, value)
{
char **env;
VALUE ary;
+ int len;
if (TYPE(value) != T_STRING) return FALSE;
ary = ary_new();
env = environ;
while (*env) {
- char *s = strchr(*env, '=')+1;
- int len = strlen(s);
+ char *s = strchr(*env, '=');
+ if (!s) {
+ env++;
+ continue;
+ }
+ s++;
+ len = strlen(s);
if (strncmp(s, RSTRING(value)->ptr, len) == 0) return TRUE;
env++;
}
diff --git a/lib/ftools.rb b/lib/ftools.rb
index ff487dc808..89040bd375 100644
--- a/lib/ftools.rb
+++ b/lib/ftools.rb
@@ -63,7 +63,7 @@ class << File
to = catname(from, to)
$stderr.print from, " -> ", to, "\n" if verbose
- if PLATFORM =~ /djgpp|cygwin32|mswin32/ and FileTest.file? to
+ if PLATFORM =~ /djgpp|cygwin|mswin32/ and FileTest.file? to
unlink to
end
begin
@@ -154,6 +154,7 @@ class << File
def install(from, to, mode = nil, verbose = false)
to = catname(from, to)
unless FileTest.exist? to and cmp from, to
+ unlink to if FileTest.exist? to
cp from, to, verbose
chmod mode, to, verbose if mode
end
diff --git a/missing/nt.c b/missing/nt.c
index 41d84a5da7..0525b809c9 100644
--- a/missing/nt.c
+++ b/missing/nt.c
@@ -287,6 +287,8 @@ isInternalCmd(char *cmd)
{
int i, fRet=0;
char **vec;
+ int vecc = NtMakeCmdVector(cmd, &vec, FALSE);
+
NtMakeCmdVector(cmd, &vec, FALSE);
for( i = 0; szInternalCmds[i] ; i++){
if(!strcmp(szInternalCmds[i], vec[0])){
diff --git a/missing/setenv.c b/missing/setenv.c
index c9cb4b20e0..fa1c65928d 100644
--- a/missing/setenv.c
+++ b/missing/setenv.c
@@ -5,7 +5,12 @@
* License or the Artistic License, as specified in the README file.
*/
-#include "ruby.h"
+void *xmalloc ();
+void *xcalloc ();
+void *xrealloc ();
+#define ALLOC_N(type,n) (type*)xmalloc(sizeof(type)*(n))
+#define ALLOC(type) (type*)xmalloc(sizeof(type))
+#define REALLOC_N(var,type,n) (var)=(type*)xrealloc((char*)(var),sizeof(type)*(n))
#ifndef NT
extern char **environ;
@@ -82,7 +87,7 @@ int n;
#endif /* MSDOS */
}
#else /* if WIN32 */
-void
+int
setenv(nam,val, n)
char *nam, *val;
int n;
@@ -144,6 +149,7 @@ int n;
SetEnvironmentVariable(nam,val);
#endif
+ return 1;
}
#endif /* WIN32 */
diff --git a/missing/vsnprintf.c b/missing/vsnprintf.c
index 64076b5c01..39c34890bd 100644
--- a/missing/vsnprintf.c
+++ b/missing/vsnprintf.c
@@ -101,6 +101,9 @@
#define __const
#endif /* People who don't like const sys_error */
+#ifdef NT
+typedef long size_t;
+#endif
#ifndef NULL
#define NULL 0
diff --git a/pack.c b/pack.c
index fe72d6ad35..83c4997dae 100644
--- a/pack.c
+++ b/pack.c
@@ -134,7 +134,7 @@ pack_pack(ary, fmt)
case 'H': case 'h':
from = NEXTFROM;
if (NIL_P(from)) {
- ptr = 0;
+ ptr = "";
plen = 0;
}
else {
diff --git a/parse.y b/parse.y
index 825917f8be..bf7ac0317c 100644
--- a/parse.y
+++ b/parse.y
@@ -572,8 +572,10 @@ reswords : k__LINE__ | k__FILE__ | klBEGIN | klEND
arg : variable '=' {$$ = assignable($1, 0);} arg
{
$$ = $<node>3;
- $$->nd_value = $4;
- fixpos($$, $4);
+ if ($$) {
+ $$->nd_value = $4;
+ fixpos($$, $4);
+ }
}
| primary '[' aref_args ']' '=' arg
{
diff --git a/ruby.1 b/ruby.1
index c013afdf0b..41fa3a6216 100644
--- a/ruby.1
+++ b/ruby.1
@@ -37,9 +37,9 @@
.\" $Id$
.\"
.na
-.TH RUBY 1 "ruby 1.1" "22/Jun/98" "Ruby Programmers Reference Guide"
+.TH RUBY 1 "ruby 1.2" "12/Jan/99" "Ruby Programmers Reference Guide"
.SH NAME
-ruby - Interpreted scripting language
+ruby - Interpreted object-oriented scripting language
.SH SYNOPSIS
.B ruby \c
[ \c
@@ -94,99 +94,96 @@ ruby - Interpreted scripting language
] [ programfile ] [ argument ] ...
.SH PREFACE
-Ruby is the interpreted scripting language for quick and easy
-object-oriented programming. It has many features to process text
-files and to do system management tasks (as in perl). It is simple,
+Ruby is an interpreted scripting language for quick and easy
+object-oriented programming. It has many features to process text
+files and to do system management tasks (as in Perl). It is simple,
straight-forward, and extensible.
.PP
If you want a language for easy object-oriented programming, or you
-don't like the PERL ugliness, or you do like the concept of lisp, but
-don't like too much parentheses, ruby may be the language of the
+don't like the Perl ugliness, or you do like the concept of lisp, but
+don't like too much parentheses, Ruby may be the language of your
choice.
.SH DESCRIPTION
Ruby's features are as follows:
.TP
.B "\(bu Interpretive"
-Ruby is the interpreted language, so you don't have to
-recompile to execute the program written in ruby.
+Ruby is an interpreted language, so you don't have to recompile
+programs written in Ruby to execute them.
.TP
.B "\(bu Variables have no type (dynamic typing)"
-Variables in ruby can contain data of any type. You don't have
-to worry about variable typing. Consequently, it has weaker
-compile time check.
-.TP
+Variables in Ruby can contain data of any type. You don't have to
+worry about variable typing. Consequently, it has a weaker compile
+time check.
+.TP
.B "\(bu No declaration needed"
-You can use variables in your ruby programs without any
-declarations. Variable name itself denotes its scope (local,
-global, instance, etc.)
+You can use variables in your Ruby programs without any declarations.
+Variable names denote their scope, local, global, instance, etc.
.TP
.B "\(bu Simple syntax"
-Ruby has simple syntax influenced slightly from Eiffel.
+Ruby has a simple syntax influenced slightly from Eiffel.
.TP
.B "\(bu No user-level memory management"
Ruby has automatic memory management. Objects no longer
referenced from anywhere are automatically collected by the
-garbage collector built in the interpreter.
+garbage collector built into the interpreter.
.TP
-.B "\(bu Everything is object"
-Ruby is the pure object-oriented language from the beginning.
-Even basic data like integers are treated uniformly as objects.
+.B "\(bu Everything is an object"
+Ruby is the purely object-oriented language, and was so since its
+creation. Even such basic data as integers are seen as objects.
.TP
.B "\(bu Class, inheritance, methods"
-Of course, as a O-O language, ruby has basic features like
-classes, inheritance, methods, etc.
+Of course, as an object-oriented language, Ruby has such basic
+features like classes, inheritance, and methods.
.TP
.B "\(bu Singleton methods"
-Ruby has the feature to define methods for certain specified
-object. For example, you can define a press-button action for
-certain GUI button by defining a singleton method for the
-button. Or, you can make up your own prototype based object
-system using singleton methods (if you want to).
+Ruby has the ability to define methods for certain objects. For
+example, you can define a press-button action for certain widget by
+defining a singleton method for the button. Or, you can make up your
+own prototype based object system using singleton methods, if you want
+to.
.TP
.B "\(bu Mix-in by modules"
-Ruby does not have the multiple inheritance intentionally. IMO,
-It is the source of confusion. Instead, ruby has modules to
-share the implementation across the inheritance tree. It is
-often called "Mix-in."
+Ruby intentioanlly does not have the multiple inheritance as it is a
+souce of confusion. Instead, Ruby has the ability to share
+implementations acrss the inheritance tree. This is oftern called
+`Mix-in'.
.TP
.B "\(bu Iterators"
Ruby has iterators for loop abstraction.
.TP
.B "\(bu Closures"
-In ruby, you can objectify the procedure.
+In Ruby, you can objectify the procedure.
.TP
.B "\(bu Text processing and regular expression"
-Ruby has bunch of text processing features like in perl.
+Ruby has a bunch of text processing features like in Perl.
.TP
.B "\(bu Bignums"
-With bu ilt-in bignums, you can calculate factorial(400), for
-example.
+With built-in bignums, you can for example calculate factorial(400).
.TP
.B "\(bu Exception handling"
As in Java(tm).
.TP
-.B "\(bu Direct access to OS"
-Ruby can call most of system calls on UNIX boxes. It can be
-used in system programming.
+.B "\(bu Direct access to the OS"
+Ruby can use most UNIX system calls, often used in system programming.
.TP
.B "\(bu Dynamic loading"
-You can load object files into ruby interpreter on-the-fly, on
-most of UNIXes.
+On most UNIX systems, you can load object files into the Ruby
+interpreter on-the-fly.
.PP
-.SH Command line options
+.SH COMMAND LINE OPTIONS
Ruby interpreter accepts following command-line options (switches).
-Basically they are quite similar to those of Perl.
+They are quite similar to those of Perl.
.TP
.B -0digit
-specifies the input record separator ($/) as an octal number.
-If no digits given, the null character is the separator. Other
-switches may follow the digits. -00 turns ruby into paragraph
-mode. -0777 makes ruby read whole file at once as a single
-string, since there is no legal character with that value.
+pecifies the input record separator ($/) as an octal number. If no
+digit is given, the null character is taken as the separator. Other
+switches may follow the digits. -00 turns Ruby into paragraph mode. -
+0777 makes Ruby read whole file at once as a single string since there
+is no legal character with that value.
.TP
.B -a
turns on auto-split mode when used with -n or -p. In auto-split
-mode, ruby executes
+mode, Ruby executes
.nf
.ne 1
\& $F = $_.split
@@ -194,20 +191,20 @@ at beginning of each loop.
.fi
.TP
.B -c
-causes ruby to check the syntax of the script and exit without
-executing. If there is no syntax error, ruby will print "Syntax
+causes Ruby to check the syntax of the script and exit without
+executing. If there are no syntax errors, Ruby will print "Syntax
OK" to the standard output.
.TP
.B -Kc
-specifies KANJI (Japanese character) code-set.
+specifies KANJI (Japanese) code-set.
.TP
.B
-d --debug
turns on debug mode. $DEBUG will set TRUE.
.TP
.B -e script
-specifies script from command-line. if -e switch specified,
-ruby will not look for a script filename in the arguments.
+specifies script from command-line while telling Ruby to not
+search argv for script filenames.
.TP
.B -F regexp
specifies input field separator ($;).
@@ -229,16 +226,15 @@ example:
.fi
.TP
.B -I directory
-used to tell ruby where to load the library scripts. Directory
-path will be added to the load-path variable ($:').
+used to tell Ruby where to load the library scripts. Directory path
+will be added to the load-path variable ($:').
.TP
.B -l
-enables automatic line-ending processing, which means firstly
-set $\ to the value of $/, and secondly chops every line read
-using chop!.
+enables automatic line-ending processing, which means to firstly set
+$\ to the value of $/, and secondly chops every line read using chop!.
.TP
.B -n
-causes ruby to assume the following loop around your script,
+causes Ruby to assume the following loop around your script,
which makes it iterate over filename arguments somewhat like
sed -n or awk.
.nf
@@ -259,14 +255,13 @@ example:
.fi
.TP
.B -r filename
-causes ruby to load the file using [4]require. It is useful
+causes Ruby to load the file using [4]require. It is useful
with switches -n or -p.
.TP
.B -s
-enables some switch parsing for switches after script name but
-before any filename arguments (or before a --). Any switches
-found there is removed from ARGV and set the corresponding
-variable in the script.
+enables some switch parsing for switches after script name but before
+any filename arguments (or before a --). Any switches found there are
+removed from ARGV and set the corresponding variable in the script.
example:
.nf
.ne 3
@@ -276,7 +271,7 @@ example:
.fi
.TP
.B -S
-makes ruby uses the PATH environment variable to search for
+makes Ruby use the PATH environment variable to search for
script, unless if its name begins with a slash. This is used to
emulate #! on machines that don't support it, in the following
manner:
@@ -286,44 +281,40 @@ manner:
\& # This line makes the next one a comment in ruby \\
\& exec /usr/local/bin/ruby -S $0 $*
.fi
-On some systems $0 does not always contain the full pathname,
-so you need -S switch to tell ruby to search for the script if
-necessary.
-To handle embedded spaces or such, A better construct than $*
-would be ${1+"$@"}, but it does not work if the script is being
-interpreted by csh.
+On some systems $0 does not always contain the full pathname, so you
+need -S switch to tell Ruby to search for the script if necessary. To
+handle embedded spaces or such. A better construct than $* would be
+${1+"$@"}, but it does not work if the script is being interpreted by
+csh.
.TP
.B -v --verbose
-enables verbose mode. Ruby will prints its version at the
-beginning, and set the variable `$VERBOSE' to TRUE. Some
-methods prints extra messages if this variable is TRUE. If this
-switch is given, and no other switches present, ruby quits
-after printing its version.
+enables verbose mode. Ruby will print its version at the beginning,
+and set the variable `$VERBOSE' to TRUE. Some methods print extra
+messages if this variable is TRUE. If this switch is given, and no
+other switches are present, Ruby quits after printing its version.
.TP
.B --version
-prints the version of ruby executable.
+prints the version of Ruby interpreter.
.TP
.B -w
enables verbose mode without printing version message at the
-beginning. It set the variable `$VERBOSE' to TRUE.
+beginning. It set the `$VERBOSE' variable to true.
.TP
.B -x[directory]
-tells ruby that the script is embedded in a message. Leading
-garbage will be discarded until the first that starts with "#!"
-and contains string "ruby". Any meaningful switches on that
-line will applied. The end of script must be specified with
-either EOF, ^D (control-D), ^Z (control-Z), or reserved word
-__END__.If the directory name is specified, ruby will switch to
-that directory before executing script.
+tells Ruby that the script is embedded in a message. Leading garbage
+will be discarded until the first that starts with "#!" and contains
+the string, "ruby". Any meaningful switches on that line will applied.
+The end of script must be specified with either EOF, ^D (control-D),
+^Z (control-Z), or reserved word __END__.If the directory name is
+specified, Ruby will switch to that directory before executing script.
.TP
.B -X directory
-causes ruby to switch to the directory.
+causes Ruby to switch to the directory.
.TP
.B -y --yydebug
-turns on compiler debug mode. ruby will print bunch of internal
-state messages during compiling scripts. You don't have to
-specify this switch, unless you are going to debug the ruby
-interpreter itself.
+turns on compiler debug mode. Ruby will print a bunch of internal
+state messages during compiling scripts. You don't have to specify
+this switch, unless you are going to debug the Ruby interpreter.
.PP
.SH AUTHOR
Ruby is designed and implemented by Yukihiro Matsumoto <matz@netlab.co.jp>.
diff --git a/time.c b/time.c
index 8f595520fd..bceb0854dc 100644
--- a/time.c
+++ b/time.c
@@ -856,7 +856,7 @@ Init_Time()
rb_define_method(cTime, "to_i", time_to_i, 0);
rb_define_method(cTime, "to_f", time_to_f, 0);
rb_define_method(cTime, "<=>", time_cmp, 1);
- rb_define_method(cTime, "eql?", time_eql, 0);
+ rb_define_method(cTime, "eql?", time_eql, 1);
rb_define_method(cTime, "hash", time_hash, 0);
rb_define_method(cTime, "localtime", time_localtime, 0);
diff --git a/version.h b/version.h
index 40755b8429..d5e47aa2e5 100644
--- a/version.h
+++ b/version.h
@@ -1,2 +1,2 @@
-#define RUBY_VERSION "1.2.1"
-#define VERSION_DATE "99/01/11"
+#define RUBY_VERSION "1.2.2"
+#define VERSION_DATE "99/01/18"
diff --git a/win32/Makefile b/win32/Makefile
index 135d657780..d0bd36443b 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -20,7 +20,7 @@ LDFLAGS = $(CFLAGS) -Fm
#CFLAGS = -nologo -DNT=1 -Zi -MD
#LDFLAGS = $(CFLAGS) -Fm -MD
LIBS = $(EXTLIBS) advapi32.lib wsock32.lib
-MISSING = crypt.obj setenv.obj alloca.obj nt.obj
+MISSING = crypt.obj setenv.obj vsnprintf.obj alloca.obj nt.obj
prefix =
binprefix =
@@ -178,6 +178,9 @@ strtol.obj: missing/strtol.c
strtoul.obj: missing/strtoul.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c missing/strtoul.c
+vsnprintf.obj: missing/vsnprintf.c
+ $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/vsnprintf.c
+
# when I use -I., there is confliction at "OpenFile"
# so, set . into environment varible "include"
nt.obj: missing/nt.c