git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@616 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2000-02-08 08:54:01 +00:00
Родитель 25be6ce9b5
Коммит 320e99d8dd
33 изменённых файлов: 1157 добавлений и 516 удалений

Просмотреть файл

@ -1,6 +1,67 @@
Tue Feb 8 02:07:33 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* regex.c (re_search): optimize for \G at top.
* regex.c (re_compile_pattern): \G introduced.
* regex.c (re_match): ditto.
* string.c (str_sub_bang): old behavior restored: bang method
returns nil if string not changed.
* regex.c (re_compile_pattern): support independent subexpression
`(?>pattern)'.
* regex.c (re_match): ditto.
Mon Feb 7 15:51:08 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* regex.c (re_match): now understands interrupts under Ruby.
Mon Feb 7 07:51:52 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* array.c (rb_ary_uniq_bang): always return an Array.
* array.c (rb_ary_compact_bang): ditto.
* array.c (rb_ary_flatten_bang): ditto.
* hash.c (rb_hash_reject): returns a Hash, not an Array.
* hash.c (env_reject): ditto.
Fri Feb 4 10:20:25 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* string.c (scan_once): scan now leaves information about the last
successful pattern match in $&.
* io.c (rb_io_close): should not check closed IO.
Fri Feb 4 05:44:01 2000 Kentaro Inagaki <inagaki@tg.rim.or.jp>
* ext/socket/socket.c (s_recv): TRAP_BEG after retry entry.
Wed Feb 2 22:33:45 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
* eval.c (rb_thread_start): receives argument from outside, like
`Thread::start(1,2,3){|a,b,c| ... }'.
Wed Feb 2 22:14:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* re.c (rb_reg_regsub): should check regs->num_regs.
* re.c (rb_reg_search): remove matchcache, use static struct
re_register instead.
* re.c (match_getter): avoid cloning match data.
Wed Feb 2 17:12:15 2000 Dave Thomas <Dave@Thomases.com>
* samples/eval.rb: Rescue new ScriptError exception
Wed Feb 2 02:06:07 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
* string.c (str_gsub_bang): gsub! now leaves information about
* string.c (str_gsub_bang): gsub! now leaves information about the
last successful pattern match in $&.
Mon Jan 31 15:24:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>

Просмотреть файл

@ -125,6 +125,7 @@ lib/matrix.rb
lib/mkmf.rb
lib/monitor.rb
lib/mutex_m.rb
lib/net/http.rb
lib/net/pop.rb
lib/net/session.rb
lib/net/smtp.rb

4
ToDo
Просмотреть файл

@ -52,9 +52,13 @@ Standard Libraries
- SyntaxError, NameError, LoadError and NotImplementError are subclasses of
ScriptError<Exception, not StandardError.
- String's bang methods return string always
- Thread::start gives arguments, not a thread object to the block
- regexp: (?>..)
* regexp: \G
* Struct::new([name,]member,...) ??
* String#scanf(?)
* Object#fmt(?)
* Integer#{bin,oct,hex,heX}
* Time::strptime
* Integer[num], Float[num]; Fixnum[num]?
* method to retrieve non-number trailer for to_i/to_f.

304
config.guess поставляемый
Просмотреть файл

@ -1,6 +1,7 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@ -23,6 +24,7 @@
# Written by Per Bothner <bothner@cygnus.com>.
# The master version of this file is at the FSF in /home/gd/gnu/lib.
# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
#
# This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and
@ -35,6 +37,19 @@
# (but try to keep the structure clean).
#
# Use $HOST_CC if defined. $CC may point to a cross-compiler
if test x"$CC_FOR_BUILD" = x; then
if test x"$HOST_CC" != x; then
CC_FOR_BUILD="$HOST_CC"
else
if test x"$CC" != x; then
CC_FOR_BUILD="$CC"
else
CC_FOR_BUILD=cc
fi
fi
fi
# Modified for Human68k by K.Okabe 1997.07.09
# Last change: 1997.07.09
@ -57,7 +72,8 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
dummy=dummy-$$
trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
# Note: order is significant - the case branches are not exclusive.
@ -73,7 +89,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
cat <<EOF >dummy.s
cat <<EOF >$dummy.s
.globl main
.ent main
main:
@ -90,9 +106,9 @@ main:
ret \$31,(\$26),1
.end main
EOF
${CC-cc} dummy.s -o dummy 2>/dev/null
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./dummy
./$dummy
case "$?" in
7)
UNAME_MACHINE="alpha"
@ -111,8 +127,14 @@ EOF
;;
esac
fi
rm -f dummy.s dummy
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
exit 0 ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
# of the specific Alpha model?
echo alpha-pc-interix
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
@ -156,7 +178,7 @@ EOF
SR2?01:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
@ -164,7 +186,7 @@ EOF
echo pyramid-pyramid-bsd
fi
exit 0 ;;
NILE:*:*:dcosx)
NILE*:*:*:dcosx)
echo pyramid-pyramid-svr4
exit 0 ;;
sun4H:SunOS:5.*:*)
@ -215,6 +237,32 @@ EOF
atari*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
# > m68000). The system name ranges from "MiNT" over "FreeMiNT"
# to the lowercase version "mint" (or "freemint"). Finally
# the system name "TOS" denotes a system which is actually not
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit 0 ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit 0 ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit 0 ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
echo m68k-milan-mint${UNAME_RELEASE}
exit 0 ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
echo m68k-hades-mint${UNAME_RELEASE}
exit 0 ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
echo m68k-unknown-mint${UNAME_RELEASE}
exit 0 ;;
sun3*:NetBSD:*:*)
echo m68k-sun-netbsd${UNAME_RELEASE}
exit 0 ;;
@ -248,12 +296,16 @@ EOF
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
2020:CLIX:*:*)
2020:CLIX:*:* | 2430:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
sed 's/^ //' << EOF >dummy.c
int main (argc, argv) int argc; char **argv; {
sed 's/^ //' << EOF >$dummy.c
#ifdef __cplusplus
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
@ -268,10 +320,10 @@ EOF
exit (-1);
}
EOF
${CC-cc} dummy.c -o dummy \
&& ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
&& rm dummy.c dummy && exit 0
rm -f dummy.c dummy
$CC_FOR_BUILD $dummy.c -o $dummy \
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
&& rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
@ -323,7 +375,7 @@ EOF
exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
sed 's/^ //' << EOF >dummy.c
sed 's/^ //' << EOF >$dummy.c
#include <sys/systemcfg.h>
main()
@ -334,8 +386,8 @@ EOF
exit(0);
}
EOF
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
rm -f dummy.c dummy
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
echo rs6000-ibm-aix3.2.4
@ -382,25 +434,25 @@ EOF
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/[678]?? )
sed 's/^ //' << EOF >dummy.c
9000/[678][0-9][0-9])
sed 's/^ //' << EOF >$dummy.c
#include <stdlib.h>
#include <unistd.h>
int main ()
{
#if defined(_SC_KERNEL_BITS)
long bits = sysconf(_SC_KERNEL_BITS);
#endif
#endif
long cpu = sysconf (_SC_CPU_VERSION);
switch (cpu)
switch (cpu)
{
case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
case CPU_PA_RISC2_0:
case CPU_PA_RISC2_0:
#if defined(_SC_KERNEL_BITS)
switch (bits)
switch (bits)
{
case 64: puts ("hppa2.0w"); break;
case 32: puts ("hppa2.0n"); break;
@ -408,20 +460,20 @@ EOF
} break;
#else /* !defined(_SC_KERNEL_BITS) */
puts ("hppa2.0"); break;
#endif
#endif
default: puts ("hppa1.0"); break;
}
exit (0);
}
EOF
(${CC-cc} dummy.c -o dummy 2>/dev/null ) && HP_ARCH=`./dummy`
rm -f dummy.c dummy
($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
rm -f $dummy.c $dummy
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;;
3050*:HI-UX:*:*)
sed 's/^ //' << EOF >dummy.c
sed 's/^ //' << EOF >$dummy.c
#include <unistd.h>
int
main ()
@ -446,8 +498,8 @@ EOF
exit (0);
}
EOF
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
rm -f dummy.c dummy
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo unknown-hitachi-hiuxwe2
exit 0 ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
@ -456,6 +508,9 @@ EOF
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
*9??*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
echo hppa1.1-hp-osf
exit 0 ;;
@ -472,6 +527,9 @@ EOF
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
exit 0 ;;
hppa*:OpenBSD:*:*)
echo hppa-unknown-openbsd
exit 0 ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
exit 0 ;;
@ -504,11 +562,14 @@ EOF
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*T3E:*:*:*)
echo t3e-cray-unicosmk${UNAME_RELEASE}
exit 0 ;;
CRAY-2:*:*:*)
echo cray2-cray-unicos
exit 0 ;;
F300:UNIX_System_V:*:*)
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit 0 ;;
@ -521,16 +582,22 @@ EOF
hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
*:FreeBSD:*:*)
if test -x /usr/bin/objformat; then
if test "elf" = "`/usr/bin/objformat`"; then
echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
exit 0
fi
fi
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit 0 ;;
*:NetBSD:*:*)
@ -548,6 +615,15 @@ EOF
i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
# UNAME_MACHINE based on the output of uname instead of i386?
echo i386-pc-interix
exit 0 ;;
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
exit 0 ;;
@ -561,12 +637,14 @@ EOF
# uname on the ARM produces all sorts of strangeness, and we need to
# filter it out.
case "$UNAME_MACHINE" in
armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
arm* | sa110*) UNAME_MACHINE="arm" ;;
esac
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
# first see if it will tell us. cd to the root directory to prevent
# problems with other programs or directories called `ld' in the path.
ld_help_string=`cd /; ld --help 2>&1`
ld_supported_emulations=`echo $ld_help_string \
| sed -ne '/supported emulations:/!d
s/[ ][ ]*/ /g
@ -577,12 +655,42 @@ EOF
i?86linux) echo "${UNAME_MACHINE}-pc-linux-aout" ; exit 0 ;;
i?86coff) echo "${UNAME_MACHINE}-pc-linux-coff" ; exit 0 ;;
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-aout" ; exit 0 ;;
armlinux) echo "${UNAME_MACHINE}-unknown-linux-aout" ; exit 0 ;;
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-aout" ; exit 0 ;;
elf32ppc) echo "powerpc-unknown-linux" ; exit 0 ;;
elf32ppc)
# Determine Lib Version
cat >$dummy.c <<EOF
#include <features.h>
#if defined(__GLIBC__)
extern char __libc_version[];
extern char __libc_release[];
#endif
main(argc, argv)
int argc;
char *argv[];
{
#if defined(__GLIBC__)
printf("%s %s\n", __libc_version, __libc_release);
#else
printf("unkown\n");
#endif
return 0;
}
EOF
LIBC=""
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy | grep 1\.99 > /dev/null
if test "$?" = 0 ; then
LIBC="libc1"
fi
fi
rm -f $dummy.c $dummy
echo powerpc-unknown-linux-${LIBC} ; exit 0 ;;
esac
if test "${UNAME_MACHINE}" = "alpha" ; then
sed 's/^ //' <<EOF >dummy.s
sed 's/^ //' <<EOF >$dummy.s
.globl main
.ent main
main:
@ -600,9 +708,9 @@ EOF
.end main
EOF
LIBC=""
${CC-cc} dummy.s -o dummy 2>/dev/null
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./dummy
./$dummy
case "$?" in
7)
UNAME_MACHINE="alpha"
@ -621,20 +729,21 @@ EOF
;;
esac
objdump --private-headers dummy | \
objdump --private-headers $dummy | \
grep ld.so.1 > /dev/null
if test "$?" = 0 ; then
LIBC="-libc1"
fi
fi
rm -f dummy.s dummy
echo ${UNAME_MACHINE}-unknown-linux${LIBC} ; exit 0
fi
rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-unknown-linux{LIBC} ; exit 0
elif test "${UNAME_MACHINE}" = "mips" ; then
cat >dummy.c <<EOF
main(argc, argv)
int argc;
char *argv[];
{
cat >$dummy.c <<EOF
#ifdef __cplusplus
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#ifdef __MIPSEB__
printf ("%s-unknown-linux\n", argv[1]);
#endif
@ -644,9 +753,17 @@ main(argc, argv)
return 0;
}
EOF
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
rm -f dummy.c dummy
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
else
# Either a pre-BFD a.out linker (linux-oldld)
# or one that does not give us useful --help.
# GCC wants to distinguish between linux-oldld and linux-aout.
# If ld does not provide *any* "supported emulations:"
# that means it is oldld.
echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-oldld" && exit 0
case "${UNAME_MACHINE}" in
i?86)
VENDOR=pc;
@ -655,8 +772,32 @@ EOF
VENDOR=unknown;
;;
esac
echo ${UNAME_MACHINE}-${VENDOR}-linux
exit 0
# Determine whether the default compiler is a.out or elf
cat >$dummy.c <<EOF
#include <features.h>
#ifdef __cplusplus
int main (int argc, char *argv[]) {
#else
int main (argc, argv) int argc; char *argv[]; {
#endif
#ifdef __ELF__
# ifdef __GLIBC__
# if __GLIBC__ >= 2
printf ("%s-${VENDOR}-linux\n", argv[1]);
# else
printf ("%s-${VENDOR}-linux-libc1\n", argv[1]);
# endif
# else
printf ("%s-${VENDOR}-linux-libc1\n", argv[1]);
# endif
#else
printf ("%s-${VENDOR}-linux-aout\n", argv[1]);
#endif
return 0;
}
EOF
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
fi ;;
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
# are messed up and put the nodename in both sysname and nodename.
@ -678,6 +819,14 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi
exit 0 ;;
i?86:*:5:7*)
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
(/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
exit 0 ;;
i?86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@ -687,6 +836,10 @@ EOF
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
&& UNAME_MACHINE=i686
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-pc-sysv32
@ -740,7 +893,7 @@ EOF
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
i?86:LynxOS:2.*:*)
i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
TSUNAMI:LynxOS:2.*:*)
@ -752,6 +905,9 @@ EOF
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
exit 0 ;;
RM*:ReliantUNIX-*:*:*)
echo mips-sni-sysv4
exit 0 ;;
RM*:SINIX-*:*:*)
echo mips-sni-sysv4
exit 0 ;;
@ -782,7 +938,7 @@ EOF
news*:NEWS-OS:*:6*)
echo mips-sony-newsos6
exit 0 ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv`echo ${UNAME_RELEASE} | sed -n 's/\([.0-9]*\).*/\1/p'`
else
@ -801,27 +957,24 @@ EOF
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
echo i586-pc-beos
exit 0 ;;
*:Rhapsody:*:*)
arch=`/usr/bin/arch`
case "$arch" in
ppc)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
;;
i[3456]86)
echo i386-apple-rhapsody${UNAME_RELEASE}
;;
*)
echo $arch-apple-rhapsody${UNAME_RELEASE}
;;
esac
SX-4:SUPER-UX:*:*)
echo sx4-nec-superux${UNAME_RELEASE}
exit 0 ;;
SX-5:SUPER-UX:*:*)
echo sx5-nec-superux${UNAME_RELEASE}
exit 0 ;;
Power*:Rhapsody:*:*)
echo powerpc-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
*:Rhapsody:*:*)
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
cat >dummy.c <<EOF
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
# include <sys/utsname.h>
@ -863,7 +1016,6 @@ main ()
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
else
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
exit (0);
#endif
@ -923,8 +1075,8 @@ main ()
}
EOF
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
rm -f dummy.c dummy
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
# Apollos put the system type in the environment.

312
config.sub поставляемый
Просмотреть файл

@ -1,6 +1,6 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
@ -98,11 +98,21 @@ case $os in
os=
basic_machine=$1
;;
-sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
;;
-scout)
;;
-wrs)
os=vxworks
basic_machine=$1
;;
-hiux*)
os=-hiuxwe2
;;
-sco5)
os=sco3.2v5
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco4)
@ -121,6 +131,9 @@ case $os in
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-udk*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-isc)
os=-isc2.2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@ -151,14 +164,21 @@ case $basic_machine in
# Some are omitted here because they have special meanings below.
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w \
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
| mipstx39 | mipstx39el \
| sparc | sparclet | sparclite | sparc64 | v850)
| 580 | i960 | h8300 \
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
| mips64vr5000 | miprs64vr5000el \
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
| thumb | d10v)
basic_machine=$basic_machine-unknown
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
@ -177,24 +197,41 @@ case $basic_machine in
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0* | hppa2.0w-* \
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
| xmp-* | ymp-* \
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
| alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
| clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | mips64-* | mipsel-* \
| mips64el-* | mips64orion-* | mips64orionel-* \
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
| mips64el-* | mips64orion-* | mips64orionel-* \
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
| mipstx39-* | mipstx39el-* \
| f301-*)
| f301-* | armv*-* | t3e-* \
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
| thumb-* | v850-* | d30v-* | tic30-* | c30-* )
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
386bsd)
basic_machine=i386-unknown
os=-bsd
;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
basic_machine=m68000-att
;;
3b*)
basic_machine=we32k-att
;;
a29khif)
basic_machine=a29k-amd
os=-udi
;;
adobe68k)
basic_machine=m68010-adobe
os=-scout
;;
alliant | fx80)
basic_machine=fx80-alliant
;;
@ -224,6 +261,10 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-sysv
;;
apollo68bsd)
basic_machine=m68k-apollo
os=-bsd
;;
aux)
basic_machine=m68k-apple
os=-aux
@ -300,6 +341,10 @@ case $basic_machine in
encore | umax | mmax)
basic_machine=ns32k-encore
;;
es1800 | OSE68k | ose68k | ose | OSE)
basic_machine=m68k-ericsson
os=-ose
;;
fx2800)
basic_machine=i860-alliant
;;
@ -318,6 +363,14 @@ case $basic_machine in
basic_machine=h8300-hitachi
os=-hms
;;
h8300xray)
basic_machine=h8300-hitachi
os=-xray
;;
h8500hms)
basic_machine=h8500-hitachi
os=-hms
;;
harris)
basic_machine=m88k-harris
os=-sysv3
@ -333,13 +386,30 @@ case $basic_machine in
basic_machine=m68k-hp
os=-hpux
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
basic_machine=m68000-hp
;;
hp9k3[2-9][0-9])
basic_machine=m68k-hp
;;
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
hp9k6[0-9][0-9] | hp6[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
basic_machine=hppa1.1-hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
basic_machine=hppa1.1-hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
@ -348,6 +418,14 @@ case $basic_machine in
hppa-next)
os=-nextstep3
;;
hppaosf)
basic_machine=hppa1.1-hp
os=-osf
;;
hppro)
basic_machine=hppa1.1-hp
os=-proelf
;;
i370-ibm* | ibm*)
basic_machine=i370-ibm
os=-mvs
@ -369,6 +447,22 @@ case $basic_machine in
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
i386mach)
basic_machine=i386-mach
os=-mach
;;
i386-vsta | vsta)
basic_machine=i386-unknown
os=-vsta
;;
i386-go32 | go32)
basic_machine=i386-unknown
os=-go32
;;
i386-mingw32 | mingw32)
basic_machine=i386-unknown
os=-mingw32
;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
@ -397,6 +491,10 @@ case $basic_machine in
miniframe)
basic_machine=m68000-convergent
;;
*mint | *MiNT)
basic_machine=m68k-atari
os=-mint
;;
mipsel*-linux*)
basic_machine=mipsel-unknown
os=-linux
@ -411,10 +509,26 @@ case $basic_machine in
mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;;
monitor)
basic_machine=m68k-rom68k
os=-coff
;;
msdos)
basic_machine=i386-unknown
os=-msdos
;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
;;
netbsd386)
basic_machine=i386-unknown
os=-netbsd
;;
netwinder)
basic_machine=armv4l-corel
os=-linux
;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
os=-newsos
@ -427,6 +541,10 @@ case $basic_machine in
basic_machine=mips-sony
os=-newsos
;;
necv70)
basic_machine=v70-nec
os=-sysv
;;
next | m*-next )
basic_machine=m68k-next
case $os in
@ -452,9 +570,25 @@ case $basic_machine in
basic_machine=i960-intel
os=-nindy
;;
mon960)
basic_machine=i960-intel
os=-mon960
;;
np1)
basic_machine=np1-gould
;;
op50n-* | op60c-*)
basic_machine=hppa1.1-oki
os=-proelf
;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
os=-ose
;;
os68k)
basic_machine=m68k-none
os=-os68k
;;
pa-hitachi)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
@ -472,19 +606,19 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pentium | p5 | k5 | nexen)
pentium | p5 | k5 | k6 | nexen)
basic_machine=i586-pc
;;
pentiumpro | p6 | k6 | 6x86)
pentiumpro | p6 | 6x86)
basic_machine=i686-pc
;;
pentiumii | pentium2)
basic_machine=i786-pc
;;
pentium-* | p5-* | k5-* | nexen-*)
pentium-* | p5-* | k5-* | k6-* | nexen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-* | k6-* | 6x86-*)
pentiumpro-* | p6-* | 6x86-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumii-* | pentium2-*)
@ -508,12 +642,20 @@ case $basic_machine in
ps2)
basic_machine=i386-ibm
;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
;;
rm[46]00)
basic_machine=mips-siemens
;;
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
sa29200)
basic_machine=a29k-amd
os=-udi
;;
sequent)
basic_machine=i386-sequent
;;
@ -521,6 +663,10 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
sparclite-wrs)
basic_machine=sparclite-wrs
os=-vxworks
;;
sps7)
basic_machine=m68k-bull
os=-sysv2
@ -528,6 +674,13 @@ case $basic_machine in
spur)
basic_machine=spur-unknown
;;
st2000)
basic_machine=m68k-tandem
;;
stratus)
basic_machine=i860-stratus
os=-sysv4
;;
sun2)
basic_machine=m68000-sun
;;
@ -572,6 +725,10 @@ case $basic_machine in
basic_machine=i386-sequent
os=-dynix
;;
t3e)
basic_machine=t3e-cray
os=-unicos
;;
tx39)
basic_machine=mipstx39-unknown
;;
@ -589,6 +746,10 @@ case $basic_machine in
basic_machine=a29k-nyu
os=-sym1
;;
v810 | necv810)
basic_machine=v810-nec
os=-none
;;
vaxv)
basic_machine=vax-dec
os=-sysv
@ -612,6 +773,14 @@ case $basic_machine in
basic_machine=a29k-wrs
os=-vxworks
;;
w65*)
basic_machine=w65-wdc
os=-none
;;
w89k-*)
basic_machine=hppa1.1-winbond
os=-proelf
;;
xmp)
basic_machine=xmp-cray
os=-unicos
@ -619,6 +788,10 @@ case $basic_machine in
xps | xps100)
basic_machine=xps100-honeywell
;;
z8k-*-coff)
basic_machine=z8k-unknown
os=-sim
;;
none)
basic_machine=none-none
os=-none
@ -626,6 +799,15 @@ case $basic_machine in
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
w89k)
basic_machine=hppa1.1-winbond
;;
op50n)
basic_machine=hppa1.1-oki
;;
op60c)
basic_machine=hppa1.1-oki
;;
mips)
if [ x$os = x-linux ]; then
basic_machine=mips-unknown
@ -648,7 +830,7 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
sparc)
sparc | sparcv9)
basic_machine=sparc-sun
;;
cydra)
@ -660,6 +842,16 @@ case $basic_machine in
orion105)
basic_machine=clipper-highlevel
;;
mac | mpw | mac-mpw)
basic_machine=m68k-apple
;;
pmac | pmac-mpw)
basic_machine=powerpc-apple
;;
c4x*)
basic_machine=c4x-none
os=-coff
;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
@ -674,10 +866,6 @@ case $basic_machine in
*-commodore*)
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
;;
human)
basic_machine=m68k-sharp
os=-human
;;
*)
;;
esac
@ -705,8 +893,6 @@ case $os in
-gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
-os2_emx)
;;
# First accept the basic system types.
# The portable systems comes first.
# Each alternative MUST END IN A *, to match a version number.
@ -719,13 +905,21 @@ case $os in
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux* | -uxpv* | -beos* | -rhapsody* )
| -mingw32* | -linux* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
| -macos* | -mpw* | -magic* | -mon960* | -lnews*)
;;
-mac*)
os=`echo $os | sed -e 's|mac|macos|'`
;;
-sunos5*)
os=`echo $os | sed -e 's|sunos5|solaris2|'`
;;
@ -747,6 +941,9 @@ case $os in
-acis*)
os=-aos
;;
-386bsd)
os=-bsd
;;
-ctix* | -uts*)
os=-sysv
;;
@ -778,9 +975,18 @@ case $os in
# This must come after -sysvr4.
-sysv*)
;;
-ose*)
os=-ose
;;
-es1800*)
os=-ose
;;
-xenix)
os=-xenix
;;
-*mint | -*MiNT)
os=-mint
;;
-uxpds)
os=-uxpds
;;
@ -814,6 +1020,9 @@ case $basic_machine in
*-acorn)
os=-riscix1.2
;;
arm*-corel)
os=-linux
;;
arm*-semi)
os=-aout
;;
@ -835,6 +1044,15 @@ case $basic_machine in
# default.
# os=-sunos4
;;
m68*-cisco)
os=-aout
;;
mips*-cisco)
os=-elf
;;
mips*-*)
os=-elf
;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
@ -847,6 +1065,15 @@ case $basic_machine in
*-ibm)
os=-aix
;;
*-wec)
os=-proelf
;;
*-winbond)
os=-proelf
;;
*-oki)
os=-proelf
;;
*-hp)
os=-hpux
;;
@ -910,6 +1137,18 @@ case $basic_machine in
f301-fujitsu)
os=-uxpv
;;
*-rom68k)
os=-coff
;;
*-*bug)
os=-coff
;;
*-apple)
os=-macos
;;
*-atari*)
os=-mint
;;
*)
os=-none
;;
@ -931,9 +1170,15 @@ case $basic_machine in
-aix*)
vendor=ibm
;;
-beos*)
vendor=be
;;
-hpux*)
vendor=hp
;;
-mpeix*)
vendor=hp
;;
-hiux*)
vendor=hitachi
;;
@ -961,6 +1206,15 @@ case $basic_machine in
-aux*)
vendor=apple
;;
-hms*)
vendor=hitachi
;;
-mpw* | -macos*)
vendor=apple
;;
-*mint | -*MiNT)
vendor=atari
;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;

332
configure поставляемый

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -158,6 +158,9 @@ rhapsody*) ;;
human*) ac_cv_func_getpgrp_void=yes;;
beos*) ;;
cygwin*) ;;
os2_emx*) LIBS="-lm $LIBS"
ac_cv_lib_xpg4_setlocale=no
ac_cv_lib_dir_opendir=no;;
*) LIBS="-lm $LIBS";;
esac
AC_CHECK_LIB(crypt, crypt)
@ -487,6 +490,7 @@ if test "$with_dln_a_out" != yes; then
aix*) LDSHARED='/usr/ccs/bin/ld'
XLDFLAGS='-Wl,-bE:ruby.imp'
DLDFLAGS='-eInit_$(TARGET) -bI:$(topdir)/ruby.imp -bM:SRE -T512 -H512 -lc'
LDFLAGS="-brtl"
rb_cv_dlopen=yes ;;
human*) DLDFLAGS=''
@ -553,8 +557,8 @@ else
AC_DEFINE(DLEXT, ".bundle");;
cygwin*) DLEXT=dll
AC_DEFINE(DLEXT, ".dll");;
os2_emx) DLEXT=o
AC_DEFINE(DLEXT, ".so");;
os2_emx*) DLEXT=dll
AC_DEFINE(DLEXT, ".dll");;
*) DLEXT=so
AC_DEFINE(DLEXT, ".so");;
esac
@ -638,7 +642,7 @@ rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no, rb_cv_missing_fconvert=no
;;
dnl OS/2 environment w/ Autoconf 2.1x for EMX
os2_emx)
LIBOBJS="$LIBOBJS os2.o"
LIBOBJS="$LIBOBJS os2.$OBJEXT"
setup=Setup.emx
;;
cygwin*)

16
eval.c
Просмотреть файл

@ -7266,21 +7266,21 @@ rb_thread_scope_shared_p()
static VALUE
rb_thread_yield(arg, th)
int arg;
VALUE arg;
thread_t th;
{
scope_dup(ruby_block->scope);
return rb_yield_0(th->thread, 0, 0, Qfalse);
return rb_yield_0(arg, 0, 0, Qfalse);
}
static VALUE
rb_thread_start(klass)
VALUE klass;
rb_thread_start(klass, args)
VALUE klass, args;
{
if (!rb_iterator_p()) {
rb_raise(rb_eThreadError, "must be called as iterator");
}
return rb_thread_create_0(rb_thread_yield, 0, klass);
return rb_thread_create_0(rb_thread_yield, args, klass);
}
static VALUE
@ -7708,9 +7708,9 @@ Init_Thread()
rb_eThreadError = rb_define_class("ThreadError", rb_eStandardError);
rb_cThread = rb_define_class("Thread", rb_cObject);
rb_define_singleton_method(rb_cThread, "new", rb_thread_start, 0);
rb_define_singleton_method(rb_cThread, "start", rb_thread_start, 0);
rb_define_singleton_method(rb_cThread, "fork", rb_thread_start, 0);
rb_define_singleton_method(rb_cThread, "new", rb_thread_start, -2);
rb_define_singleton_method(rb_cThread, "start", rb_thread_start, -2);
rb_define_singleton_method(rb_cThread, "fork", rb_thread_start, -2);
rb_define_singleton_method(rb_cThread, "stop", rb_thread_stop, 0);
rb_define_singleton_method(rb_cThread, "kill", rb_thread_s_kill, 1);

Просмотреть файл

@ -464,6 +464,7 @@ $(DLLIB): $(OBJS)
dfile = open("#{$srcdir}/depend", "r")
mfile.printf "###\n"
while line = dfile.gets()
line.gsub!(/\.o/, ".#{$OBJEXT}")
mfile.printf "%s", line.gsub('\$\(hdrdir\)/config.h', '$(topdir)/config.h')
end
dfile.close
@ -500,7 +501,7 @@ def extmake(target)
$objs = nil
$local_flags = ""
case RUBY_PLATFORM
when /cygwin|beos|openstep|nextstep|rhapsody/
when /cygwin|beos|openstep|nextstep|rhapsody|i386-os2_emx/
$libs = ""
when /mswin32/
$LIBEXT = "lib"

Просмотреть файл

@ -282,7 +282,9 @@ establishShell(shellname, info)
dup2(slave,2);
close(slave);
#if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) || defined(HAVE_SETRESUID)
seteuid(getuid());
#endif
argc = 0;
for (i = 0; shellname[i];) {

Просмотреть файл

@ -2,8 +2,9 @@ require "mkmf"
dir_config("readline")
have_library("user32", nil) if /cygwin/ === PLATFORM
have_library("termcap", "tgetnum")
have_library("curses", "tgetnum")
have_library("termcap", "tgetnum") or
have_library("curses", "tgetnum") or
have_library("ncurses", "tgetnum")
if have_header("readline/readline.h") and
have_header("readline/history.h") and
have_library("readline", "readline")

Просмотреть файл

@ -130,12 +130,6 @@ static struct afd {
#define PTON_MAX 4
#endif
#ifndef INET6
#ifndef NT
extern int h_errno;
#endif
#endif
static int get_name __P((const char *, struct afd *,
struct addrinfo **, char *, struct addrinfo *,
int));

Просмотреть файл

@ -64,12 +64,6 @@
#include "addrinfo.h"
#include "sockport.h"
#ifndef INET6
#ifndef NT
extern int h_errno;
#endif
#endif
#define SUCCESS 0
#define ANY 0
#define YES 1

Просмотреть файл

@ -399,8 +399,8 @@ s_recv(sock, argc, argv, from)
str = rb_str_new(0, NUM2INT(len));
rb_thread_wait_fd(fd);
TRAP_BEG;
retry:
TRAP_BEG;
RSTRING(str)->len = recvfrom(fd, RSTRING(str)->ptr, RSTRING(str)->len, flags,
(struct sockaddr*)buf, &alen);
TRAP_END;

44
gc.c
Просмотреть файл

@ -50,7 +50,6 @@ static unsigned long malloc_memories = 0;
static unsigned long alloc_objects = 0;
static int malloc_called = 0;
static int free_called = 0;
static int second_mem_error = 0;
static void
@ -133,12 +132,11 @@ xrealloc(ptr, size)
return mem;
}
static void
void
xfree(x)
void *x;
{
free_called++;
free(x);
if (x) free(x);
}
#endif
@ -203,17 +201,47 @@ static struct gc_list {
} *Global_List = 0;
void
rb_global_variable(var)
VALUE *var;
rb_gc_register_address(addr)
VALUE *addr;
{
struct gc_list *tmp;
tmp = ALLOC(struct gc_list);
tmp->next = Global_List;
tmp->varptr = var;
tmp->varptr = addr;
Global_List = tmp;
}
void
rb_gc_unregister_address(addr)
VALUE *addr;
{
struct gc_list *tmp = Global_List;
if (tmp->varptr == addr) {
Global_List = tmp->next;
free(tmp);
return;
}
while (tmp->next) {
if (tmp->next->varptr == addr) {
struct gc_list *t = tmp->next;
tmp->next = tmp->next->next;
free(t);
break;
}
tmp = tmp->next;
}
}
void
rb_global_variable(var)
VALUE *var;
{
rb_gc_register_address(var);
}
typedef struct RVALUE {
union {
struct {
@ -1219,6 +1247,8 @@ Init_GC()
rb_define_module_function(rb_mObSpace, "call_finalizer", call_final, 1);
rb_define_module_function(rb_mObSpace, "_id2ref", id2ref, 1);
rb_gc_register_address(&rb_mObSpace);
rb_global_variable(&finalizers);
rb_gc_unregister_address(&rb_mObSpace);
finalizers = rb_ary_new();
}

18
hash.c
Просмотреть файл

@ -476,6 +476,13 @@ rb_hash_delete_if(hash)
return hash;
}
static VALUE
rb_hash_reject(hash)
VALUE hash;
{
return rb_hash_delete_if(rb_hash_dup(hash));
}
static int
clear_i(key, value, dummy)
VALUE key, value, dummy;
@ -1210,6 +1217,12 @@ env_delete_if()
return envtbl;
}
static VALUE
env_reject()
{
return rb_hash_delete_if(env_to_hash());
}
static VALUE
env_to_s()
{
@ -1331,8 +1344,7 @@ env_indexes(argc, argv)
}
static VALUE
env_to_hash(obj)
VALUE obj;
env_to_hash()
{
char **env;
VALUE hash = rb_hash_new();
@ -1397,6 +1409,7 @@ Init_Hash()
rb_define_method(rb_cHash,"delete", rb_hash_delete, 1);
rb_define_method(rb_cHash,"delete_if", rb_hash_delete_if, 0);
rb_define_method(rb_cHash,"reject!", rb_hash_delete_if, 0);
rb_define_method(rb_cHash,"reject", rb_hash_reject, 0);
rb_define_method(rb_cHash,"clear", rb_hash_clear, 0);
rb_define_method(rb_cHash,"invert", rb_hash_invert, 0);
rb_define_method(rb_cHash,"update", rb_hash_update, 1);
@ -1423,6 +1436,7 @@ Init_Hash()
rb_define_singleton_method(envtbl,"delete", env_delete_m, 1);
rb_define_singleton_method(envtbl,"delete_if", env_delete_if, 0);
rb_define_singleton_method(envtbl,"reject!", env_delete_if, 0);
rb_define_singleton_method(envtbl,"reject", env_reject, 0);
rb_define_singleton_method(envtbl,"to_s", env_to_s, 0);
rb_define_singleton_method(envtbl,"rehash", env_none, 0);
rb_define_singleton_method(envtbl,"to_a", env_to_a, 0);

Просмотреть файл

@ -154,7 +154,6 @@ VALUE rb_file_s_expand_path _((int, VALUE *));
void rb_file_const _((const char*, VALUE));
char *rb_find_file _((char*));
/* gc.c */
void rb_global_variable _((VALUE*));
void rb_gc_mark_locations _((VALUE*, VALUE*));
void rb_mark_tbl _((struct st_table*));
void rb_mark_hash _((struct st_table*));
@ -248,10 +247,8 @@ VALUE rb_reg_new _((const char*, long, int));
VALUE rb_reg_match _((VALUE, VALUE));
VALUE rb_reg_match2 _((VALUE));
int rb_reg_options _((VALUE));
const char* rb_get_kcode _((void));
void rb_set_kcode _((const char*));
int rb_ignorecase_p _((void));
void rb_match_busy _((VALUE, int));
const char* rb_get_kcode _((void));
/* ruby.c */
EXTERN VALUE rb_argv;
EXTERN VALUE rb_argv0;

4
io.c
Просмотреть файл

@ -963,7 +963,7 @@ rb_io_close(io)
{
OpenFile *fptr;
GetOpenFile(io, fptr);
fptr = RFILE(io)->fptr;
rb_io_fptr_close(fptr);
if (fptr->pid) {
rb_syswait(fptr->pid);
@ -2393,7 +2393,7 @@ rb_f_gets_internal(argc, argv)
if (TYPE(current_file) != T_FILE) {
line = rb_funcall3(current_file, rb_intern("gets"), argc, argv);
}
if (argc == 0 && rb_rs == rb_default_rs) {
else if (argc == 0 && rb_rs == rb_default_rs) {
line = rb_io_gets(current_file);
}
else {

Просмотреть файл

@ -97,7 +97,7 @@ class DEBUGGER__
begin
val = eval(str, binding)
val
rescue
rescue StandardError, ScriptError
at = eval("caller(0)", binding)
stdout.printf "%s:%s\n", at.shift, $!.to_s.sub(/\(eval\):1:(in `.*?':)?/, '') #`
for i in at

Просмотреть файл

@ -161,7 +161,7 @@ class String
def tr_s!(from, to)
return self.delete!(from) if to.length == 0
pattern = SqueezePatternCache[from] ||= /([#{bsquote(from)}])\1+"/
pattern = SqueezePatternCache[from] ||= /([#{bsquote(from)}])\1+"/ #"
if from[0] == ?^
last = /.$/.match(to)[0]
self.gsub!(pattern, last)

Просмотреть файл

@ -2,43 +2,46 @@
# original is shellwords.pl
#
# Usage:
# require 'shellwords.rb'
# require 'shellwords'
# words = Shellwords.shellwords(line)
#
# or
#
# require 'shellwords'
# include Shellwords
# words = shellwords(line)
module Shellwords
def shellwords(line)
return '' unless line
line.sub! /^\s+/, ''
unless line.kind_of?(String)
raise ArgumentError, "Argument must be String class object."
end
line.sub!(/^\s+/, '')
words = []
while line != ''
field = ''
while true
if line.sub! /^"(([^"\\]|\\.)*)"/, '' then #"
if line.sub!(/^"(([^"\\]|\\.)*)"/, '') then #"
snippet = $1
snippet.gsub! /\\(.)/, '\1'
snippet.gsub!(/\\(.)/, '\1')
elsif line =~ /^"/ then #"
raise ArgError, "Unmatched double quote: #{line}"
elsif line.sub! /^'(([^'\\]|\\.)*)'/, '' then #'
raise ArgumentError, "Unmatched double quote: #{line}"
elsif line.sub!(/^'(([^'\\]|\\.)*)'/, '') then #'
snippet = $1
snippet.gsub! /\\(.)/, '\1'
snippet.gsub!(/\\(.)/, '\1')
elsif line =~ /^'/ then #'
raise ArgError, "Unmatched single quote: #{line}"
elsif line.sub! /^\\(.)/, '' then
raise ArgumentError, "Unmatched single quote: #{line}"
elsif line.sub!(/^\\(.)/, '') then
snippet = $1
elsif line.sub! /^([^\s\\'"]+)/, '' then #'
elsif line.sub!(/^([^\s\\'"]+)/, '') then #'
snippet = $1
else
line.sub! /^\s+/, ''
line.sub!(/^\s+/, '')
break
end
field += snippet
field.concat(snippet)
end
words += field
words.push(field)
end
words
end

Просмотреть файл

@ -1,11 +1,11 @@
=begin
$Date: 1999/10/04 22:51:26 $
$Date: 2000/01/24 17:02:57 $
== SIMPLE TELNET CLIANT LIBRARY
== SIMPLE TELNET CLIENT LIBRARY
telnet.rb
Version 1.00
Version 1.20
Wakou Aoyama <wakou@fsinet.or.jp>
@ -155,6 +155,22 @@ of cource, set sync=true or flush is necessary.
== HISTORY
=== Version 1.20
2000/01/24 17:02:57
- respond to "IAC WILL x" with "IAC DONT x"
- respond to "IAC WONT x" with "IAC DONT x"
- better dumplog format
thanks to WATANABE Hirofumi <Hirofumi.Watanabe@jp.sony.com>
=== Version 1.10
2000/01/18 17:47:31
- bug fix: write method
- respond to "IAC WILL BINARY" with "IAC DO BINARY"
=== Version 1.00
1999/10/04 22:51:26
@ -338,74 +354,73 @@ if ommit password, then not require password prompt.
require "socket"
require "delegate"
require "thread"
require "timeout"
class Telnet < SimpleDelegator
IAC = 255.chr # "\377" # interpret as command:
DONT = 254.chr # "\376" # you are not to use option
DO = 253.chr # "\375" # please, you use option
WONT = 252.chr # "\374" # I won't use option
WILL = 251.chr # "\373" # I will use option
SB = 250.chr # "\372" # interpret as subnegotiation
GA = 249.chr # "\371" # you may reverse the line
EL = 248.chr # "\370" # erase the current line
EC = 247.chr # "\367" # erase the current character
AYT = 246.chr # "\366" # are you there
AO = 245.chr # "\365" # abort output--but let prog finish
IP = 244.chr # "\364" # interrupt process--permanently
BREAK = 243.chr # "\363" # break
DM = 242.chr # "\362" # data mark--for connect. cleaning
NOP = 241.chr # "\361" # nop
SE = 240.chr # "\360" # end sub negotiation
EOR = 239.chr # "\357" # end of record (transparent mode)
ABORT = 238.chr # "\356" # Abort process
SUSP = 237.chr # "\355" # Suspend process
EOF = 236.chr # "\354" # End of file
SYNCH = 242.chr # "\362" # for telfunc calls
IAC = 255.chr # "\377" # "\xff" # interpret as command:
DONT = 254.chr # "\376" # "\xfe" # you are not to use option
DO = 253.chr # "\375" # "\xfd" # please, you use option
WONT = 252.chr # "\374" # "\xfc" # I won't use option
WILL = 251.chr # "\373" # "\xfb" # I will use option
SB = 250.chr # "\372" # "\xfa" # interpret as subnegotiation
GA = 249.chr # "\371" # "\xf9" # you may reverse the line
EL = 248.chr # "\370" # "\xf8" # erase the current line
EC = 247.chr # "\367" # "\xf7" # erase the current character
AYT = 246.chr # "\366" # "\xf6" # are you there
AO = 245.chr # "\365" # "\xf5" # abort output--but let prog finish
IP = 244.chr # "\364" # "\xf4" # interrupt process--permanently
BREAK = 243.chr # "\363" # "\xf3" # break
DM = 242.chr # "\362" # "\xf2" # data mark--for connect. cleaning
NOP = 241.chr # "\361" # "\xf1" # nop
SE = 240.chr # "\360" # "\xf0" # end sub negotiation
EOR = 239.chr # "\357" # "\xef" # end of record (transparent mode)
ABORT = 238.chr # "\356" # "\xee" # Abort process
SUSP = 237.chr # "\355" # "\xed" # Suspend process
EOF = 236.chr # "\354" # "\xec" # End of file
SYNCH = 242.chr # "\362" # "\xf2" # for telfunc calls
OPT_BINARY = 0.chr # "\000" # Binary Transmission
OPT_ECHO = 1.chr # "\001" # Echo
OPT_RCP = 2.chr # "\002" # Reconnection
OPT_SGA = 3.chr # "\003" # Suppress Go Ahead
OPT_NAMS = 4.chr # "\004" # Approx Message Size Negotiation
OPT_STATUS = 5.chr # "\005" # Status
OPT_TM = 6.chr # "\006" # Timing Mark
OPT_RCTE = 7.chr # "\a" # Remote Controlled Trans and Echo
OPT_NAOL = 8.chr # "\010" # Output Line Width
OPT_NAOP = 9.chr # "\t" # Output Page Size
OPT_NAOCRD = 10.chr # "\n" # Output Carriage-Return Disposition
OPT_NAOHTS = 11.chr # "\v" # Output Horizontal Tab Stops
OPT_NAOHTD = 12.chr # "\f" # Output Horizontal Tab Disposition
OPT_NAOFFD = 13.chr # "\r" # Output Formfeed Disposition
OPT_NAOVTS = 14.chr # "\016" # Output Vertical Tabstops
OPT_NAOVTD = 15.chr # "\017" # Output Vertical Tab Disposition
OPT_NAOLFD = 16.chr # "\020" # Output Linefeed Disposition
OPT_XASCII = 17.chr # "\021" # Extended ASCII
OPT_LOGOUT = 18.chr # "\022" # Logout
OPT_BM = 19.chr # "\023" # Byte Macro
OPT_DET = 20.chr # "\024" # Data Entry Terminal
OPT_SUPDUP = 21.chr # "\025" # SUPDUP
OPT_SUPDUPOUTPUT = 22.chr # "\026" # SUPDUP Output
OPT_SNDLOC = 23.chr # "\027" # Send Location
OPT_TTYPE = 24.chr # "\030" # Terminal Type
OPT_EOR = 25.chr # "\031" # End of Record
OPT_TUID = 26.chr # "\032" # TACACS User Identification
OPT_OUTMRK = 27.chr # "\e" # Output Marking
OPT_TTYLOC = 28.chr # "\034" # Terminal Location Number
OPT_3270REGIME = 29.chr # "\035" # Telnet 3270 Regime
OPT_X3PAD = 30.chr # "\036" # X.3 PAD
OPT_NAWS = 31.chr # "\037" # Negotiate About Window Size
OPT_TSPEED = 32.chr # " " # Terminal Speed
OPT_LFLOW = 33.chr # "!" # Remote Flow Control
OPT_LINEMODE = 34.chr # "\"" # Linemode
OPT_XDISPLOC = 35.chr # "#" # X Display Location
OPT_OLD_ENVIRON = 36.chr # "$" # Environment Option
OPT_AUTHENTICATION = 37.chr # "%" # Authentication Option
OPT_ENCRYPT = 38.chr # "&" # Encryption Option
OPT_NEW_ENVIRON = 39.chr # "'" # New Environment Option
OPT_EXOPL = 255.chr # "\377" # Extended-Options-List
OPT_BINARY = 0.chr # "\000" # "\x00" # Binary Transmission
OPT_ECHO = 1.chr # "\001" # "\x01" # Echo
OPT_RCP = 2.chr # "\002" # "\x02" # Reconnection
OPT_SGA = 3.chr # "\003" # "\x03" # Suppress Go Ahead
OPT_NAMS = 4.chr # "\004" # "\x04" # Approx Message Size Negotiation
OPT_STATUS = 5.chr # "\005" # "\x05" # Status
OPT_TM = 6.chr # "\006" # "\x06" # Timing Mark
OPT_RCTE = 7.chr # "\a" # "\x07" # Remote Controlled Trans and Echo
OPT_NAOL = 8.chr # "\010" # "\x08" # Output Line Width
OPT_NAOP = 9.chr # "\t" # "\x09" # Output Page Size
OPT_NAOCRD = 10.chr # "\n" # "\x0a" # Output Carriage-Return Disposition
OPT_NAOHTS = 11.chr # "\v" # "\x0b" # Output Horizontal Tab Stops
OPT_NAOHTD = 12.chr # "\f" # "\x0c" # Output Horizontal Tab Disposition
OPT_NAOFFD = 13.chr # "\r" # "\x0d" # Output Formfeed Disposition
OPT_NAOVTS = 14.chr # "\016" # "\x0e" # Output Vertical Tabstops
OPT_NAOVTD = 15.chr # "\017" # "\x0f" # Output Vertical Tab Disposition
OPT_NAOLFD = 16.chr # "\020" # "\x10" # Output Linefeed Disposition
OPT_XASCII = 17.chr # "\021" # "\x11" # Extended ASCII
OPT_LOGOUT = 18.chr # "\022" # "\x12" # Logout
OPT_BM = 19.chr # "\023" # "\x13" # Byte Macro
OPT_DET = 20.chr # "\024" # "\x14" # Data Entry Terminal
OPT_SUPDUP = 21.chr # "\025" # "\x15" # SUPDUP
OPT_SUPDUPOUTPUT = 22.chr # "\026" # "\x16" # SUPDUP Output
OPT_SNDLOC = 23.chr # "\027" # "\x17" # Send Location
OPT_TTYPE = 24.chr # "\030" # "\x18" # Terminal Type
OPT_EOR = 25.chr # "\031" # "\x19" # End of Record
OPT_TUID = 26.chr # "\032" # "\x1a" # TACACS User Identification
OPT_OUTMRK = 27.chr # "\e" # "\x1b" # Output Marking
OPT_TTYLOC = 28.chr # "\034" # "\x1c" # Terminal Location Number
OPT_3270REGIME = 29.chr # "\035" # "\x1d" # Telnet 3270 Regime
OPT_X3PAD = 30.chr # "\036" # "\x1e" # X.3 PAD
OPT_NAWS = 31.chr # "\037" # "\x1f" # Negotiate About Window Size
OPT_TSPEED = 32.chr # " " # "\x20" # Terminal Speed
OPT_LFLOW = 33.chr # "!" # "\x21" # Remote Flow Control
OPT_LINEMODE = 34.chr # "\"" # "\x22" # Linemode
OPT_XDISPLOC = 35.chr # "#" # "\x23" # X Display Location
OPT_OLD_ENVIRON = 36.chr # "$" # "\x24" # Environment Option
OPT_AUTHENTICATION = 37.chr # "%" # "\x25" # Authentication Option
OPT_ENCRYPT = 38.chr # "&" # "\x26" # Encryption Option
OPT_NEW_ENVIRON = 39.chr # "'" # "\x27" # New Environment Option
OPT_EXOPL = 255.chr # "\377" # "\xff" # Extended-Options-List
NULL = "\000"
CR = "\015"
@ -413,35 +428,56 @@ class Telnet < SimpleDelegator
EOL = CR + LF
v = $-v
$-v = false
VERSION = "1.00"
RELEASE_DATE = "$Date: 1999/10/04 22:51:26 $"
VERSION = "1.20"
RELEASE_DATE = "$Date: 2000/01/24 17:02:57 $"
$-v = v
def initialize(options)
@options = options
@options["Binmode"] = false unless @options.key?("Binmode")
@options["Host"] = "localhost" unless @options.key?("Host")
@options["Port"] = 23 unless @options.key?("Port")
@options["Prompt"] = /[$%#>] \z/n unless @options.key?("Prompt")
@options["Telnetmode"] = true unless @options.key?("Telnetmode")
@options["Timeout"] = 10 unless @options.key?("Timeout")
@options["Waittime"] = 0 unless @options.key?("Waittime")
@options["Binmode"] = false unless @options.has_key?("Binmode")
@options["Host"] = "localhost" unless @options.has_key?("Host")
@options["Port"] = 23 unless @options.has_key?("Port")
@options["Prompt"] = /[$%#>] \z/n unless @options.has_key?("Prompt")
@options["Telnetmode"] = true unless @options.has_key?("Telnetmode")
@options["Timeout"] = 10 unless @options.has_key?("Timeout")
@options["Waittime"] = 0 unless @options.has_key?("Waittime")
@telnet_option = { "SGA" => false, "BINARY" => false }
if @options.key?("Output_log")
if @options.has_key?("Output_log")
@log = File.open(@options["Output_log"], 'a+')
@log.sync = true
@log.binmode
end
if @options.key?("Dump_log")
if @options.has_key?("Dump_log")
@dumplog = File.open(@options["Dump_log"], 'a+')
@dumplog.sync = true
@dumplog.binmode
def @dumplog.log_dump(dir, x)
len = x.length
addr = 0
offset = 0
while 0 < len
if len < 16
line = x[offset, len]
else
line = x[offset, 16]
end
hexvals = line.unpack('H*')[0]
hexvals.concat ' ' * (32 - hexvals.length)
hexvals = format "%s %s %s %s " * 4, *hexvals.unpack('a2' * 16)
line.gsub! /[\000-\037\177-\377]/n, '.'
printf "%s 0x%5.5x: %s%s\n", dir, addr, hexvals, line
addr += 16
offset += 16
len -= 16
end
print "\n"
end
end
if @options.key?("Proxy")
if @options.has_key?("Proxy")
if @options["Proxy"].kind_of?(Telnet)
@sock = @options["Proxy"].sock
elsif @options["Proxy"].kind_of?(TCPsocket)
@ -452,8 +488,8 @@ $-v = v
else
message = "Trying " + @options["Host"] + "...\n"
yield(message) if iterator?
@log.write(message) if @options.key?("Output_log")
@dumplog.write(message) if @options.key?("Dump_log")
@log.write(message) if @options.has_key?("Output_log")
@dumplog.log_dump('#', message) if @options.has_key?("Dump_log")
begin
if @options["Timeout"] == false
@ -466,8 +502,8 @@ $-v = v
rescue TimeoutError
raise TimeoutError, "timed-out; opening of the host"
rescue
@log.write($!.to_s + "\n") if @options.key?("Output_log")
@dumplog.write($!.to_s + "\n") if @options.key?("Dump_log")
@log.write($!.to_s + "\n") if @options.has_key?("Output_log")
@dumplog.log_dump('#', $!.to_s + "\n") if @options.has_key?("Dump_log")
raise
end
@sock.sync = true
@ -475,8 +511,8 @@ $-v = v
message = "Connected to " + @options["Host"] + ".\n"
yield(message) if iterator?
@log.write(message) if @options.key?("Output_log")
@dumplog.write(message) if @options.key?("Dump_log")
@log.write(message) if @options.has_key?("Output_log")
@dumplog.log_dump('#', message) if @options.has_key?("Dump_log")
end
super(@sock)
@ -532,11 +568,15 @@ $-v = v
self.write(IAC + WONT + $1[1..1])
''
elsif WILL[0] == $1[0] # respond to "IAC WILL x"
if OPT_ECHO[0] == $1[1]
if OPT_BINARY[0] == $1[1]
self.write(IAC + DO + OPT_BINARY)
elsif OPT_ECHO[0] == $1[1]
self.write(IAC + DO + OPT_ECHO)
elsif OPT_SGA[0] == $1[1]
@telnet_option["SGA"] = true
self.write(IAC + DO + OPT_SGA)
else
self.write(IAC + DONT + $1[1..1])
end
''
elsif WONT[0] == $1[0] # respond to "IAC WON'T x"
@ -545,6 +585,8 @@ $-v = v
elsif OPT_SGA[0] == $1[1]
@telnet_option["SGA"] = false
self.write(IAC + DONT + OPT_SGA)
else
self.write(IAC + DONT + $1[1..1])
end
''
else
@ -560,15 +602,15 @@ $-v = v
waittime = @options["Waittime"]
if options.kind_of?(Hash)
prompt = if options.key?("Match")
prompt = if options.has_key?("Match")
options["Match"]
elsif options.key?("Prompt")
elsif options.has_key?("Prompt")
options["Prompt"]
elsif options.key?("String")
elsif options.has_key?("String")
Regexp.new( Regexp.quote(options["String"]) )
end
time_out = options["Timeout"] if options.key?("Timeout")
waittime = options["Waittime"] if options.key?("Waittime")
time_out = options["Timeout"] if options.has_key?("Timeout")
waittime = options["Waittime"] if options.has_key?("Waittime")
else
prompt = options
end
@ -586,7 +628,7 @@ $-v = v
end
begin
c = @sock.sysread(1024 * 1024)
@dumplog.print(c) if @options.key?("Dump_log")
@dumplog.log_dump('<', c) if @options.has_key?("Dump_log")
if @options["Telnetmode"]
if Integer(c.rindex(/#{IAC}#{SE}/no)) <
Integer(c.rindex(/#{IAC}#{SB}/no))
@ -600,7 +642,7 @@ $-v = v
rest = ''
end
end
@log.print(buf) if @options.key?("Output_log")
@log.print(buf) if @options.has_key?("Output_log")
line.concat(buf)
yield buf if iterator?
rescue EOFError # End of file reached
@ -618,7 +660,8 @@ $-v = v
length = string.length
while 0 < length
IO::select(nil, [@sock])
length -= @sock.syswrite(string)
@dumplog.log_dump('>', string[-length..-1]) if @options.has_key?("Dump_log")
length -= @sock.syswrite(string[-length..-1])
end
end
@ -649,8 +692,8 @@ $-v = v
if options.kind_of?(Hash)
string = options["String"]
match = options["Match"] if options.key?("Match")
time_out = options["Timeout"] if options.key?("Timeout")
match = options["Match"] if options.has_key?("Match")
time_out = options["Timeout"] if options.has_key?("Timeout")
else
string = options
end

Просмотреть файл

@ -689,7 +689,7 @@ An end of a defun is found by moving forward from the beginning of one."
'("\\(^\\|[^_]\\)\\b\\([A-Z]+\\(\\w\\|_\\)*\\)"
2 font-lock-type-face)
;; functions
'("^\\s *def\\s *\\([^( ]+\\)"
'("^\\s *def\\s +\\([^( ]+\\)"
1 font-lock-function-name-face)
;; symbols
'("\\(^\\|[^:]\\)\\(:\\(\\w\\|_\\)+\\??\\)\\b"

Просмотреть файл

@ -1120,7 +1120,7 @@ primary : literal
$$ = NEW_UNLESS(cond($2), $4, $5);
fixpos($$, $2);
}
| kWHILE {cond_nest++;} expr do {cond_nest--;}
| kWHILE {cond_nest++;} expr do { cond_nest--; }
compstmt
kEND
{
@ -1128,7 +1128,7 @@ primary : literal
$$ = NEW_WHILE(cond($3), $6, 1);
fixpos($$, $3);
}
| kUNTIL {cond_nest++;} expr do {cond_nest--;}
| kUNTIL {cond_nest++;} expr do { cond_nest--; }
compstmt
kEND
{

Просмотреть файл

@ -77,7 +77,7 @@ void srand48 _((long));
#endif /* not HAVE_DRAND48 */
static int first = 1;
#if !defined HAVE_DRAND48 && defined HAVE_RANDOM
#ifdef HAVE_RANDOM
static char state[256];
#endif
@ -88,7 +88,7 @@ rand_init(seed)
int old;
static unsigned int saved_seed;
#if !defined HAVE_DRAND48 && defined HAVE_RANDOM
#ifdef HAVE_RANDOM
if (first == 1) {
initstate(1, state, sizeof state);
}

56
re.c
Просмотреть файл

@ -183,7 +183,7 @@ kcode_reset_option()
}
int
rb_mbclen2(c, re)
rb_reg_mbclen2(c, re)
unsigned char c;
VALUE re;
{
@ -455,21 +455,14 @@ match_end(match, n)
#define MATCH_BUSY FL_USER2
void
rb_match_busy(match, busy)
rb_match_busy(match)
VALUE match;
int busy;
{
if (busy) {
FL_SET(match, MATCH_BUSY);
}
else {
FL_UNSET(match, MATCH_BUSY);
}
FL_SET(match, MATCH_BUSY);
}
int ruby_ignorecase;
static int may_need_recompile;
static VALUE matchcache;
static void
rb_reg_prepare_re(reg)
@ -540,7 +533,7 @@ rb_reg_search(reg, str, pos, reverse)
{
int result;
VALUE match;
struct re_registers *regs = 0;
static struct re_registers regs;
int range;
if (pos > RSTRING(str)->len) return -1;
@ -553,23 +546,6 @@ rb_reg_search(reg, str, pos, reverse)
else if (reg_kcode != curr_kcode)
kcode_reset_option();
if (rb_thread_scope_shared_p()) {
match = Qnil;
}
else {
match = rb_backref_get();
}
if (NIL_P(match) || FL_TEST(match, MATCH_BUSY)) {
if (matchcache) {
match = matchcache;
matchcache = 0;
}
else {
match = match_alloc();
}
}
regs = RMATCH(match)->regs;
if (reverse) {
range = -pos;
}
@ -577,7 +553,7 @@ rb_reg_search(reg, str, pos, reverse)
range = RSTRING(str)->len - pos;
}
result = re_search(RREGEXP(reg)->ptr,RSTRING(str)->ptr,RSTRING(str)->len,
pos, range, regs);
pos, range, &regs);
if (FL_TEST(reg, KCODE_FIXED))
kcode_reset_option();
@ -586,15 +562,24 @@ rb_reg_search(reg, str, pos, reverse)
rb_reg_raise(RREGEXP(reg)->str, RREGEXP(reg)->len,
"Stack overfow in regexp matcher", reg);
}
if (result < 0) {
FL_UNSET(match, FL_TAINT);
matchcache = match;
rb_backref_set(Qnil);
return result;
}
if (rb_thread_scope_shared_p()) {
match = Qnil;
}
else {
RMATCH(match)->str = rb_str_new4(str);
rb_backref_set(match);
match = rb_backref_get();
}
if (NIL_P(match) || FL_TEST(match, MATCH_BUSY)) {
match = match_alloc();
}
re_copy_registers(RMATCH(match)->regs, &regs);
RMATCH(match)->str = rb_str_new4(str);
rb_backref_set(match);
OBJ_INFECT(match, reg);
OBJ_INFECT(match, str);
@ -1150,6 +1135,7 @@ rb_reg_regsub(str, src, regs)
}
if (no >= 0) {
if (no >= regs->num_regs) continue;
if (BEG(no) == -1) continue;
rb_str_cat(val, RSTRING(src)->ptr+BEG(no), END(no)-BEG(no));
}
@ -1247,7 +1233,8 @@ match_getter()
VALUE match = rb_backref_get();
if (NIL_P(match)) return Qnil;
return match_clone(match);
rb_match_busy(match);
return match;
}
static void
@ -1310,7 +1297,6 @@ Init_Regexp()
rb_define_const(rb_cRegexp, "POSIXLINE", INT2FIX(RE_OPTION_POSIXLINE));
rb_global_variable(&reg_cache);
rb_global_variable(&matchcache);
rb_cMatch = rb_define_class("MatchingData", rb_cObject);
rb_undef_method(CLASS_OF(rb_cMatch), "new");

5
re.h
Просмотреть файл

@ -35,9 +35,10 @@ VALUE rb_reg_regsub _((VALUE, VALUE, struct re_registers *));
int rb_reg_adjust_startpos _((VALUE, VALUE, int, int));
int rb_kcode _((void));
void rb_match_busy _((VALUE));
extern int ruby_ignorecase;
int rb_mbclen2 _((unsigned char, VALUE));
#define mbclen2(c,re) rb_mbclen2((c),(re))
int rb_reg_mbclen2 _((unsigned char, VALUE));
#define mbclen2(c,re) rb_reg_mbclen2((c),(re))
#endif

93
regex.c
Просмотреть файл

@ -24,6 +24,11 @@
#include "config.h"
#ifdef RUBY_PLATFORM
# define RUBY
extern int rb_prohibit_interrupt;
extern int rb_trap_pending;
# define CHECK_INTS if (!rb_prohibit_interrupt) {\
if (rb_trap_pending) rb_trap_exec();\
}
#endif
/* We write fatal error messages on standard error. */
@ -59,13 +64,13 @@
#endif
#ifndef xmalloc
void *xmalloc _((unsigned long));
void *xcalloc _((unsigned long,unsigned long));
void *xrealloc _((void*,unsigned long));
void *xmalloc _((size_t));
void *xcalloc _((size_t,size_t));
void *xrealloc _((void*,size_t));
void free _((void*));
#endif
/* #define NO_ALLOCA */ /* try it out for now */
#define NO_ALLOCA */ /* try it out for now */
#ifndef NO_ALLOCA
/* Make alloca work the best possible way. */
#ifdef __GNUC__
@ -109,13 +114,13 @@ char *alloca();
#define RE_ALLOCATE xmalloc
#define FREE_VAR(var) do { if (var) free(var); var = NULL; } while(0)
#define FREE_VARIABLES()
#define FREE_AND_RETURN_VOID(stackb) do { free(stackb); return; } while(0)
#define FREE_AND_RETURN(stackb,val) do { free(stackb); return(val); } while(0)
#define DOUBLE_STACK(stackx,stackb,len,type) \
(type*)xrealloc(stackb, 2 * len * sizeof(type))
#define DOUBLE_STACK(stackx,stackb,len,type) do { \
stackx = (type*)xrealloc(stackb, 2 * len * sizeof(type)); \
} while (0)
#endif /* NO_ALLOCA */
#define RE_TALLOC(n,t) ((t*)RE_ALLOCATE((n)*sizeof(t)))
@ -125,7 +130,7 @@ char *alloca();
#define EXPAND_FAIL_STACK(stackx,stackb,len) \
do { \
/* Roughly double the size of the stack. */ \
stackx = DOUBLE_STACK(stackx,stackb,len,unsigned char*); \
DOUBLE_STACK(stackx,stackb,len,unsigned char*); \
/* Rearrange the pointers. */ \
stackp = stackx + (stackp - stackb); \
stackb = stackx; \
@ -273,6 +278,7 @@ enum regexpcode
of string to be matched (if not). */
endbuf, /* Analogously, for end of buffer/string. */
endbuf2, /* End of buffer/string, or newline just before it. */
begpos, /* Matches where last scan//gsub left off. */
jump, /* Followed by two bytes giving relative address to jump to. */
jump_past_alt,/* Same as jump, but marks the end of an alternative. */
on_failure_jump, /* Followed by two bytes giving relative address of
@ -337,6 +343,7 @@ enum regexpcode
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. */
stop_backtrack, /* Restore backtrack stack at the point start_nowidth. */
duplicate, /* Match a duplicate of something remembered.
Followed by one byte containing the index of the memory
register. */
@ -354,7 +361,7 @@ enum regexpcode
so it is not a hard limit. */
#ifndef NFAILURES
#define NFAILURES 80
#define NFAILURES 160
#endif
/* Store NUMBER in two contiguous bytes starting at DESTINATION. */
@ -767,6 +774,11 @@ print_partial_compiled_pattern(start, end)
printf("/pop_and_fail");
break;
case stop_backtrack:
printf("/stop_backtrack//");
p += 2;
break;
case duplicate:
printf("/duplicate/%d", *p++);
break;
@ -921,6 +933,10 @@ print_partial_compiled_pattern(start, end)
printf("/endbuf2");
break;
case begpos:
printf("/begpos");
break;
default:
printf("?%d", *(p-1));
}
@ -993,6 +1009,7 @@ calculate_must_string(start, end)
case begbuf:
case endbuf:
case endbuf2:
case begpos:
case push_dummy_failure:
case start_paren:
case stop_paren:
@ -1030,6 +1047,7 @@ calculate_must_string(start, end)
case start_nowidth:
case stop_nowidth:
case stop_backtrack:
case finalize_jump:
case maybe_finalize_jump:
case finalize_push:
@ -1650,6 +1668,7 @@ re_compile_pattern(pattern, size, bufp)
case ':':
case '=':
case '!':
case '>':
break;
default:
@ -1665,7 +1684,7 @@ re_compile_pattern(pattern, size, bufp)
int *stackx;
unsigned int len = stacke - stackb;
stackx = DOUBLE_STACK(stackx,stackb,len,int);
DOUBLE_STACK(stackx,stackb,len,int);
/* Rearrange the pointers. */
stackp = stackx + (stackp - stackb);
stackb = stackx;
@ -1691,11 +1710,12 @@ re_compile_pattern(pattern, size, bufp)
case '=':
case '!':
case '>':
BUFPUSH(start_nowidth);
*stackp++ = b - bufp->buffer;
BUFPUSH(0); /* temporary value */
BUFPUSH(0);
if (c == '=') break;
if (c != '!') break;
BUFPUSH(on_failure_jump);
*stackp++ = b - bufp->buffer;
@ -1766,6 +1786,15 @@ re_compile_pattern(pattern, size, bufp)
stackp--;
break;
case '>':
BUFPUSH(stop_backtrack);
/* tell stack-pos place to start_nowidth */
STORE_NUMBER(bufp->buffer+stackp[-1], b - bufp->buffer - stackp[-1] - 2);
BUFPUSH(0); /* space to hold stack pos */
BUFPUSH(0);
stackp--;
break;
case ':':
BUFPUSH(stop_paren);
break;
@ -2089,6 +2118,10 @@ re_compile_pattern(pattern, size, bufp)
BUFPUSH(endbuf);
break;
case 'G':
BUFPUSH(begpos);
break;
/* hex */
case 'x':
had_mbchar = 0;
@ -2702,6 +2735,7 @@ re_compile_fastmap(bufp)
case try_next:
case start_nowidth:
case stop_nowidth:
case stop_backtrack:
p += 2;
continue;
@ -3003,11 +3037,12 @@ re_search(bufp, string, size, startpos, range, regs)
case begbuf:
begbuf_match:
if (range > 0) {
if (startpos > 0)
return -1;
else if (re_match(bufp, string, size, 0, regs) >= 0)
return 0;
return -1;
if (startpos > 0) return -1;
else {
val = re_match(bufp, string, size, 0, regs);
if (val >= 0) return 0;
return val;
}
}
break;
@ -3015,6 +3050,11 @@ re_search(bufp, string, size, startpos, range, regs)
anchor = 1;
break;
case begpos:
val = re_match(bufp, string, size, startpos, regs);
if (val >= 0) return startpos;
return val;
default:
break;
}
@ -3106,10 +3146,8 @@ re_search(bufp, string, size, startpos, range, regs)
if (startpos > size) return -1;
if (anchor && size > 0 && startpos == size) return -1;
val = re_match(bufp, string, size, startpos, regs);
if (val >= 0)
return startpos;
if (val == -2)
return -2;
if (val >= 0) return startpos;
if (val == -2) return -2;
#ifndef NO_ALLOCA
#ifdef C_ALLOCA
@ -3617,6 +3655,12 @@ re_match(bufp, string_arg, size, pos, regs)
POP_FAILURE_POINT();
continue;
case stop_backtrack:
EXTRACT_NUMBER_AND_INCR(mcnt, p);
stackp = stackb + mcnt;
POP_FAILURE_POINT();
continue;
case pop_and_fail:
EXTRACT_NUMBER(mcnt, p+1);
stackp = stackb + mcnt;
@ -3747,6 +3791,12 @@ re_match(bufp, string_arg, size, pos, regs)
/* A smart repeat is similar but loops back to the on_failure_jump
so that each repetition makes another failure point. */
/* Match at the starting position. */
case begpos:
if (d - string == pos)
break;
goto fail;
case on_failure_jump:
on_failure:
EXTRACT_NUMBER_AND_INCR(mcnt, p);
@ -4089,6 +4139,9 @@ re_match(bufp, string_arg, size, pos, regs)
SET_REGS_MATCHED;
break;
}
#ifdef RUBY
CHECK_INTS;
#endif
continue; /* Successfully executed one pattern command; keep going. */
/* Jump here if any matching operation fails. */

4
ruby.h
Просмотреть файл

@ -400,6 +400,10 @@ void rb_undef_method _((VALUE,const char*));
void rb_define_alias _((VALUE,const char*,const char*));
void rb_define_attr _((VALUE,const char*,int,int));
void rb_global_variable _((VALUE*));
void rb_gc_register_address _((VALUE*));
void rb_gc_unregister_address _((VALUE*));
ID rb_intern _((const char*));
char *rb_id2name _((ID));
ID rb_to_id _((VALUE));

Просмотреть файл

@ -31,7 +31,7 @@ while TRUE
end
begin
print eval(line).inspect, "\n"
rescue
rescue ScriptError, StandardError
$! = 'exception raised' unless $!
print "ERR: ", $!, "\n"
end

Просмотреть файл

@ -14,7 +14,7 @@ while gets()
else
type = ""
end
while arg.sub!(/(\** *[\w\d_]+)(,|$)/, "")
while arg.sub!(/(\** *[\w\d_]+)(,|$)/, "") && $~
args.push type + " " + $1.strip
end
else

Просмотреть файл

@ -1030,20 +1030,19 @@ rb_str_sub_bang(argc, argv, str)
pat = get_pat(argv[0]);
if (rb_reg_search(pat, str, 0, 0) >= 0) {
rb_str_modify(str);
match = rb_backref_get();
regs = RMATCH(match)->regs;
if (iter) {
rb_match_busy(match, Qtrue);
rb_match_busy(match);
repl = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));
rb_match_busy(match, Qfalse);
rb_backref_set(match);
}
else {
repl = rb_reg_regsub(repl, str, regs);
}
plen = END(0) - BEG(0);
rb_str_modify(str);
if (RSTRING(repl)->len > plen) {
REALLOC_N(RSTRING(str)->ptr, char,
RSTRING(str)->len + RSTRING(repl)->len - plen + 1);
@ -1057,8 +1056,9 @@ rb_str_sub_bang(argc, argv, str)
RSTRING(repl)->ptr, RSTRING(repl)->len);
RSTRING(str)->len += RSTRING(repl)->len - plen;
RSTRING(str)->ptr[RSTRING(str)->len] = '\0';
return str;
}
return str;
return Qnil;
}
static VALUE
@ -1100,7 +1100,7 @@ rb_str_gsub_bang(argc, argv, str)
pat = get_pat(argv[0]);
offset=0; n=0;
beg = rb_reg_search(pat, str, 0, 0);
if (beg < 0) return str; /* no match, no substitution */
if (beg < 0) return Qnil; /* no match, no substitution */
blen = RSTRING(str)->len + 30; /* len + margin */
buf = ALLOC_N(char, blen);
@ -1110,9 +1110,9 @@ rb_str_gsub_bang(argc, argv, str)
while (beg >= 0) {
n++;
match = rb_backref_get();
rb_match_busy(match, Qtrue);
regs = RMATCH(match)->regs;
if (iter) {
rb_match_busy(match);
val = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));
rb_backref_set(match);
}
@ -1160,7 +1160,6 @@ rb_str_gsub_bang(argc, argv, str)
memcpy(bp, cp, RSTRING(str)->len - offset);
bp += RSTRING(str)->len - offset;
}
rb_match_busy(match, Qfalse);
rb_backref_set(match);
rb_str_modify(str);
free(RSTRING(str)->ptr);
@ -1518,6 +1517,7 @@ rb_str_upcase_bang(str)
VALUE str;
{
char *s, *send;
int modify = 0;
rb_str_modify(str);
s = RSTRING(str)->ptr; send = s + RSTRING(str)->len;
@ -1527,10 +1527,13 @@ rb_str_upcase_bang(str)
}
else if (islower(*s)) {
*s = toupper(*s);
modify = 1;
}
s++;
}
return str;
if (modify) return str;
return Qnil;
}
static VALUE
@ -1547,6 +1550,7 @@ rb_str_downcase_bang(str)
VALUE str;
{
char *s, *send;
int modify = 0;
rb_str_modify(str);
s = RSTRING(str)->ptr; send = s + RSTRING(str)->len;
@ -1556,10 +1560,13 @@ rb_str_downcase_bang(str)
}
else if (ISUPPER(*s)) {
*s = tolower(*s);
modify = 1;
}
s++;
}
return str;
if (modify) return str;
return Qnil;
}
static VALUE
@ -1576,11 +1583,13 @@ rb_str_capitalize_bang(str)
VALUE str;
{
char *s, *send;
int modify = 0;
rb_str_modify(str);
s = RSTRING(str)->ptr; send = s + RSTRING(str)->len;
if (ISLOWER(*s)) {
*s = toupper(*s);
modify = 1;
}
while (++s < send) {
if (ismbchar(*s)) {
@ -1588,9 +1597,11 @@ rb_str_capitalize_bang(str)
}
else if (ISUPPER(*s)) {
*s = tolower(*s);
modify = 1;
}
}
return str;
if (modify) return str;
return Qnil;
}
static VALUE
@ -1607,6 +1618,7 @@ rb_str_swapcase_bang(str)
VALUE str;
{
char *s, *send;
int modify = 0;
rb_str_modify(str);
s = RSTRING(str)->ptr; send = s + RSTRING(str)->len;
@ -1616,14 +1628,17 @@ rb_str_swapcase_bang(str)
}
else if (ISUPPER(*s)) {
*s = tolower(*s);
modify = 1;
}
else if (ISLOWER(*s)) {
*s = toupper(*s);
modify = 1;
}
s++;
}
return str;
if (modify) return str;
return Qnil;
}
static VALUE
@ -1675,7 +1690,7 @@ trnext(t)
static VALUE rb_str_delete_bang _((int,VALUE*,VALUE));
static void
static VALUE
tr_trans(str, src, repl, sflag)
VALUE str, src, repl;
int sflag;
@ -1683,7 +1698,7 @@ tr_trans(str, src, repl, sflag)
struct tr trsrc, trrepl;
int cflag = 0;
int trans[256];
int i, c;
int i, c, modify = 0;
char *s, *send;
rb_str_modify(str);
@ -1695,8 +1710,7 @@ tr_trans(str, src, repl, sflag)
}
if (TYPE(repl) != T_STRING) repl = rb_str_to_str(repl);
if (RSTRING(repl)->len == 0) {
rb_str_delete_bang(1, &src, str);
return;
return rb_str_delete_bang(1, &src, str);
}
trrepl.p = RSTRING(repl)->ptr;
trrepl.pend = trrepl.p + RSTRING(repl)->len;
@ -1743,6 +1757,7 @@ tr_trans(str, src, repl, sflag)
if (last == c) continue;
last = c;
*t++ = c & 0xff;
modify = 1;
}
else {
last = -1;
@ -1751,6 +1766,7 @@ tr_trans(str, src, repl, sflag)
}
if (RSTRING(str)->len > (t - RSTRING(str)->ptr)) {
RSTRING(str)->len = (t - RSTRING(str)->ptr);
modify = 1;
*t = '\0';
}
}
@ -1758,18 +1774,21 @@ tr_trans(str, src, repl, sflag)
while (s < send) {
if ((c = trans[*s & 0xff]) >= 0) {
*s = c & 0xff;
modify = 1;
}
s++;
}
}
if (modify) return str;
return Qnil;
}
static VALUE
rb_str_tr_bang(str, src, repl)
VALUE str, src, repl;
{
tr_trans(str, src, repl, 0);
return str;
return tr_trans(str, src, repl, 0);
}
static VALUE
@ -1823,6 +1842,7 @@ rb_str_delete_bang(argc, argv, str)
{
char *s, *send, *t;
char squeez[256];
int modify = 0;
int init = 1;
int i;
@ -1839,14 +1859,17 @@ rb_str_delete_bang(argc, argv, str)
s = t = RSTRING(str)->ptr;
send = s + RSTRING(str)->len;
while (s < send) {
if (!squeez[*s & 0xff])
if (squeez[*s & 0xff])
modify = 1;
else
*t++ = *s;
s++;
}
*t = '\0';
RSTRING(str)->len = t - RSTRING(str)->ptr;
return str;
if (modify) return str;
return Qnil;
}
static VALUE
@ -1868,7 +1891,7 @@ rb_str_squeeze_bang(argc, argv, str)
{
char squeez[256];
char *s, *send, *t;
int c, save;
int c, save, modify = 0;
int init = 1;
int i;
@ -1889,6 +1912,7 @@ rb_str_squeeze_bang(argc, argv, str)
}
rb_str_modify(str);
s = t = RSTRING(str)->ptr;
send = s + RSTRING(str)->len;
save = -1;
@ -1901,9 +1925,11 @@ rb_str_squeeze_bang(argc, argv, str)
*t = '\0';
if (t - RSTRING(str)->ptr != RSTRING(str)->len) {
RSTRING(str)->len = t - RSTRING(str)->ptr;
modify = 1;
}
return str;
if (modify) return str;
return Qnil;
}
static VALUE
@ -1921,8 +1947,7 @@ static VALUE
rb_str_tr_s_bang(str, src, repl)
VALUE str, src, repl;
{
tr_trans(str, src, repl, 1);
return str;
return tr_trans(str, src, repl, 1);
}
static VALUE
@ -2212,8 +2237,9 @@ rb_str_chop_bang(str)
}
}
RSTRING(str)->ptr[RSTRING(str)->len] = '\0';
return str;
}
return str;
return Qnil;
}
static VALUE
@ -2280,8 +2306,9 @@ rb_str_chomp_bang(argc, argv, str)
memcmp(RSTRING(rs)->ptr, p+len-rslen, rslen) == 0)) {
RSTRING(str)->len -= rslen;
RSTRING(str)->ptr[RSTRING(str)->len] = '\0';
return str;
}
return str;
return Qnil;
}
static VALUE
@ -2308,7 +2335,7 @@ rb_f_chomp(argc, argv)
int argc;
VALUE *argv;
{
VALUE str = rb_str_dup(uscore_get());;
VALUE str = rb_str_dup(uscore_get());
rb_str_chomp_bang(argc, argv, str);
rb_lastline_set(str);
@ -2344,6 +2371,10 @@ rb_str_strip_bang(str)
else if (t < e) {
RSTRING(str)->ptr[RSTRING(str)->len] = '\0';
}
else {
return Qnil;
}
return str;
}
@ -2396,20 +2427,27 @@ rb_str_scan(str, pat)
{
VALUE result;
long start = 0;
VALUE match = Qnil;
pat = get_pat(pat);
if (!rb_iterator_p()) {
VALUE ary = rb_ary_new();
while (!NIL_P(result = scan_once(str, pat, &start))) {
match = rb_backref_get();
rb_ary_push(ary, result);
}
rb_backref_set(match);
return ary;
}
while (!NIL_P(result = scan_once(str, pat, &start))) {
match = rb_backref_get();
rb_match_busy(match);
rb_yield(result);
rb_backref_set(match);
}
rb_backref_set(match);
return str;
}

Просмотреть файл

@ -1,4 +1,4 @@
#define RUBY_VERSION "1.5.2"
#define RUBY_RELEASE_DATE "2000-02-02"
#define RUBY_RELEASE_DATE "2000-02-08"
#define RUBY_VERSION_CODE 152
#define RUBY_RELEASE_CODE 20000202
#define RUBY_RELEASE_CODE 20000208