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:
parent
cae09e71e5
commit
e8505b6472
36 changed files with 1327 additions and 902 deletions
55
ChangeLog
55
ChangeLog
|
@ -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
|
||||
|
|
3
MANIFEST
3
MANIFEST
|
@ -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
11
array.c
|
@ -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;
|
||||
|
|
|
@ -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\
|
||||
|
|
1
error.c
1
error.c
|
@ -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);
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#fcntl
|
||||
#kconv
|
||||
#md5
|
||||
#pty
|
||||
#socket
|
||||
#tkutil
|
||||
#tcltklib
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
500
ext/extmk.rb.nt
500
ext/extmk.rb.nt
|
@ -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:
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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*/
|
||||
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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") &&
|
||||
|
|
|
@ -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
4
io.c
|
@ -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;
|
||||
|
||||
|
|
98
lib/mkmf.rb
98
lib/mkmf.rb
|
@ -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
|
||||
|
||||
|
|
|
@ -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
18
missing/strncasecmp.c
Normal 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;
|
||||
}
|
17
mkconfig.rb
17
mkconfig.rb
|
@ -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
373
parse.c
|
@ -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;
|
||||
|
|
7
parse.y
7
parse.y
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
2
range.c
2
range.c
|
@ -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
35
re.c
|
@ -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(®_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
79
regex.c
|
@ -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:
|
||||
|
|
6
regex.h
6
regex.h
|
@ -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
|
||||
|
|
11
rubyio.h
11
rubyio.h
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
29
string.c
29
string.c
|
@ -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) {
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
#define RUBY_VERSION "1.3.3"
|
||||
#define RUBY_RELEASE_DATE "1999-04-20"
|
||||
#define RUBY_RELEASE_DATE "1999-04-30"
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue