1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

small fixes

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_3@457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 1999-05-06 08:31:50 +00:00
parent cae09e71e5
commit e8505b6472
36 changed files with 1327 additions and 902 deletions

View file

@ -1,3 +1,52 @@
Thu May 6 13:21:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* array.c (rb_ary_indexes): should not use rb_ary_concat().
Thu May 4 12:34:18 1999 Koji Arai <JCA02266@nifty.ne.jp>
* parse.y (parse_string): there shuould be newline escape by
backslashes in strings.
* parse.y (parse_qstring): ditto.
Mon May 3 04:37:20 1999 Koji Arai <JCA02266@nifty.ne.jp>
* ext/tcltklib/extconf.rb: better search for libX11.
* range.c (range_s_new): embarrassing =/== typo.
* re.c (Init_Regexp): failed to set default kcode.
Mon May 3 02:39:55 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
* ext/socket/socket.c (open_inet): typo (res and res0).
Tue May 4 02:07:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* mkconfig.rb: leave undefined $(VARIABLE) unexpanded in the
Config::CONFIG hash table.
Mon May 3 09:37:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* regex.c (re_compile_pattern): expand exactn{n} at compile time.
handles stop_paren specially.
* regex.c (re_compile_pattern): expand x{n} at compile time.
* regex.c (re_search): posix line match should be checked.
* regex.c (re_search): a bug in anchor condition.
Fri Apr 30 18:57:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* string.c (rb_str_rindex): position should be END point, not
START point.
* re.c (rb_reg_search): pos means end point on reverse now.
* array.c (rb_ary_s_create): should clear ary->ptr to avoid
potential gc crash.
Fri Apr 30 15:24:58 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* ext/socket/addrinfo.h: compatibility hack for ipv4.
@ -11,6 +60,10 @@ Fri Apr 30 15:24:58 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* lib/mkmf.rb (enable_config): ditto.
Fri Apr 30 05:22:23 1999 Shugo Maeda <shugo@netlab.co.jp>
* string.c (rb_str_aset): last index should not append.
Thu Apr 29 18:55:31 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
* dln.c (conv_to_posix_path): remove const from args.
@ -23,6 +76,8 @@ Tue Apr 27 14:11:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* ext/extmk.rb.in: `--with-xxx=yyy' argument configuration.
* lib/mkmf.rb: ditto.
* misc/ruby-mode.el: forgot to handle $`.
* ext/extmk.rb.in: better AIX link support proposed by

View file

@ -79,9 +79,10 @@ version.h
beos/ruby.def.in
ext/Setup
ext/Setup.dj
ext/Setup.emx
ext/Setup.nt
ext/Setup.x68
ext/aix_ld.rb
ext/aix_mksym.rb
ext/cygwin32_ld.rb
ext/extmk.rb.in
ext/extmk.rb.nt

11
array.c
View file

@ -208,8 +208,7 @@ rb_ary_s_create(argc, argv, klass)
NEWOBJ(ary, struct RArray);
OBJSETUP(ary, klass, T_ARRAY);
ary->len = argc;
ary->capa = argc;
ary->len = ary->capa = 0;
if (argc == 0) {
ary->ptr = 0;
}
@ -217,6 +216,7 @@ rb_ary_s_create(argc, argv, klass)
ary->ptr = ALLOC_N(VALUE, argc);
MEMCPY(ary->ptr, argv, VALUE, argc);
}
ary->len = ary->capa = argc;
return (VALUE)ary;
}
@ -452,12 +452,7 @@ rb_ary_indexes(argc, argv, ary)
new_ary = rb_ary_new2(argc);
for (i=0; i<argc; i++) {
#if 0
rb_ary_store(new_ary, i, rb_ary_entry(ary, NUM2INT(argv[i])));
#else
VALUE v = argv[i];
rb_ary_concat(new_ary, rb_ary_aref(1, &v, ary));
#endif
rb_ary_push(new_ary, rb_ary_aref(1, argv+i, ary));
}
return new_ary;

628
configure vendored

File diff suppressed because it is too large Load diff

View file

@ -177,7 +177,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 memmove mkdir strcasecmp strncasecmp strerror strftime\
strchr strstr strtoul strdup crypt flock vsnprintf\
fnmatch isinf isnan finite)
AC_CHECK_FUNCS(fmod killpg drand48 random wait4 waitpid syscall getcwd\

View file

@ -514,7 +514,6 @@ Init_Exception()
rb_eSystemExit = rb_define_class("SystemExit", rb_eException);
rb_eFatal = rb_define_class("fatal", rb_eException);
rb_eInterrupt = rb_define_class("Interrupt", rb_eException);
rb_eInterrupt = rb_define_class("Interrupt", rb_eException);
rb_eSignal = rb_define_class("SignalException", rb_eException);
rb_eStandardError = rb_define_class("StandardError", rb_eException);

View file

@ -7,6 +7,7 @@
#fcntl
#kconv
#md5
#pty
#socket
#tkutil
#tcltklib

View file

@ -10,10 +10,11 @@
#else
# ifdef HAVE_NCURSES_CURSES_H
# include <ncurses/curses.h>
# else
#ifdef __hpux
#include <curses_colr/curses.h>
#else
# ifdef HAVE_CURSES_COLR_CURSES_H
# include <varargs.h>
# include <curses_colr/curses.h>
# else
# include <curses.h>
# if (defined(__bsdi__) || defined(__NetBSD__)) && !defined(_maxx)
# define _maxx maxx

View file

@ -1,6 +1,6 @@
#! /usr/local/bin/ruby
$".push 'mkmf.rb' #"
$".push 'mkmf.rb'
if ARGV[0] == 'static'
$force_static = TRUE
@ -25,11 +25,8 @@ if $top_srcdir !~ "^/"
# get absolute path
$top_srcdir = File.expand_path($top_srcdir)
end
$topdir = ".."
if $topdir !~ "^/"
# get absolute path
$topdir = File.expand_path($topdir)
end
# get absolute path
$topdir = File.expand_path("..")
$ruby_inc = $top_srcdir
load "#{$top_srcdir}/lib/find.rb"
@ -58,15 +55,15 @@ end
def older(file1, file2)
if !File.exist?(file1) then
return TRUE
return true
end
if !File.exist?(file2) then
return FALSE
return false
end
if File.mtime(file1) < File.mtime(file2)
return TRUE
return true
end
return FALSE
return false
end
if PLATFORM == "m68k-human"
@ -97,12 +94,18 @@ def xsystem command
return r
end
def try_link(src, opt="")
def try_link0(src, opt="")
cfile = open("conftest.c", "w")
cfile.print src
cfile.close
xsystem(format(LINK, $CFLAGS, $LDFLAGS, opt))
end
def try_link(src, opt="")
begin
xsystem(format(LINK, $CFLAGS, $LDFLAGS, opt))
try_link0(src, opt)
ensure
system "rm -f conftest*"
end
end
@ -110,19 +113,27 @@ def try_cpp(src, opt=$CFLAGS)
cfile = open("conftest.c", "w")
cfile.print src
cfile.close
xsystem(format(CPP, opt))
begin
xsystem(format(CPP, opt))
ensure
system "rm -f conftest*"
end
end
def egrep_cpp(pat, src, opt=$CFLAGS)
cfile = open("conftest.c", "w")
cfile.print src
cfile.close
xsystem(format(CPP+"|egrep #{pat}", opt))
begin
xsystem(format(CPP+"|egrep #{pat}", opt))
ensure
system "rm -f conftest*"
end
end
def try_run(src, opt="")
begin
if try_link(src, opt)
if try_link0(src, opt)
if xsystem("./conftest")
true
else
@ -131,6 +142,8 @@ def try_run(src, opt="")
else
nil
end
ensure
system "rm -f conftest*"
end
end
@ -160,9 +173,9 @@ def have_library(lib, func="main")
else
$libs = "-l" + lib
end
return TRUE
return true
else
return FALSE
return false
end
end
@ -177,8 +190,8 @@ int main() { return 0; }
int t() { #{func}(); return 0; }
SRC
$lib_cache[lib] = 'no'
$cache_mod = TRUE
return FALSE
$cache_mod = true
return false
end
else
if $libs
@ -190,17 +203,17 @@ SRC
$libs = libs
$lib_cache[lib] = 'yes'
$cache_mod = TRUE
return TRUE
$cache_mod = true
return true
end
def have_func(func)
if $func_cache[func]
if $func_cache[func] == "yes"
$defs.push(format("-DHAVE_%s", func.upcase))
return TRUE
return true
else
return FALSE
return false
end
end
@ -213,13 +226,13 @@ int main() { return 0; }
int t() { #{func}(); return 0; }
SRC
$func_cache[func] = 'no'
$cache_mod = TRUE
return FALSE
$cache_mod = true
return false
end
$defs.push(format("-DHAVE_%s", func.upcase))
$func_cache[func] = 'yes'
$cache_mod = TRUE
return TRUE
$cache_mod = true
return true
end
def have_header(header)
@ -227,9 +240,9 @@ def have_header(header)
if $hdr_cache[header] == "yes"
header.tr!("a-z./\055", "A-Z___")
$defs.push(format("-DHAVE_%s", header))
return TRUE
return true
else
return FALSE
return false
end
end
@ -237,14 +250,14 @@ def have_header(header)
#include <#{header}>
SRC
$hdr_cache[header] = 'no'
$cache_mod = TRUE
return FALSE
$cache_mod = true
return false
end
$hdr_cache[header] = 'yes'
header.tr!("a-z./\055", "A-Z___")
$defs.push(format("-DHAVE_%s", header))
$cache_mod = TRUE
return TRUE
$cache_mod = true
return true
end
def arg_config(config, default=nil)
@ -291,7 +304,7 @@ def create_header()
end
def create_makefile(target)
system "rm -f conftest*"
if $libs and "@DLEXT@" == "o"
libs = $libs.split
for lib in libs

View file

@ -1,12 +1,13 @@
#! /usr/local/bin/ruby
$".push 'mkmf.rb' #"
$".push 'mkmf.rb'
if ARGV[0] == 'static'
$force_static = TRUE
ARGV.shift
elsif ARGV[0] == 'install'
$install = TRUE
$destdir = ARGV[1] || ''
ARGV.shift
elsif ARGV[0] == 'clean'
$clean = TRUE
@ -19,15 +20,22 @@ $cache_mod = FALSE;
$lib_cache = {}
$func_cache = {}
$hdr_cache = {}
$top_srcdir = ".."
if $top_srcdir !~ "^/"
# get absolute path
$top_srcdir = File.expand_path($top_srcdir)
end
$topdir = File.expand_path("..")
$topdir = File.expand_path($topdir)
$ruby_inc = $top_srcdir
#$dllopt = '-MD'
$dllopt = ''
load "#{$top_srcdir}/lib/find.rb"
if File.exist?("config.cache") then
f = open("config.cache", "r")
while f.gets
case $_
when /^lib: ([\w_]+) (yes|no)/
when /^lib: (.+) (yes|no)/
$lib_cache[$1] = $2
when /^func: ([\w_]+) (yes|no)/
$func_cache[$1] = $2
@ -40,40 +48,98 @@ end
def older(file1, file2)
if !File.exist?(file1) then
return TRUE
return true
end
if !File.exist?(file2) then
return FALSE
return false
end
if File.mtime(file1) < File.mtime(file2)
return TRUE
return true
end
return FALSE
return false
end
#LINK = "cl -o conftest.exe -I../.. -Zi -O -I. %s conftest.c %s > nul"
LINK = "cl -o conftest.exe -Zi -O %s conftest.c %s > nul"
CPP = "cl -E -I../.. -I../../missing -I../../win32 -I. -Zi -O %s conftest.c > nul"
CFLAGS = "-g -O2"
LINK = "gcc -o conftest -I#$topdir -I#$top_srcdir -I${prefix}/include #{CFLAGS} %s %s conftest.c -ldl -lcrypt -lm %s"
CPP = "gcc -E -I#$topdir -I#$top_srcdir -I${prefix}/include #{CFLAGS} %s conftest.c"
def try_link(libs)
#print(format("try #{LINK}", $CFLAGS, $LDFLAGS, libs))
#system(format(LINK, $CFLAGS, $LDFLAGS, libs))
print(format("try #{LINK}\n", $CFLAGS, libs))
system(format(LINK, $CFLAGS, libs))
$null = open("nul", "w")
$orgerr = $stderr.dup
$orgout = $stdout.dup
def xsystem command
if $DEBUG
return system(command)
end
$stderr.reopen($null)
$stdout.reopen($null)
r = system(command)
$stderr.reopen($orgerr)
$stdout.reopen($orgout)
return r
end
def try_cpp
system(format(CPP, $CFLAGS))
def try_link(src, opt="")
cfile = open("conftest.c", "w")
cfile.print src
cfile.close
begin
xsystem(format(LINK, $CFLAGS, $LDFLAGS, opt))
end
end
def have_library(lib, func)
#print format("have_library(%s, %s)\n", lib, func)
def try_cpp(src, opt=$CFLAGS)
cfile = open("conftest.c", "w")
cfile.print src
cfile.close
xsystem(format(CPP, opt))
end
def egrep_cpp(pat, src, opt=$CFLAGS)
cfile = open("conftest.c", "w")
cfile.print src
cfile.close
xsystem(format(CPP+"|egrep #{pat}", opt))
end
def try_run(src, opt="")
begin
if try_link(src, opt)
if xsystem("./conftest")
true
else
false
end
else
nil
end
end
end
def install_rb(mfile)
path = []
dir = []
Find.find("lib") do |f|
next unless /\.rb$/ =~ f
f = f[4..-1]
path.push f
dir |= File.dirname(f)
end
for f in dir
next if f == "."
mfile.printf "\t@test -d $(DESTDIR)$(pkglibdir)/%s || mkdir $(DESTDIR)$(pkglibdir)/%s\n", f, f
end
for f in path
mfile.printf "\t$(INSTALL_DATA) lib/%s $(DESTDIR)$(pkglibdir)/%s\n", f, f
end
end
def have_library(lib, func="main")
if $lib_cache[lib]
if $lib_cache[lib] == "yes"
if $libs#
$libs = lib + ".lib " + $libs
if $libs
$libs = "-l" + lib + " " + $libs
else
$libs = lib + ".lib "
$libs = "-l" + lib
end
return TRUE
else
@ -81,30 +147,26 @@ def have_library(lib, func)
end
end
cfile = open("conftest.c", "w")
cfile.printf "\
#include <windows.h>
#include <winsock.h>
int main() { return 0; }
int t() { %s(); return 0; }
", func
cfile.close
begin
if func && func != ""
if $libs
libs = lib + ".lib " + $libs
libs = "-l" + lib + " " + $libs
else
libs = lib + ".lib"
libs = "-l" + lib
end
#print "libs=#{libs}\n"
unless try_link(libs)
#print "fail : #{libs}\n"
unless try_link(<<"SRC", libs)
int main() { return 0; }
int t() { #{func}(); return 0; }
SRC
$lib_cache[lib] = 'no'
$cache_mod = TRUE
return FALSE
end
ensure
system "rm -f conftest*"
else
if $libs
libs = "-l" + lib + " " + $libs
else
libs = "-l" + lib
end
end
$libs = libs
@ -123,28 +185,17 @@ def have_func(func)
end
end
cfile = open("conftest.c", "w")
cfile.printf "\
#include <windows.h>
#include <winsock.h>
//char %s();
int main() { return 0; }
int t() { %s(); return 0; }
", func, func
cfile.close
libs = $libs
libs = "" if libs == nil
begin
#print "libs=#{libs}\n"
unless try_link(libs)
$func_cache[func] = 'no'
$cache_mod = TRUE
return FALSE
end
ensure
system "rm -f conftest*"
unless try_link(<<"SRC", libs)
char #{func}();
int main() { return 0; }
int t() { #{func}(); return 0; }
SRC
$func_cache[func] = 'no'
$cache_mod = TRUE
return FALSE
end
$defs.push(format("-DHAVE_%s", func.upcase))
$func_cache[func] = 'yes'
@ -163,20 +214,12 @@ def have_header(header)
end
end
cfile = open("conftest.c", "w")
cfile.printf "\
#include <%s>
", header
cfile.close
begin
unless try_cpp
$hdr_cache[header] = 'no'
$cache_mod = TRUE
return FALSE
end
ensure
system "rm -f conftest*"
unless try_cpp(<<"SRC")
#include <#{header}>
SRC
$hdr_cache[header] = 'no'
$cache_mod = TRUE
return FALSE
end
$hdr_cache[header] = 'yes'
header.tr!("a-z./\055", "A-Z___")
@ -185,6 +228,38 @@ def have_header(header)
return TRUE
end
def arg_config(config, default=nil)
unless defined? $configure_args
$configure_args = {}
for arg in " --prefix=/usr --with-dbm-include=/usr/include/db1".split
next unless /^--/ =~ arg
if /=/ =~ arg
$configure_args[$`] = $'
else
$configure_args[arg] = default
end
end
end
$configure_args.fetch(config, default)
end
def with_config(config, default=nil)
unless /^--with-/ =~ config
config = '--with-' + config
end
arg_config(config, default)
end
def enable_config(config, default=nil)
if arg_config("--enable-"+config, true)
true
elsif arg_config("--disable-"+config, false)
false
else
default
end
end
def create_header()
if $defs.length > 0
hfile = open("extconf.h", "w")
@ -198,103 +273,121 @@ end
def create_makefile(target)
if $libs and "obj" == "obj"
if $libs and "so" == "o"
libs = $libs.split
for lib in libs
lib.sub!(/(.*)/, '"\1.lib"') if /.lib$/ !~ lib
lib.sub!(/-l(.*)/, '"lib\1.a"')
end
$defs.push(format("-DEXTLIB='%s'", libs.join(",")))
end
$libs = "" unless $libs
$DLDFLAGS = ''
if PLATFORM =~ /beos/
if $libs
$libs = $libs + " -lruby"
else
$libs = "-lruby"
end
$DLDFLAGS = $DLDFLAGS + " -L" + $topdir
end
$srcdir = $top_srcdir + "/ext/" + $mdir
mfile = open("Makefile", "w")
mfile.printf "\
SHELL = $(COMPSEC)
SHELL = /bin/sh
#### Start of system configuration section. ####
srcdir = .
VPATH = .
srcdir = #{$srcdir}
CC = cl
hdrdir = #{$topdir}
CFLAGS = %s -I../.. -I../../missing -I../../win32 -I. -O -DNT %s #$CFLAGS %s
CC = gcc
RUBYLIB = ../../ruby.lib
DLDFLAGS = /DLL
LDSHARED =
", if $static then "" else "-fpic" end, $dllopt, $defs.join(" ")
if $force_static
print "static\n"
else
print "non static\n"
end
prefix = /usr
CFLAGS = %s -I#{$topdir} -I#{$top_srcdir} -I${prefix}/include #{CFLAGS} #$CFLAGS %s
DLDFLAGS = #$DLDFLAGS #$LDFLAGS
LDSHARED = gcc -shared
", if $static then "" else "-fPIC" end, $defs.join(" ")
mfile.printf "\
libdir = /usr/local/lib/ruby/i386-mswin32
RUBY_INSTALL_NAME = ruby
prefix = /usr
exec_prefix = ${prefix}
libdir = ${exec_prefix}/lib
pkglibdir = $(libdir)/ruby/1.3
archdir = $(pkglibdir)/i586-linux
ruby_inc = #{$ruby_inc}
#### End of system configuration section. ####
"
mfile.printf "LOCAL_LIBS = %s\n", $local_libs if $local_libs
mfile.printf "LOCAL_LIBS = %s\n", $local_libs unless $local_libs == ""
mfile.printf "LIBS = %s\n", $libs
mfile.printf "OBJS = "
if !$objs then
$objs = Dir["*.c"]
for f in $objs
f.sub!(/\.c$/, ".obj")
$objs = []
for f in Dir["#{$top_srcdir}/ext/#{$mdir}/*.{c,cc}"]
f = File.basename(f)
f.sub!(/\.(c|cc)$/, ".o")
$objs.push f
end
end
mfile.printf $objs.join(" ")
mfile.printf "\n"
dots = if "ginstall -c" =~ /^\// then "" else "../" end
mfile.printf "\
TARGET = %s.%s
mfile.printf <<EOS
TARGET = #{target}
DLLIB = $(TARGET).#{$static ? "a" : "so"}
INSTALL = %sginstall -c
INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
DEFFILE = %s.def
binsuffix =
all: $(TARGET)
all: $(DLLIB)
clean:; @rm -f *.obj *.lib *.exp vc*.pdb *.bak *.def
clean:; @rm -f *.o *.a *.so *.sl
@rm -f Makefile extconf.h conftest.*
@rm -f core ruby$(binsuffix) *~
realclean: clean
", target,
if $force_static then "lib" else "dll" end, dots, target
realclean: clean
EOS
mfile.printf <<EOS
install:
@test -d $(DESTDIR)$(libdir) || mkdir $(DESTDIR)$(libdir)
@test -d $(DESTDIR)$(pkglibdir) || mkdir $(DESTDIR)$(pkglibdir)
@test -d $(DESTDIR)$(archdir) || mkdir $(DESTDIR)$(archdir)
EOS
if !$static
mfile.printf "\
install: $(libdir)/$(TARGET)
$(libdir)/$(TARGET): $(TARGET)
@test -d $(libdir) || mkdir $(libdir)
$(INSTALL) $(TARGET) $(libdir)/$(TARGET)
"
else
mfile.printf "\
install:;
$(INSTALL) $(DLLIB) $(DESTDIR)$(archdir)/$(DLLIB)
"
end
install_rb(mfile)
mfile.printf "\n"
if $force_static
mfile.printf "\
$(TARGET): $(OBJS)
lib /OUT:$(TARGET) $(OBJS)
if $static
mfile.printf "\
$(DLLIB): $(OBJS)
ar cru $(DLLIB) $(OBJS)
@-ranlib $(DLLIB) 2> /dev/null || true
"
else
mfile.printf "\
$(DEFFILE):
echo $(DEFFILE)
$(TARGET): $(OBJS) $(DEFFILE)
cl -DLL -o$(TARGET) $(OBJS) $(RUBYLIB) -link /DEF:$(DEFFILE)
$(DLLIB): $(OBJS)
$(LDSHARED) $(DLDFLAGS) -o $(DLLIB) $(OBJS) $(LIBS) $(LOCAL_LIBS)
"
elsif not File.exist?(target + ".c") and not File.exist?(target + ".cc")
mfile.printf "\
$(DLLIB): $(OBJS)
ld $(DLDFLAGS) -r -o $(DLLIB) $(OBJS)
"
end
@ -307,27 +400,7 @@ $(TARGET): $(OBJS) $(DEFFILE)
dfile.close
end
mfile.close
if $static
#printf format("push %s,%s\n", $static, target); ##debug print##
$extlist.push [$static,target]
end
end
#template of .def file.
def create_def(basename)
defname = sprintf("%s.def", basename)
f = open(defname, "w")
f.printf "\
LIBRARY %s.dll
CODE LOADONCALL
DATA LOADONCALL
DESCRIPTION 'win32 %s.dll'
EXPORTS
Init_%s
", basename, basename, basename
f.close
end
def extmake(target)
@ -339,88 +412,87 @@ def extmake(target)
return if $nodynamic and not $static
$local_libs = nil
$libs = nil
$objs = nil
$CFLAGS = nil
$LDFLAGS = nil
$libs = "-lc"
$local_libs = "" # to be assigned in extconf.rb
$CFLAGS = ""
$LDFLAGS = ""
begin
system "mkdir", target unless File.directory?(target)
Dir.chdir target
$mdir = target
if $static_ext.size > 0 ||
!File.exist?("./Makefile") ||
older("./Makefile", "../Setup") ||
older("./Makefile", "#{$top_srcdir}/ext/Setup") ||
older("./Makefile", "../extmk.rb") ||
older("./Makefile", "./extconf.rb")
older("./Makefile", "#{$top_srcdir}/ext/#{target}/extconf.rb")
then
$defs = []
if File.exist?("extconf.rb")
load "extconf.rb"
if File.exist?("#{$top_srcdir}/ext/#{target}/extconf.rb")
load "#{$top_srcdir}/ext/#{target}/extconf.rb"
else
create_makefile(target);
end
end
if !File.exist?("#{target}.def")
create_def(target)
end
if File.exist?("./Makefile")
if $static
$extlist.push [$static,target]
end
if $install
system "nmake install"
if File.directory? "./lib"
for i in Dir["./lib/*.rb"]
system "ginstall -c #{i} /usr/local/lib/ruby/i386-mswin32"
end
end
system "make install DESTDIR=#{$destdir}"
elsif $clean
system "nmake clean"
system "make clean"
else
#print "!!!make!!!\n"
system "nmake all"
system "make all" or exit
end
end
if $static
$extlibs = " "
$extlibs += " " + $LDFLAGS if $LDFLAGS
$extlibs += " " + $local_libs if $local_libs
$extlibs ||= ""
$extlibs += " " + $LDFLAGS unless $LDFLAGS == ""
$extlibs += " " + $libs if $libs
$extlibs += " " + $local_libs unless $local_libs == ""
end
ensure
system "rm -f conftest*"
Dir.chdir ".."
end
end
# get static-link modules
$static_ext = {}
if File.file? "./Setup"
f = open("./Setup")
while f.gets()
$_.chop!
sub!(/#.*$/, '')
next if /^\s*$/
#print $_, "\n"
if /^option +nodynamic/
$nodynamic = TRUE
next
for setup in ["Setup", "#{$top_srcdir}/ext/Setup"]
if File.file? setup
f = open(setup)
while f.gets()
$_.chomp!
sub!(/#.*$/, '')
next if /^\s*$/
if /^option +nodynamic/
$nodynamic = TRUE
next
end
$static_ext[$_.split[0]] = TRUE
end
$static_ext[$_.split[0]] = TRUE
f.close
break
end
f.close
end
for d in Dir["*"]
for d in Dir["#{$top_srcdir}/ext/*"]
File.directory?(d) || next
File.file?(d + "/MANIFEST") || next
d = $1 if d =~ /\/([\/]*)$/
d = File.basename(d)
if $install
print "installing ", d, "\n"
elsif $clean
print "cleaning ", d, "\n"
else
print "compiling ", d, "\n"
if PLATFORM =~ /-aix/ and older("../ruby.imp", "../miniruby")
load "#{$top_srcdir}/ext/aix_mksym.rb"
end
end
extmake(d)
end
@ -440,62 +512,64 @@ if $cache_mod
end
exit if $install or $clean
$extinit = " " unless $extinit
$extobjs = ""
$extinit = "" unless $extinit
ruby = "ruby"
miniruby = "miniruby"
if $extlist.size > 0
for s,t in $extlist
#for s,t in $static_ext
#f = format("%s/%s.obj", s, t)
#f = format("%s/%s.obj", s, s)
l = format("%s/%s.lib", s, s)
if File.exist?(l)
f = format("%s/%s.a", s, t)
if File.exist?(f)
$extinit += format("\
\tInit_%s();\n\
\trb_provide(\"%s.so\");\n\
", s, s)
", t, t)
$extobjs = "" unless $extobjs
$extobjs += "ext/"
#$extobjs += f # *.obj
$extobjs += l # *.lib
$extobjs += f
$extobjs += " "
else
FALSE
end
end
if older("extinit.c", "Setup")
if older("extinit.c", "#{$top_srcdir}/ext/Setup")
f = open("extinit.c", "w")
f.printf "void Init_ext() {\n"
f.printf $extinit
f.printf "}\n"
f.close
end
if older("extinit.obj", "extinit.c")
cmd = "cl -Zi -O -I. -c extinit.c"
if older("extinit.o", "extinit.c")
cmd = "gcc " + CFLAGS + " -c extinit.c"
print cmd, "\n"
system cmd or exit 1
end
Dir.chdir ".."
if older("ruby.exe", "ext/Setup") or older("ruby.exe", "miniruby.exe")
`rm -f ruby.exe`
if older(ruby, "#{$top_srcdir}/ext/Setup") or older(ruby, miniruby)
system("rm -f #{ruby}")
end
$extobjs = "ext/extinit.obj " + $extobjs
#$extlibs = ""
#print "EXTLIBS=#{$extlibs}\n"
$extlibs.gsub!("-L/usr/local/lib", "") if $extlibs
$extlibs.gsub!(" +", " ") if $extlibs
#print "EXTLIBS=#{$extlibs}\n"
system format('nmake ruby.exe EXTOBJS="%s" EXTLIBS="%s"', $extobjs, $extlibs)
if $extobjs
$extobjs = "ext/extinit.o " + $extobjs
else
$extobjs = "ext/extinit.o "
end
if PLATFORM =~ /m68k-human|beos/
$extlibs.gsub!("-L/usr/local/lib", "") if $extlibs
end
system format(%[make #{ruby} EXTOBJS="%s" EXTLIBS="%s"], $extobjs, $extlibs)
else
Dir.chdir ".."
if older("ruby.exe", "miniruby.exe")
`rm -f ruby.exe`
`cp miniruby.exe ruby.exe`
if older(ruby, miniruby)
system("rm -f #{ruby}")
system("make #{ruby}")
end
end
#Local variables:
# mode: ruby
#end:

View file

@ -17,6 +17,7 @@ if readline_dir
end
have_library("termcap", "tgetnum")
have_library("curses", "tgetnum")
if have_header("readline/readline.h") and
have_header("readline/history.h") and
have_library("readline", "readline")

View file

@ -65,6 +65,14 @@
#define freehostent freehostent__compat
#define freeaddrinfo freeaddrinfo__compat
#ifndef __P
# ifdef HAVE_PROTOTYPES 1
# define __P(args) args
# else
# define __P(args)
# endif
#endif
/* special compatibility hack -- end*/

View file

@ -149,6 +149,8 @@ EOF
$CFLAGS="-DHAVE_SA_LEN "+$CFLAGS
end
have_header("sys/sysctl.h")
$getaddr_info_ok = false
if try_run(<<EOF)
#include <sys/types.h>
@ -270,6 +272,8 @@ else
$CFLAGS="-I. "+$CFLAGS
$objs += "getaddrinfo.o"
$objs += "getnameinfo.o"
have_func("inet_ntop")
have_func("inet_pton")
end
if sockaddr_storage
@ -277,6 +281,7 @@ if sockaddr_storage
end
have_header("sys/un.h")
if have_func(test_func)
have_func("hsterror")
unless have_func("gethostname")

View file

@ -40,7 +40,9 @@
#include <sys/types.h>
#include <sys/param.h>
#ifdef HAVE_SYSCTL_H
#include <sys/sysctl.h>
#endif
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
@ -48,11 +50,13 @@
#include <netdb.h>
#include <resolv.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <ctype.h>
#include <unistd.h>
#include "config.h"
#include "addrinfo.h"
#include "sockport.h"
@ -160,7 +164,7 @@ if (pai->ai_flags & AI_CANONNAME) {\
memcpy(ai, pai, sizeof(struct addrinfo));\
(ai)->ai_addr = (struct sockaddr *)((ai) + 1);\
memset((ai)->ai_addr, 0, (afd)->a_socklen);\
SET_SA_LEN(*(ai)->ai_addr, (ai)->ai_addrlen = (afd)->a_socklen);\
SET_SA_LEN((ai)->ai_addr, (ai)->ai_addrlen = (afd)->a_socklen);\
(ai)->ai_addr->sa_family = (ai)->ai_family = (afd)->a_af;\
((struct sockinet *)(ai)->ai_addr)->si_port = port;\
p = (char *)((ai)->ai_addr);\
@ -206,6 +210,27 @@ str_isnumber(p)
return YES;
}
#ifndef HAVE_INET_PTON
#ifndef INADDR_NONE
# define INADDR_NONE 0xffffffff
#endif
static int
inet_pton(af, hostname, pton)
int af;
const char *hostname;
char *pton;
{
struct in_addr in;
in.s_addr = inet_addr(hostname);
if (in.s_addr == INADDR_NONE)
return 0;
memcpy(pton, &in, sizeof(in));
return 1;
}
#endif
int
getaddrinfo(hostname, servname, hints, res)
const char *hostname, *servname;

View file

@ -44,6 +44,7 @@
#include <string.h>
#include <stddef.h>
#include "config.h"
#include "addrinfo.h"
#include "sockport.h"
@ -81,6 +82,21 @@ struct sockinet {
#define ENI_FAMILY 5
#define ENI_SALEN 6
#ifndef HAVE_INET_NTOP
static char *
inet_ntop(af, addr, numaddr, numaddr_len)
int af;
char *addr;
char *numaddr;
int numaddr_len;
{
struct in_addr in;
memcpy(&in.s_addr, addr, sizeof(in.s_addr));
strcpy(numaddr, inet_ntoa(in));
return numaddr;
}
#endif
int
getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
const struct sockaddr *sa;
@ -102,6 +118,7 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
int h_error;
char numserv[512];
char numaddr[512];
extern int h_errno;
if (sa == NULL)
return ENI_NOSOCKET;

View file

@ -1042,7 +1042,7 @@ udp_connect(sock, host, port)
GetOpenFile(sock, fptr);
res0 = udp_addrsetup(fptr, host, port);
for (res0 = res; res; res = res->ai_next) {
for (res = res0; res; res = res->ai_next) {
retry:
if (connect(fileno(fptr->f), res->ai_addr, res->ai_addrlen) >= 0) {
freeaddrinfo(res0);
@ -1804,7 +1804,7 @@ gotsap:
static VALUE mConst;
static void
sock_rb_define_const(name, value)
sock_define_const(name, value)
char *name;
int value;
{
@ -1904,248 +1904,248 @@ Init_socket()
/* constants */
mConst = rb_define_module_under(rb_cSocket, "Constants");
sock_rb_define_const("SOCK_STREAM", SOCK_STREAM);
sock_rb_define_const("SOCK_DGRAM", SOCK_DGRAM);
sock_define_const("SOCK_STREAM", SOCK_STREAM);
sock_define_const("SOCK_DGRAM", SOCK_DGRAM);
#ifdef SOCK_RAW
sock_rb_define_const("SOCK_RAW", SOCK_RAW);
sock_define_const("SOCK_RAW", SOCK_RAW);
#endif
#ifdef SOCK_RDM
sock_rb_define_const("SOCK_RDM", SOCK_RDM);
sock_define_const("SOCK_RDM", SOCK_RDM);
#endif
#ifdef SOCK_SEQPACKET
sock_rb_define_const("SOCK_SEQPACKET", SOCK_SEQPACKET);
sock_define_const("SOCK_SEQPACKET", SOCK_SEQPACKET);
#endif
#ifdef SOCK_PACKET
sock_rb_define_const("SOCK_PACKET", SOCK_PACKET);
sock_define_const("SOCK_PACKET", SOCK_PACKET);
#endif
sock_rb_define_const("AF_INET", AF_INET);
sock_define_const("AF_INET", AF_INET);
#ifdef PF_INET
sock_rb_define_const("PF_INET", PF_INET);
sock_define_const("PF_INET", PF_INET);
#endif
#ifdef AF_UNIX
sock_rb_define_const("AF_UNIX", AF_UNIX);
sock_rb_define_const("PF_UNIX", PF_UNIX);
sock_define_const("AF_UNIX", AF_UNIX);
sock_define_const("PF_UNIX", PF_UNIX);
#endif
#ifdef AF_AX25
sock_rb_define_const("AF_AX25", AF_AX25);
sock_rb_define_const("PF_AX25", PF_AX25);
sock_define_const("AF_AX25", AF_AX25);
sock_define_const("PF_AX25", PF_AX25);
#endif
#ifdef AF_IPX
sock_rb_define_const("AF_IPX", AF_IPX);
sock_rb_define_const("PF_IPX", PF_IPX);
sock_define_const("AF_IPX", AF_IPX);
sock_define_const("PF_IPX", PF_IPX);
#endif
#ifdef AF_APPLETALK
sock_rb_define_const("AF_APPLETALK", AF_APPLETALK);
sock_rb_define_const("PF_APPLETALK", PF_APPLETALK);
sock_define_const("AF_APPLETALK", AF_APPLETALK);
sock_define_const("PF_APPLETALK", PF_APPLETALK);
#endif
#ifdef AF_UNSPEC
sock_rb_define_const("AF_UNSPEC", AF_UNSPEC);
sock_rb_define_const("PF_UNSPEC", PF_UNSPEC);
sock_define_const("AF_UNSPEC", AF_UNSPEC);
sock_define_const("PF_UNSPEC", PF_UNSPEC);
#endif
#ifdef AF_INET6
sock_rb_define_const("AF_INET6", AF_INET6);
sock_rb_define_const("PF_INET6", PF_INET6);
sock_define_const("AF_INET6", AF_INET6);
sock_define_const("PF_INET6", PF_INET6);
#endif
sock_rb_define_const("MSG_OOB", MSG_OOB);
sock_define_const("MSG_OOB", MSG_OOB);
#ifdef MSG_PEEK
sock_rb_define_const("MSG_PEEK", MSG_PEEK);
sock_define_const("MSG_PEEK", MSG_PEEK);
#endif
#ifdef MSG_DONTROUTE
sock_rb_define_const("MSG_DONTROUTE", MSG_DONTROUTE);
sock_define_const("MSG_DONTROUTE", MSG_DONTROUTE);
#endif
sock_rb_define_const("SOL_SOCKET", SOL_SOCKET);
sock_define_const("SOL_SOCKET", SOL_SOCKET);
#ifdef SOL_IP
sock_rb_define_const("SOL_IP", SOL_IP);
sock_define_const("SOL_IP", SOL_IP);
#endif
#ifdef SOL_IPX
sock_rb_define_const("SOL_IPX", SOL_IPX);
sock_define_const("SOL_IPX", SOL_IPX);
#endif
#ifdef SOL_AX25
sock_rb_define_const("SOL_AX25", SOL_AX25);
sock_define_const("SOL_AX25", SOL_AX25);
#endif
#ifdef SOL_ATALK
sock_rb_define_const("SOL_ATALK", SOL_ATALK);
sock_define_const("SOL_ATALK", SOL_ATALK);
#endif
#ifdef SOL_TCP
sock_rb_define_const("SOL_TCP", SOL_TCP);
sock_define_const("SOL_TCP", SOL_TCP);
#endif
#ifdef SOL_UDP
sock_rb_define_const("SOL_UDP", SOL_UDP);
sock_define_const("SOL_UDP", SOL_UDP);
#endif
#ifdef SO_DEBUG
sock_rb_define_const("SO_DEBUG", SO_DEBUG);
sock_define_const("SO_DEBUG", SO_DEBUG);
#endif
sock_rb_define_const("SO_REUSEADDR", SO_REUSEADDR);
sock_define_const("SO_REUSEADDR", SO_REUSEADDR);
#ifdef SO_TYPE
sock_rb_define_const("SO_TYPE", SO_TYPE);
sock_define_const("SO_TYPE", SO_TYPE);
#endif
#ifdef SO_ERROR
sock_rb_define_const("SO_ERROR", SO_ERROR);
sock_define_const("SO_ERROR", SO_ERROR);
#endif
#ifdef SO_DONTROUTE
sock_rb_define_const("SO_DONTROUTE", SO_DONTROUTE);
sock_define_const("SO_DONTROUTE", SO_DONTROUTE);
#endif
#ifdef SO_BROADCAST
sock_rb_define_const("SO_BROADCAST", SO_BROADCAST);
sock_define_const("SO_BROADCAST", SO_BROADCAST);
#endif
#ifdef SO_SNDBUF
sock_rb_define_const("SO_SNDBUF", SO_SNDBUF);
sock_define_const("SO_SNDBUF", SO_SNDBUF);
#endif
#ifdef SO_RCVBUF
sock_rb_define_const("SO_RCVBUF", SO_RCVBUF);
sock_define_const("SO_RCVBUF", SO_RCVBUF);
#endif
#ifdef SO_KEEPALIVE
sock_rb_define_const("SO_KEEPALIVE", SO_KEEPALIVE);
sock_define_const("SO_KEEPALIVE", SO_KEEPALIVE);
#endif
#ifdef SO_OOBINLINE
sock_rb_define_const("SO_OOBINLINE", SO_OOBINLINE);
sock_define_const("SO_OOBINLINE", SO_OOBINLINE);
#endif
#ifdef SO_NO_CHECK
sock_rb_define_const("SO_NO_CHECK", SO_NO_CHECK);
sock_define_const("SO_NO_CHECK", SO_NO_CHECK);
#endif
#ifdef SO_PRIORITY
sock_rb_define_const("SO_PRIORITY", SO_PRIORITY);
sock_define_const("SO_PRIORITY", SO_PRIORITY);
#endif
#ifdef SO_LINGER
sock_rb_define_const("SO_LINGER", SO_LINGER);
sock_define_const("SO_LINGER", SO_LINGER);
#endif
#ifdef SOPRI_INTERACTIVE
sock_rb_define_const("SOPRI_INTERACTIVE", SOPRI_INTERACTIVE);
sock_define_const("SOPRI_INTERACTIVE", SOPRI_INTERACTIVE);
#endif
#ifdef SOPRI_NORMAL
sock_rb_define_const("SOPRI_NORMAL", SOPRI_NORMAL);
sock_define_const("SOPRI_NORMAL", SOPRI_NORMAL);
#endif
#ifdef SOPRI_BACKGROUND
sock_rb_define_const("SOPRI_BACKGROUND", SOPRI_BACKGROUND);
sock_define_const("SOPRI_BACKGROUND", SOPRI_BACKGROUND);
#endif
#ifdef IP_MULTICAST_IF
sock_rb_define_const("IP_MULTICAST_IF", IP_MULTICAST_IF);
sock_define_const("IP_MULTICAST_IF", IP_MULTICAST_IF);
#endif
#ifdef IP_MULTICAST_TTL
sock_rb_define_const("IP_MULTICAST_TTL", IP_MULTICAST_TTL);
sock_define_const("IP_MULTICAST_TTL", IP_MULTICAST_TTL);
#endif
#ifdef IP_MULTICAST_LOOP
sock_rb_define_const("IP_MULTICAST_LOOP", IP_MULTICAST_LOOP);
sock_define_const("IP_MULTICAST_LOOP", IP_MULTICAST_LOOP);
#endif
#ifdef IP_ADD_MEMBERSHIP
sock_rb_define_const("IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP);
sock_define_const("IP_ADD_MEMBERSHIP", IP_ADD_MEMBERSHIP);
#endif
#ifdef IP_DEFAULT_MULTICAST_TTL
sock_rb_define_const("IP_DEFAULT_MULTICAST_TTL", IP_DEFAULT_MULTICAST_TTL);
sock_define_const("IP_DEFAULT_MULTICAST_TTL", IP_DEFAULT_MULTICAST_TTL);
#endif
#ifdef IP_DEFAULT_MULTICAST_LOOP
sock_rb_define_const("IP_DEFAULT_MULTICAST_LOOP", IP_DEFAULT_MULTICAST_LOOP);
sock_define_const("IP_DEFAULT_MULTICAST_LOOP", IP_DEFAULT_MULTICAST_LOOP);
#endif
#ifdef IP_MAX_MEMBERSHIPS
sock_rb_define_const("IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS);
sock_define_const("IP_MAX_MEMBERSHIPS", IP_MAX_MEMBERSHIPS);
#endif
#ifdef IPX_TYPE
sock_rb_define_const("IPX_TYPE", IPX_TYPE);
sock_define_const("IPX_TYPE", IPX_TYPE);
#endif
#ifdef TCP_NODELAY
sock_rb_define_const("TCP_NODELAY", TCP_NODELAY);
sock_define_const("TCP_NODELAY", TCP_NODELAY);
#endif
#ifdef TCP_MAXSEG
sock_rb_define_const("TCP_MAXSEG", TCP_MAXSEG);
sock_define_const("TCP_MAXSEG", TCP_MAXSEG);
#endif
#ifdef EAI_ADDRFAMILY
sock_rb_define_const("EAI_ADDRFAMILY", EAI_ADDRFAMILY);
sock_define_const("EAI_ADDRFAMILY", EAI_ADDRFAMILY);
#endif
#ifdef EAI_AGAIN
sock_rb_define_const("EAI_AGAIN", EAI_AGAIN);
sock_define_const("EAI_AGAIN", EAI_AGAIN);
#endif
#ifdef EAI_BADFLAGS
sock_rb_define_const("EAI_BADFLAGS", EAI_BADFLAGS);
sock_define_const("EAI_BADFLAGS", EAI_BADFLAGS);
#endif
#ifdef EAI_FAIL
sock_rb_define_const("EAI_FAIL", EAI_FAIL);
sock_define_const("EAI_FAIL", EAI_FAIL);
#endif
#ifdef EAI_FAMILY
sock_rb_define_const("EAI_FAMILY", EAI_FAMILY);
sock_define_const("EAI_FAMILY", EAI_FAMILY);
#endif
#ifdef EAI_MEMORY
sock_rb_define_const("EAI_MEMORY", EAI_MEMORY);
sock_define_const("EAI_MEMORY", EAI_MEMORY);
#endif
#ifdef EAI_NODATA
sock_rb_define_const("EAI_NODATA", EAI_NODATA);
sock_define_const("EAI_NODATA", EAI_NODATA);
#endif
#ifdef EAI_NONAME
sock_rb_define_const("EAI_NONAME", EAI_NONAME);
sock_define_const("EAI_NONAME", EAI_NONAME);
#endif
#ifdef EAI_SERVICE
sock_rb_define_const("EAI_SERVICE", EAI_SERVICE);
sock_define_const("EAI_SERVICE", EAI_SERVICE);
#endif
#ifdef EAI_SOCKTYPE
sock_rb_define_const("EAI_SOCKTYPE", EAI_SOCKTYPE);
sock_define_const("EAI_SOCKTYPE", EAI_SOCKTYPE);
#endif
#ifdef EAI_SYSTEM
sock_rb_define_const("EAI_SYSTEM", EAI_SYSTEM);
sock_define_const("EAI_SYSTEM", EAI_SYSTEM);
#endif
#ifdef EAI_BADHINTS
sock_rb_define_const("EAI_BADHINTS", EAI_BADHINTS);
sock_define_const("EAI_BADHINTS", EAI_BADHINTS);
#endif
#ifdef EAI_PROTOCOL
sock_rb_define_const("EAI_PROTOCOL", EAI_PROTOCOL);
sock_define_const("EAI_PROTOCOL", EAI_PROTOCOL);
#endif
#ifdef EAI_MAX
sock_rb_define_const("EAI_MAX", EAI_MAX);
sock_define_const("EAI_MAX", EAI_MAX);
#endif
#ifdef AI_PASSIVE
sock_rb_define_const("AI_PASSIVE", AI_PASSIVE);
sock_define_const("AI_PASSIVE", AI_PASSIVE);
#endif
#ifdef AI_CANONNAME
sock_rb_define_const("AI_CANONNAME", AI_CANONNAME);
sock_define_const("AI_CANONNAME", AI_CANONNAME);
#endif
#ifdef AI_NUMERICHOST
sock_rb_define_const("AI_NUMERICHOST", AI_NUMERICHOST);
sock_define_const("AI_NUMERICHOST", AI_NUMERICHOST);
#endif
#ifdef AI_MASK
sock_rb_define_const("AI_MASK", AI_MASK);
sock_define_const("AI_MASK", AI_MASK);
#endif
#ifdef AI_ALL
sock_rb_define_const("AI_ALL", AI_ALL);
sock_define_const("AI_ALL", AI_ALL);
#endif
#ifdef AI_V4MAPPED_CFG
sock_rb_define_const("AI_V4MAPPED_CFG", AI_V4MAPPED_CFG);
sock_define_const("AI_V4MAPPED_CFG", AI_V4MAPPED_CFG);
#endif
#ifdef AI_ADDRCONFIG
sock_rb_define_const("AI_ADDRCONFIG", AI_ADDRCONFIG);
sock_define_const("AI_ADDRCONFIG", AI_ADDRCONFIG);
#endif
#ifdef AI_V4MAPPED
sock_rb_define_const("AI_V4MAPPED", AI_V4MAPPED);
sock_define_const("AI_V4MAPPED", AI_V4MAPPED);
#endif
#ifdef AI_DEFAULT
sock_rb_define_const("AI_DEFAULT", AI_DEFAULT);
sock_define_const("AI_DEFAULT", AI_DEFAULT);
#endif
#ifdef NI_MAXHOST
sock_rb_define_const("NI_MAXHOST", NI_MAXHOST);
sock_define_const("NI_MAXHOST", NI_MAXHOST);
#endif
#ifdef NI_MAXSERV
sock_rb_define_const("NI_MAXSERV", NI_MAXSERV);
sock_define_const("NI_MAXSERV", NI_MAXSERV);
#endif
#ifdef NI_NOFQDN
sock_rb_define_const("NI_NOFQDN", NI_NOFQDN);
sock_define_const("NI_NOFQDN", NI_NOFQDN);
#endif
#ifdef NI_NUMERICHOST
sock_rb_define_const("NI_NUMERICHOST", NI_NUMERICHOST);
sock_define_const("NI_NUMERICHOST", NI_NUMERICHOST);
#endif
#ifdef NI_NAMEREQD
sock_rb_define_const("NI_NAMEREQD", NI_NAMEREQD);
sock_define_const("NI_NAMEREQD", NI_NAMEREQD);
#endif
#ifdef NI_NUMERICSERV
sock_rb_define_const("NI_NUMERICSERV", NI_NUMERICSERV);
sock_define_const("NI_NUMERICSERV", NI_NUMERICSERV);
#endif
#ifdef NI_DGRAM
sock_rb_define_const("NI_DGRAM", NI_DGRAM);
sock_define_const("NI_DGRAM", NI_DGRAM);
#endif
}

View file

@ -13,7 +13,7 @@
#ifndef SA_LEN
# ifdef HAVE_SA_LEN
# define SA_LEN(sa) (sa)->sin_len
# define SA_LEN(sa) (sa)->sa_len
# else
# ifdef INET6
# define SA_LEN(sa) \
@ -27,7 +27,7 @@
#endif
#ifdef HAVE_SA_LEN
# define SET_SA_LEN(sa, len) (sa)->sin_len = (len)
# define SET_SA_LEN(sa, len) (sa)->sa_len = (len)
#else
# define SET_SA_LEN(sa, len) (len)
#endif

View file

@ -59,7 +59,7 @@ def search_lib(file, func, *path)
for lib in files.sort!.reverse!
lib = File::basename(lib)
lib.sub!(/^lib/, '')
lib.sub!(/\.(a|so)$/, '')
lib.sub!(/\.(a|so(.[0-9.]+)?)$/, '')
if have_library(lib, func)
unless $libraries.include? path
$libraries << path
@ -74,7 +74,7 @@ def search_lib(file, func, *path)
end
if have_header("tcl.h") && have_header("tk.h") &&
search_lib("libX11.{so,a}", "XOpenDisplay",
search_lib("libX11.{so*,a}", "XOpenDisplay",
"/usr/lib", "/usr/openwin/lib", "/usr/X11*/lib") &&
search_lib("libtcl{8*,7*,}.{so,a}", "Tcl_FindExecutable",
"/usr/lib", "/usr/local/lib") &&

View file

@ -60,7 +60,7 @@ Find.find("lib") do |f|
File.install f, dir, 0644, true
end
if PLATFORM =~ /ibm-aix/
if PLATFORM =~ /-aix/
File.install "ruby.imp", archdir, 0644, true
end
for f in Dir["*.h"]

4
io.c
View file

@ -1056,9 +1056,9 @@ rb_io_binmode(io)
return io;
}
static int
int
rb_io_mode_flags(mode)
char *mode;
const char *mode;
{
int flags = 0;

View file

@ -31,9 +31,7 @@ if File.exist?($config_cache) then
end
$srcdir = CONFIG["srcdir"]
#$libdir = CONFIG["libdir"]+"/"+CONFIG["ruby_install_name"]
$libdir = CONFIG["libdir"]+"/ruby"
$libdir += "/"+CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
$libdir = CONFIG["libdir"]+"/ruby/"+CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
$archdir = $libdir+"/"+CONFIG["arch"]
$install = CONFIG["INSTALL_PROGRAM"]
$install_data = CONFIG["INSTALL_DATA"]
@ -79,14 +77,18 @@ def xsystem command
return r
end
def try_link(src, opt="")
def try_link0(src, opt="")
cfile = open("conftest.c", "w")
cfile.print src
cfile.close
xsystem(format(LINK, $CFLAGS, $LDFLAGS, opt))
end
def try_link(src, opt="")
begin
xsystem(format(LINK, $CFLAGS, $LDFLAGS, opt))
try_link0(src, opt)
ensure
system "rm -f conftest.*"
system "rm -f conftest*"
end
end
@ -105,12 +107,8 @@ def egrep_cpp(pat, src, opt=$CFLAGS)
end
def try_run(src, opt="")
begin
if try_link(src, opt)
xsystem("./conftest")
end
ensure
system "rm -f conftest*"
if try_link0(src, opt)
xsystem("./conftest")
end
end
@ -158,23 +156,19 @@ int t() { %s(); return 0; }
", func
cfile.close
begin
if $libs
libs = "-l" + lib + " " + $libs
else
libs = "-l" + lib
end
unless try_link(<<"SRC", libs)
if $libs
libs = "-l" + lib + " " + $libs
else
libs = "-l" + lib
end
unless try_link(<<"SRC", libs)
int main() { return 0; }
int t() { #{func}(); return 0; }
SRC
$lib_cache[lib] = 'no'
$cache_mod = TRUE
print "no\n"
return FALSE
end
ensure
system "rm -f conftest*"
$lib_cache[lib] = 'no'
$cache_mod = TRUE
print "no\n"
return FALSE
end
else
if $libs
@ -208,19 +202,15 @@ def have_func(func)
libs = $libs
libs = "" if libs == nil
begin
unless try_link(<<"SRC", libs)
unless try_link(<<"SRC", libs)
char #{func}();
int main() { return 0; }
int t() { #{func}(); return 0; }
SRC
$func_found[func] = 'no'
$found = TRUE
print "no\n"
return FALSE
end
ensure
system "rm -f conftest*"
$func_found[func] = 'no'
$found = TRUE
print "no\n"
return FALSE
end
$defs.push(format("-DHAVE_%s", func.upcase))
$func_found[func] = 'yes'
@ -244,17 +234,13 @@ def have_header(header)
end
end
begin
unless try_cpp(<<"SRC")
unless try_cpp(<<"SRC")
#include <#{header}>
SRC
$hdr_found[header] = 'no'
$found = TRUE
print "no\n"
return FALSE
end
ensure
system "rm -f conftest*"
$hdr_found[header] = 'no'
$found = TRUE
print "no\n"
return FALSE
end
$hdr_found[header] = 'yes'
header.tr!("a-z./\055", "A-Z___")
@ -311,6 +297,7 @@ end
def create_makefile(target)
print "creating Makefile\n"
system "rm -f conftest*"
STDOUT.flush
if $libs and CONFIG["DLEXT"] == "o"
libs = $libs.split
@ -363,14 +350,15 @@ LOCAL_LIBS = #{$local_libs}
LIBS = #{$libs}
OBJS = #{$objs}
TARGET = #{target}.#{CONFIG["DLEXT"]}
TARGET = #{target}
DLLIB = $(TARGET).#{CONFIG["DLEXT"]}
INSTALL = #{$install}
INSTALL_DATA = #{$install_data}
binsuffix = #{CONFIG["binsuffix"]}
all: $(TARGET)
all: $(DLLIB)
clean:; @rm -f *.o *.so *.sl
@rm -f Makefile extconf.h conftest.*
@ -378,30 +366,30 @@ clean:; @rm -f *.o *.so *.sl
realclean: clean
install: $(archdir)/$(TARGET)
install: $(archdir)/$(DLLIB)
$(archdir)/$(TARGET): $(TARGET)
$(archdir)/$(DLLIB): $(DLLIB)
@test -d $(libdir) || mkdir $(libdir)
@test -d $(archdir) || mkdir $(archdir)
$(INSTALL) $(TARGET) $(archdir)/$(TARGET)
$(INSTALL) $(DLLIB) $(archdir)/$(DLLIB)
EOMF
install_rb(mfile)
mfile.printf "\n"
if CONFIG["DLEXT"] != "o"
mfile.printf <<EOMF
$(TARGET): $(OBJS)
$(LDSHARED) $(DLDFLAGS) -o $(TARGET) $(OBJS) $(LIBS) $(LOCAL_LIBS)
$(DLLIB): $(OBJS)
$(LDSHARED) $(DLDFLAGS) -o $(DLLIB) $(OBJS) $(LIBS) $(LOCAL_LIBS)
EOMF
elsif not File.exist?(target + ".c") and not File.exist?(target + ".cc") or
mfile.print "$(TARGET): $(OBJS)\n"
mfile.print "$(DLLIB): $(OBJS)\n"
case PLATFORM
when "m68k-human"
mfile.printf "ar cru $(TARGET) $(OBJS)\n"
mfile.printf "ar cru $(DLLIB) $(OBJS)\n"
when /-nextstep/
mfile.printf "cc -r $(CFLAGS) -o $(TARGET) $(OBJS)\n"
mfile.printf "cc -r $(CFLAGS) -o $(DLLIB) $(OBJS)\n"
else
mfile.printf "ld $(DLDFLAGS) -r -o $(TARGET) $(OBJS)\n"
mfile.printf "ld $(DLDFLAGS) -r -o $(DLLIB) $(OBJS)\n"
end
end

View file

@ -1,6 +1,5 @@
#include <ctype.h>
#define min(a,b) (((a)>(b))?(b):(a))
int
strcasecmp(p1, p2)
char *p1, *p2;

18
missing/strncasecmp.c Normal file
View file

@ -0,0 +1,18 @@
#include <ctype.h>
int
strncasecmp(p1, p2, len)
char *p1;
char *p2;
int len;
{
for (; len != 0; len--, p1++, p2++) {
if (toupper(*p1) != toupper(*p2)) {
return toupper(*p1) - toupper(*p2);
}
if (*p1 == '\0') {
return 0;
}
}
return 0;
}

View file

@ -63,7 +63,20 @@ File.foreach "config.status" do |$_|
end
print v_fast, v_others
print " CONFIG[\"compile_dir\"] = \"#{File.expand_path(File.dirname($0))}\"\n"
print "end\n"
print <<EOS
CONFIG["compile_dir"] = "#{File.expand_path(File.dirname($0))}"
CONFIG.each_value do |val|
val.gsub!(/\\$\\(([^()]+)\\)/) do |var|
key = $1
if CONFIG.key? key
"\#{CONFIG[\\\"\#{key}\\\"]}"
else
var
end
end
end
end
EOS
config.close
# vi:set sw=2:

373
parse.c
View file

@ -1,99 +1,99 @@
/* A Bison parser, made from parse.y
by GNU Bison version 1.25
by GNU Bison version 1.25.90
*/
#define YYBISON 1 /* Identify Bison output. */
#define kCLASS 258
#define kMODULE 259
#define kDEF 260
#define kUNDEF 261
#define kBEGIN 262
#define kRESCUE 263
#define kENSURE 264
#define kEND 265
#define kIF 266
#define kUNLESS 267
#define kTHEN 268
#define kELSIF 269
#define kELSE 270
#define kCASE 271
#define kWHEN 272
#define kWHILE 273
#define kUNTIL 274
#define kFOR 275
#define kBREAK 276
#define kNEXT 277
#define kREDO 278
#define kRETRY 279
#define kIN 280
#define kDO 281
#define kRETURN 282
#define kYIELD 283
#define kSUPER 284
#define kSELF 285
#define kNIL 286
#define kTRUE 287
#define kFALSE 288
#define kAND 289
#define kOR 290
#define kNOT 291
#define kIF_MOD 292
#define kUNLESS_MOD 293
#define kWHILE_MOD 294
#define kUNTIL_MOD 295
#define kALIAS 296
#define kDEFINED 297
#define klBEGIN 298
#define klEND 299
#define k__LINE__ 300
#define k__FILE__ 301
#define tIDENTIFIER 302
#define tFID 303
#define tGVAR 304
#define tIVAR 305
#define tCONSTANT 306
#define tINTEGER 307
#define tFLOAT 308
#define tSTRING 309
#define tXSTRING 310
#define tREGEXP 311
#define tDSTRING 312
#define tDXSTRING 313
#define tDREGEXP 314
#define tNTH_REF 315
#define tBACK_REF 316
#define tUPLUS 317
#define tUMINUS 318
#define tPOW 319
#define tCMP 320
#define tEQ 321
#define tEQQ 322
#define tNEQ 323
#define tGEQ 324
#define tLEQ 325
#define tANDOP 326
#define tOROP 327
#define tMATCH 328
#define tNMATCH 329
#define tDOT2 330
#define tDOT3 331
#define tAREF 332
#define tASET 333
#define tLSHFT 334
#define tRSHFT 335
#define tCOLON2 336
#define tCOLON3 337
#define tOP_ASGN 338
#define tASSOC 339
#define tLPAREN 340
#define tLBRACK 341
#define tLBRACE 342
#define tSTAR 343
#define tAMPER 344
#define tSYMBEG 345
#define LAST_TOKEN 346
#define kCLASS 257
#define kMODULE 258
#define kDEF 259
#define kUNDEF 260
#define kBEGIN 261
#define kRESCUE 262
#define kENSURE 263
#define kEND 264
#define kIF 265
#define kUNLESS 266
#define kTHEN 267
#define kELSIF 268
#define kELSE 269
#define kCASE 270
#define kWHEN 271
#define kWHILE 272
#define kUNTIL 273
#define kFOR 274
#define kBREAK 275
#define kNEXT 276
#define kREDO 277
#define kRETRY 278
#define kIN 279
#define kDO 280
#define kRETURN 281
#define kYIELD 282
#define kSUPER 283
#define kSELF 284
#define kNIL 285
#define kTRUE 286
#define kFALSE 287
#define kAND 288
#define kOR 289
#define kNOT 290
#define kIF_MOD 291
#define kUNLESS_MOD 292
#define kWHILE_MOD 293
#define kUNTIL_MOD 294
#define kALIAS 295
#define kDEFINED 296
#define klBEGIN 297
#define klEND 298
#define k__LINE__ 299
#define k__FILE__ 300
#define tIDENTIFIER 301
#define tFID 302
#define tGVAR 303
#define tIVAR 304
#define tCONSTANT 305
#define tINTEGER 306
#define tFLOAT 307
#define tSTRING 308
#define tXSTRING 309
#define tREGEXP 310
#define tDSTRING 311
#define tDXSTRING 312
#define tDREGEXP 313
#define tNTH_REF 314
#define tBACK_REF 315
#define tUPLUS 316
#define tUMINUS 317
#define tPOW 318
#define tCMP 319
#define tEQ 320
#define tEQQ 321
#define tNEQ 322
#define tGEQ 323
#define tLEQ 324
#define tANDOP 325
#define tOROP 326
#define tMATCH 327
#define tNMATCH 328
#define tDOT2 329
#define tDOT3 330
#define tAREF 331
#define tASET 332
#define tLSHFT 333
#define tRSHFT 334
#define tCOLON2 335
#define tCOLON3 336
#define tOP_ASGN 337
#define tASSOC 338
#define tLPAREN 339
#define tLBRACK 340
#define tLBRACE 341
#define tSTAR 342
#define tAMPER 343
#define tSYMBEG 344
#define LAST_TOKEN 345
#line 13 "parse.y"
@ -219,7 +219,7 @@ typedef union {
#define YYFLAG -32768
#define YYNTBASE 118
#define YYTRANSLATE(x) ((unsigned)(x) <= 346 ? yytranslate[x] : 212)
#define YYTRANSLATE(x) ((unsigned)(x) <= 345 ? yytranslate[x] : 212)
static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 116,
@ -247,16 +247,16 @@ static const char yytranslate[] = { 0,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
86, 87, 88, 89, 90, 106
2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
87, 88, 89, 90, 106
};
#if YYDEBUG != 0
@ -2182,6 +2182,7 @@ static const short yycheck[] = { 1,
};
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
#line 3 "/usr/share/misc/bison.simple"
/* This file comes from bison-1.25.90. */
/* Skeleton output parser for bison,
Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@ -2198,47 +2199,66 @@ static const short yycheck[] = { 1,
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
#ifndef alloca
#ifdef __GNUC__
#define alloca __builtin_alloca
#else /* not GNU C. */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
#include <alloca.h>
#else /* not sparc */
#if defined (MSDOS) && !defined (__TURBOC__)
#include <malloc.h>
#else /* not MSDOS, or __TURBOC__ */
#if defined(_AIX)
#include <malloc.h>
#pragma alloca
#else /* not MSDOS, __TURBOC__, or _AIX */
#ifdef __hpux
#ifdef __cplusplus
extern "C" {
void *alloca (unsigned int);
};
#else /* not __cplusplus */
void *alloca ();
#endif /* not __cplusplus */
#endif /* __hpux */
#endif /* not _AIX */
#endif /* not MSDOS, or __TURBOC__ */
#endif /* not sparc. */
#endif /* not GNU C. */
#endif /* alloca not defined. */
/* This is the parser code that is written into each bison parser
when the %semantic_parser declaration is not specified in the grammar.
It was written by Richard Stallman by simplifying the hairy parser
used when %semantic_parser is specified. */
#ifndef YYSTACK_USE_ALLOCA
#ifdef alloca
#define YYSTACK_USE_ALLOCA
#else /* alloca not defined */
#ifdef __GNUC__
#define YYSTACK_USE_ALLOCA
#define alloca __builtin_alloca
#else /* not GNU C. */
#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
#define YYSTACK_USE_ALLOCA
#include <alloca.h>
#else /* not sparc */
/* We think this test detects Watcom and Microsoft C. */
/* This used to test MSDOS, but that is a bad idea
since that symbol is in the user namespace. */
#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
#if 0 /* No need for malloc.h, which pollutes the namespace;
instead, just don't use alloca. */
#include <malloc.h>
#endif
#else /* not MSDOS, or __TURBOC__ */
#if defined(_AIX)
/* I don't know what this was needed for, but it pollutes the namespace.
So I turned it off. rms, 2 May 1997. */
/* #include <malloc.h> */
#pragma alloca
#define YYSTACK_USE_ALLOCA
#else /* not MSDOS, or __TURBOC__, or _AIX */
#if 0
#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
and on HPUX 10. Eventually we can turn this on. */
#define YYSTACK_USE_ALLOCA
#define alloca __builtin_alloca
#endif /* __hpux */
#endif
#endif /* not _AIX */
#endif /* not MSDOS, or __TURBOC__ */
#endif /* not sparc */
#endif /* not GNU C */
#endif /* alloca not defined */
#endif /* YYSTACK_USE_ALLOCA not defined */
#ifdef YYSTACK_USE_ALLOCA
#define YYSTACK_ALLOC alloca
#else
#define YYSTACK_ALLOC malloc
#endif
/* Note: there must be only one dollar sign in this file.
It is replaced by the list of actions, each action
as one case of the switch. */
@ -2247,8 +2267,8 @@ void *alloca ();
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY -2
#define YYEOF 0
#define YYACCEPT return(0)
#define YYABORT return(1)
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrlab1
/* Like YYERROR except do call yyerror.
This remains here temporarily to ease the
@ -2329,12 +2349,12 @@ int yydebug; /* nonzero means print parse trace */
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 10000
#endif
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
int yyparse (void);
#endif
/* Define __yy_memcpy. Note that the size argument
should be passed with type unsigned int, because that is what the non-GCC
definitions require. With GCC, __builtin_memcpy takes an arg
of type size_t, but it can handle unsigned int. */
#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
#else /* not GNU C or C++ */
@ -2346,7 +2366,7 @@ static void
__yy_memcpy (to, from, count)
char *to;
char *from;
int count;
unsigned int count;
{
register char *f = from;
register char *t = to;
@ -2361,10 +2381,10 @@ __yy_memcpy (to, from, count)
/* This is the most reliable way to avoid incompatibilities
in available built-in functions on various systems. */
static void
__yy_memcpy (char *to, char *from, int count)
__yy_memcpy (char *to, char *from, unsigned int count)
{
register char *f = from;
register char *t = to;
register char *f = from;
register int i = count;
while (i-- > 0)
@ -2374,7 +2394,7 @@ __yy_memcpy (char *to, char *from, int count)
#endif
#endif
#line 196 "/usr/share/misc/bison.simple"
#line 216 "/usr/share/misc/bison.simple"
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
into yyparse. The argument should have type void *.
@ -2395,6 +2415,15 @@ __yy_memcpy (char *to, char *from, int count)
#define YYPARSE_PARAM_DECL
#endif /* not YYPARSE_PARAM */
/* Prevent warning if -Wstrict-prototypes. */
#ifdef __GNUC__
#ifdef YYPARSE_PARAM
int yyparse (void *);
#else
int yyparse (void);
#endif
#endif
int
yyparse(YYPARSE_PARAM_ARG)
YYPARSE_PARAM_DECL
@ -2423,6 +2452,7 @@ yyparse(YYPARSE_PARAM_ARG)
#endif
int yystacksize = YYINITDEPTH;
int yyfree_stacks = 0;
#ifdef YYPURE
int yychar;
@ -2507,18 +2537,32 @@ yynewstate:
if (yystacksize >= YYMAXDEPTH)
{
yyerror("parser stack overflow");
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#ifdef YYLSP_NEEDED
free (yyls);
#endif
}
return 2;
}
yystacksize *= 2;
if (yystacksize > YYMAXDEPTH)
yystacksize = YYMAXDEPTH;
yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
__yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
__yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
#ifndef YYSTACK_USE_ALLOCA
yyfree_stacks = 1;
#endif
yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
__yy_memcpy ((char *)yyss, (char *)yyss1,
size * (unsigned int) sizeof (*yyssp));
yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
__yy_memcpy ((char *)yyvs, (char *)yyvs1,
size * (unsigned int) sizeof (*yyvsp));
#ifdef YYLSP_NEEDED
yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
__yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
__yy_memcpy ((char *)yyls, (char *)yyls1,
size * (unsigned int) sizeof (*yylsp));
#endif
#endif /* no yyoverflow */
@ -4401,7 +4445,7 @@ case 373:
break;}
}
/* the action file gets copied in in place of this dollarsign */
#line 498 "/usr/share/misc/bison.simple"
#line 542 "/usr/share/misc/bison.simple"
yyvsp -= yylen;
yyssp -= yylen;
@ -4596,6 +4640,30 @@ yyerrhandle:
yystate = yyn;
goto yynewstate;
yyacceptlab:
/* YYACCEPT comes here. */
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#ifdef YYLSP_NEEDED
free (yyls);
#endif
}
return 0;
yyabortlab:
/* YYABORT comes here. */
if (yyfree_stacks)
{
free (yyss);
free (yyvs);
#ifdef YYLSP_NEEDED
free (yyls);
#endif
}
return 1;
}
#line 1606 "parse.y"
@ -5045,7 +5113,7 @@ parse_regx(term, paren)
options |= RE_OPTION_EXTENDED;
break;
case 'p':
options |= RE_OPTION_POSIX;
options |= RE_OPTION_POSIXLINE;
break;
case 'o':
once = 1;
@ -5137,6 +5205,8 @@ parse_string(func, term, paren)
}
else if (c == '\\') {
c = nextc();
if (c == '\n')
continue;
if (c == term) {
tokadd(c);
}
@ -5208,6 +5278,9 @@ parse_qstring(term, paren)
else if (c == '\\') {
c = nextc();
switch (c) {
case '\n':
continue;
case '\\':
c = '\\';
break;

View file

@ -2050,7 +2050,7 @@ parse_regx(term, paren)
options |= RE_OPTION_EXTENDED;
break;
case 'p':
options |= RE_OPTION_POSIX;
options |= RE_OPTION_POSIXLINE;
break;
case 'o':
once = 1;
@ -2142,6 +2142,8 @@ parse_string(func, term, paren)
}
else if (c == '\\') {
c = nextc();
if (c == '\n')
continue;
if (c == term) {
tokadd(c);
}
@ -2213,6 +2215,9 @@ parse_qstring(term, paren)
else if (c == '\\') {
c = nextc();
switch (c) {
case '\n':
continue;
case '\\':
c = '\\';
break;

View file

@ -480,13 +480,6 @@ rb_f_exec(argc, argv)
if (argc == 0) {
rb_raise(rb_eArgError, "wrong # of arguments");
}
if (TYPE(argv[0]) == T_ARRAY) {
if (RARRAY(argv[0])->len != 2) {
rb_raise(rb_eArgError, "wrong first argument");
}
prog = RARRAY(argv[0])->ptr[0];
argv[0] = RARRAY(argv[0])->ptr[1];
}
if (TYPE(argv[0]) == T_ARRAY) {
if (RARRAY(argv[0])->len != 2) {

View file

@ -74,7 +74,7 @@ range_s_new(argc, argv, klass)
VALUE beg, end, flag, range;
rb_scan_args(argc, argv, "21", &beg, &end, &flag);
if (argc == 2) flag == Qtrue;
if (argc == 2) flag = Qfalse;
return range_new(klass, beg, end, RTEST(flag));
}

35
re.c
View file

@ -90,7 +90,7 @@ rb_str_cicmp(str1, str2)
#define REG_CASESTATE FL_USER0
#define REG_IGNORECASE FL_USER1
#define REG_EXTENDED FL_USER2
#define REG_POSIX FL_USER3
#define REG_POSIXLINE FL_USER3
#define KCODE_NONE 0
#define KCODE_EUC FL_USER4
@ -234,7 +234,7 @@ rb_reg_desc(s, len, re)
rb_str_cat(str, "i", 1);
if (FL_TEST(re, REG_EXTENDED))
rb_str_cat(str, "x", 1);
if (FL_TEST(re, REG_POSIX))
if (FL_TEST(re, REG_POSIXLINE))
rb_str_cat(str, "p", 1);
if (FL_TEST(re, KCODE_FIXED)) {
switch ((RBASIC(re)->flags & KCODE_MASK)) {
@ -494,16 +494,16 @@ rb_reg_prepare_re(reg)
}
int
rb_reg_search(reg, str, start, reverse)
rb_reg_search(reg, str, pos, reverse)
VALUE reg, str;
int start, reverse;
int pos, reverse;
{
int result;
VALUE match;
struct re_registers *regs = 0;
int range;
if (start > RSTRING(str)->len) return -1;
if (pos > RSTRING(str)->len) return -1;
if (may_need_recompile)
rb_reg_prepare_re(reg);
@ -530,14 +530,13 @@ rb_reg_search(reg, str, start, reverse)
}
regs = RMATCH(match)->regs;
range = RSTRING(str)->len - pos;
if (reverse) {
range = -start;
}
else {
range = RSTRING(str)->len - start;
range = -range;
pos = RSTRING(str)->len;
}
result = re_search(RREGEXP(reg)->ptr,RSTRING(str)->ptr,RSTRING(str)->len,
start, range, regs);
pos, range, regs);
if (FL_TEST(reg, KCODE_FIXED))
kcode_reset_option();
@ -722,7 +721,7 @@ rb_reg_new_1(klass, s, len, options)
int len;
int options; /* CASEFOLD = 1 */
/* EXTENDED = 2 */
/* POSIX = 4 */
/* POSIXLINE = 4 */
/* CODE_NONE = 8 */
/* CODE_EUC = 16 */
/* CODE_SJIS = 24 */
@ -739,8 +738,8 @@ rb_reg_new_1(klass, s, len, options)
if (options & RE_OPTION_EXTENDED) {
FL_SET(re, REG_EXTENDED);
}
if (options & RE_OPTION_POSIX) {
FL_SET(re, REG_POSIX);
if (options & RE_OPTION_POSIXLINE) {
FL_SET(re, REG_POSIXLINE);
}
switch (options & ~0x7) {
case 0:
@ -1216,13 +1215,13 @@ Init_Regexp()
rb_eRegxpError = rb_define_class("RegxpError", rb_eStandardError);
re_set_casetable(casetable);
#ifdef RUBY_USE_EUC
#if DEFAULT_KCODE == KCODE_EUC
re_mbcinit(MBCTYPE_EUC);
#else
#ifdef RUBY_USE_SJIS
#if DEFAULT_KCODE == KCODE_SJIS
re_mbcinit(MBCTYPE_SJIS);
#else
#ifdef RUBY_USE_UTF8
#if DEFAULT_KCODE == KCODE_UTF8
re_mbcinit(MBCTYPE_UTF8);
#else
re_mbcinit(MBCTYPE_ASCII);
@ -1259,7 +1258,7 @@ Init_Regexp()
rb_define_const(rb_cRegexp, "IGNORECASE", INT2FIX(RE_OPTION_IGNORECASE));
rb_define_const(rb_cRegexp, "EXTENDED", INT2FIX(RE_OPTION_EXTENDED));
rb_define_const(rb_cRegexp, "POSIX", INT2FIX(RE_OPTION_POSIX));
rb_define_const(rb_cRegexp, "POSIXLINE", INT2FIX(RE_OPTION_POSIXLINE));
rb_global_variable(&reg_cache);
rb_global_variable(&matchcache);
@ -1276,6 +1275,6 @@ Init_Regexp()
rb_define_method(rb_cMatch, "pre_match", rb_reg_match_pre, 0);
rb_define_method(rb_cMatch, "post_match", rb_reg_match_post, 0);
rb_define_method(rb_cMatch, "to_s", match_to_s, 0);
rb_define_method(rb_cMatch, "string_s", match_string, 0);
rb_define_method(rb_cMatch, "string", match_string, 0);
rb_define_method(rb_cMatch, "inspect", rb_any_to_s, 0);
}

79
regex.c
View file

@ -352,8 +352,8 @@ enum regexpcode
stop_paren, /* Place holder at the end of (?:..). */
casefold_on, /* Turn on casefold flag. */
casefold_off, /* Turn off casefold flag. */
posix_on, /* Turn on POSIXified match (match with newlines). */
posix_off, /* Turn off POSIXified match. */
posix_on, /* Turn on POSIXified line match (match with newlines). */
posix_off, /* Turn off POSIXified line match. */
start_nowidth, /* Save string point to the stack. */
stop_nowidth, /* Restore string place at the point start_nowidth. */
pop_and_fail, /* Fail after popping nowidth entry from stack. */
@ -1295,7 +1295,7 @@ re_compile_pattern(pattern, size, bufp)
/* charset_not matches newline according to a syntax bit. */
if ((enum regexpcode)b[-2] == charset_not) {
if (bufp->options & RE_OPTION_POSIX)
if (bufp->options & RE_OPTION_POSIXLINE)
SET_LIST_BIT ('\n');
else
SET_LIST_BIT ('\0');
@ -1554,13 +1554,13 @@ re_compile_pattern(pattern, size, bufp)
break;
case 'p':
if (negative) {
if (options&RE_OPTION_POSIX) {
options &= ~RE_OPTION_POSIX;
if (options&RE_OPTION_POSIXLINE) {
options &= ~RE_OPTION_POSIXLINE;
BUFPUSH(posix_off);
}
}
else if (!(options&RE_OPTION_POSIX)) {
options |= RE_OPTION_POSIX;
else if (!(options&RE_OPTION_POSIXLINE)) {
options |= RE_OPTION_POSIXLINE;
BUFPUSH(posix_on);
}
break;
@ -1671,8 +1671,8 @@ re_compile_pattern(pattern, size, bufp)
if ((options ^ stackp[-1]) & RE_OPTION_IGNORECASE) {
BUFPUSH((options&RE_OPTION_IGNORECASE)?casefold_off:casefold_on);
}
if ((options ^ stackp[-1]) & RE_OPTION_POSIX) {
BUFPUSH((options&RE_OPTION_POSIX)?posix_off:posix_on);
if ((options ^ stackp[-1]) & RE_OPTION_POSIXLINE) {
BUFPUSH((options&RE_OPTION_POSIXLINE)?posix_off:posix_on);
}
pending_exact = 0;
if (fixup_alt_jump) {
@ -1766,9 +1766,9 @@ re_compile_pattern(pattern, size, bufp)
break;
case '{':
/* If there is no previous pattern, this isn't an interval. */
/* If there is no previous pattern, this is an invalid pattern. */
if (!laststart || p == pend) {
goto normal_char;
goto invalid_pattern;
}
beg_interval = p - 1;
@ -1836,6 +1836,44 @@ re_compile_pattern(pattern, size, bufp)
break;
}
/* If lower_bound == upper_bound, repeat cound can be removed */
if (lower_bound == upper_bound) {
int mcnt;
int skip_stop_paren = 0;
if (b[-1] == stop_paren) {
skip_stop_paren = 1;
b--;
}
if (*laststart == exactn && laststart[1]+2 == b - laststart
&& laststart[1]*lower_bound < 256) {
mcnt = laststart[1];
GET_BUFFER_SPACE((lower_bound-1)*mcnt);
laststart[1] = lower_bound*mcnt;
while (--lower_bound) {
memcpy(b, laststart+2, mcnt);
b += mcnt;
}
if (skip_stop_paren) BUFPUSH(stop_paren);
break;
}
if (lower_bound < 5 && b - laststart < 10) {
/* 5 and 10 are the magic numbers */
mcnt = b - laststart;
GET_BUFFER_SPACE((lower_bound-1)*mcnt);
while (--lower_bound) {
memcpy(b, laststart, mcnt);
b += mcnt;
}
if (skip_stop_paren) BUFPUSH(stop_paren);
break;
}
if (skip_stop_paren) b++; /* push back stop_paren */
}
/* Otherwise, we have a nontrivial interval. When
we're all done, the pattern will look like:
set_number_at <jump count> <upper bound>
@ -2120,7 +2158,7 @@ re_compile_pattern(pattern, size, bufp)
laststart++;
EXTRACT_NUMBER_AND_INCR(mcnt, laststart);
if (mcnt == 4 && *laststart == anychar) {
switch ((enum regexpcode)laststart[4]) {
switch ((enum regexpcode)laststart[1]) {
case jump_n:
case finalize_jump:
case maybe_finalize_jump:
@ -2539,7 +2577,7 @@ re_compile_fastmap(bufp)
case posix_on:
case posix_off:
options ^= RE_OPTION_POSIX;
options ^= RE_OPTION_POSIXLINE;
continue;
case endline:
@ -2639,7 +2677,7 @@ re_compile_fastmap(bufp)
fastmap['\n'] = 1;
case anychar:
for (j = 0; j < (1 << BYTEWIDTH); j++) {
if (j != '\n' || (options & RE_OPTION_POSIX))
if (j != '\n' || (options & RE_OPTION_POSIXLINE))
fastmap[j] = 1;
}
if (bufp->can_be_null) {
@ -2836,6 +2874,7 @@ re_search(bufp, string, size, startpos, range, regs)
if (bufp->used>0) {
switch ((enum regexpcode)bufp->buffer[0]) {
case begbuf:
begbuf_match:
if (range > 0) {
if (startpos > 0)
return -1;
@ -2854,6 +2893,9 @@ re_search(bufp, string, size, startpos, range, regs)
}
}
if (bufp->options & RE_OPTIMIZE_ANCHOR) {
if (bufp->options&RE_OPTION_POSIXLINE) {
goto begbuf_match;
}
anchor = 1;
}
@ -2945,7 +2987,8 @@ re_search(bufp, string, size, startpos, range, regs)
#endif /* NO_ALLOCA */
if (range > 0) {
if (anchor && startpos < size && startpos > 0 && string[startpos-1] != '\n') {
if (anchor && startpos < size &&
(startpos < 1 || string[startpos-1] != '\n')) {
while (range > 0 && string[startpos] != '\n') {
range--;
startpos++;
@ -3549,7 +3592,7 @@ re_match(bufp, string_arg, size, pos, regs)
d += mbclen(*d);
break;
}
if (!(options&RE_OPTION_POSIX) &&
if (!(options&RE_OPTION_POSIXLINE) &&
(TRANSLATE_P() ? translate[*d] : *d) == '\n')
goto fail;
SET_REGS_MATCHED;
@ -3850,11 +3893,11 @@ re_match(bufp, string_arg, size, pos, regs)
continue;
case posix_on:
options |= RE_OPTION_POSIX;
options |= RE_OPTION_POSIXLINE;
continue;
case posix_off:
options &= ~RE_OPTION_POSIX;
options &= ~RE_OPTION_POSIXLINE;
continue;
case wordbound:

View file

@ -64,12 +64,12 @@
/* perl-style extended pattern available */
#define RE_OPTION_EXTENDED (RE_OPTION_IGNORECASE<<1)
/* newline will be included for . and invert charclass matches */
#define RE_OPTION_POSIX (RE_OPTION_EXTENDED<<1)
#define RE_OPTION_POSIXLINE (RE_OPTION_EXTENDED<<1)
#define RE_MAY_IGNORECASE (RE_OPTION_POSIX<<1)
#define RE_MAY_IGNORECASE (RE_OPTION_POSIXLINE<<1)
#define RE_OPTIMIZE_ANCHOR (RE_MAY_IGNORECASE<<1)
#define RE_OPTIMIZE_EXACTN (RE_OPTIMIZE_ANCHOR<<1)
#define RE_OPTIMIZE_NO_BM (RE_OPTIMIZE_ANCHOR<<1)
#define RE_OPTIMIZE_NO_BM (RE_OPTIMIZE_EXACTN<<1)
/* For multi-byte char support */
#define MBCTYPE_ASCII 0

View file

@ -50,11 +50,12 @@ typedef struct OpenFile {
FILE *rb_fopen _((const char*, const char*));
FILE *rb_fdopen _((int, const char*));
void rb_io_check_writable _((OpenFile *));
void rb_io_check_readable _((OpenFile *));
void rb_io_fptr_finalize _((OpenFile *));
void rb_io_unbuffered _((OpenFile *));
void rb_io_check_closed _((OpenFile *));
int rb_io_mode_flags _((const char*));
void rb_io_check_writable _((OpenFile*));
void rb_io_check_readable _((OpenFile*));
void rb_io_fptr_finalize _((OpenFile*));
void rb_io_unbuffered _((OpenFile*));
void rb_io_check_closed _((OpenFile*));
void rb_eof_error _((void));
#endif

View file

@ -248,8 +248,8 @@ gsub!(/\bstr_plus\b/,"rb_str_plus")
gsub!(/\bstr_resize\b/,"rb_str_resize")
gsub!(/\bstr_split\b/,"rb_str_split")
gsub!(/\bstr_substr\b/,"rb_str_substr")
gsub!(/\bstr_taint\b/,"rb_str_taint")
gsub!(/\bstr_tainted\b/,"rb_str_tainted")
gsub!(/\bstr_taint\b/,"rb_obj_taint")
gsub!(/\bstr_tainted\b/,"rb_obj_tainted")
gsub!(/\bstr_times\b/,"rb_str_times")
gsub!(/\bstr_to_str\b/,"rb_str_to_str")
gsub!(/\bstr_upto\b/,"rb_str_upto")

View file

@ -616,16 +616,16 @@ rb_str_rindex(argc, argv, str)
VALUE str;
{
VALUE sub;
VALUE initpos;
VALUE position;
int pos, len;
char *s, *sbeg, *t;
if (rb_scan_args(argc, argv, "11", &sub, &initpos) == 2) {
pos = NUM2INT(initpos);
if (pos >= RSTRING(str)->len) pos = RSTRING(str)->len;
if (rb_scan_args(argc, argv, "11", &sub, &position) == 2) {
pos = NUM2INT(position);
if (pos > RSTRING(str)->len) return Qnil;
}
else {
pos = RSTRING(str)->len;
pos = 0;
}
switch (TYPE(sub)) {
@ -636,13 +636,14 @@ rb_str_rindex(argc, argv, str)
case T_STRING:
/* substring longer than string */
if (pos > RSTRING(str)->len) return Qnil;
sbeg = RSTRING(str)->ptr; s = sbeg + pos - RSTRING(sub)->len;
if (RSTRING(str)->len - pos < RSTRING(sub)->len) return Qnil;
sbeg = RSTRING(str)->ptr + pos;
s = RSTRING(str)->ptr + RSTRING(str)->len - RSTRING(sub)->len;
t = RSTRING(sub)->ptr;
len = RSTRING(sub)->len;
while (sbeg <= s) {
if (*s == *t && memcmp(s, t, len) == 0) {
return INT2FIX(s - sbeg);
return INT2FIX(s - RSTRING(str)->ptr);
}
s--;
}
@ -651,10 +652,12 @@ rb_str_rindex(argc, argv, str)
case T_FIXNUM:
{
int c = FIX2INT(sub);
char *p = RSTRING(str)->ptr;
char *p = RSTRING(str)->ptr + RSTRING(str)->len - 1;
char *pbeg = RSTRING(str)->ptr + pos;
for (;pos>=0;pos--) {
if (p[pos] == c) return INT2FIX(pos);
while (pbeg <= p) {
if (*p == c) return INT2FIX(p - RSTRING(str)->ptr);
p--;
}
return Qnil;
}
@ -865,8 +868,8 @@ rb_str_aset(str, indx, val)
if (idx < 0) {
idx += RSTRING(str)->len;
}
if (idx < 0 || RSTRING(str)->len < idx) {
rb_raise(rb_eIndexError, "index %d out of string", NUM2INT(beg));
if (idx < 0 || RSTRING(str)->len <= idx) {
rb_raise(rb_eIndexError, "index %d out of string", idx);
}
if (FIXNUM_P(val)) {
if (RSTRING(str)->len == idx) {

View file

@ -1,2 +1,2 @@
#define RUBY_VERSION "1.3.3"
#define RUBY_RELEASE_DATE "1999-04-20"
#define RUBY_RELEASE_DATE "1999-04-30"

View file

@ -148,7 +148,8 @@
#define snprintf _snprintf
#define popen _popen
#define pclose _pclose
#define strcasecmp _strcmpi
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
/* these are defined in nt.c */