# This is a patch for perl-5.7.1 to update it to perl-5.7.2 # # To apply this patch: # STEP 1: Chdir to the source directory. # STEP 2: Run the 'applypatch' program with this patch file as input. # # If you do not have 'applypatch', it is part of the 'makepatch' package # that you can fetch from the Comprehensive Perl Archive Network: # http://www.perl.com/CPAN/authors/Johan_Vromans/makepatch-x.y.tar.gz # In the above URL, 'x' should be 2 or higher. # # To apply this patch without the use of 'applypatch': # STEP 1: Chdir to the source directory. # If you have a decent Bourne-type shell: # STEP 2: Run the shell with this file as input. # If you don't have such a shell, you may need to manually create/delete # the files/directories as shown below. # STEP 3: Run the 'patch' program with this file as input. # # These are the commands needed to create/delete files/directories: # mkdir 'Cross' chmod 0755 'Cross' mkdir 'NetWare' chmod 0755 'NetWare' mkdir 'NetWare/bat' chmod 0755 'NetWare/bat' mkdir 'NetWare/t' chmod 0755 'NetWare/t' mkdir 'NetWare/testnlm' chmod 0755 'NetWare/testnlm' mkdir 'NetWare/testnlm/echo' chmod 0755 'NetWare/testnlm/echo' mkdir 'NetWare/testnlm/type' chmod 0755 'NetWare/testnlm/type' mkdir 'ext/DB_File/t' chmod 0755 'ext/DB_File/t' mkdir 'ext/Data/Dumper/t' chmod 0755 'ext/Data/Dumper/t' mkdir 'ext/Digest/MD5/t' chmod 0755 'ext/Digest/MD5/t' mkdir 'ext/File/Glob/t' chmod 0755 'ext/File/Glob/t' mkdir 'ext/Filter/t' chmod 0755 'ext/Filter/t' mkdir 'ext/I18N' chmod 0755 'ext/I18N' mkdir 'ext/I18N/Langinfo' chmod 0755 'ext/I18N/Langinfo' mkdir 'ext/IO/lib/IO/t' chmod 0755 'ext/IO/lib/IO/t' mkdir 'ext/List' chmod 0755 'ext/List' mkdir 'ext/List/Util' chmod 0755 'ext/List/Util' mkdir 'ext/List/Util/lib' chmod 0755 'ext/List/Util/lib' mkdir 'ext/List/Util/lib/List' chmod 0755 'ext/List/Util/lib/List' mkdir 'ext/List/Util/lib/Scalar' chmod 0755 'ext/List/Util/lib/Scalar' mkdir 'ext/List/Util/t' chmod 0755 'ext/List/Util/t' mkdir 'ext/MIME/Base64/t' chmod 0755 'ext/MIME/Base64/t' mkdir 'ext/PerlIO/t' chmod 0755 'ext/PerlIO/t' mkdir 'ext/Safe' chmod 0755 'ext/Safe' mkdir 'ext/Storable/t' chmod 0755 'ext/Storable/t' mkdir 'ext/Time' chmod 0755 'ext/Time' mkdir 'ext/Time/HiRes' chmod 0755 'ext/Time/HiRes' mkdir 'ext/Time/HiRes/hints' chmod 0755 'ext/Time/HiRes/hints' mkdir 'ext/Time/Piece' chmod 0755 'ext/Time/Piece' mkdir 'lib/Attribute' chmod 0755 'lib/Attribute' mkdir 'lib/Attribute/Handlers' chmod 0755 'lib/Attribute/Handlers' mkdir 'lib/Attribute/Handlers/demo' chmod 0755 'lib/Attribute/Handlers/demo' mkdir 'lib/CGI/t' chmod 0755 'lib/CGI/t' mkdir 'lib/CPAN/t' chmod 0755 'lib/CPAN/t' mkdir 'lib/Class/ISA' chmod 0755 'lib/Class/ISA' mkdir 'lib/Env' chmod 0755 'lib/Env' mkdir 'lib/File/Find' chmod 0755 'lib/File/Find' mkdir 'lib/File/Temp' chmod 0755 'lib/File/Temp' mkdir 'lib/File/Temp/t' chmod 0755 'lib/File/Temp/t' mkdir 'lib/Filter/Simple' chmod 0755 'lib/Filter/Simple' mkdir 'lib/Getopt/Long' chmod 0755 'lib/Getopt/Long' mkdir 'lib/Getopt/Long/t' chmod 0755 'lib/Getopt/Long/t' mkdir 'lib/I18N/LangTags' chmod 0755 'lib/I18N/LangTags' mkdir 'lib/Locale/Codes' chmod 0755 'lib/Locale/Codes' mkdir 'lib/Locale/Codes/t' chmod 0755 'lib/Locale/Codes/t' mkdir 'lib/Locale/Maketext' chmod 0755 'lib/Locale/Maketext' mkdir 'lib/Math/BigInt' chmod 0755 'lib/Math/BigInt' mkdir 'lib/Math/BigInt/t' chmod 0755 'lib/Math/BigInt/t' mkdir 'lib/Memoize' chmod 0755 'lib/Memoize' mkdir 'lib/Memoize/t' chmod 0755 'lib/Memoize/t' mkdir 'lib/NEXT' chmod 0755 'lib/NEXT' mkdir 'lib/Net/FTP' chmod 0755 'lib/Net/FTP' mkdir 'lib/Net/demos' chmod 0755 'lib/Net/demos' mkdir 'lib/Net/t' chmod 0755 'lib/Net/t' mkdir 'lib/Switch' chmod 0755 'lib/Switch' mkdir 'lib/Term/ANSIColor' chmod 0755 'lib/Term/ANSIColor' mkdir 'lib/Test/More' chmod 0755 'lib/Test/More' mkdir 'lib/Test/More/t' chmod 0755 'lib/Test/More/t' mkdir 'lib/Test/Simple' chmod 0755 'lib/Test/Simple' mkdir 'lib/Test/Simple/t' chmod 0755 'lib/Test/Simple/t' mkdir 'lib/Test/t' chmod 0755 'lib/Test/t' mkdir 'lib/Text/Balanced' chmod 0755 'lib/Text/Balanced' mkdir 'lib/Text/Balanced/t' chmod 0755 'lib/Text/Balanced/t' mkdir 'lib/Text/TabsWrap' chmod 0755 'lib/Text/TabsWrap' mkdir 'lib/Text/TabsWrap/t' chmod 0755 'lib/Text/TabsWrap/t' mkdir 'lib/Tie/Array' chmod 0755 'lib/Tie/Array' mkdir 'lib/Tie/Handle' chmod 0755 'lib/Tie/Handle' mkdir 't/lib/Test' chmod 0755 't/lib/Test' mkdir 't/lib/Test/More' chmod 0755 't/lib/Test/More' mkdir 't/lib/Test/Simple' chmod 0755 't/lib/Test/Simple' mkdir 't/lib/Test/Simple/sample_tests' chmod 0755 't/lib/Test/Simple/sample_tests' mkdir 't/lib/locale' chmod 0755 't/lib/locale' mkdir 't/lib/strict' chmod 0755 't/lib/strict' mkdir 't/lib/warnings' chmod 0755 't/lib/warnings' mkdir 'uts' chmod 0755 'uts' rm -f 'win32/bin/mdelete.bat' rm -f 't/pragma/warnings.t' rm -f 't/pragma/warn/util' rm -f 't/pragma/warn/utf8' rm -f 't/pragma/warn/universal' rm -f 't/pragma/warn/toke' rm -f 't/pragma/warn/taint' rm -f 't/pragma/warn/sv' rm -f 't/pragma/warn/run' rm -f 't/pragma/warn/regexec' rm -f 't/pragma/warn/regcomp' rm -f 't/pragma/warn/pp_sys' rm -f 't/pragma/warn/pp_hot' rm -f 't/pragma/warn/pp_ctl' rm -f 't/pragma/warn/pp' rm -f 't/pragma/warn/perly' rm -f 't/pragma/warn/perlio' rm -f 't/pragma/warn/perl' rm -f 't/pragma/warn/op' rm -f 't/pragma/warn/mg' rm -f 't/pragma/warn/malloc' rm -f 't/pragma/warn/hv' rm -f 't/pragma/warn/gv' rm -f 't/pragma/warn/doop' rm -f 't/pragma/warn/doio' rm -f 't/pragma/warn/av' rm -f 't/pragma/warn/9enabled' rm -f 't/pragma/warn/8signal' rm -f 't/pragma/warn/7fatal' rm -f 't/pragma/warn/6default' rm -f 't/pragma/warn/5nolint' rm -f 't/pragma/warn/4lint' rm -f 't/pragma/warn/3both' rm -f 't/pragma/warn/2use' rm -f 't/pragma/warn/1global' rm -f 't/pragma/utf8.t' rm -f 't/pragma/subs.t' rm -f 't/pragma/sub_lval.t' rm -f 't/pragma/strict.t' rm -f 't/pragma/strict-vars' rm -f 't/pragma/strict-subs' rm -f 't/pragma/strict-refs' rm -f 't/pragma/overload.t' rm -f 't/pragma/locale/utf8' rm -f 't/pragma/locale/latin1' rm -f 't/pragma/locale.t' rm -f 't/pragma/diagnostics.t' rm -f 't/pragma/constant.t' rm -f 't/lib/xs-typemap.t' rm -f 't/lib/trig.t' rm -f 't/lib/timelocal.t' rm -f 't/lib/tie-substrhash.t' rm -f 't/lib/tie-stdpush.t' rm -f 't/lib/tie-stdhandle.t' rm -f 't/lib/tie-stdarray.t' rm -f 't/lib/tie-splice.t' rm -f 't/lib/tie-refhash.t' rm -f 't/lib/tie-push.t' rm -f 't/lib/thr5005.t' rm -f 't/lib/textwrap.t' rm -f 't/lib/texttabs.t' rm -f 't/lib/textfill.t' rm -f 't/lib/test-harness.t' rm -f 't/lib/tb-xvari.t' rm -f 't/lib/tb-xtagg.t' rm -f 't/lib/tb-xquot.t' rm -f 't/lib/tb-xmult.t' rm -f 't/lib/tb-xdeli.t' rm -f 't/lib/tb-xcode.t' rm -f 't/lib/tb-xbrak.t' rm -f 't/lib/tb-genxt.t' rm -f 't/lib/syslog.t' rm -f 't/lib/syslfs.t' rm -f 't/lib/symbol.t' rm -f 't/lib/switch.t' rm -f 't/lib/st-utf8.t' rm -f 't/lib/st-tieditems.t' rm -f 't/lib/st-tiedhook.t' rm -f 't/lib/st-tied.t' rm -f 't/lib/st-store.t' rm -f 't/lib/st-retrieve.t' rm -f 't/lib/st-recurse.t' rm -f 't/lib/st-overload.t' rm -f 't/lib/st-lock.t' rm -f 't/lib/st-freeze.t' rm -f 't/lib/st-forgive.t' rm -f 't/lib/st-dclone.t' rm -f 't/lib/st-canonical.t' rm -f 't/lib/st-blessed.t' rm -f 't/lib/st-06compat.t' rm -f 't/lib/soundex.t' rm -f 't/lib/socket.t' rm -f 't/lib/sigaction.t' rm -f 't/lib/selfloader.t' rm -f 't/lib/selectsaver.t' rm -f 't/lib/searchdict.t' rm -f 't/lib/sdbm.t' rm -f 't/lib/safe2.t' rm -f 't/lib/safe1.t' rm -f 't/lib/posix.t' rm -f 't/lib/ph.t' rm -f 't/lib/peek.t' rm -f 't/lib/parsewords.t' rm -f 't/lib/ops.t' rm -f 't/lib/open3.t' rm -f 't/lib/open2.t' rm -f 't/lib/opcode.t' rm -f 't/lib/odbm.t' rm -f 't/lib/net-hostent.t' rm -f 't/lib/ndbm.t' rm -f 't/lib/mimeqp.t' rm -f 't/lib/mimeb64u.t' rm -f 't/lib/mimeb64.t' rm -f 't/lib/md5-file.t' rm -f 't/lib/md5-badf.t' rm -f 't/lib/md5-align.t' rm -f 't/lib/md5-aaa.t' rm -f 't/lib/lc-uk.t' rm -f 't/lib/lc-language.t' rm -f 't/lib/lc-currency.t' rm -f 't/lib/lc-country.t' rm -f 't/lib/lc-constants.t' rm -f 't/lib/lc-all.t' rm -f 't/lib/ipc_sysv.t' rm -f 't/lib/io_xs.t' rm -f 't/lib/io_unix.t' rm -f 't/lib/io_udp.t' rm -f 't/lib/io_tell.t' rm -f 't/lib/io_taint.t' rm -f 't/lib/io_sock.t' rm -f 't/lib/io_sel.t' rm -f 't/lib/io_scalar.t' rm -f 't/lib/io_poll.t' rm -f 't/lib/io_pipe.t' rm -f 't/lib/io_multihomed.t' rm -f 't/lib/io_linenum.t' rm -f 't/lib/io_dup.t' rm -f 't/lib/io_dir.t' rm -f 't/lib/io_const.t' rm -f 't/lib/hostname.t' rm -f 't/lib/h2ph.t' rm -f 't/lib/gol-oo.t' rm -f 't/lib/gol-linkage.t' rm -f 't/lib/gol-compat.t' rm -f 't/lib/gol-basic.t' rm -f 't/lib/glob-taint.t' rm -f 't/lib/glob-global.t' rm -f 't/lib/glob-case.t' rm -f 't/lib/glob-basic.t' rm -f 't/lib/getopt.t' rm -f 't/lib/gdbm.t' rm -f 't/lib/ftmp-tempfile.t' rm -f 't/lib/ftmp-security.t' rm -f 't/lib/ftmp-posix.t' rm -f 't/lib/ftmp-mktemp.t' rm -f 't/lib/findbin.t' rm -f 't/lib/filter-util.t' rm -f 't/lib/filespec.t' rm -f 't/lib/filepath.t' rm -f 't/lib/filehand.t' rm -f 't/lib/filefunc.t' rm -f 't/lib/filefind.t' rm -f 't/lib/filecopy.t' rm -f 't/lib/filecache.t' rm -f 't/lib/fields.t' rm -f 't/lib/fatal.t' rm -f 't/lib/errno.t' rm -f 't/lib/env.t' rm -f 't/lib/env-array.t' rm -f 't/lib/english.t' rm -f 't/lib/encode.t' rm -f 't/lib/dumper.t' rm -f 't/lib/dumper-ovl.t' rm -f 't/lib/dprof.t' rm -f 't/lib/dosglob.t' rm -f 't/lib/dirhand.t' rm -f 't/lib/digest.t' rm -f 't/lib/db-recno.t' rm -f 't/lib/db-hash.t' rm -f 't/lib/db-btree.t' rm -f 't/lib/cwd.t' rm -f 't/lib/complex.t' rm -f 't/lib/class-struct.t' rm -f 't/lib/class-isa.t' rm -f 't/lib/checktree.t' rm -f 't/lib/charnames.t' rm -f 't/lib/cgi-request.t' rm -f 't/lib/cgi-pretty.t' rm -f 't/lib/cgi-html.t' rm -f 't/lib/cgi-function.t' rm -f 't/lib/cgi-form.t' rm -f 't/lib/cgi-esc.t' rm -f 't/lib/bigintpm.t' rm -f 't/lib/bigint.t' rm -f 't/lib/bigfltpm.t' rm -f 't/lib/bigfloat.t' rm -f 't/lib/basename.t' rm -f 't/lib/b.t' rm -f 't/lib/autoloader.t' rm -f 't/lib/attrs.t' rm -f 't/lib/anydbm.t' rm -f 't/lib/ansicolor.t' rm -f 't/lib/abbrev.t' rm -f 't/camel-III/vstring.t' rm -f 'plan9/perlplan9.pod' rm -f 'plan9/perlplan9.doc' rm -f 'lib/unicode/distinct.pm' rm -f 'lib/unicode/In/YiSyllables.pl' rm -f 'lib/unicode/In/YiRadicals.pl' rm -f 'lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl' rm -f 'lib/unicode/In/Tibetan.pl' rm -f 'lib/unicode/In/Thai.pl' rm -f 'lib/unicode/In/Thaana.pl' rm -f 'lib/unicode/In/Telugu.pl' rm -f 'lib/unicode/In/Tamil.pl' rm -f 'lib/unicode/In/Syriac.pl' rm -f 'lib/unicode/In/SuperscriptsandSubscripts.pl' rm -f 'lib/unicode/In/Specials.pl' rm -f 'lib/unicode/In/SpacingModifierLetters.pl' rm -f 'lib/unicode/In/SmallFormVariants.pl' rm -f 'lib/unicode/In/Sinhala.pl' rm -f 'lib/unicode/In/Runic.pl' rm -f 'lib/unicode/In/PrivateUse.pl' rm -f 'lib/unicode/In/Oriya.pl' rm -f 'lib/unicode/In/OpticalCharacterRecognition.pl' rm -f 'lib/unicode/In/Ogham.pl' rm -f 'lib/unicode/In/NumberForms.pl' rm -f 'lib/unicode/In/Myanmar.pl' rm -f 'lib/unicode/In/Mongolian.pl' rm -f 'lib/unicode/In/MiscellaneousTechnical.pl' rm -f 'lib/unicode/In/MiscellaneousSymbols.pl' rm -f 'lib/unicode/In/MathematicalOperators.pl' rm -f 'lib/unicode/In/Malayalam.pl' rm -f 'lib/unicode/In/LowSurrogates.pl' rm -f 'lib/unicode/In/LetterlikeSymbols.pl' rm -f 'lib/unicode/In/LatinExtendedAdditional.pl' rm -f 'lib/unicode/In/LatinExtended-B.pl' rm -f 'lib/unicode/In/LatinExtended-A.pl' rm -f 'lib/unicode/In/Latin-1Supplement.pl' rm -f 'lib/unicode/In/Lao.pl' rm -f 'lib/unicode/In/Khmer.pl' rm -f 'lib/unicode/In/Katakana.pl' rm -f 'lib/unicode/In/Kannada.pl' rm -f 'lib/unicode/In/KangxiRadicals.pl' rm -f 'lib/unicode/In/Kanbun.pl' rm -f 'lib/unicode/In/IdeographicDescriptionCharacters.pl' rm -f 'lib/unicode/In/IPAExtensions.pl' rm -f 'lib/unicode/In/Hiragana.pl' rm -f 'lib/unicode/In/HighSurrogates.pl' rm -f 'lib/unicode/In/HighPrivateUseSurrogates.pl' rm -f 'lib/unicode/In/Hebrew.pl' rm -f 'lib/unicode/In/HangulSyllables.pl' rm -f 'lib/unicode/In/HangulJamo.pl' rm -f 'lib/unicode/In/HangulCompatibilityJamo.pl' rm -f 'lib/unicode/In/HalfwidthandFullwidthForms.pl' rm -f 'lib/unicode/In/Gurmukhi.pl' rm -f 'lib/unicode/In/Gujarati.pl' rm -f 'lib/unicode/In/GreekExtended.pl' rm -f 'lib/unicode/In/Greek.pl' rm -f 'lib/unicode/In/Georgian.pl' rm -f 'lib/unicode/In/GeometricShapes.pl' rm -f 'lib/unicode/In/GeneralPunctuation.pl' rm -f 'lib/unicode/In/Ethiopic.pl' rm -f 'lib/unicode/In/EnclosedCJKLettersandMonths.pl' rm -f 'lib/unicode/In/EnclosedAlphanumerics.pl' rm -f 'lib/unicode/In/Dingbats.pl' rm -f 'lib/unicode/In/Devanagari.pl' rm -f 'lib/unicode/In/Cyrillic.pl' rm -f 'lib/unicode/In/CurrencySymbols.pl' rm -f 'lib/unicode/In/ControlPictures.pl' rm -f 'lib/unicode/In/CombiningMarksforSymbols.pl' rm -f 'lib/unicode/In/CombiningHalfMarks.pl' rm -f 'lib/unicode/In/CombiningDiacriticalMarks.pl' rm -f 'lib/unicode/In/Cherokee.pl' rm -f 'lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl' rm -f 'lib/unicode/In/CJKUnifiedIdeographs.pl' rm -f 'lib/unicode/In/CJKSymbolsandPunctuation.pl' rm -f 'lib/unicode/In/CJKRadicalsSupplement.pl' rm -f 'lib/unicode/In/CJKCompatibilityIdeographs.pl' rm -f 'lib/unicode/In/CJKCompatibilityForms.pl' rm -f 'lib/unicode/In/CJKCompatibility.pl' rm -f 'lib/unicode/In/BraillePatterns.pl' rm -f 'lib/unicode/In/BoxDrawing.pl' rm -f 'lib/unicode/In/BopomofoExtended.pl' rm -f 'lib/unicode/In/Bopomofo.pl' rm -f 'lib/unicode/In/BlockElements.pl' rm -f 'lib/unicode/In/Bengali.pl' rm -f 'lib/unicode/In/BasicLatin.pl' rm -f 'lib/unicode/In/Arrows.pl' rm -f 'lib/unicode/In/Armenian.pl' rm -f 'lib/unicode/In/ArabicPresentationForms-B.pl' rm -f 'lib/unicode/In/ArabicPresentationForms-A.pl' rm -f 'lib/unicode/In/Arabic.pl' rm -f 'lib/unicode/In/AlphabeticPresentationForms.pl' rm -f 'lib/unicode/Block.pl' rm -f 'ext/util/mkbootstrap' rm -f 'ext/Thread/unsync4.t' rm -f 'ext/Thread/unsync3.t' rm -f 'ext/Thread/unsync2.t' rm -f 'ext/Thread/unsync.t' rm -f 'ext/Thread/sync2.t' rm -f 'ext/Thread/sync.t' rm -f 'ext/Thread/specific.t' rm -f 'ext/Thread/queue.t' rm -f 'ext/Thread/lock.t' rm -f 'ext/Thread/list.t' rm -f 'ext/Thread/join2.t' rm -f 'ext/Thread/join.t' rm -f 'ext/Thread/io.t' rm -f 'ext/Thread/die2.t' rm -f 'ext/Thread/die.t' rm -f 'ext/Thread/create.t' rm -f 'ext/SDBM_File/sdbm/dbm.h' rm -f 'ext/SDBM_File/sdbm/dbm.c' rm -f 'Todo-5.6' rm -f 'Todo' touch 'Cross/README' chmod 0444 'Cross/README' touch 'NetWare/CLIBsdio.h' chmod 0444 'NetWare/CLIBsdio.h' touch 'NetWare/CLIBstr.h' chmod 0444 'NetWare/CLIBstr.h' touch 'NetWare/CLIBstuf.c' chmod 0444 'NetWare/CLIBstuf.c' touch 'NetWare/CLIBstuf.h' chmod 0444 'NetWare/CLIBstuf.h' touch 'NetWare/Main.c' chmod 0444 'NetWare/Main.c' touch 'NetWare/Makefile' chmod 0444 'NetWare/Makefile' touch 'NetWare/NWTInfo.c' chmod 0444 'NetWare/NWTInfo.c' touch 'NetWare/NWUtil.c' chmod 0444 'NetWare/NWUtil.c' touch 'NetWare/Nwmain.c' chmod 0444 'NetWare/Nwmain.c' touch 'NetWare/Nwpipe.c' chmod 0444 'NetWare/Nwpipe.c' touch 'NetWare/bat/BldNWExt.bat' chmod 0444 'NetWare/bat/BldNWExt.bat' touch 'NetWare/bat/Buildtype.bat' chmod 0444 'NetWare/bat/Buildtype.bat' touch 'NetWare/bat/MPKBuild.bat' chmod 0444 'NetWare/bat/MPKBuild.bat' touch 'NetWare/bat/SetNWBld.bat' chmod 0444 'NetWare/bat/SetNWBld.bat' touch 'NetWare/bat/Setmpksdk.bat' chmod 0444 'NetWare/bat/Setmpksdk.bat' touch 'NetWare/bat/Setnlmsdk.bat' chmod 0444 'NetWare/bat/Setnlmsdk.bat' touch 'NetWare/bat/Setwatcom.bat' chmod 0444 'NetWare/bat/Setwatcom.bat' touch 'NetWare/bat/ToggleD2.bat' chmod 0444 'NetWare/bat/ToggleD2.bat' touch 'NetWare/bat/ToggleXDC.bat' chmod 0444 'NetWare/bat/ToggleXDC.bat' touch 'NetWare/config.wc' chmod 0444 'NetWare/config.wc' touch 'NetWare/config_H.wc' chmod 0444 'NetWare/config_H.wc' touch 'NetWare/config_h.PL' chmod 0444 'NetWare/config_h.PL' touch 'NetWare/config_sh.PL' chmod 0444 'NetWare/config_sh.PL' touch 'NetWare/deb.h' chmod 0444 'NetWare/deb.h' touch 'NetWare/dl_netware.xs' chmod 0444 'NetWare/dl_netware.xs' touch 'NetWare/intdef.h' chmod 0444 'NetWare/intdef.h' touch 'NetWare/interface.c' chmod 0444 'NetWare/interface.c' touch 'NetWare/interface.h' chmod 0444 'NetWare/interface.h' touch 'NetWare/iperlhost.h' chmod 0444 'NetWare/iperlhost.h' touch 'NetWare/netware.h' chmod 0444 'NetWare/netware.h' touch 'NetWare/nw5.c' chmod 0444 'NetWare/nw5.c' touch 'NetWare/nw5iop.h' chmod 0444 'NetWare/nw5iop.h' touch 'NetWare/nw5sck.c' chmod 0444 'NetWare/nw5sck.c' touch 'NetWare/nw5sck.h' chmod 0444 'NetWare/nw5sck.h' touch 'NetWare/nw5thread.c' chmod 0444 'NetWare/nw5thread.c' touch 'NetWare/nw5thread.h' chmod 0444 'NetWare/nw5thread.h' touch 'NetWare/nwperlsys.c' chmod 0444 'NetWare/nwperlsys.c' touch 'NetWare/nwperlsys.h' chmod 0444 'NetWare/nwperlsys.h' touch 'NetWare/nwpipe.h' chmod 0444 'NetWare/nwpipe.h' touch 'NetWare/nwplglob.c' chmod 0444 'NetWare/nwplglob.c' touch 'NetWare/nwplglob.h' chmod 0444 'NetWare/nwplglob.h' touch 'NetWare/nwstdio.h' chmod 0444 'NetWare/nwstdio.h' touch 'NetWare/nwtinfo.h' chmod 0444 'NetWare/nwtinfo.h' touch 'NetWare/nwutil.h' chmod 0444 'NetWare/nwutil.h' touch 'NetWare/t/NWModify.pl' chmod 0444 'NetWare/t/NWModify.pl' touch 'NetWare/t/NWScripts.pl' chmod 0444 'NetWare/t/NWScripts.pl' touch 'NetWare/t/Readme.txt' chmod 0444 'NetWare/t/Readme.txt' touch 'NetWare/testnlm/echo/echo.c' chmod 0444 'NetWare/testnlm/echo/echo.c' touch 'NetWare/testnlm/type/type.c' chmod 0444 'NetWare/testnlm/type/type.c' touch 'NetWare/win32ish.h' chmod 0444 'NetWare/win32ish.h' touch 'Porting/testall.atom' chmod 0444 'Porting/testall.atom' touch 'README.dgux' chmod 0444 'README.dgux' touch 'README.netware' chmod 0444 'README.netware' touch 'README.tru64' chmod 0444 'README.tru64' touch 'README.uts' chmod 0444 'README.uts' touch 'ext/B/B.t' chmod 0444 'ext/B/B.t' touch 'ext/B/Debug.t' chmod 0444 'ext/B/Debug.t' touch 'ext/B/Deparse.t' chmod 0444 'ext/B/Deparse.t' touch 'ext/B/Showlex.t' chmod 0444 'ext/B/Showlex.t' touch 'ext/B/Stash.t' chmod 0444 'ext/B/Stash.t' touch 'ext/Cwd/Cwd.t' chmod 0444 'ext/Cwd/Cwd.t' touch 'ext/DB_File/t/db-btree.t' chmod 0444 'ext/DB_File/t/db-btree.t' touch 'ext/DB_File/t/db-hash.t' chmod 0444 'ext/DB_File/t/db-hash.t' touch 'ext/DB_File/t/db-recno.t' chmod 0444 'ext/DB_File/t/db-recno.t' touch 'ext/Data/Dumper/t/dumper.t' chmod 0444 'ext/Data/Dumper/t/dumper.t' touch 'ext/Data/Dumper/t/overload.t' chmod 0444 'ext/Data/Dumper/t/overload.t' touch 'ext/Devel/Peek/Peek.t' chmod 0444 'ext/Devel/Peek/Peek.t' touch 'ext/Digest/MD5/t/aaa.t' chmod 0444 'ext/Digest/MD5/t/aaa.t' touch 'ext/Digest/MD5/t/align.t' chmod 0444 'ext/Digest/MD5/t/align.t' touch 'ext/Digest/MD5/t/badfile.t' chmod 0444 'ext/Digest/MD5/t/badfile.t' touch 'ext/Digest/MD5/t/files.t' chmod 0444 'ext/Digest/MD5/t/files.t' touch 'ext/Encode.t' chmod 0444 'ext/Encode.t' touch 'ext/Encode/Encode/7bit-jis.enc' chmod 0444 'ext/Encode/Encode/7bit-jis.enc' touch 'ext/Encode/Encode/7bit-kana.enc' chmod 0444 'ext/Encode/Encode/7bit-kana.enc' touch 'ext/Encode/Encode/7bit-kr.enc' chmod 0444 'ext/Encode/Encode/7bit-kr.enc' touch 'ext/Encode/Encode/HZ.enc' chmod 0444 'ext/Encode/Encode/HZ.enc' touch 'ext/Encode/Encode/Tcl.t' chmod 0444 'ext/Encode/Encode/Tcl.t' touch 'ext/Errno/Errno.t' chmod 0444 'ext/Errno/Errno.t' touch 'ext/Fcntl/Fcntl.t' chmod 0444 'ext/Fcntl/Fcntl.t' touch 'ext/Fcntl/syslfs.t' chmod 0444 'ext/Fcntl/syslfs.t' touch 'ext/File/Glob/t/basic.t' chmod 0444 'ext/File/Glob/t/basic.t' touch 'ext/File/Glob/t/case.t' chmod 0444 'ext/File/Glob/t/case.t' touch 'ext/File/Glob/t/global.t' chmod 0444 'ext/File/Glob/t/global.t' touch 'ext/File/Glob/t/taint.t' chmod 0444 'ext/File/Glob/t/taint.t' touch 'ext/Filter/t/call.t' chmod 0444 'ext/Filter/t/call.t' touch 'ext/GDBM_File/gdbm.t' chmod 0444 'ext/GDBM_File/gdbm.t' touch 'ext/I18N/Langinfo/Langinfo.pm' chmod 0444 'ext/I18N/Langinfo/Langinfo.pm' touch 'ext/I18N/Langinfo/Langinfo.t' chmod 0444 'ext/I18N/Langinfo/Langinfo.t' touch 'ext/I18N/Langinfo/Langinfo.xs' chmod 0444 'ext/I18N/Langinfo/Langinfo.xs' touch 'ext/I18N/Langinfo/Makefile.PL' chmod 0444 'ext/I18N/Langinfo/Makefile.PL' touch 'ext/IO/lib/IO/t/io_const.t' chmod 0444 'ext/IO/lib/IO/t/io_const.t' touch 'ext/IO/lib/IO/t/io_dir.t' chmod 0444 'ext/IO/lib/IO/t/io_dir.t' touch 'ext/IO/lib/IO/t/io_dup.t' chmod 0444 'ext/IO/lib/IO/t/io_dup.t' touch 'ext/IO/lib/IO/t/io_linenum.t' chmod 0444 'ext/IO/lib/IO/t/io_linenum.t' touch 'ext/IO/lib/IO/t/io_multihomed.t' chmod 0444 'ext/IO/lib/IO/t/io_multihomed.t' touch 'ext/IO/lib/IO/t/io_pipe.t' chmod 0444 'ext/IO/lib/IO/t/io_pipe.t' touch 'ext/IO/lib/IO/t/io_poll.t' chmod 0444 'ext/IO/lib/IO/t/io_poll.t' touch 'ext/IO/lib/IO/t/io_sel.t' chmod 0444 'ext/IO/lib/IO/t/io_sel.t' touch 'ext/IO/lib/IO/t/io_sock.t' chmod 0444 'ext/IO/lib/IO/t/io_sock.t' touch 'ext/IO/lib/IO/t/io_taint.t' chmod 0444 'ext/IO/lib/IO/t/io_taint.t' touch 'ext/IO/lib/IO/t/io_tell.t' chmod 0444 'ext/IO/lib/IO/t/io_tell.t' touch 'ext/IO/lib/IO/t/io_udp.t' chmod 0444 'ext/IO/lib/IO/t/io_udp.t' touch 'ext/IO/lib/IO/t/io_unix.t' chmod 0444 'ext/IO/lib/IO/t/io_unix.t' touch 'ext/IO/lib/IO/t/io_xs.t' chmod 0444 'ext/IO/lib/IO/t/io_xs.t' touch 'ext/IPC/SysV/ipcsysv.t' chmod 0444 'ext/IPC/SysV/ipcsysv.t' touch 'ext/List/Util/ChangeLog' chmod 0444 'ext/List/Util/ChangeLog' touch 'ext/List/Util/Makefile.PL' chmod 0444 'ext/List/Util/Makefile.PL' touch 'ext/List/Util/README' chmod 0444 'ext/List/Util/README' touch 'ext/List/Util/Util.xs' chmod 0444 'ext/List/Util/Util.xs' touch 'ext/List/Util/lib/List/Util.pm' chmod 0444 'ext/List/Util/lib/List/Util.pm' touch 'ext/List/Util/lib/Scalar/Util.pm' chmod 0444 'ext/List/Util/lib/Scalar/Util.pm' touch 'ext/List/Util/t/blessed.t' chmod 0444 'ext/List/Util/t/blessed.t' touch 'ext/List/Util/t/dualvar.t' chmod 0444 'ext/List/Util/t/dualvar.t' touch 'ext/List/Util/t/first.t' chmod 0444 'ext/List/Util/t/first.t' touch 'ext/List/Util/t/max.t' chmod 0444 'ext/List/Util/t/max.t' touch 'ext/List/Util/t/maxstr.t' chmod 0444 'ext/List/Util/t/maxstr.t' touch 'ext/List/Util/t/min.t' chmod 0444 'ext/List/Util/t/min.t' touch 'ext/List/Util/t/minstr.t' chmod 0444 'ext/List/Util/t/minstr.t' touch 'ext/List/Util/t/readonly.t' chmod 0444 'ext/List/Util/t/readonly.t' touch 'ext/List/Util/t/reduce.t' chmod 0444 'ext/List/Util/t/reduce.t' touch 'ext/List/Util/t/reftype.t' chmod 0444 'ext/List/Util/t/reftype.t' touch 'ext/List/Util/t/sum.t' chmod 0444 'ext/List/Util/t/sum.t' touch 'ext/List/Util/t/tainted.t' chmod 0444 'ext/List/Util/t/tainted.t' touch 'ext/List/Util/t/weak.t' chmod 0444 'ext/List/Util/t/weak.t' touch 'ext/MIME/Base64/t/base64.t' chmod 0444 'ext/MIME/Base64/t/base64.t' touch 'ext/MIME/Base64/t/qp.t' chmod 0444 'ext/MIME/Base64/t/qp.t' touch 'ext/MIME/Base64/t/unicode.t' chmod 0444 'ext/MIME/Base64/t/unicode.t' touch 'ext/NDBM_File/hints/linux.pl' chmod 0444 'ext/NDBM_File/hints/linux.pl' touch 'ext/NDBM_File/ndbm.t' chmod 0444 'ext/NDBM_File/ndbm.t' touch 'ext/ODBM_File/odbm.t' chmod 0444 'ext/ODBM_File/odbm.t' touch 'ext/Opcode/Opcode.t' chmod 0444 'ext/Opcode/Opcode.t' touch 'ext/Opcode/ops.t' chmod 0444 'ext/Opcode/ops.t' touch 'ext/POSIX/POSIX.t' chmod 0444 'ext/POSIX/POSIX.t' touch 'ext/POSIX/hints/uts.pl' chmod 0444 'ext/POSIX/hints/uts.pl' touch 'ext/POSIX/sigaction.t' chmod 0444 'ext/POSIX/sigaction.t' touch 'ext/PerlIO/PerlIO.t' chmod 0444 'ext/PerlIO/PerlIO.t' touch 'ext/PerlIO/t/encoding.t' chmod 0444 'ext/PerlIO/t/encoding.t' touch 'ext/PerlIO/t/scalar.t' chmod 0444 'ext/PerlIO/t/scalar.t' touch 'ext/SDBM_File/sdbm.t' chmod 0444 'ext/SDBM_File/sdbm.t' touch 'ext/Safe/safe1.t' chmod 0444 'ext/Safe/safe1.t' touch 'ext/Safe/safe2.t' chmod 0444 'ext/Safe/safe2.t' touch 'ext/Socket/Socket.t' chmod 0444 'ext/Socket/Socket.t' touch 'ext/Storable/t/blessed.t' chmod 0444 'ext/Storable/t/blessed.t' touch 'ext/Storable/t/canonical.t' chmod 0444 'ext/Storable/t/canonical.t' touch 'ext/Storable/t/compat06.t' chmod 0444 'ext/Storable/t/compat06.t' touch 'ext/Storable/t/dclone.t' chmod 0444 'ext/Storable/t/dclone.t' touch 'ext/Storable/t/forgive.t' chmod 0444 'ext/Storable/t/forgive.t' touch 'ext/Storable/t/freeze.t' chmod 0444 'ext/Storable/t/freeze.t' touch 'ext/Storable/t/lock.t' chmod 0444 'ext/Storable/t/lock.t' touch 'ext/Storable/t/overload.t' chmod 0444 'ext/Storable/t/overload.t' touch 'ext/Storable/t/recurse.t' chmod 0444 'ext/Storable/t/recurse.t' touch 'ext/Storable/t/retrieve.t' chmod 0444 'ext/Storable/t/retrieve.t' touch 'ext/Storable/t/store.t' chmod 0444 'ext/Storable/t/store.t' touch 'ext/Storable/t/tied.t' chmod 0444 'ext/Storable/t/tied.t' touch 'ext/Storable/t/tied_hook.t' chmod 0444 'ext/Storable/t/tied_hook.t' touch 'ext/Storable/t/tied_items.t' chmod 0444 'ext/Storable/t/tied_items.t' touch 'ext/Storable/t/utf8.t' chmod 0444 'ext/Storable/t/utf8.t' touch 'ext/Sys/Hostname/Hostname.t' chmod 0444 'ext/Sys/Hostname/Hostname.t' touch 'ext/Sys/Syslog/syslog.t' chmod 0444 'ext/Sys/Syslog/syslog.t' touch 'ext/Thread/create.tx' chmod 0444 'ext/Thread/create.tx' touch 'ext/Thread/die.tx' chmod 0444 'ext/Thread/die.tx' touch 'ext/Thread/die2.tx' chmod 0444 'ext/Thread/die2.tx' touch 'ext/Thread/io.tx' chmod 0444 'ext/Thread/io.tx' touch 'ext/Thread/join.tx' chmod 0444 'ext/Thread/join.tx' touch 'ext/Thread/join2.tx' chmod 0444 'ext/Thread/join2.tx' touch 'ext/Thread/list.tx' chmod 0444 'ext/Thread/list.tx' touch 'ext/Thread/lock.tx' chmod 0444 'ext/Thread/lock.tx' touch 'ext/Thread/queue.tx' chmod 0444 'ext/Thread/queue.tx' touch 'ext/Thread/specific.tx' chmod 0444 'ext/Thread/specific.tx' touch 'ext/Thread/sync.tx' chmod 0444 'ext/Thread/sync.tx' touch 'ext/Thread/sync2.tx' chmod 0444 'ext/Thread/sync2.tx' touch 'ext/Thread/thr5005.t' chmod 0444 'ext/Thread/thr5005.t' touch 'ext/Thread/unsync.tx' chmod 0444 'ext/Thread/unsync.tx' touch 'ext/Thread/unsync2.tx' chmod 0444 'ext/Thread/unsync2.tx' touch 'ext/Thread/unsync3.tx' chmod 0444 'ext/Thread/unsync3.tx' touch 'ext/Thread/unsync4.tx' chmod 0444 'ext/Thread/unsync4.tx' touch 'ext/Time/HiRes/Changes' chmod 0444 'ext/Time/HiRes/Changes' touch 'ext/Time/HiRes/HiRes.pm' chmod 0444 'ext/Time/HiRes/HiRes.pm' touch 'ext/Time/HiRes/HiRes.t' chmod 0444 'ext/Time/HiRes/HiRes.t' touch 'ext/Time/HiRes/HiRes.xs' chmod 0444 'ext/Time/HiRes/HiRes.xs' touch 'ext/Time/HiRes/Makefile.PL' chmod 0444 'ext/Time/HiRes/Makefile.PL' touch 'ext/Time/HiRes/hints/dynixptx.pl' chmod 0444 'ext/Time/HiRes/hints/dynixptx.pl' touch 'ext/Time/HiRes/hints/sco.pl' chmod 0444 'ext/Time/HiRes/hints/sco.pl' touch 'ext/Time/Piece/Makefile.PL' chmod 0444 'ext/Time/Piece/Makefile.PL' touch 'ext/Time/Piece/Piece.pm' chmod 0444 'ext/Time/Piece/Piece.pm' touch 'ext/Time/Piece/Piece.t' chmod 0444 'ext/Time/Piece/Piece.t' touch 'ext/Time/Piece/Piece.xs' chmod 0444 'ext/Time/Piece/Piece.xs' touch 'ext/Time/Piece/README' chmod 0444 'ext/Time/Piece/README' touch 'ext/Time/Piece/Seconds.pm' chmod 0444 'ext/Time/Piece/Seconds.pm' touch 'ext/XS/Typemap/Typemap.t' chmod 0444 'ext/XS/Typemap/Typemap.t' touch 'ext/attrs.t' chmod 0444 'ext/attrs.t' touch 'hints/atheos.sh' chmod 0444 'hints/atheos.sh' touch 'lib/AnyDBM_File.t' chmod 0444 'lib/AnyDBM_File.t' touch 'lib/Attribute/Handlers.pm' chmod 0444 'lib/Attribute/Handlers.pm' touch 'lib/Attribute/Handlers/Changes' chmod 0444 'lib/Attribute/Handlers/Changes' touch 'lib/Attribute/Handlers/README' chmod 0444 'lib/Attribute/Handlers/README' touch 'lib/Attribute/Handlers/demo/Demo.pm' chmod 0444 'lib/Attribute/Handlers/demo/Demo.pm' touch 'lib/Attribute/Handlers/demo/Descriptions.pm' chmod 0444 'lib/Attribute/Handlers/demo/Descriptions.pm' touch 'lib/Attribute/Handlers/demo/MyClass.pm' chmod 0444 'lib/Attribute/Handlers/demo/MyClass.pm' touch 'lib/Attribute/Handlers/demo/demo.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo.pl' touch 'lib/Attribute/Handlers/demo/demo2.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo2.pl' touch 'lib/Attribute/Handlers/demo/demo3.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo3.pl' touch 'lib/Attribute/Handlers/demo/demo4.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo4.pl' touch 'lib/Attribute/Handlers/demo/demo_call.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo_call.pl' touch 'lib/Attribute/Handlers/demo/demo_chain.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo_chain.pl' touch 'lib/Attribute/Handlers/demo/demo_cycle.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo_cycle.pl' touch 'lib/Attribute/Handlers/demo/demo_hashdir.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo_hashdir.pl' touch 'lib/Attribute/Handlers/demo/demo_phases.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo_phases.pl' touch 'lib/Attribute/Handlers/demo/demo_range.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo_range.pl' touch 'lib/Attribute/Handlers/demo/demo_rawdata.pl' chmod 0444 'lib/Attribute/Handlers/demo/demo_rawdata.pl' touch 'lib/Attribute/Handlers/test.pl' chmod 0444 'lib/Attribute/Handlers/test.pl' touch 'lib/AutoLoader.t' chmod 0444 'lib/AutoLoader.t' touch 'lib/Benchmark.t' chmod 0444 'lib/Benchmark.t' touch 'lib/CGI/t/form.t' chmod 0444 'lib/CGI/t/form.t' touch 'lib/CGI/t/function.t' chmod 0444 'lib/CGI/t/function.t' touch 'lib/CGI/t/html.t' chmod 0444 'lib/CGI/t/html.t' touch 'lib/CGI/t/pretty.t' chmod 0444 'lib/CGI/t/pretty.t' touch 'lib/CGI/t/request.t' chmod 0444 'lib/CGI/t/request.t' touch 'lib/CGI/t/util.t' chmod 0444 'lib/CGI/t/util.t' touch 'lib/CPAN/t/loadme.t' chmod 0444 'lib/CPAN/t/loadme.t' touch 'lib/CPAN/t/vcmp.t' chmod 0444 'lib/CPAN/t/vcmp.t' touch 'lib/Carp.t' chmod 0444 'lib/Carp.t' touch 'lib/Class/ISA/test.pl' chmod 0444 'lib/Class/ISA/test.pl' touch 'lib/Class/Struct.t' chmod 0444 'lib/Class/Struct.t' touch 'lib/Devel/SelfStubber.t' chmod 0444 'lib/Devel/SelfStubber.t' touch 'lib/Digest.t' chmod 0444 'lib/Digest.t' touch 'lib/DirHandle.t' chmod 0444 'lib/DirHandle.t' touch 'lib/English.t' chmod 0444 'lib/English.t' touch 'lib/Env/array.t' chmod 0444 'lib/Env/array.t' touch 'lib/Env/env.t' chmod 0444 'lib/Env/env.t' touch 'lib/Exporter.t' chmod 0444 'lib/Exporter.t' touch 'lib/ExtUtils.t' chmod 0444 'lib/ExtUtils.t' touch 'lib/ExtUtils/Constant.pm' chmod 0444 'lib/ExtUtils/Constant.pm' touch 'lib/ExtUtils/MM_NW5.pm' chmod 0444 'lib/ExtUtils/MM_NW5.pm' touch 'lib/Fatal.t' chmod 0444 'lib/Fatal.t' touch 'lib/File/Basename.t' chmod 0444 'lib/File/Basename.t' touch 'lib/File/CheckTree.t' chmod 0444 'lib/File/CheckTree.t' touch 'lib/File/Compare.t' chmod 0444 'lib/File/Compare.t' touch 'lib/File/Copy.t' chmod 0444 'lib/File/Copy.t' touch 'lib/File/DosGlob.t' chmod 0444 'lib/File/DosGlob.t' touch 'lib/File/Find/find.t' chmod 0444 'lib/File/Find/find.t' touch 'lib/File/Find/taint.t' chmod 0444 'lib/File/Find/taint.t' touch 'lib/File/Path.t' chmod 0444 'lib/File/Path.t' touch 'lib/File/Spec.t' chmod 0444 'lib/File/Spec.t' touch 'lib/File/Spec/Functions.t' chmod 0444 'lib/File/Spec/Functions.t' touch 'lib/File/Temp/t/mktemp.t' chmod 0444 'lib/File/Temp/t/mktemp.t' touch 'lib/File/Temp/t/posix.t' chmod 0444 'lib/File/Temp/t/posix.t' touch 'lib/File/Temp/t/security.t' chmod 0444 'lib/File/Temp/t/security.t' touch 'lib/File/Temp/t/tempfile.t' chmod 0444 'lib/File/Temp/t/tempfile.t' touch 'lib/File/stat.t' chmod 0444 'lib/File/stat.t' touch 'lib/FileCache.t' chmod 0444 'lib/FileCache.t' touch 'lib/FileHandle.t' chmod 0444 'lib/FileHandle.t' touch 'lib/Filter/Simple/test.pl' chmod 0444 'lib/Filter/Simple/test.pl' touch 'lib/FindBin.t' chmod 0444 'lib/FindBin.t' touch 'lib/Getopt/Long/t/basic.t' chmod 0444 'lib/Getopt/Long/t/basic.t' touch 'lib/Getopt/Long/t/compat.t' chmod 0444 'lib/Getopt/Long/t/compat.t' touch 'lib/Getopt/Long/t/linkage.t' chmod 0444 'lib/Getopt/Long/t/linkage.t' touch 'lib/Getopt/Long/t/oo.t' chmod 0444 'lib/Getopt/Long/t/oo.t' touch 'lib/Getopt/Std.t' chmod 0444 'lib/Getopt/Std.t' touch 'lib/I18N/Collate.t' chmod 0444 'lib/I18N/Collate.t' touch 'lib/I18N/LangTags.pm' chmod 0444 'lib/I18N/LangTags.pm' touch 'lib/I18N/LangTags/ChangeLog' chmod 0444 'lib/I18N/LangTags/ChangeLog' touch 'lib/I18N/LangTags/List.pm' chmod 0444 'lib/I18N/LangTags/List.pm' touch 'lib/I18N/LangTags/README' chmod 0444 'lib/I18N/LangTags/README' touch 'lib/I18N/LangTags/test.pl' chmod 0444 'lib/I18N/LangTags/test.pl' touch 'lib/IPC/Open2.t' chmod 0444 'lib/IPC/Open2.t' touch 'lib/IPC/Open3.t' chmod 0444 'lib/IPC/Open3.t' touch 'lib/IPC/SysV.t' chmod 0444 'lib/IPC/SysV.t' touch 'lib/Locale/Codes/t/all.t' chmod 0444 'lib/Locale/Codes/t/all.t' touch 'lib/Locale/Codes/t/constants.t' chmod 0444 'lib/Locale/Codes/t/constants.t' touch 'lib/Locale/Codes/t/country.t' chmod 0444 'lib/Locale/Codes/t/country.t' touch 'lib/Locale/Codes/t/currency.t' chmod 0444 'lib/Locale/Codes/t/currency.t' touch 'lib/Locale/Codes/t/languages.t' chmod 0444 'lib/Locale/Codes/t/languages.t' touch 'lib/Locale/Codes/t/uk.t' chmod 0444 'lib/Locale/Codes/t/uk.t' touch 'lib/Locale/Maketext.pm' chmod 0444 'lib/Locale/Maketext.pm' touch 'lib/Locale/Maketext.pod' chmod 0444 'lib/Locale/Maketext.pod' touch 'lib/Locale/Maketext/ChangeLog' chmod 0444 'lib/Locale/Maketext/ChangeLog' touch 'lib/Locale/Maketext/README' chmod 0444 'lib/Locale/Maketext/README' touch 'lib/Locale/Maketext/TPJ13.pod' chmod 0444 'lib/Locale/Maketext/TPJ13.pod' touch 'lib/Locale/Maketext/test.pl' chmod 0444 'lib/Locale/Maketext/test.pl' touch 'lib/Math/BigInt/Calc.pm' chmod 0444 'lib/Math/BigInt/Calc.pm' touch 'lib/Math/BigInt/t/bigfltpm.t' chmod 0444 'lib/Math/BigInt/t/bigfltpm.t' touch 'lib/Math/BigInt/t/bigintc.t' chmod 0444 'lib/Math/BigInt/t/bigintc.t' touch 'lib/Math/BigInt/t/bigintpm.t' chmod 0444 'lib/Math/BigInt/t/bigintpm.t' touch 'lib/Math/BigInt/t/mbimbf.t' chmod 0444 'lib/Math/BigInt/t/mbimbf.t' touch 'lib/Math/Complex.t' chmod 0444 'lib/Math/Complex.t' touch 'lib/Math/Trig.t' chmod 0444 'lib/Math/Trig.t' touch 'lib/Memoize.pm' chmod 0444 'lib/Memoize.pm' touch 'lib/Memoize/AnyDBM_File.pm' chmod 0444 'lib/Memoize/AnyDBM_File.pm' touch 'lib/Memoize/Expire.pm' chmod 0444 'lib/Memoize/Expire.pm' touch 'lib/Memoize/ExpireFile.pm' chmod 0444 'lib/Memoize/ExpireFile.pm' touch 'lib/Memoize/ExpireTest.pm' chmod 0444 'lib/Memoize/ExpireTest.pm' touch 'lib/Memoize/NDBM_File.pm' chmod 0444 'lib/Memoize/NDBM_File.pm' touch 'lib/Memoize/README' chmod 0444 'lib/Memoize/README' touch 'lib/Memoize/SDBM_File.pm' chmod 0444 'lib/Memoize/SDBM_File.pm' touch 'lib/Memoize/Saves.pm' chmod 0444 'lib/Memoize/Saves.pm' touch 'lib/Memoize/Storable.pm' chmod 0444 'lib/Memoize/Storable.pm' touch 'lib/Memoize/TODO' chmod 0444 'lib/Memoize/TODO' touch 'lib/Memoize/t/array.t' chmod 0444 'lib/Memoize/t/array.t' touch 'lib/Memoize/t/array_confusion.t' chmod 0444 'lib/Memoize/t/array_confusion.t' touch 'lib/Memoize/t/correctness.t' chmod 0444 'lib/Memoize/t/correctness.t' touch 'lib/Memoize/t/errors.t' chmod 0444 'lib/Memoize/t/errors.t' touch 'lib/Memoize/t/expire.t' chmod 0444 'lib/Memoize/t/expire.t' touch 'lib/Memoize/t/expire_file.t' chmod 0444 'lib/Memoize/t/expire_file.t' touch 'lib/Memoize/t/expire_module_n.t' chmod 0444 'lib/Memoize/t/expire_module_n.t' touch 'lib/Memoize/t/expire_module_t.t' chmod 0444 'lib/Memoize/t/expire_module_t.t' touch 'lib/Memoize/t/flush.t' chmod 0444 'lib/Memoize/t/flush.t' touch 'lib/Memoize/t/normalize.t' chmod 0444 'lib/Memoize/t/normalize.t' touch 'lib/Memoize/t/prototype.t' chmod 0444 'lib/Memoize/t/prototype.t' touch 'lib/Memoize/t/speed.t' chmod 0444 'lib/Memoize/t/speed.t' touch 'lib/Memoize/t/tie.t' chmod 0444 'lib/Memoize/t/tie.t' touch 'lib/Memoize/t/tie_gdbm.t' chmod 0444 'lib/Memoize/t/tie_gdbm.t' touch 'lib/Memoize/t/tie_ndbm.t' chmod 0444 'lib/Memoize/t/tie_ndbm.t' touch 'lib/Memoize/t/tie_sdbm.t' chmod 0444 'lib/Memoize/t/tie_sdbm.t' touch 'lib/Memoize/t/tie_storable.t' chmod 0444 'lib/Memoize/t/tie_storable.t' touch 'lib/Memoize/t/tiefeatures.t' chmod 0444 'lib/Memoize/t/tiefeatures.t' touch 'lib/Memoize/t/unmemoize.t' chmod 0444 'lib/Memoize/t/unmemoize.t' touch 'lib/NEXT.pm' chmod 0444 'lib/NEXT.pm' touch 'lib/NEXT/test.pl' chmod 0444 'lib/NEXT/test.pl' touch 'lib/Net/ChangeLog.libnet' chmod 0444 'lib/Net/ChangeLog.libnet' touch 'lib/Net/Cmd.pm' chmod 0444 'lib/Net/Cmd.pm' touch 'lib/Net/Config.eg' chmod 0444 'lib/Net/Config.eg' touch 'lib/Net/Config.pm' chmod 0444 'lib/Net/Config.pm' touch 'lib/Net/Domain.pm' chmod 0444 'lib/Net/Domain.pm' touch 'lib/Net/FTP.pm' chmod 0444 'lib/Net/FTP.pm' touch 'lib/Net/FTP/A.pm' chmod 0444 'lib/Net/FTP/A.pm' touch 'lib/Net/FTP/E.pm' chmod 0444 'lib/Net/FTP/E.pm' touch 'lib/Net/FTP/I.pm' chmod 0444 'lib/Net/FTP/I.pm' touch 'lib/Net/FTP/L.pm' chmod 0444 'lib/Net/FTP/L.pm' touch 'lib/Net/FTP/dataconn.pm' chmod 0444 'lib/Net/FTP/dataconn.pm' touch 'lib/Net/Hostname.eg' chmod 0444 'lib/Net/Hostname.eg' touch 'lib/Net/NNTP.pm' chmod 0444 'lib/Net/NNTP.pm' touch 'lib/Net/Netrc.pm' chmod 0444 'lib/Net/Netrc.pm' touch 'lib/Net/POP3.pm' chmod 0444 'lib/Net/POP3.pm' touch 'lib/Net/README.config' chmod 0444 'lib/Net/README.config' touch 'lib/Net/README.libnet' chmod 0444 'lib/Net/README.libnet' touch 'lib/Net/SMTP.pm' chmod 0444 'lib/Net/SMTP.pm' touch 'lib/Net/Time.pm' chmod 0444 'lib/Net/Time.pm' touch 'lib/Net/demos/ftp' chmod 0444 'lib/Net/demos/ftp' touch 'lib/Net/demos/inetd' chmod 0444 'lib/Net/demos/inetd' touch 'lib/Net/demos/nntp' chmod 0444 'lib/Net/demos/nntp' touch 'lib/Net/demos/nntp.mirror' chmod 0444 'lib/Net/demos/nntp.mirror' touch 'lib/Net/demos/pop3' chmod 0444 'lib/Net/demos/pop3' touch 'lib/Net/demos/smtp.self' chmod 0444 'lib/Net/demos/smtp.self' touch 'lib/Net/demos/snpp' chmod 0444 'lib/Net/demos/snpp' touch 'lib/Net/demos/time' chmod 0444 'lib/Net/demos/time' touch 'lib/Net/hostent.t' chmod 0444 'lib/Net/hostent.t' touch 'lib/Net/libnet.ppd' chmod 0444 'lib/Net/libnet.ppd' touch 'lib/Net/libnetFAQ.pod' chmod 0444 'lib/Net/libnetFAQ.pod' touch 'lib/Net/netent.t' chmod 0444 'lib/Net/netent.t' touch 'lib/Net/protoent.t' chmod 0444 'lib/Net/protoent.t' touch 'lib/Net/servent.t' chmod 0444 'lib/Net/servent.t' touch 'lib/Net/t/ftp.t' chmod 0444 'lib/Net/t/ftp.t' touch 'lib/Net/t/hostname.t' chmod 0444 'lib/Net/t/hostname.t' touch 'lib/Net/t/nntp.t' chmod 0444 'lib/Net/t/nntp.t' touch 'lib/Net/t/require.t' chmod 0444 'lib/Net/t/require.t' touch 'lib/Net/t/smtp.t' chmod 0444 'lib/Net/t/smtp.t' touch 'lib/Search/Dict.t' chmod 0444 'lib/Search/Dict.t' touch 'lib/SelectSaver.t' chmod 0444 'lib/SelectSaver.t' touch 'lib/SelfLoader.t' chmod 0444 'lib/SelfLoader.t' touch 'lib/Switch/test.pl' chmod 0444 'lib/Switch/test.pl' touch 'lib/Symbol.t' chmod 0444 'lib/Symbol.t' touch 'lib/Term/ANSIColor/ChangeLog' chmod 0444 'lib/Term/ANSIColor/ChangeLog' touch 'lib/Term/ANSIColor/README' chmod 0444 'lib/Term/ANSIColor/README' touch 'lib/Term/ANSIColor/test.pl' chmod 0444 'lib/Term/ANSIColor/test.pl' touch 'lib/Test/Harness.t' chmod 0444 'lib/Test/Harness.t' touch 'lib/Test/More.pm' chmod 0444 'lib/Test/More.pm' touch 'lib/Test/More/Changes' chmod 0444 'lib/Test/More/Changes' touch 'lib/Test/More/t/More.t' chmod 0444 'lib/Test/More/t/More.t' touch 'lib/Test/More/t/fail-like.t' chmod 0444 'lib/Test/More/t/fail-like.t' touch 'lib/Test/More/t/fail.t' chmod 0444 'lib/Test/More/t/fail.t' touch 'lib/Test/More/t/plan_is_noplan.t' chmod 0444 'lib/Test/More/t/plan_is_noplan.t' touch 'lib/Test/More/t/skipall.t' chmod 0444 'lib/Test/More/t/skipall.t' touch 'lib/Test/Simple.pm' chmod 0444 'lib/Test/Simple.pm' touch 'lib/Test/Simple/Changes' chmod 0444 'lib/Test/Simple/Changes' touch 'lib/Test/Simple/t/exit.t' chmod 0444 'lib/Test/Simple/t/exit.t' touch 'lib/Test/Simple/t/extra.t' chmod 0444 'lib/Test/Simple/t/extra.t' touch 'lib/Test/Simple/t/fail.t' chmod 0444 'lib/Test/Simple/t/fail.t' touch 'lib/Test/Simple/t/missing.t' chmod 0444 'lib/Test/Simple/t/missing.t' touch 'lib/Test/Simple/t/no_plan.t' chmod 0444 'lib/Test/Simple/t/no_plan.t' touch 'lib/Test/Simple/t/plan_is_noplan.t' chmod 0444 'lib/Test/Simple/t/plan_is_noplan.t' touch 'lib/Test/Simple/t/simple.t' chmod 0444 'lib/Test/Simple/t/simple.t' touch 'lib/Test/t/fail.t' chmod 0444 'lib/Test/t/fail.t' touch 'lib/Test/t/mix.t' chmod 0444 'lib/Test/t/mix.t' touch 'lib/Test/t/onfail.t' chmod 0444 'lib/Test/t/onfail.t' touch 'lib/Test/t/qr.t' chmod 0444 'lib/Test/t/qr.t' touch 'lib/Test/t/skip.t' chmod 0444 'lib/Test/t/skip.t' touch 'lib/Test/t/success.t' chmod 0444 'lib/Test/t/success.t' touch 'lib/Test/t/todo.t' chmod 0444 'lib/Test/t/todo.t' touch 'lib/Text/Abbrev.t' chmod 0444 'lib/Text/Abbrev.t' touch 'lib/Text/Balanced/t/genxt.t' chmod 0444 'lib/Text/Balanced/t/genxt.t' touch 'lib/Text/Balanced/t/xbrak.t' chmod 0444 'lib/Text/Balanced/t/xbrak.t' touch 'lib/Text/Balanced/t/xcode.t' chmod 0444 'lib/Text/Balanced/t/xcode.t' touch 'lib/Text/Balanced/t/xdeli.t' chmod 0444 'lib/Text/Balanced/t/xdeli.t' touch 'lib/Text/Balanced/t/xmult.t' chmod 0444 'lib/Text/Balanced/t/xmult.t' touch 'lib/Text/Balanced/t/xquot.t' chmod 0444 'lib/Text/Balanced/t/xquot.t' touch 'lib/Text/Balanced/t/xtagg.t' chmod 0444 'lib/Text/Balanced/t/xtagg.t' touch 'lib/Text/Balanced/t/xvari.t' chmod 0444 'lib/Text/Balanced/t/xvari.t' touch 'lib/Text/ParseWords.t' chmod 0444 'lib/Text/ParseWords.t' touch 'lib/Text/Soundex.t' chmod 0444 'lib/Text/Soundex.t' touch 'lib/Text/TabsWrap/t/fill.t' chmod 0444 'lib/Text/TabsWrap/t/fill.t' touch 'lib/Text/TabsWrap/t/tabs.t' chmod 0444 'lib/Text/TabsWrap/t/tabs.t' touch 'lib/Text/TabsWrap/t/wrap.t' chmod 0444 'lib/Text/TabsWrap/t/wrap.t' touch 'lib/Tie/Array/push.t' chmod 0444 'lib/Tie/Array/push.t' touch 'lib/Tie/Array/splice.t' chmod 0444 'lib/Tie/Array/splice.t' touch 'lib/Tie/Array/std.t' chmod 0444 'lib/Tie/Array/std.t' touch 'lib/Tie/Array/stdpush.t' chmod 0444 'lib/Tie/Array/stdpush.t' touch 'lib/Tie/Handle/stdhandle.t' chmod 0444 'lib/Tie/Handle/stdhandle.t' touch 'lib/Tie/RefHash.t' chmod 0444 'lib/Tie/RefHash.t' touch 'lib/Tie/SubstrHash.t' chmod 0444 'lib/Tie/SubstrHash.t' touch 'lib/Time/Local.t' chmod 0444 'lib/Time/Local.t' touch 'lib/Time/gmtime.t' chmod 0444 'lib/Time/gmtime.t' touch 'lib/Time/localtime.t' chmod 0444 'lib/Time/localtime.t' touch 'lib/UnicodeCD.pm' chmod 0444 'lib/UnicodeCD.pm' touch 'lib/UnicodeCD.t' chmod 0444 'lib/UnicodeCD.t' touch 'lib/User/grent.t' chmod 0444 'lib/User/grent.t' touch 'lib/User/pwent.t' chmod 0444 'lib/User/pwent.t' touch 'lib/autouse.t' chmod 0444 'lib/autouse.t' touch 'lib/bigfloat.t' chmod 0444 'lib/bigfloat.t' touch 'lib/bigint.t' chmod 0444 'lib/bigint.t' touch 'lib/charnames.t' chmod 0444 'lib/charnames.t' touch 'lib/constant.t' chmod 0444 'lib/constant.t' touch 'lib/diagnostics.t' chmod 0444 'lib/diagnostics.t' touch 'lib/fields.t' chmod 0444 'lib/fields.t' touch 'lib/h2ph.t' chmod 0444 'lib/h2ph.t' touch 'lib/h2xs.t' chmod 0444 'lib/h2xs.t' touch 'lib/locale.t' chmod 0444 'lib/locale.t' touch 'lib/overload.t' chmod 0444 'lib/overload.t' touch 'lib/ph.t' chmod 0444 'lib/ph.t' touch 'lib/strict.t' chmod 0444 'lib/strict.t' touch 'lib/subs.t' chmod 0444 'lib/subs.t' touch 'lib/unicode/Blocks.pl' chmod 0444 'lib/unicode/Blocks.pl' touch 'lib/unicode/In.pl' chmod 0444 'lib/unicode/In.pl' touch 'lib/unicode/In/0.pl' chmod 0444 'lib/unicode/In/0.pl' touch 'lib/unicode/In/1.pl' chmod 0444 'lib/unicode/In/1.pl' touch 'lib/unicode/In/10.pl' chmod 0444 'lib/unicode/In/10.pl' touch 'lib/unicode/In/100.pl' chmod 0444 'lib/unicode/In/100.pl' touch 'lib/unicode/In/101.pl' chmod 0444 'lib/unicode/In/101.pl' touch 'lib/unicode/In/102.pl' chmod 0444 'lib/unicode/In/102.pl' touch 'lib/unicode/In/103.pl' chmod 0444 'lib/unicode/In/103.pl' touch 'lib/unicode/In/104.pl' chmod 0444 'lib/unicode/In/104.pl' touch 'lib/unicode/In/105.pl' chmod 0444 'lib/unicode/In/105.pl' touch 'lib/unicode/In/106.pl' chmod 0444 'lib/unicode/In/106.pl' touch 'lib/unicode/In/107.pl' chmod 0444 'lib/unicode/In/107.pl' touch 'lib/unicode/In/108.pl' chmod 0444 'lib/unicode/In/108.pl' touch 'lib/unicode/In/109.pl' chmod 0444 'lib/unicode/In/109.pl' touch 'lib/unicode/In/11.pl' chmod 0444 'lib/unicode/In/11.pl' touch 'lib/unicode/In/110.pl' chmod 0444 'lib/unicode/In/110.pl' touch 'lib/unicode/In/111.pl' chmod 0444 'lib/unicode/In/111.pl' touch 'lib/unicode/In/112.pl' chmod 0444 'lib/unicode/In/112.pl' touch 'lib/unicode/In/113.pl' chmod 0444 'lib/unicode/In/113.pl' touch 'lib/unicode/In/114.pl' chmod 0444 'lib/unicode/In/114.pl' touch 'lib/unicode/In/115.pl' chmod 0444 'lib/unicode/In/115.pl' touch 'lib/unicode/In/116.pl' chmod 0444 'lib/unicode/In/116.pl' touch 'lib/unicode/In/117.pl' chmod 0444 'lib/unicode/In/117.pl' touch 'lib/unicode/In/118.pl' chmod 0444 'lib/unicode/In/118.pl' touch 'lib/unicode/In/119.pl' chmod 0444 'lib/unicode/In/119.pl' touch 'lib/unicode/In/12.pl' chmod 0444 'lib/unicode/In/12.pl' touch 'lib/unicode/In/120.pl' chmod 0444 'lib/unicode/In/120.pl' touch 'lib/unicode/In/121.pl' chmod 0444 'lib/unicode/In/121.pl' touch 'lib/unicode/In/122.pl' chmod 0444 'lib/unicode/In/122.pl' touch 'lib/unicode/In/123.pl' chmod 0444 'lib/unicode/In/123.pl' touch 'lib/unicode/In/124.pl' chmod 0444 'lib/unicode/In/124.pl' touch 'lib/unicode/In/125.pl' chmod 0444 'lib/unicode/In/125.pl' touch 'lib/unicode/In/126.pl' chmod 0444 'lib/unicode/In/126.pl' touch 'lib/unicode/In/127.pl' chmod 0444 'lib/unicode/In/127.pl' touch 'lib/unicode/In/128.pl' chmod 0444 'lib/unicode/In/128.pl' touch 'lib/unicode/In/129.pl' chmod 0444 'lib/unicode/In/129.pl' touch 'lib/unicode/In/13.pl' chmod 0444 'lib/unicode/In/13.pl' touch 'lib/unicode/In/130.pl' chmod 0444 'lib/unicode/In/130.pl' touch 'lib/unicode/In/131.pl' chmod 0444 'lib/unicode/In/131.pl' touch 'lib/unicode/In/132.pl' chmod 0444 'lib/unicode/In/132.pl' touch 'lib/unicode/In/133.pl' chmod 0444 'lib/unicode/In/133.pl' touch 'lib/unicode/In/134.pl' chmod 0444 'lib/unicode/In/134.pl' touch 'lib/unicode/In/135.pl' chmod 0444 'lib/unicode/In/135.pl' touch 'lib/unicode/In/14.pl' chmod 0444 'lib/unicode/In/14.pl' touch 'lib/unicode/In/15.pl' chmod 0444 'lib/unicode/In/15.pl' touch 'lib/unicode/In/16.pl' chmod 0444 'lib/unicode/In/16.pl' touch 'lib/unicode/In/17.pl' chmod 0444 'lib/unicode/In/17.pl' touch 'lib/unicode/In/18.pl' chmod 0444 'lib/unicode/In/18.pl' touch 'lib/unicode/In/19.pl' chmod 0444 'lib/unicode/In/19.pl' touch 'lib/unicode/In/2.pl' chmod 0444 'lib/unicode/In/2.pl' touch 'lib/unicode/In/20.pl' chmod 0444 'lib/unicode/In/20.pl' touch 'lib/unicode/In/21.pl' chmod 0444 'lib/unicode/In/21.pl' touch 'lib/unicode/In/22.pl' chmod 0444 'lib/unicode/In/22.pl' touch 'lib/unicode/In/23.pl' chmod 0444 'lib/unicode/In/23.pl' touch 'lib/unicode/In/24.pl' chmod 0444 'lib/unicode/In/24.pl' touch 'lib/unicode/In/25.pl' chmod 0444 'lib/unicode/In/25.pl' touch 'lib/unicode/In/26.pl' chmod 0444 'lib/unicode/In/26.pl' touch 'lib/unicode/In/27.pl' chmod 0444 'lib/unicode/In/27.pl' touch 'lib/unicode/In/28.pl' chmod 0444 'lib/unicode/In/28.pl' touch 'lib/unicode/In/29.pl' chmod 0444 'lib/unicode/In/29.pl' touch 'lib/unicode/In/3.pl' chmod 0444 'lib/unicode/In/3.pl' touch 'lib/unicode/In/30.pl' chmod 0444 'lib/unicode/In/30.pl' touch 'lib/unicode/In/31.pl' chmod 0444 'lib/unicode/In/31.pl' touch 'lib/unicode/In/32.pl' chmod 0444 'lib/unicode/In/32.pl' touch 'lib/unicode/In/33.pl' chmod 0444 'lib/unicode/In/33.pl' touch 'lib/unicode/In/34.pl' chmod 0444 'lib/unicode/In/34.pl' touch 'lib/unicode/In/35.pl' chmod 0444 'lib/unicode/In/35.pl' touch 'lib/unicode/In/36.pl' chmod 0444 'lib/unicode/In/36.pl' touch 'lib/unicode/In/37.pl' chmod 0444 'lib/unicode/In/37.pl' touch 'lib/unicode/In/38.pl' chmod 0444 'lib/unicode/In/38.pl' touch 'lib/unicode/In/39.pl' chmod 0444 'lib/unicode/In/39.pl' touch 'lib/unicode/In/4.pl' chmod 0444 'lib/unicode/In/4.pl' touch 'lib/unicode/In/40.pl' chmod 0444 'lib/unicode/In/40.pl' touch 'lib/unicode/In/41.pl' chmod 0444 'lib/unicode/In/41.pl' touch 'lib/unicode/In/42.pl' chmod 0444 'lib/unicode/In/42.pl' touch 'lib/unicode/In/43.pl' chmod 0444 'lib/unicode/In/43.pl' touch 'lib/unicode/In/44.pl' chmod 0444 'lib/unicode/In/44.pl' touch 'lib/unicode/In/45.pl' chmod 0444 'lib/unicode/In/45.pl' touch 'lib/unicode/In/46.pl' chmod 0444 'lib/unicode/In/46.pl' touch 'lib/unicode/In/47.pl' chmod 0444 'lib/unicode/In/47.pl' touch 'lib/unicode/In/48.pl' chmod 0444 'lib/unicode/In/48.pl' touch 'lib/unicode/In/49.pl' chmod 0444 'lib/unicode/In/49.pl' touch 'lib/unicode/In/5.pl' chmod 0444 'lib/unicode/In/5.pl' touch 'lib/unicode/In/50.pl' chmod 0444 'lib/unicode/In/50.pl' touch 'lib/unicode/In/51.pl' chmod 0444 'lib/unicode/In/51.pl' touch 'lib/unicode/In/52.pl' chmod 0444 'lib/unicode/In/52.pl' touch 'lib/unicode/In/53.pl' chmod 0444 'lib/unicode/In/53.pl' touch 'lib/unicode/In/54.pl' chmod 0444 'lib/unicode/In/54.pl' touch 'lib/unicode/In/55.pl' chmod 0444 'lib/unicode/In/55.pl' touch 'lib/unicode/In/56.pl' chmod 0444 'lib/unicode/In/56.pl' touch 'lib/unicode/In/57.pl' chmod 0444 'lib/unicode/In/57.pl' touch 'lib/unicode/In/58.pl' chmod 0444 'lib/unicode/In/58.pl' touch 'lib/unicode/In/59.pl' chmod 0444 'lib/unicode/In/59.pl' touch 'lib/unicode/In/6.pl' chmod 0444 'lib/unicode/In/6.pl' touch 'lib/unicode/In/60.pl' chmod 0444 'lib/unicode/In/60.pl' touch 'lib/unicode/In/61.pl' chmod 0444 'lib/unicode/In/61.pl' touch 'lib/unicode/In/62.pl' chmod 0444 'lib/unicode/In/62.pl' touch 'lib/unicode/In/63.pl' chmod 0444 'lib/unicode/In/63.pl' touch 'lib/unicode/In/64.pl' chmod 0444 'lib/unicode/In/64.pl' touch 'lib/unicode/In/65.pl' chmod 0444 'lib/unicode/In/65.pl' touch 'lib/unicode/In/66.pl' chmod 0444 'lib/unicode/In/66.pl' touch 'lib/unicode/In/67.pl' chmod 0444 'lib/unicode/In/67.pl' touch 'lib/unicode/In/68.pl' chmod 0444 'lib/unicode/In/68.pl' touch 'lib/unicode/In/69.pl' chmod 0444 'lib/unicode/In/69.pl' touch 'lib/unicode/In/7.pl' chmod 0444 'lib/unicode/In/7.pl' touch 'lib/unicode/In/70.pl' chmod 0444 'lib/unicode/In/70.pl' touch 'lib/unicode/In/71.pl' chmod 0444 'lib/unicode/In/71.pl' touch 'lib/unicode/In/72.pl' chmod 0444 'lib/unicode/In/72.pl' touch 'lib/unicode/In/73.pl' chmod 0444 'lib/unicode/In/73.pl' touch 'lib/unicode/In/74.pl' chmod 0444 'lib/unicode/In/74.pl' touch 'lib/unicode/In/75.pl' chmod 0444 'lib/unicode/In/75.pl' touch 'lib/unicode/In/76.pl' chmod 0444 'lib/unicode/In/76.pl' touch 'lib/unicode/In/77.pl' chmod 0444 'lib/unicode/In/77.pl' touch 'lib/unicode/In/78.pl' chmod 0444 'lib/unicode/In/78.pl' touch 'lib/unicode/In/79.pl' chmod 0444 'lib/unicode/In/79.pl' touch 'lib/unicode/In/8.pl' chmod 0444 'lib/unicode/In/8.pl' touch 'lib/unicode/In/80.pl' chmod 0444 'lib/unicode/In/80.pl' touch 'lib/unicode/In/81.pl' chmod 0444 'lib/unicode/In/81.pl' touch 'lib/unicode/In/82.pl' chmod 0444 'lib/unicode/In/82.pl' touch 'lib/unicode/In/83.pl' chmod 0444 'lib/unicode/In/83.pl' touch 'lib/unicode/In/84.pl' chmod 0444 'lib/unicode/In/84.pl' touch 'lib/unicode/In/85.pl' chmod 0444 'lib/unicode/In/85.pl' touch 'lib/unicode/In/86.pl' chmod 0444 'lib/unicode/In/86.pl' touch 'lib/unicode/In/87.pl' chmod 0444 'lib/unicode/In/87.pl' touch 'lib/unicode/In/88.pl' chmod 0444 'lib/unicode/In/88.pl' touch 'lib/unicode/In/89.pl' chmod 0444 'lib/unicode/In/89.pl' touch 'lib/unicode/In/9.pl' chmod 0444 'lib/unicode/In/9.pl' touch 'lib/unicode/In/90.pl' chmod 0444 'lib/unicode/In/90.pl' touch 'lib/unicode/In/91.pl' chmod 0444 'lib/unicode/In/91.pl' touch 'lib/unicode/In/92.pl' chmod 0444 'lib/unicode/In/92.pl' touch 'lib/unicode/In/93.pl' chmod 0444 'lib/unicode/In/93.pl' touch 'lib/unicode/In/94.pl' chmod 0444 'lib/unicode/In/94.pl' touch 'lib/unicode/In/95.pl' chmod 0444 'lib/unicode/In/95.pl' touch 'lib/unicode/In/96.pl' chmod 0444 'lib/unicode/In/96.pl' touch 'lib/unicode/In/97.pl' chmod 0444 'lib/unicode/In/97.pl' touch 'lib/unicode/In/98.pl' chmod 0444 'lib/unicode/In/98.pl' touch 'lib/unicode/In/99.pl' chmod 0444 'lib/unicode/In/99.pl' touch 'lib/unicode/Scripts.pl' chmod 0444 'lib/unicode/Scripts.pl' touch 'lib/utf8.t' chmod 0444 'lib/utf8.t' touch 'lib/vars.t' chmod 0444 'lib/vars.t' touch 'lib/warnings.t' chmod 0444 'lib/warnings.t' touch 'locale.c' chmod 0444 'locale.c' touch 'numeric.c' chmod 0444 'numeric.c' touch 'os2/os2_base.t' chmod 0444 'os2/os2_base.t' touch 'perlyline.pl' chmod 0444 'perlyline.pl' touch 'pod/perl572delta.pod' chmod 0444 'pod/perl572delta.pod' touch 'pp_pack.c' chmod 0444 'pp_pack.c' touch 't/io/fflush.t' chmod 0555 't/io/fflush.t' touch 't/lib/MyFilter.pm' chmod 0444 't/lib/MyFilter.pm' touch 't/lib/Test/More/Catch.pm' chmod 0444 't/lib/Test/More/Catch.pm' touch 't/lib/Test/Simple/Catch.pm' chmod 0444 't/lib/Test/Simple/Catch.pm' touch 't/lib/Test/Simple/sample_tests/death.plx' chmod 0444 't/lib/Test/Simple/sample_tests/death.plx' touch 't/lib/Test/Simple/sample_tests/death_in_eval.plx' chmod 0444 't/lib/Test/Simple/sample_tests/death_in_eval.plx' touch 't/lib/Test/Simple/sample_tests/extras.plx' chmod 0444 't/lib/Test/Simple/sample_tests/extras.plx' touch 't/lib/Test/Simple/sample_tests/five_fail.plx' chmod 0444 't/lib/Test/Simple/sample_tests/five_fail.plx' touch 't/lib/Test/Simple/sample_tests/last_minute_death.plx' chmod 0444 't/lib/Test/Simple/sample_tests/last_minute_death.plx' touch 't/lib/Test/Simple/sample_tests/one_fail.plx' chmod 0444 't/lib/Test/Simple/sample_tests/one_fail.plx' touch 't/lib/Test/Simple/sample_tests/require.plx' chmod 0444 't/lib/Test/Simple/sample_tests/require.plx' touch 't/lib/Test/Simple/sample_tests/success.plx' chmod 0444 't/lib/Test/Simple/sample_tests/success.plx' touch 't/lib/Test/Simple/sample_tests/too_few.plx' chmod 0444 't/lib/Test/Simple/sample_tests/too_few.plx' touch 't/lib/Test/Simple/sample_tests/two_fail.plx' chmod 0444 't/lib/Test/Simple/sample_tests/two_fail.plx' touch 't/lib/locale/latin1' chmod 0444 't/lib/locale/latin1' touch 't/lib/locale/utf8' chmod 0444 't/lib/locale/utf8' touch 't/lib/strict/refs' chmod 0444 't/lib/strict/refs' touch 't/lib/strict/subs' chmod 0444 't/lib/strict/subs' touch 't/lib/strict/vars' chmod 0444 't/lib/strict/vars' touch 't/lib/warnings/1global' chmod 0444 't/lib/warnings/1global' touch 't/lib/warnings/2use' chmod 0444 't/lib/warnings/2use' touch 't/lib/warnings/3both' chmod 0444 't/lib/warnings/3both' touch 't/lib/warnings/4lint' chmod 0444 't/lib/warnings/4lint' touch 't/lib/warnings/5nolint' chmod 0444 't/lib/warnings/5nolint' touch 't/lib/warnings/6default' chmod 0444 't/lib/warnings/6default' touch 't/lib/warnings/7fatal' chmod 0444 't/lib/warnings/7fatal' touch 't/lib/warnings/8signal' chmod 0444 't/lib/warnings/8signal' touch 't/lib/warnings/9enabled' chmod 0444 't/lib/warnings/9enabled' touch 't/lib/warnings/av' chmod 0444 't/lib/warnings/av' touch 't/lib/warnings/doio' chmod 0444 't/lib/warnings/doio' touch 't/lib/warnings/doop' chmod 0444 't/lib/warnings/doop' touch 't/lib/warnings/gv' chmod 0444 't/lib/warnings/gv' touch 't/lib/warnings/hv' chmod 0444 't/lib/warnings/hv' touch 't/lib/warnings/malloc' chmod 0444 't/lib/warnings/malloc' touch 't/lib/warnings/mg' chmod 0444 't/lib/warnings/mg' touch 't/lib/warnings/op' chmod 0444 't/lib/warnings/op' touch 't/lib/warnings/perl' chmod 0444 't/lib/warnings/perl' touch 't/lib/warnings/perlio' chmod 0444 't/lib/warnings/perlio' touch 't/lib/warnings/perly' chmod 0444 't/lib/warnings/perly' touch 't/lib/warnings/pp' chmod 0444 't/lib/warnings/pp' touch 't/lib/warnings/pp_ctl' chmod 0444 't/lib/warnings/pp_ctl' touch 't/lib/warnings/pp_hot' chmod 0444 't/lib/warnings/pp_hot' touch 't/lib/warnings/pp_pack' chmod 0444 't/lib/warnings/pp_pack' touch 't/lib/warnings/pp_sys' chmod 0444 't/lib/warnings/pp_sys' touch 't/lib/warnings/regcomp' chmod 0444 't/lib/warnings/regcomp' touch 't/lib/warnings/regexec' chmod 0444 't/lib/warnings/regexec' touch 't/lib/warnings/run' chmod 0444 't/lib/warnings/run' touch 't/lib/warnings/sv' chmod 0444 't/lib/warnings/sv' touch 't/lib/warnings/taint' chmod 0444 't/lib/warnings/taint' touch 't/lib/warnings/toke' chmod 0444 't/lib/warnings/toke' touch 't/lib/warnings/universal' chmod 0444 't/lib/warnings/universal' touch 't/lib/warnings/utf8' chmod 0444 't/lib/warnings/utf8' touch 't/lib/warnings/util' chmod 0444 't/lib/warnings/util' touch 't/op/gmagic.t' chmod 0555 't/op/gmagic.t' touch 't/op/override.t' chmod 0555 't/op/override.t' touch 't/op/sub_lval.t' chmod 0555 't/op/sub_lval.t' touch 't/pod/plainer.t' chmod 0555 't/pod/plainer.t' touch 't/run/exit.t' chmod 0555 't/run/exit.t' touch 'utils.lst' chmod 0444 'utils.lst' touch 'utils/libnetcfg.PL' chmod 0444 'utils/libnetcfg.PL' touch 'uts/sprintf_wrap.c' chmod 0444 'uts/sprintf_wrap.c' touch 'uts/strtol_wrap.c' chmod 0444 'uts/strtol_wrap.c' touch 'vos/Makefile' chmod 0444 'vos/Makefile' touch 'win32/mdelete.bat' chmod 0444 'win32/mdelete.bat' touch 'win32/win32io.c' chmod 0444 'win32/win32io.c' rmdir 't/pragma/warn' rmdir 't/pragma/locale' rmdir 't/pragma' rmdir 't/camel-III' # # This command terminates the shell and need not be executed manually. exit # #### End of Preamble #### #### Patch data follows #### diff -c 'perl-5.7.1/patchlevel.h' 'perl-5.7.2/patchlevel.h' Index: ./patchlevel.h *** ./patchlevel.h Tue Apr 10 05:10:26 2001 --- ./patchlevel.h Fri Jul 13 17:14:12 2001 *************** *** 5,11 **** #define PERL_REVISION 5 /* age */ #define PERL_VERSION 7 /* epoch */ ! #define PERL_SUBVERSION 1 /* generation */ /* The following numbers describe the earliest compatible version of Perl ("compatibility" here being defined as sufficient binary/API --- 5,11 ---- #define PERL_REVISION 5 /* age */ #define PERL_VERSION 7 /* epoch */ ! #define PERL_SUBVERSION 2 /* generation */ /* The following numbers describe the earliest compatible version of Perl ("compatibility" here being defined as sufficient binary/API diff -c 'perl-5.7.1/AUTHORS' 'perl-5.7.2/AUTHORS' Index: ./AUTHORS *** ./AUTHORS Mon Apr 9 17:18:00 2001 --- ./AUTHORS Fri Jul 13 16:56:13 2001 *************** *** 1,13 **** # To give due honor to those who have made Perl 5 what is is today, # here are easily-from-changelogs-extractable people and their ! # (hopefully) current and preferred email addresses (as of late 2000 # if known) from the Changes files. These people have either submitted # patches or suggestions, or their bug reports or comments have inspired ! # the appropriate patches. Corrections, additions, deletions welcome. # -- A. C. Yardley Aaron B. Dossett Abigail Achim Bohnet Adam Krolnik --- 1,19 ---- # To give due honor to those who have made Perl 5 what is is today, # here are easily-from-changelogs-extractable people and their ! # (hopefully) current and preferred email addresses (as of early 2001, # if known) from the Changes files. These people have either submitted # patches or suggestions, or their bug reports or comments have inspired ! # the appropriate patches. Corrections, additions, deletions welcome; ! # send them to perl5-porters@perl.org, preferably as the output of diff(1), ! # diff -u or diff -c between the original and a corrected version of this file. # + # The use of this database for anything else than Perl development + # is strictly forbidden. (Passive distribution with the Perl source + # code kit is naturally allowed.) -- A. C. Yardley Aaron B. Dossett + Abhijit Menon-Sen Abigail Achim Bohnet Adam Krolnik *************** *** 19,33 **** --- 25,42 ---- Albert Chin-A-Young Albert Dvornik Alex Cough + Alexander Gough Alexander Smishlajev Alexey V. Barantzev Allen Smith Ambrose Kofi Laing + Ananth Kesari Andreas Klussmann Andreas König Andreas Schwab Andrew Bettison Andrew Cohen + andrew deryabin Andrew M. Langmead Andrew Pimlott Andrew Vignaux *************** *** 37,43 **** Anthony David Anton Berezin Art Green ! Artur Barrie Slaymaker Barry Friedman Ben Tilly --- 46,52 ---- Anthony David Anton Berezin Art Green ! Artur Bergman Barrie Slaymaker Barry Friedman Ben Tilly *************** *** 60,67 **** Brian Clarke Brian Grossman Brian Harrison ! Brian Jepson Brian Katzung Brian Reichert Brian S. Cashman Bruce Barnett --- 69,77 ---- Brian Clarke Brian Grossman Brian Harrison ! Brian Jepson Brian Katzung + Brian McCauley Brian Reichert Brian S. Cashman Bruce Barnett *************** *** 70,79 **** Bud Huff Byron Brummer Calle Dybedahl Carl M. Fongheiser Carl Witty Cary D. Renzema ! Casey R. Tweten Castor Fu Chaim Frenkel Charles Bailey --- 80,90 ---- Bud Huff Byron Brummer Calle Dybedahl + Carl Eklof Carl M. Fongheiser Carl Witty Cary D. Renzema ! Casey West Castor Fu Chaim Frenkel Charles Bailey *************** *** 81,86 **** --- 92,98 ---- Charles Lane Charles Wilson Chip Salzenberg + Chris Bongaarts Chris Faylor Chris Nandor Chris Wick *************** *** 102,115 **** Damian Conway Damon Atkins Dan Boorstein - Dan Carson Dan Hale Dan Schmidt Dan Sugalski Daniel Chetlin Daniel Grisinger Daniel Muiño ! Daniel S. Lewart Daniel Yacob Danny R. Faught Danny Sadinoff --- 114,127 ---- Damian Conway Damon Atkins Dan Boorstein Dan Hale Dan Schmidt Dan Sugalski Daniel Chetlin Daniel Grisinger + Daniel Lieberman Daniel Muiño ! Daniel S. Lewart Daniel Yacob Danny R. Faught Danny Sadinoff *************** *** 128,135 **** David F. Haertig David Filo David Glasser - David Hammen David H. Adler David J. Fiander David Kerry David Mitchell --- 140,147 ---- David F. Haertig David Filo David Glasser David H. Adler + David Hammen David J. Fiander David Kerry David Mitchell *************** *** 142,152 **** Dean Roehrich Dennis Marsa dive Dominic Dunlop Dominique Dumont Doug Campbell Doug MacEachern ! Douglas E. Wegscheid Douglas Lankshear Dov Grobgeld Drago Goricanec --- 154,166 ---- Dean Roehrich Dennis Marsa dive + dLux Dominic Dunlop Dominique Dumont Doug Campbell Doug MacEachern ! Doug Wilson ! Douglas E. Wegscheid Douglas Lankshear Dov Grobgeld Drago Goricanec *************** *** 154,159 **** --- 168,174 ---- Ed Peschko Edward Avis Edward Peschko + Edward Moy Elaine -HFB- Ashton Eric Arnold Eric Bartley *************** *** 176,186 **** Garry T. Williams Gary Clark Gary Ng <71564.1743@compuserve.com> Gerben Wierda - Gerrit P. Haase Gerd Knops Giles Lean Gisle Aas Gordon J. Miller Grace Lee Graham Barr --- 191,203 ---- Garry T. Williams Gary Clark Gary Ng <71564.1743@compuserve.com> + Geraint A Edwards Gerben Wierda Gerd Knops + Gerrit P. Haase Giles Lean Gisle Aas + Golubev I. N. Gordon J. Miller Grace Lee Graham Barr *************** *** 194,212 **** Gregory Martin Pfeil Guenter Schmidt Guido Flohr Gurusamy Sarathy Gustaf Neumann Guy Decoux H.J. Lu H.Merijn Brand Hal Pomeranz Hallvard B Furuseth Hannu Napari Hans Ginzel - Hans de Graaff Hans Mulder ! Harri Pasanen Harold O Morris Harry Edmon Helmut Jarausch Henrik Tougaard --- 211,233 ---- Gregory Martin Pfeil Guenter Schmidt Guido Flohr + Guruprasad S Gurusamy Sarathy Gustaf Neumann Guy Decoux + Gwyn Judd H.J. Lu H.Merijn Brand + Hal Morris Hal Pomeranz Hallvard B Furuseth Hannu Napari Hans Ginzel Hans Mulder ! Hans de Graaff ! Harmon S. Nine Harold O Morris + Harri Pasanen Harry Edmon Helmut Jarausch Henrik Tougaard *************** *** 258,267 **** Jens T. Berger Thielemann Jens Thomsen Jens-Uwe Mager Jeremy H. Brown Jeremy Madea - Jeremy D. Zawodny Jerome Abela Jim Anderson Jim Avera Jim Balter --- 279,289 ---- Jens T. Berger Thielemann Jens Thomsen Jens-Uwe Mager + Jeremy D. Zawodny Jeremy H. Brown Jeremy Madea Jerome Abela + Jesús Quiroga Jim Anderson Jim Avera Jim Balter *************** *** 271,276 **** --- 293,299 ---- Joachim Huober Jochen Wiedmann Joe Buehler + Joe Orton Joe Smith Joel Rosi-Schwartz Joerg Porath *************** *** 283,299 **** John Cerney John D Groenveld John Hasstedt John Hughes John L. Allen John Macdonald John Nolan John Peacock John Pfuntner - John P. Linderman John Rowe John Salinas John Stoffel John Tobey Jon Orwant Jonathan Biggar Jonathan D Johnston --- 306,325 ---- John Cerney John D Groenveld John Hasstedt + John Holdsworth John Hughes John L. Allen John Macdonald John Nolan + John P. Linderman John Peacock John Pfuntner John Rowe John Salinas John Stoffel John Tobey + Jon Eveland + Jon Gunnip Jon Orwant Jonathan Biggar Jonathan D Johnston *************** *** 306,311 **** --- 332,338 ---- Joshua E. Rodd Joshua Pritikin Juan Gallego + Juha Laiho Julian Yip Justin Banks Ka-Ping Yee *************** *** 329,345 **** Kim Frutiger Kragen Sitaker Krishna Sethuraman ! Kurt D. Starsinic Kyriakos Georgiou Larry Parmelee Larry Schuler Larry Schwimmer Larry W. Virden Larry Wall Lars Hecking Laszlo Molnar - Leon Brocard Len Johnson Les Peters Lincoln D. Stein Lionel Cons --- 356,373 ---- Kim Frutiger Kragen Sitaker Krishna Sethuraman ! Kurt D. Starsinic Kyriakos Georgiou Larry Parmelee Larry Schuler Larry Schwimmer + Larry Shatzer Larry W. Virden Larry Wall Lars Hecking Laszlo Molnar Len Johnson + Leon Brocard Les Peters Lincoln D. Stein Lionel Cons *************** *** 374,381 **** Mark-Jason Dominus Martien Verbruggen Martijn Koster ! Martin J. Bligh ! Martin Husemann Martin Lichtin Martin Plechsmid --- 402,409 ---- Mark-Jason Dominus Martien Verbruggen Martijn Koster ! Martin Husemann ! Martin J. Bligh Martin Jost Martin Lichtin Martin Plechsmid *************** *** 391,396 **** --- 419,425 ---- Matthias Ulrich Neeracher Matthias Urlichs Maurizio Loreti + Merijn Broeren Michael Cook Michael De La Rue Michael Engel *************** *** 404,415 **** Mike Hopkirk Mike Mestnik Mike Rogers Mike Stok Mike W Ellwood Milton Hankins Milton L. Hankins ! Molnar Laszlo ! Murray Nesbitt Nathan Kurz Nathan Torkington Neale Ferguson --- 433,444 ---- Mike Hopkirk Mike Mestnik Mike Rogers + Mike Schilli Mike Stok Mike W Ellwood Milton Hankins Milton L. Hankins ! Murray Nesbitt Nathan Kurz Nathan Torkington Neale Ferguson *************** *** 439,444 **** --- 468,474 ---- Paul Schinder Pete Peterson Peter Chines + Peter Gessner Peter Gordon Peter Haworth Peter J. Farley III *************** *** 456,466 **** --- 486,499 ---- Prymmer/Kahn Quentin Fennessy Radu Greab + Rajesh Vaidheeswarran Ralf S. Engelschall Randal L. Schwartz + Randall Gellens Randy J. Ray Raphael Manfredi Raymund Will + Reini Urban Rex Dieter Rich Morin Rich Salz *************** *** 468,474 **** Richard Foley Richard L. England Richard L. Maus, Jr. ! Richard Soderberg Richard Yeh Rick Delaney Rick Pluta --- 501,507 ---- Richard Foley Richard L. England Richard L. Maus, Jr. ! Richard Soderberg Richard Yeh Rick Delaney Rick Pluta *************** *** 490,499 **** --- 523,535 ---- Russell Fulton Russell Mosemann Ryan Herbert + SADAHIRO Tomoyuki SAKAI Kiyotaka Samuli Kärkkäinen + Scott Bronson Scott Gifford Scott Henry + Scott L. Miller Sean Robinson Sean Sheedy Sebastien Barre *************** *** 524,533 **** Steven Parkes Sven Verdoolaege SynaptiCAD, Inc. Taro KAWAGISHI Ted Ashton Ted Law ! Tels Teun Burgers Thad Floryan Thomas Bowditch --- 560,570 ---- Steven Parkes Sven Verdoolaege SynaptiCAD, Inc. + Takis Psarogiannakopoulos Taro KAWAGISHI Ted Ashton Ted Law ! Tels Teun Burgers Thad Floryan Thomas Bowditch *************** *** 535,540 **** --- 572,578 ---- Thomas Dorner Thomas Kofler Thomas König + Thomas Wegner Tim Adye Tim Ayers Tim Bunce *************** *** 542,547 **** --- 580,586 ---- Tim Freeman Tim Jenness Tim Mooney + Tim Sweetman Tim Witham Timur I. Bakeyev Tkil *************** *** 553,558 **** --- 592,598 ---- Tom Hughes Tom Phoenix Tom Spindler + Tony Bowden Tony Camas Tony Cook Tony Sanders *************** *** 568,579 **** Vlad Harchev Vladimir Alexiev W. Phillip Moore Warren Hyde Warren Jones Wayne Berke Wayne Scott Wayne Thompson ! Wilfredo Sánchez William J. Middleton William Mann William R Ward --- 608,620 ---- Vlad Harchev Vladimir Alexiev W. Phillip Moore + Walt Mankowski Warren Hyde Warren Jones Wayne Berke Wayne Scott Wayne Thompson ! Wilfredo Sánchez William J. Middleton William Mann William R Ward diff -c 'perl-5.7.1/Changes' 'perl-5.7.2/Changes' Index: ./Changes *** ./Changes Tue Apr 10 05:08:36 2001 --- ./Changes Fri Jul 13 16:59:38 2001 *************** *** 28,35 **** or any other branch. -------------- ! Version v5.7.1 Development release working toward v5.8 -------------- ____________________________________________________________________________ [ 9668] By: jhi on 2001/04/10 01:00:38 Log: Regen toc. --- 28,12403 ---- or any other branch. -------------- ! Version v5.7.2 Development release working toward v5.8 -------------- + ____________________________________________________________________________ + [ 11352] By: jhi on 2001/07/13 12:54:49 + Log: Reword. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 11351] By: jhi on 2001/07/13 12:52:47 + Log: AUTHORS update. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 11350] By: jhi on 2001/07/13 12:24:36 + Log: Ignore PL_regex_pad and PL_regex_padav from symbols + unless ithreads. + Branch: perl + ! makedef.pl + ____________________________________________________________________________ + [ 11349] By: jhi on 2001/07/13 11:54:10 + Log: Integrate perlio. + Branch: perl + !> win32/distclean.bat + ____________________________________________________________________________ + [ 11348] By: jhi on 2001/07/13 11:49:50 + Log: Test the encoding transform only iff we have PerlIO, + noticed by H. Merijn Brand. + Branch: perl + ! ext/PerlIO/t/encoding.t + ____________________________________________________________________________ + [ 11347] By: jhi on 2001/07/13 11:40:13 + Log: README.netware tweaks from Ananth Kesari. + Branch: perl + ! README.netware + ____________________________________________________________________________ + [ 11346] By: nick on 2001/07/13 09:18:51 + Log: Win32/distclean.bat - Down-case all MANIFEST and File::Find results so + to avoid /unicode vs /Unicode issues. + Branch: perlio + ! win32/distclean.bat + ____________________________________________________________________________ + [ 11345] By: nick on 2001/07/13 06:24:18 + Log: Integrate mainline + Branch: perlio + +> README.uts lib/UnicodeCD.pm lib/UnicodeCD.t + - lib/Unicode/UCD.pm lib/Unicode/UCD.t lib/unicode/distinct.pm + !> (integrate 63 files) + ____________________________________________________________________________ + [ 11344] By: jhi on 2001/07/13 04:50:22 + Log: Add d_bincompat5005 information to perl -V. + Branch: perl + ! myconfig.SH + ____________________________________________________________________________ + [ 11343] By: jhi on 2001/07/13 03:42:05 + Log: Subject: Re: [PATCH] Re: Memory corruption? Read-only $_? + From: Abhijit Menon-Sen + Date: Fri, 13 Jul 2001 07:12:36 +0530 + Message-ID: <20010713071236.C5669@lustre.dyn.wiw.org> + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 11342] By: jhi on 2001/07/13 03:36:22 + Log: Remove unicode::distinct, as per Inaba Hiroto. + Branch: perl + - lib/unicode/distinct.pm + ! MANIFEST hv.c perl.h pod/perlmodlib.pod pod/perltoc.pod sv.c + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 11341] By: jhi on 2001/07/13 00:05:53 + Log: Paging for Dr Octothorpe. + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 11340] By: jhi on 2001/07/12 23:53:44 + Log: cut-n-paste error noticed by mjd. + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 11339] By: jhi on 2001/07/12 23:39:42 + Log: Subject: [PATCH: perl@11328] update the octal situation in perlfaq4.pod + From: Peter Prymmer + Date: Thu, 12 Jul 2001 17:04:22 -0700 (PDT) + Message-ID: + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 11338] By: jhi on 2001/07/12 23:38:49 + Log: Subject: Re: [randy@qualcomm.com: Corrections for ' repository - Using the Perl repository '] + From: Randall Gellens + Date: Thu, 12 Jul 2001 16:56:23 -0700 + Message-Id: + Branch: perl + ! Porting/repository.pod + ____________________________________________________________________________ + [ 11337] By: jhi on 2001/07/12 23:35:06 + Log: Make PTHREAD_ATFORK() to croak if HAS_FORK, noop otherwise. + Branch: perl + ! thread.h + ____________________________________________________________________________ + [ 11336] By: jhi on 2001/07/12 23:23:39 + Log: Subject: [PATCH] pthread_atfork on FreeBSD - Part 1: #ifdef HAS_PTHREAD_ATFORK + From: coral + Date: Thu, 12 Jul 2001 16:16:50 -0700 (PDT) + Message-Id: <200107122316.f6CNGoq09171@moonlight.crystalflame.net> + Branch: perl + ! thread.h + ____________________________________________________________________________ + [ 11335] By: jhi on 2001/07/12 23:23:14 + Log: Metaconfig unit change for #11134. + Branch: metaconfig + + U/threads/d_pthread_atfork.U + ____________________________________________________________________________ + [ 11334] By: jhi on 2001/07/12 23:22:42 + Log: Add HAS_PTHREAD_ATFORK. + Branch: perl + ! Configure NetWare/config.wc NetWare/config_H.wc + ! Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH configure.com epoc/config.sh pod/perltoc.pod + ! uconfig.h uconfig.sh vos/config.alpha.def vos/config.alpha.h + ! vos/config.ga.def vos/config.ga.h win32/config.bc + ! win32/config.gc win32/config.vc win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 11333] By: jhi on 2001/07/12 22:58:35 + Log: Subject: [PATCH] File::Copy fails on tied handles + From: "Wilson, Doug" + Date: Thu, 12 Jul 2001 15:18:51 -0700 + Message-ID: <35A280DF784CD411A06B0008C7B130ADB5505B@sdex04.sd.intuit.com> + Branch: perl + ! lib/File/Copy.pm + ____________________________________________________________________________ + [ 11332] By: jhi on 2001/07/12 22:57:04 + Log: Subject: [PATCH] Langinfo.t + From: Nicholas Clark + Date: Thu, 12 Jul 2001 23:55:38 +0100 + Message-ID: <20010712235538.M5827@plum.flirble.org> + Branch: perl + ! ext/I18N/Langinfo/Langinfo.t + ____________________________________________________________________________ + [ 11331] By: jhi on 2001/07/12 22:56:09 + Log: Subject: [PATCH: perl@11328] informational tweaks to perl572delta.pod + From: Peter Prymmer + Date: Thu, 12 Jul 2001 16:38:00 -0700 (PDT) + Message-ID: + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11330] By: jhi on 2001/07/12 22:55:23 + Log: Subject: [PATCH] Re: Memory corruption? Read-only $_? + From: Abhijit Menon-Sen + Date: Fri, 13 Jul 2001 05:21:16 +0530 + Message-ID: <20010713052116.B5669@lustre.dyn.wiw.org> + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 11329] By: jhi on 2001/07/12 22:54:39 + Log: Subject: [PATCH 20010712.005] Re: Perl bug with "delete" on arrays + From: Abhijit Menon-Sen + Date: Fri, 13 Jul 2001 03:04:25 +0530 + Message-ID: <20010713030425.A5669@lustre.dyn.wiw.org> + Branch: perl + ! av.c + ____________________________________________________________________________ + [ 11328] By: gsar on 2001/07/12 19:02:01 + Log: s/^M$//g + Branch: perl + ! win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 11327] By: jhi on 2001/07/12 18:54:09 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11326] By: jhi on 2001/07/12 18:17:18 + Log: Typo spotted by Philip Newton. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11325] By: jhi on 2001/07/12 18:11:42 + Log: Subject: [PATCH] fixes perl_clone of perl_clone + From: Artur Bergman + Date: Thu, 12 Jul 2001 20:57:09 +0200 + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 11324] By: jhi on 2001/07/12 18:09:17 + Log: Add README.uts from Hal Morris. + Branch: perl + + README.uts + ! MANIFEST pod/buildtoc.PL pod/perl.pod pod/perl572delta.pod + ! pod/perltoc.pod win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 11323] By: jhi on 2001/07/12 17:48:33 + Log: Subject: Re: AIX 4.3.3 w/ vac 5.0 [ FATAL in B ] + From: "H.Merijn Brand" + Date: Thu, 12 Jul 2001 20:32:37 +0200 + Message-Id: <20010712201743.E108.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11322] By: jhi on 2001/07/12 17:44:29 + Log: Subject: Patch: document reg_data.what member + From: Mark-Jason Dominus + Message-ID: <20010712182532.14821.qmail@plover.com> + Date: Thu, 12 Jul 2001 14:25:32 -0400 + Branch: perl + ! regcomp.c regcomp.h + ____________________________________________________________________________ + [ 11321] By: jhi on 2001/07/12 17:43:18 + Log: Subject: [PATCH] Perl_re_dup() + From: Abhijit Menon-Sen + Date: Thu, 12 Jul 2001 23:54:32 +0530 + Message-ID: <20010712235432.J24707@lustre.dyn.wiw.org> + Branch: perl + ! embed.h embed.pl perlapi.c proto.h sv.c + ____________________________________________________________________________ + [ 11320] By: jhi on 2001/07/12 17:18:54 + Log: Regen Configure, modlib, toc. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! pod/perlmodlib.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 11319] By: jhi on 2001/07/12 17:08:15 + Log: The problem seems to be in PerlIO::Layer::->find() not + accepting the ":encoding(blurflur)" arguments. + Branch: perl + ! lib/PerlIO.pm lib/open.pm + ____________________________________________________________________________ + [ 11318] By: jhi on 2001/07/12 16:58:11 + Log: AIX doc update. + Branch: perl + ! README.aix pod/perl572delta.pod + ____________________________________________________________________________ + [ 11317] By: jhi on 2001/07/12 16:39:11 + Log: Subject: AIX README update + From: "H.Merijn Brand" + Date: Thu, 12 Jul 2001 19:28:30 +0200 + Message-Id: <20010712192620.E0F9.H.M.BRAND@hccnet.nl> + Branch: perl + ! README.aix + ____________________________________________________________________________ + [ 11316] By: jhi on 2001/07/12 16:37:15 + Log: Subject: [PATCH ext/IO/lib/IO/t/io_unix.t] for QNX6 + From: Norton Allen + Date: Thu, 12 Jul 2001 11:30:51 -0400 (edt) + Message-Id: <200107121530.LAA12631@bottesini.harvard.edu> + Branch: perl + ! ext/IO/lib/IO/t/io_unix.t + ____________________________________________________________________________ + [ 11315] By: jhi on 2001/07/12 16:35:53 + Log: Subject: [PATCH README.qnx hints/qnx.sh] + From: Norton Allen + Date: Thu, 12 Jul 2001 11:29:19 -0400 (edt) + Message-Id: <200107121529.LAA23411@bottesini.harvard.edu> + Branch: perl + ! README.qnx hints/qnx.sh + ____________________________________________________________________________ + [ 11314] By: jhi on 2001/07/12 16:13:15 + Log: Subject: [patch] faster PM_GETRE + From: Doug MacEachern + Date: Thu, 12 Jul 2001 10:13:27 -0700 (PDT) + Message-ID: + Branch: perl + ! op.h + ____________________________________________________________________________ + [ 11313] By: jhi on 2001/07/12 16:12:23 + Log: Subject: Re: [PATCH] Threadsafe PMOPs! We might still win this war. + From: Doug MacEachern + Date: Thu, 12 Jul 2001 10:11:28 -0700 (PDT) + Message-ID: + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 11312] By: jhi on 2001/07/12 16:07:22 + Log: Tell where the nice Estonian database is. + Branch: perl + ! lib/open.pm + ____________________________________________________________________________ + [ 11311] By: jhi on 2001/07/12 16:05:31 + Log: Retract #11309 since #11310 is a better fix. + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 11310] By: gsar on 2001/07/12 15:50:40 + Log: fix for failing fork.t#12 on windows (win32_execvp() tweak in + change#11300 needs to return the status of failed win32_spawnvp()) + + fix various open.pm bugs: '\0' isn't the same as "\0", so it wasn't + splitting correctly; remove unused variables; 'require' at run time + rather than 'use' at compile time for I18N::Langinfo, since it + isn't everyware + Branch: perl + ! lib/open.pm win32/win32.c + ____________________________________________________________________________ + [ 11309] By: jhi on 2001/07/12 15:29:55 + Log: Temporary workaround. + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 11308] By: jhi on 2001/07/12 14:44:51 + Log: UCD typo in #11306 and add also more known-to-be-tested + modules to the skip list. + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 11307] By: jhi on 2001/07/12 14:38:38 + Log: Rename Unicode::UCD to UnicodeCD to avoid + messups with case-insensitive filesystems. + Branch: perl + + lib/UnicodeCD.pm lib/UnicodeCD.t + - lib/Unicode/UCD.pm lib/Unicode/UCD.t + ! MANIFEST pod/perl572delta.pod t/lib/1_compile.t + ____________________________________________________________________________ + [ 11306] By: jhi on 2001/07/12 13:32:05 + Log: Subject: [ID 20010711.005] in Tie::Array, SPLICE ignores context, breaking SHIFT + From: daniel@biz.bitpusher.com + Date: Wed, 11 Jul 2001 23:25:47 -0700 + Message-Id: <200107120625.f6C6PkJ13065@biz.bitpusher.com> + Branch: perl + ! lib/Tie/Array.pm t/op/splice.t + ____________________________________________________________________________ + [ 11305] By: jhi on 2001/07/12 13:05:46 + Log: Subject: [PATCH] More accurate line numbers in messages + From: Paul Johnson + Date: Thu, 12 Jul 2001 04:14:11 +0200 + Message-ID: <20010712041411.A3467@pjcj.net> + + (With prototyping and multiplicity tweaks.) + Branch: perl + ! dump.c embed.h embed.pl t/lib/warnings/util util.c + ____________________________________________________________________________ + [ 11304] By: nick on 2001/07/12 12:53:40 + Log: Integrate mainline + Branch: perlio + !> ext/ByteLoader/bytecode.h hints/aix.sh pod/perl572delta.pod + !> regexec.c thread.h + ____________________________________________________________________________ + [ 11303] By: jhi on 2001/07/12 12:46:20 + Log: Cut-and-pasto in #11298. + Branch: perl + ! ext/ByteLoader/bytecode.h + ____________________________________________________________________________ + [ 11302] By: jhi on 2001/07/12 12:42:35 + Log: Update the AIX known problems section. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11301] By: jhi on 2001/07/12 12:36:46 + Log: Subject: Re: HiRes on AIX 4.2 in threaded mode + From: "H.Merijn Brand" + Date: Thu, 12 Jul 2001 12:16:16 +0200 + Message-Id: <20010712114215.E0D9.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11300] By: jhi on 2001/07/12 12:35:44 + Log: Integrate perlio. + Branch: perl + !> makedef.pl win32/win32.c + ____________________________________________________________________________ + [ 11299] By: jhi on 2001/07/12 12:33:57 + Log: Subject: [PATCH] fix for PMOP threadness failures + From: Artur Bergman + Date: Thu, 12 Jul 2001 09:48:06 +0200 + Message-ID: + Branch: perl + ! regexec.c + ____________________________________________________________________________ + [ 11298] By: jhi on 2001/07/12 12:27:47 + Log: Subject: RE: Win32 Failure, was Re: perl@11278 - LAST CALL FOR 5.7.2 + From: "Konovalov, Vadim Vladimirovich (Vadim)" + Date: Thu, 12 Jul 2001 09:09:48 +0200 + Message-ID: + + More parentheses to keep bcc happy. + Branch: perl + ! ext/ByteLoader/bytecode.h + ____________________________________________________________________________ + [ 11297] By: jhi on 2001/07/12 12:24:50 + Log: Subject: Re: [patch] pthread_atfork bandaid + From: Doug MacEachern + Date: Wed, 11 Jul 2001 23:43:17 -0700 (PDT) + Message-ID: + Branch: perl + ! thread.h + ____________________________________________________________________________ + [ 11296] By: nick on 2001/07/12 11:55:48 + Log: Exclude reentrant_buffer from .def file + Branch: perlio + ! makedef.pl + ____________________________________________________________________________ + [ 11295] By: nick on 2001/07/12 11:11:44 + Log: Honour void-ness of my_exit() + Branch: perlio + ! win32/win32.c + ____________________________________________________________________________ + [ 11294] By: nick on 2001/07/12 07:51:04 + Log: Integrate mainline + Branch: perlio + +> uts/sprintf_wrap.c + !> (integrate 35 files) + ____________________________________________________________________________ + [ 11293] By: jhi on 2001/07/12 04:58:08 + Log: Retract #11289. + Branch: perl + ! embed.h embed.pl perl.c proto.h thread.h + ____________________________________________________________________________ + [ 11292] By: jhi on 2001/07/12 04:47:43 + Log: Now the :locale pseudolayer *almost* works... + Branch: perl + ! lib/open.pm + ____________________________________________________________________________ + [ 11291] By: jhi on 2001/07/12 04:36:47 + Log: Locale encoding tweaks. + Branch: perl + ! lib/open.pm + ____________________________________________________________________________ + [ 11290] By: jhi on 2001/07/12 04:25:53 + Log: Subject: Re: [PATCH: perl@11181] UCD.t fails LATIN|Latin test + From: Mark-Jason Dominus + Date: Thu, 12 Jul 2001 00:59:31 -0400 + Message-ID: <20010712045931.8543.qmail@plover.com> + + Remove the chmod/umask leading zero warning. + Branch: perl + ! lib/warnings.pm pod/perldiag.pod pod/perllexwarn.pod + ! t/lib/warnings/toke toke.c warnings.h warnings.pl + ____________________________________________________________________________ + [ 11289] By: jhi on 2001/07/12 04:16:41 + Log: (Retracted by #11289.) + Branch: perl + ! embed.h embed.pl perl.c proto.h thread.h + ____________________________________________________________________________ + [ 11288] By: jhi on 2001/07/12 03:45:11 + Log: Needed by #11283. + Branch: perl + ! intrpvar.h + ____________________________________________________________________________ + [ 11287] By: jhi on 2001/07/12 03:40:04 + Log: Metaconfig unit change for #11286. + Branch: metaconfig/U/perl + ! patchlevel.U + ____________________________________________________________________________ + [ 11286] By: jhi on 2001/07/12 03:39:18 + Log: Subject: Re: [PATCH Configure] perl -V broken + From: Andy Dougherty + Date: Wed, 11 Jul 2001 13:30:27 -0400 (EDT) + Message-ID: + Branch: perl + ! Configure myconfig.SH + ____________________________________________________________________________ + [ 11285] By: jhi on 2001/07/12 03:27:28 + Log: Retract #11166 (and #11237). + Branch: perl + ! dump.c embed.h lib/warnings.pm op.c op.h opcode.h opcode.pl + ! pod/perldiag.pod pp.sym pp_proto.h t/lib/warnings/op + ! t/lib/warnings/toke toke.c warnings.h warnings.pl + ____________________________________________________________________________ + [ 11284] By: jhi on 2001/07/12 02:36:42 + Log: UTS tweaks for Hal Morris. + Branch: perl + + uts/sprintf_wrap.c + ! MANIFEST hints/uts.sh perl.h + ____________________________________________________________________________ + [ 11283] By: jhi on 2001/07/12 00:52:36 + Log: Subject: [PATCH] Use reentrant API glibc + From: Artur Bergman + Date: Thu, 12 Jul 2001 00:58:21 +0200 + Message-ID: + Branch: perl + ! embedvar.h intrpvar.h op.h perl.c perlapi.h pod/perlapi.pod + ! sv.c + ____________________________________________________________________________ + [ 11282] By: jhi on 2001/07/12 00:35:27 + Log: Subject: Re: ActivePerl 628 + warnings + fork + exec = spurious "Can't exec"? + From: barries + Date: Wed, 11 Jul 2001 15:11:46 -0400 + Message-ID: <20010711151146.G24560@jester.slaysys.com> + Branch: perl + ! pp_sys.c t/lib/warnings/doio win32/win32.c + ____________________________________________________________________________ + [ 11281] By: jhi on 2001/07/12 00:32:17 + Log: Subject: [patch] pthread_atfork bandaid + From: Doug MacEachern + Date: Wed, 11 Jul 2001 08:59:12 -0700 (PDT) + Message-ID: + Branch: perl + ! miniperlmain.c perl.c + ____________________________________________________________________________ + [ 11280] By: jhi on 2001/07/12 00:31:34 + Log: Subject: [patch] perl_clone leaks + From: Doug MacEachern + Date: Wed, 11 Jul 2001 08:43:32 -0700 (PDT) + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 11279] By: nick on 2001/07/11 15:49:38 + Log: Integrate mainline + Branch: perlio + +> ext/Encode/Encode/HZ.enc ext/PerlIO/t/encoding.t + +> ext/Time/HiRes/hints/dynixptx.pl lib/Math/BigInt/Calc.pm + +> lib/Math/BigInt/t/bigintc.t lib/Term/ANSIColor/ChangeLog + +> lib/Term/ANSIColor/README + !> (integrate 54 files) + ____________________________________________________________________________ + [ 11278] By: jhi on 2001/07/11 13:52:20 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11277] By: jhi on 2001/07/11 13:31:43 + Log: Subject: blead kit timestamps && the problem with running perl embed.pl + From: Peter Prymmer + Date: Tue, 10 Jul 2001 19:33:00 -0700 (PDT) + Message-ID: + + Backport of embed.pl to 5.003. + Branch: perl + ! embed.pl + ____________________________________________________________________________ + [ 11276] By: jhi on 2001/07/11 13:18:07 + Log: Subject: Re: POSIX test #14 on UTS + From: Hugo van der Sanden + Date: Wed, 11 Jul 2001 03:02:14 +0100 + Message-Id: <200107110202.f6B22Ea10727@crypt.compulink.co.uk> + Branch: perl + ! ext/POSIX/POSIX.t + ____________________________________________________________________________ + [ 11275] By: jhi on 2001/07/11 13:15:49 + Log: Make the I32 an IV to preserve structure alignment and size. + Branch: perl + ! op.h + ____________________________________________________________________________ + [ 11274] By: jhi on 2001/07/11 13:13:27 + Log: Subject: [PATCH] Threadsafe PMOPs! We might still win this war. + From: "Artur Bergman" + Date: Wed, 11 Jul 2001 14:23:37 +0200 + Message-ID: <000b01c10a04$4fa16a10$21000a0a@vogw2kdev> + + Threadsafe PMOPs for ithreads, waiting for AMS's Perl_re_dup(). + Branch: perl + ! embedvar.h intrpvar.h op.c op.h perl.c perlapi.h + ! pod/perlapi.pod sv.c + ____________________________________________________________________________ + [ 11273] By: jhi on 2001/07/11 03:53:28 + Log: Tweak until Pod::Parser gets updated. + Branch: perl + ! t/pod/special_seqs.xr + ____________________________________________________________________________ + [ 11272] By: jhi on 2001/07/11 00:46:05 + Log: File::Spec usage tweak. + Branch: perl + ! lib/ExtUtils.t + ____________________________________________________________________________ + [ 11271] By: jhi on 2001/07/11 00:37:19 + Log: Integrate #11263 from macperl; macos and macosx updates. + Branch: perl + !> pod/perlport.pod + ____________________________________________________________________________ + [ 11270] By: jhi on 2001/07/11 00:33:27 + Log: Subject: [PATCH: perl@11238] dynixptx updates for osvers='4.5.2' + From: Peter Prymmer + Date: Tue, 10 Jul 2001 15:29:45 -0700 (PDT) + Message-ID: + Branch: perl + + ext/Time/HiRes/hints/dynixptx.pl + ! MANIFEST hints/dynixptx.sh + ____________________________________________________________________________ + [ 11269] By: jhi on 2001/07/11 00:32:16 + Log: Subject: [PATCH] ExtUtils::Constant (was Re: funny numconvert test in perl@11006 (was Re: report on BS2000 wit h perl@11006)) + From: Nicholas Clark + Date: Tue, 10 Jul 2001 23:17:43 +0100 + Message-ID: <20010710231742.B59620@plum.flirble.org> + Branch: perl + ! lib/ExtUtils.t lib/ExtUtils/Constant.pm + ____________________________________________________________________________ + [ 11268] By: jhi on 2001/07/11 00:30:56 + Log: Subject: [DOC PATCH] Pluggable runops + From: Paul Johnson + Date: Tue, 10 Jul 2001 21:53:28 +0200 + Message-ID: <20010710215328.B26577@pjcj.net> + Branch: perl + ! pod/perlguts.pod + ____________________________________________________________________________ + [ 11267] By: jhi on 2001/07/11 00:29:59 + Log: Subject: [PATCH] Authors + From: Artur Bergman + Date: Tue, 10 Jul 2001 20:39:12 +0200 + Message-ID: + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 11266] By: jhi on 2001/07/11 00:29:13 + Log: Subject: Re: [PATCH] Small fix to pp_gmtime + From: Doug MacEachern + Date: Tue, 10 Jul 2001 11:19:43 -0700 (PDT) + Message-ID: + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 11265] By: jhi on 2001/07/11 00:28:15 + Log: Subject: doc patch; times() in scalar context + From: mjd@plover.com + Date: 10 Jul 2001 18:01:17 -0000 + Message-ID: <20010710180117.12477.qmail@plover.com> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 11264] By: jhi on 2001/07/11 00:27:17 + Log: Subject: [PATCH] Small fix to pp_gmtime + From: Artur Bergman + Date: Tue, 10 Jul 2001 19:54:52 +0200 + Message-ID: + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 11263] By: pudge on 2001/07/10 21:06:10 + Log: Integrate changes from mainline perl, add notes about + Mac OS X and Mac OS. + Branch: maint-5.6/macperl + ! pod/perlport.pod + ____________________________________________________________________________ + [ 11262] By: jhi on 2001/07/10 15:21:26 + Log: A proof of the dangers of package; ? + Branch: perl + ! t/lib/warnings/op + ____________________________________________________________________________ + [ 11261] By: jhi on 2001/07/10 15:02:27 + Log: Regen toc and modlib. + Branch: perl + ! pod/perlmodlib.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 11260] By: jhi on 2001/07/10 15:00:37 + Log: Add compexcl(), casefold(), and casespec() interfaces; + and make all interfaces to return hash references instead + of hashes. + Branch: perl + ! lib/Unicode/UCD.pm lib/Unicode/UCD.t + ____________________________________________________________________________ + [ 11259] By: jhi on 2001/07/10 13:50:17 + Log: Subject: [PATCH bleadperl] Math::Big* doc patches (and some code) + From: "Philip Newton" + Date: Tue, 10 Jul 2001 09:55:59 +0200 + Message-ID: <20010710.095300@ID-11583.news.dfncis.de> + + Subject: [DOC PATCH bleadperl] detypo Math::BigInt docs + From: "Philip Newton" + Date: Tue, 10 Jul 2001 09:56:37 +0200 + Message-ID: <20010710.095600@ID-11583.news.dfncis.de> + Branch: perl + ! lib/Math/BigFloat.pm lib/Math/BigInt.pm + ! lib/Math/BigInt/Calc.pm lib/Math/BigInt/t/bigintpm.t + ____________________________________________________________________________ + [ 11258] By: jhi on 2001/07/10 13:47:20 + Log: Subject: [patch] undef &xsub for 1,2 + From: Doug MacEachern + Date: Mon, 9 Jul 2001 20:16:49 -0700 (PDT) + Message-ID: + + (This version of the patch with a comment from Gisle.) + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 11257] By: jhi on 2001/07/10 13:45:44 + Log: Mention package; deprecation and the Win32 problems. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11256] By: jhi on 2001/07/10 13:45:12 + Log: Subject: [PATCH] deprecate package with no arguments + From: Robin Houston + Date: Tue, 10 Jul 2001 13:33:40 +0100 + Message-ID: <20010710133340.A13452@robin.kitsite.com> + Branch: perl + ! op.c pod/perldiag.pod pod/perlfunc.pod t/lib/warnings/op + ____________________________________________________________________________ + [ 11255] By: jhi on 2001/07/10 13:16:11 + Log: Upgrade to podlators 1.10. + Branch: perl + ! lib/Pod/Man.pm lib/Pod/Text.pm lib/Pod/Text/Color.pm + ! lib/Pod/Text/Overstrike.pm lib/Pod/Text/Termcap.pm + ! pod/pod2man.PL pod/pod2text.PL + ____________________________________________________________________________ + [ 11254] By: jhi on 2001/07/10 13:09:34 + Log: Upgrade to Term::ANSIColor 1.04. + Branch: perl + + lib/Term/ANSIColor/ChangeLog lib/Term/ANSIColor/README + ! MANIFEST lib/Term/ANSIColor.pm lib/Term/ANSIColor/test.pl + ____________________________________________________________________________ + [ 11253] By: jhi on 2001/07/10 12:59:27 + Log: Integrate perlio (the right fix for the ":layer(args)") + Branch: perl + !> perlio.c + ____________________________________________________________________________ + [ 11252] By: nick on 2001/07/10 06:58:14 + Log: Fix open(...,"...:layer(xxx)",...) + - use memEQ not strEQ as there is '(' not '\0' + Branch: perlio + ! perlio.c + ____________________________________________________________________________ + [ 11251] By: jhi on 2001/07/10 04:04:18 + Log: Telling the number of tests helps. + Branch: perl + ! ext/PerlIO/t/encoding.t + ____________________________________________________________________________ + [ 11250] By: jhi on 2001/07/10 03:55:38 + Log: Require I18N::Langinfo, not use. + Branch: perl + ! lib/open.pm + ____________________________________________________________________________ + [ 11249] By: jhi on 2001/07/10 03:50:18 + Log: Add a test for for PerlIO ":encoding(...)" layer. + Branch: perl + + ext/PerlIO/t/encoding.t + ! MANIFEST ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 11248] By: jhi on 2001/07/10 02:06:57 + Log: PerlIO ":encoding(foobar)" temporary fix. + Not really correct, I think, since the change means + that prefixes match. + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 11247] By: jhi on 2001/07/10 01:38:11 + Log: Update to Math::BigInt 1.36. The biggest news is + the separation of the backend; now the pure Perl + implementation is in Math::BigInt::Calc, but one + can plugin, say, Math::BigInt::BitVect, and get + considerable speedup. + Branch: perl + + lib/Math/BigInt/Calc.pm lib/Math/BigInt/t/bigintc.t + ! MANIFEST lib/Math/BigFloat.pm lib/Math/BigInt.pm + ! lib/Math/BigInt/t/bigfltpm.t lib/Math/BigInt/t/bigintpm.t + ! lib/Math/BigInt/t/mbimbf.t + ____________________________________________________________________________ + [ 11246] By: jhi on 2001/07/10 01:19:55 + Log: Subject: Re: compatibility question + From: Peter Prymmer + Date: Mon, 9 Jul 2001 18:04:33 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/ExtUtils/MM_VMS.pm + ____________________________________________________________________________ + [ 11245] By: jhi on 2001/07/10 01:18:04 + Log: Subject: [PATCH ext/File/Glob/t/basic.t] + From: Norton Allen + Date: Mon, 9 Jul 2001 17:16:15 -0400 (edt) + Message-Id: <200107092116.RAA12010@bottesini.harvard.edu> + Branch: perl + ! ext/File/Glob/t/basic.t + ____________________________________________________________________________ + [ 11244] By: jhi on 2001/07/10 01:16:27 + Log: Subject: [PATCH] Encode::Tcl. add "HZ" encoding and bugfix + From: SADAHIRO Tomoyuki + Date: Tue, 10 Jul 2001 00:29:55 +0900 + Message-Id: <20010710002756.B497.BQW10602@nifty.com> + Branch: perl + + ext/Encode/Encode/HZ.enc + ! MANIFEST ext/Encode/Encode/7bit-kana.enc + ! ext/Encode/Encode/Tcl.pm ext/Encode/Encode/Tcl.t + ! ext/Encode/Encode/iso2022-jp.enc + ! ext/Encode/Encode/iso2022-kr.enc + ____________________________________________________________________________ + [ 11243] By: pudge on 2001/07/09 22:16:12 + Log: Add in all them there macos/ files. + Branch: maint-5.6/macperl + + (add 577 files) + ____________________________________________________________________________ + [ 11242] By: jhi on 2001/07/09 20:26:04 + Log: Add the new modules to the list of having those own tests. + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 11241] By: jhi on 2001/07/09 19:09:58 + Log: Add INOUT to control both ways at the same time. + Branch: perl + ! lib/open.pm + ____________________________________________________________________________ + [ 11240] By: nick on 2001/07/09 16:33:50 + Log: Integrate mainline + Branch: perlio + +> ext/I18N/Langinfo/Langinfo.pm ext/I18N/Langinfo/Langinfo.t + +> ext/I18N/Langinfo/Langinfo.xs ext/I18N/Langinfo/Makefile.PL + !> (integrate 41 files) + ____________________________________________________________________________ + [ 11239] By: jhi on 2001/07/09 16:14:35 + Log: More encoding mapping magic. + Branch: perl + ! lib/open.pm + ____________________________________________________________________________ + [ 11238] By: jhi on 2001/07/09 14:40:43 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11237] By: jhi on 2001/07/09 14:27:27 + Log: (Retracted by #11285). + + Subject: [PATCH] OPpCONST_OCTAL fixes + From: Abhijit Menon-Sen + Date: Mon, 9 Jul 2001 07:38:45 +0530 + Message-ID: <20010709073845.A25406@lustre.dyn.wiw.org> + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 11236] By: jhi on 2001/07/09 14:10:07 + Log: Add a pseudolayer ":locale" to the open pragma which + will get the encoding from the locale. Yet undocumented + because I can't get the PerlIO :encoding(foobar) to work. + Branch: perl + ! ext/Encode/Encode.pm lib/open.pm + ____________________________________________________________________________ + [ 11235] By: jhi on 2001/07/09 13:38:43 + Log: Add more encoding mappings. + Branch: perl + ! ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 11234] By: jhi on 2001/07/09 13:24:54 + Log: Document that using :encoding layer requires using Encode. + Branch: perl + ! ext/Encode/Encode.pm lib/PerlIO.pm + ____________________________________________________________________________ + [ 11233] By: jhi on 2001/07/09 13:19:34 + Log: Netware tweak from Ananth Kesari. + Branch: perl + ! NetWare/netware.h + ____________________________________________________________________________ + [ 11232] By: gsar on 2001/07/09 04:40:07 + Log: t/harness doesn't know about run/*.t + Branch: perl + ! t/harness + ____________________________________________________________________________ + [ 11231] By: gsar on 2001/07/09 04:36:30 + Log: run/exit.t busted on windows + Branch: perl + ! t/run/exit.t + ____________________________________________________________________________ + [ 11230] By: gsar on 2001/07/09 04:14:54 + Log: fix a couple of UCD.t tests that fail due to bad case + Branch: perl + ! lib/Unicode/UCD.t + ____________________________________________________________________________ + [ 11229] By: gsar on 2001/07/09 03:57:06 + Log: test skip logic was broken + Branch: perl + ! ext/I18N/Langinfo/Langinfo.t + ____________________________________________________________________________ + [ 11228] By: gsar on 2001/07/09 03:42:20 + Log: remove *.pdb files on windows upon $(MAKE) clean (fixes + failure of ExtUtils.t#27 when built in debug mode) + Branch: perl + ! lib/ExtUtils/MM_Win32.pm + ____________________________________________________________________________ + [ 11227] By: gsar on 2001/07/09 02:11:04 + Log: I18N::Langinfo is not available on windows + Branch: perl + ! win32/FindExt.pm + ____________________________________________________________________________ + [ 11226] By: gsar on 2001/07/09 01:55:23 + Log: save a dTHX + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 11225] By: jhi on 2001/07/08 23:42:37 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11224] By: jhi on 2001/07/08 23:05:41 + Log: Guard the nl_langinfo() with HAS_NL_LANGINFO + as pointed out by Sarathy. + Branch: perl + ! ext/I18N/Langinfo/Langinfo.xs + ____________________________________________________________________________ + [ 11223] By: jhi on 2001/07/08 22:59:01 + Log: Retract #11212. + Branch: perl + ! cv.h ext/Opcode/Opcode.xs op.c pp_hot.c sv.h toke.c + ____________________________________________________________________________ + [ 11222] By: jhi on 2001/07/08 17:41:22 + Log: Bump up the VERSION of Cwd.xs. + Branch: perl + ! ext/Cwd/Makefile.PL + ____________________________________________________________________________ + [ 11221] By: jhi on 2001/07/08 17:13:38 + Log: Retract #11220, the problem wasn't the missing leading zero. + Here's the problem: + $ ./perl -we 'chmod(oct("755"), ".")' + Non-octal literal mode (493) specified at -e line 1. + (Did you mean 0493 instead?) + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 11220] By: jhi on 2001/07/08 17:05:55 + Log: (Retracted by #11221) + Change the PERM_RW and PERM_RWX to 0644 and 0755 + (add the leading zero). + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 11219] By: jhi on 2001/07/08 16:17:32 + Log: Integrate changes #11193, 11205, 11209 from macperl. + + Fix up AutoLoader to fudge for Mac paths in import(). + + Allow symbols in try_symbol() to begin with "_". + + Small portability fix for Mac OS. + Branch: perl + !> lib/AutoLoader.pm lib/Cwd.pm makedef.pl + ____________________________________________________________________________ + [ 11218] By: jhi on 2001/07/08 16:10:30 + Log: Metaconfig unit change for #11217. + Branch: metaconfig/U/perl + ! Extensions.U + ____________________________________________________________________________ + [ 11217] By: jhi on 2001/07/08 16:10:07 + Log: Detypo, problem noticed by Gerrit P. Haase. + Branch: perl + ! Configure config_h.SH + ____________________________________________________________________________ + [ 11216] By: jhi on 2001/07/08 15:58:35 + Log: Cwd cleanups. + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 11215] By: jhi on 2001/07/08 15:52:57 + Log: Slight tweaks on #11213. + Branch: perl + ! toke.c + ____________________________________________________________________________ + [ 11214] By: jhi on 2001/07/08 14:32:28 + Log: A missing dTHX noticed by Gerrit P. Haase. + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 11213] By: jhi on 2001/07/08 14:24:44 + Log: Subject: [PATCH toke.c] Simplify yytoke() + From: Simon Cozens + Date: Sun, 8 Jul 2001 13:24:34 +0100 + Message-ID: <20010708132434.A9448@deep-dark-truthful-mirror> + + Split out pending_ident(). + Branch: perl + ! embed.h embed.pl pod/perlapi.pod proto.h toke.c + ____________________________________________________________________________ + [ 11212] By: jhi on 2001/07/08 14:17:10 + Log: (Retracted by #11223.) + Subject: [PATCH] Re: Problem with Safe.pm and Perl 5.004 + Date: Wed, 05 Nov 1997 17:22:34 -0600 + From: Graham Barr + Message-Id: <3460FFBA.6DA51F46@ti.com> + Branch: perl + ! cv.h ext/Opcode/Opcode.xs op.c pp_hot.c sv.h toke.c + ____________________________________________________________________________ + [ 11211] By: jhi on 2001/07/08 13:53:38 + Log: Fix I18N::Langinfo nits noticed but Philip Newton. + Branch: perl + ! ext/I18N/Langinfo/Langinfo.pm ext/I18N/Langinfo/Langinfo.t + ! pod/perllocale.pod + ____________________________________________________________________________ + [ 11210] By: jhi on 2001/07/08 01:34:09 + Log: Really do the test under the C locale. + Branch: perl + ! ext/I18N/Langinfo/Langinfo.t + ____________________________________________________________________________ + [ 11209] By: pudge on 2001/07/08 01:19:25 + Log: Small portability fix for Mac OS. + Branch: maint-5.6/macperl + ! lib/Cwd.pm + ____________________________________________________________________________ + [ 11208] By: jhi on 2001/07/08 01:14:58 + Log: Metaconfig unit change for #11207. + Branch: metaconfig/U/perl + ! Extensions.U + ____________________________________________________________________________ + [ 11207] By: jhi on 2001/07/08 01:14:02 + Log: Add I18N::Langinfo, which is basically a wrapper around + nl_langinfo(), which is an additional way to query locale + specific information. + Branch: perl + + ext/I18N/Langinfo/Langinfo.pm ext/I18N/Langinfo/Langinfo.t + + ext/I18N/Langinfo/Langinfo.xs ext/I18N/Langinfo/Makefile.PL + ! Configure MANIFEST pod/perl572delta.pod pod/perllocale.pod + ____________________________________________________________________________ + [ 11206] By: pudge on 2001/07/08 00:56:29 + Log: Bugfixes for some tests. commonsense.t not in perl 5.6, + used in File::Find tests; replace with if.t. + Branch: maint-5.6/macperl + ! t/lib/filefind-taint.t t/lib/filefind.t t/op/taint.t + ! t/pragma/warn/op + ____________________________________________________________________________ + [ 11205] By: pudge on 2001/07/07 23:55:56 + Log: Allow symbols in try_symbol() to begin with "_". + Branch: maint-5.6/macperl + ! makedef.pl + ____________________________________________________________________________ + [ 11204] By: pudge on 2001/07/07 23:53:37 + Log: Sync up the File::Find changes from the rewrite by + Thomas Wegner, et al. + Branch: maint-5.6/macperl + + t/lib/filefind-taint.t + ! lib/File/Find.pm t/lib/filefind.t + ____________________________________________________________________________ + [ 11203] By: pudge on 2001/07/07 23:43:06 + Log: Subject: [PATCHES] :t:pod: and :lib:Pod: stuff + From: Thomas Wegner + Date: Thu, 5 Jul 2001 20:31:25 +0200 + Message-Id: + Branch: maint-5.6/macperl + ! lib/Pod/Find.pm t/pod/find.t t/pod/testp2pt.pl + ____________________________________________________________________________ + [ 11202] By: pudge on 2001/07/07 23:38:36 + Log: Some more test portability fixes. + Branch: maint-5.6/macperl + ! t/lib/filecopy.t t/pragma/warn/pp_sys + ____________________________________________________________________________ + [ 11201] By: jhi on 2001/07/07 22:52:38 + Log: The #11200 removed wrong (non-existent) target. Duh. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 11200] By: jhi on 2001/07/07 22:44:14 + Log: Zap the lib/re.pm before creating it. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 11199] By: pudge on 2001/07/07 20:54:35 + Log: Another test. Please ignore. + Branch: maint-5.6/macperl + ! README.macos + ____________________________________________________________________________ + [ 11198] By: pudge on 2001/07/07 20:44:12 + Log: Portability fixes for a lot of tests, especially IO-related + tests, and warnings, and the harness script. + Branch: maint-5.6/macperl + ! t/harness t/io/argv.t t/io/dup.t t/io/fs.t t/io/inplace.t + ! t/io/iprefix.t t/io/open.t t/io/openpid.t t/lib/filepath.t + ! t/lib/findbin.t t/lib/io_dup.t t/lib/socket.t t/op/die_exit.t + ! t/op/misc.t t/op/read.t t/op/readdir.t t/op/runlevel.t + ! t/op/stat.t t/op/subst_wamp.t t/op/taint.t + ! t/pragma/diagnostics.t t/pragma/subs.t t/pragma/warn/doio + ! t/pragma/warn/mg t/pragma/warn/op t/pragma/warn/pp_sys + ! t/pragma/warnings.t + ____________________________________________________________________________ + [ 11197] By: jhi on 2001/07/07 20:32:28 + Log: Subject: [PATCH] lib/h2xs.t (was Re: [PATCH] h2xs) + From: Nicholas Clark + Date: Sat, 7 Jul 2001 21:00:17 +0100 + Message-ID: <20010707210017.H59620@plum.flirble.org> + Branch: perl + ! lib/h2xs.t + ____________________________________________________________________________ + [ 11196] By: jhi on 2001/07/07 20:26:36 + Log: The UNICOS/mk SysV IPC problem has been fixed. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11195] By: jhi on 2001/07/07 19:59:51 + Log: Slight update tweaks on perlunicode.pod. + Branch: perl + ! pod/perlunicode.pod + ____________________________________________________________________________ + [ 11194] By: jhi on 2001/07/07 17:53:03 + Log: Subject: Doc patch DB_File.pm: use umask-friendly modes + From: Mark-Jason Dominus + Date: Sat, 07 Jul 2001 13:04:04 -0400 + Message-ID: <20010707170404.32694.qmail@plover.com> + Branch: perl + ! ext/DB_File/DB_File.pm + ____________________________________________________________________________ + [ 11193] By: pudge on 2001/07/07 17:26:28 + Log: Fix up AutoLoader to fudge for Mac paths in import(). + Branch: maint-5.6/macperl + ! lib/AutoLoader.pm + ____________________________________________________________________________ + [ 11192] By: jhi on 2001/07/07 17:03:06 + Log: Try to force the lib/re.pm to be there before entering + the extensions builds, should help for parallel makes. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 11191] By: jhi on 2001/07/07 15:26:16 + Log: Subject: Re: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX + From: Norton Allen + Date: Fri, 6 Jul 2001 12:01:14 -0400 (edt) + Message-Id: <200107061601.MAA00597@bottesini.harvard.edu> + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 11190] By: jhi on 2001/07/07 15:22:08 + Log: Subject: [PATCH] Re: op/arith.t + From: Nicholas Clark + Date: Sat, 7 Jul 2001 13:04:54 +0100 + Message-ID: <20010707130454.D59620@plum.flirble.org> + Branch: perl + ! numeric.c toke.c + ____________________________________________________________________________ + [ 11189] By: jhi on 2001/07/07 15:20:44 + Log: Subject: [PATCH] h2xs + From: Nicholas Clark + Date: Fri, 6 Jul 2001 23:25:14 +0100 + Message-ID: <20010706232514.X59620@plum.flirble.org> + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 11188] By: jhi on 2001/07/07 15:12:36 + Log: Subject: Re: bleedperl perl_alloc..free leakage + From: Radu Greab + Date: Fri, 6 Jul 2001 19:48:54 +0300 + Message-ID: <15173.60406.308246.456184@ix.netsoft.ro> + + Leak-be-gone. + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 11187] By: pudge on 2001/07/07 02:11:36 + Log: Test again. Please ignore. + Branch: maint-5.6/macperl + ! README.macos + ____________________________________________________________________________ + [ 11186] By: pudge on 2001/07/07 02:08:13 + Log: Test. Please ignore. + Branch: maint-5.6/macperl + ! README.macos + ____________________________________________________________________________ + [ 11185] By: pudge on 2001/07/06 23:46:57 + Log: Include changes already sent in separately as patches, + before branch was created. + Branch: maint-5.6/macperl + ! ext/File/Glob/bsd_glob.c ext/IO/lib/IO/Dir.pm gv.c + ! lib/DirHandle.pm lib/File/Basename.pm lib/File/Copy.pm + ! lib/File/Find.pm lib/diagnostics.pm perl.c t/base/term.t + ! t/comp/cpp.t t/comp/multiline.t t/comp/script.t t/comp/term.t + ! t/lib/anydbm.t t/lib/autoloader.t t/lib/dirhand.t + ! t/lib/filefind.t t/lib/io_dir.t t/lib/selfloader.t + ! t/op/anonsub.t t/op/closure.t t/op/defins.t t/op/die_exit.t + ! t/op/exec.t t/op/goto.t t/op/misc.t t/op/pack.t t/op/regexp.t + ! t/op/regexp_noamp.t t/op/split.t t/op/write.t + ! t/pragma/strict.t + ____________________________________________________________________________ + [ 11184] By: jhi on 2001/07/06 16:41:30 + Log: Subject: [PATCH lib/Cwd.pm] QNX patch extended for NTO + From: Norton Allen + Date: Fri, 6 Jul 2001 09:39:57 -0400 (edt) + Message-Id: <200107061339.JAA12582@bottesini.harvard.edu> + Branch: perl + ! utf8.h + ____________________________________________________________________________ + [ 11183] By: nick on 2001/07/06 16:27:40 + Log: Integrate mainline + Branch: perlio + +> (branch 42 files) + - NetWare/perlsdio.h ext/util/mkbootstrap lib/Net/DummyInetd.pm + - lib/Net/PH.pm lib/Net/SNPP.pm lib/Net/t/ph.t + - win32/bin/mdelete.bat + !> (integrate 215 files) + ____________________________________________________________________________ + [ 11182] By: jhi on 2001/07/06 15:57:16 + Log: The #11166 needed also these updated. + Branch: perl + ! lib/warnings.pm warnings.h + ____________________________________________________________________________ + [ 11181] By: jhi on 2001/07/06 13:24:42 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11180] By: jhi on 2001/07/06 13:20:08 + Log: Regen toc. + Branch: perl + ! pod/perltoc.pod + ____________________________________________________________________________ + [ 11179] By: jhi on 2001/07/06 12:57:13 + Log: Nit from Abhijit. + Branch: perl + ! lib/CPAN.pm + ____________________________________________________________________________ + [ 11178] By: jhi on 2001/07/06 12:53:04 + Log: Retract #11172. + Branch: perl + ! t/op/method.t + ____________________________________________________________________________ + [ 11177] By: jhi on 2001/07/06 12:44:51 + Log: Subject: [PATCH lib/Cwd.pm] QNX patch extended for NTO + From: Norton Allen + Date: Fri, 6 Jul 2001 09:39:57 -0400 (edt) + Message-Id: <200107061339.JAA12582@bottesini.harvard.edu> + Branch: perl + ! lib/Cwd.pm + ____________________________________________________________________________ + [ 11176] By: jhi on 2001/07/06 12:42:45 + Log: (Accidentally empty check-in.) + Branch: perl + ! utf8.h + ____________________________________________________________________________ + [ 11175] By: jhi on 2001/07/06 12:29:56 + Log: Retract #11165 since Sarathy pointed out it'll not + work properly under threads, the problem should be + solved using "the savestack, either via SSNEW() or + using a newSVpv()+SAVEFREESV() combo." + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 11174] By: jhi on 2001/07/06 12:27:31 + Log: Retract #11125 since NI-S pointed out it'll not work in + cases where the extension has their own handcrafted INC + et alia. + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 11173] By: jhi on 2001/07/06 12:20:50 + Log: Subject: RE: [PATCH] -I and MakeMaker again + From: "Konovalov, Vadim Vladimirovich (Vadim)" + Date: Fri, 6 Jul 2001 09:18:29 +0200 + Message-ID: + Branch: perl + ! lib/ExtUtils/MM_NW5.pm lib/ExtUtils/MM_VMS.pm + ! lib/ExtUtils/MM_Win32.pm + ____________________________________________________________________________ + [ 11172] By: jhi on 2001/07/06 12:18:39 + Log: (Retracted by #11178) + Subject: [PATCH t/op/method.t] SUPER:: strangeness + From: Piers Cawley + Date: 06 Jul 2001 10:49:01 +0100 + Message-ID: + Branch: perl + ! t/op/method.t + ____________________________________________________________________________ + [ 11171] By: jhi on 2001/07/06 01:38:55 + Log: VOS README update from Paul Green. + Branch: perl + ! README.vos + ____________________________________________________________________________ + [ 11170] By: jhi on 2001/07/06 01:19:33 + Log: Subject: [PATCH README.qnx hints/qnx.sh] + From: Norton Allen + Message-Id: <200107051755.NAA21422@bottesini.harvard.edu> + Date: Thu, 5 Jul 2001 13:55:11 -0400 (edt) + Branch: perl + ! README.qnx hints/qnx.sh + ____________________________________________________________________________ + [ 11169] By: jhi on 2001/07/06 01:17:43 + Log: Subject: [PATCH] Doc patch for Tie::Hash + From: Artur Bergman + Date: Thu, 05 Jul 2001 22:51:18 +0200 + Message-ID: + Branch: perl + ! lib/Tie/Hash.pm + ____________________________________________________________________________ + [ 11168] By: jhi on 2001/07/06 01:16:27 + Log: Subject: [PATCH] perlfaq4.pod + From: "Liney, Dave" + Message-ID: <1BB544A41666D311836C00902751FF6D01FD2D07@LONEX02> + Date: Thu, 5 Jul 2001 18:44:10 +0100 + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 11167] By: jhi on 2001/07/06 01:14:41 + Log: Subject: [PATCH B::Deparse] Make warnings handling more robust + From: Robin Houston + Date: Thu, 5 Jul 2001 18:33:21 +0100 + Message-ID: <20010705183321.A27345@robin.kitsite.com> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 11166] By: jhi on 2001/07/06 01:11:50 + Log: (Retracted by #11285.) + + Subject: Re: [PATCH] mkdir() mode argument is missing initial 0 + From: Abhijit Menon-Sen + Date: Fri, 6 Jul 2001 01:26:32 +0530 + Message-ID: <20010706012632.A28327@lustre.dyn.wiw.org> + Branch: perl + ! dump.c op.c op.h opcode.h opcode.pl pod/perldiag.pod pp.sym + ! pp_proto.h t/lib/warnings/op t/lib/warnings/toke toke.c + ! warnings.pl + ____________________________________________________________________________ + [ 11165] By: jhi on 2001/07/06 00:19:26 + Log: (Retracted by #11175) + Subject: [PATCH ext/POSIX/POSIX.pm] Re: sigaction.t under QNX + From: Norton Allen + Message-Id: <200107051734.NAA13375@bottesini.harvard.edu> + Date: Thu, 5 Jul 2001 13:34:51 -0400 (edt) + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 11164] By: jhi on 2001/07/06 00:14:57 + Log: Unterminated C< (noticed by Richard Hatch), and few other + small Unicode doc tweaks. + Branch: perl + ! pod/perlretut.pod + ____________________________________________________________________________ + [ 11163] By: jhi on 2001/07/05 19:33:34 + Log: More flexible argument understanding; add charblocks() and + charscripts(); make charblock() and charscript() two-way; + add charinrange(); separate the $Unicode::UCD::VERSION and + the version of the Unicode by adding UnicodeVersion(). + Branch: perl + ! lib/Unicode/UCD.pm lib/Unicode/UCD.t + ____________________________________________________________________________ + [ 11162] By: jhi on 2001/07/05 13:38:36 + Log: Update Unicode::UCD on \p{In...}. + Branch: perl + ! lib/Unicode/UCD.pm + ____________________________________________________________________________ + [ 11161] By: jhi on 2001/07/05 13:26:00 + Log: Subject: Re: [PATCH lib/ExtUtils.t] Extra Files for QNX + From: Norton Allen + Date: Thu, 5 Jul 2001 09:57:14 -0400 (edt) + Message-Id: <200107051357.JAA06285@bottesini.harvard.edu> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 11160] By: jhi on 2001/07/05 13:06:53 + Log: POSIX-BC tweaks from Thomas Dorner. + Branch: perl + ! hints/posix-bc.sh perlio.h + ____________________________________________________________________________ + [ 11159] By: jhi on 2001/07/05 04:17:18 + Log: Module updates for the delta. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11158] By: jhi on 2001/07/05 03:45:19 + Log: Subject: [PATCH ext/IO/lib/IO/t/io_sock.t] for QNX + From: Norton Allen + Message-Id: <200107050259.WAA06843@bottesini.harvard.edu> + Date: Wed, 4 Jul 2001 22:59:00 -0400 (edt) + Branch: perl + ! ext/IO/lib/IO/t/io_sock.t + ____________________________________________________________________________ + [ 11157] By: jhi on 2001/07/05 03:44:19 + Log: Subject: [PATCH perldiag.pod] Quick fixes + From: Simon Cozens + Date: Wed, 4 Jul 2001 20:22:12 +0100 + Message-ID: <20010704202212.A3690@deep-dark-truthful-mirror> + Branch: perl + ! pod/perldiag.pod + ____________________________________________________________________________ + [ 11156] By: jhi on 2001/07/05 03:43:28 + Log: Subject: [PATCH perl@11099]Re: [ID 20010704.003] Taint mode breaks global match + From: Radu Greab + Date: Wed, 4 Jul 2001 22:13:31 +0300 + Message-ID: <15171.27355.895094.128142@ix.netsoft.ro> + Branch: perl + ! op.c sv.c t/op/pos.t + ____________________________________________________________________________ + [ 11155] By: jhi on 2001/07/05 03:40:24 + Log: Subject: [PATCH] -I and MakeMaker again + From: Michael G Schwern + Date: Wed, 4 Jul 2001 15:03:07 -0400 + Message-ID: <20010704150307.I20340@blackrider> + + (and retract #11145) + Branch: perl + ! ext/util/make_ext lib/ExtUtils/MM_Unix.pm + ! lib/ExtUtils/MakeMaker.pm + ____________________________________________________________________________ + [ 11154] By: jhi on 2001/07/05 03:32:43 + Log: Subject: Re: PERFORCE change 11142 for review + From: "Philip Newton" + Date: Wed, 4 Jul 2001 20:46:26 +0200 + Message-Id: <200107041841.VAA25380@taas.iki.fi> + Branch: perl + ! lib/ExtUtils/MakeMaker.pm + ____________________________________________________________________________ + [ 11153] By: jhi on 2001/07/05 03:29:21 + Log: Subject: Re: [PATCH 2 pl2pm.PL] (was Re: [PATCH pl2pm.PL] Make pl2pm be nice with 'strict' and 'warnings') + From: Jonathan Stowe + Date: Mon, 2 Jul 2001 20:45:53 +0100 (BST) + Message-ID: + Branch: perl + ! utils/pl2pm.PL + ____________________________________________________________________________ + [ 11152] By: gsar on 2001/07/05 00:52:57 + Log: fix the binary compatibility issue when building with/without + usemymalloc by exporting Perl_malloc() et al as simple wrappers + around the system functions (this allows most extensions built + using one mode to coexist with perls built in the other mode) + + XXX the Perl_mfree() wrapper might need to do return(free()) on + platforms where Free_t isn't "void" + Branch: perl + ! embed.h embed.pl makedef.pl proto.h util.c + ____________________________________________________________________________ + [ 11151] By: gsar on 2001/07/05 00:42:49 + Log: perl built with USE_ITHREADS can deadlock during fork() or backticks + since it doesn't ensure threads other than the one calling fork() + aren't holding any locks; the fix is to use pthread_atfork() to + hold global locks + + building perl with -Dusemymalloc exacerbates the problem since + Perl_malloc() holds a mutex, and perl's exec() calls New() + + XXX the code in win32thread.h may be needed on platforms that have + no pthread_atfork() + Branch: perl + ! perl.c thread.h win32/win32thread.h + ____________________________________________________________________________ + [ 11150] By: pudge on 2001/07/04 20:07:54 + Log: Integrate #11009 from maintperl. + Branch: maint-5.6/macperl + !> lib/ExtUtils/Manifest.pm + ____________________________________________________________________________ + [ 11149] By: pudge on 2001/07/04 19:54:46 + Log: Flexing my Perforce muscles. + Branch: maint-5.6/macperl + ! README.macos + ____________________________________________________________________________ + [ 11148] By: jhi on 2001/07/04 17:14:51 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11147] By: jhi on 2001/07/04 16:41:25 + Log: Metaconfig unit change for #11146. + Branch: metaconfig/U/perl + ! d_fcntl_can_lock.U + ____________________________________________________________________________ + [ 11146] By: jhi on 2001/07/04 16:36:31 + Log: Somehow the #ifdefs of the added code (in #11093) made + HP-UX to fail the fcntl locking test, without the ifdefs + the test seems to be working again. Reason unknown: + HP-UX cc doesn't complain either way. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 11145] By: jhi on 2001/07/04 16:08:00 + Log: (Retracted by #11155) PERLRUNINST needed in some spots. + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 11144] By: jhi on 2001/07/04 16:07:35 + Log: gcc -Wall nit. + Branch: perl + ! pp_hot.c + ____________________________________________________________________________ + [ 11143] By: jhi on 2001/07/04 15:08:26 + Log: When removing tests updating the test count is a good idea, too. + Branch: perl + ! lib/Net/t/require.t + ____________________________________________________________________________ + [ 11142] By: jhi on 2001/07/04 14:57:51 + Log: Document #11134 and add the new symbols to the list of + of MakeMaker known ones. + Branch: perl + ! lib/ExtUtils/MakeMaker.pm + ____________________________________________________________________________ + [ 11141] By: jhi on 2001/07/04 14:34:11 + Log: Microperl update. + Branch: perl + ! uconfig.h + ____________________________________________________________________________ + [ 11140] By: jhi on 2001/07/04 14:32:27 + Log: Update the libnet tests as per #11138. + Branch: perl + - lib/Net/t/ph.t + ! MANIFEST lib/Net/t/require.t + ____________________________________________________________________________ + [ 11139] By: jhi on 2001/07/04 14:14:33 + Log: Regen toc and modlib. + Branch: perl + ! pod/perlmodlib.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 11138] By: jhi on 2001/07/04 14:10:38 + Log: Remove DummyInetd, PH, and SNPP from the libnet, as per + Graham's request. + Branch: perl + - lib/Net/DummyInetd.pm lib/Net/PH.pm lib/Net/SNPP.pm + ! MANIFEST + ____________________________________________________________________________ + [ 11137] By: jhi on 2001/07/04 14:06:35 + Log: Add the OS/390 harness results to the delta. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11136] By: jhi on 2001/07/04 13:59:01 + Log: Avoid the two study tests in OS/390 until the bug has been solved. + Branch: perl + ! t/op/study.t + ____________________________________________________________________________ + [ 11135] By: jhi on 2001/07/04 13:49:08 + Log: DOS/DJGPP tweaks from Laszlo Molnar. + Branch: perl + ! AUTHORS djgpp/djgppsed.sh hints/dos_djgpp.sh t/op/write.t + ____________________________________________________________________________ + [ 11134] By: jhi on 2001/07/04 13:47:46 + Log: Subject: [PATCH lib/ExtUtils/MM_Unix.pm and others] Fixing extra -I's with PERL_CORE + From: Michael G Schwern + Date: Wed, 4 Jul 2001 00:01:16 -0400 + Message-ID: <20010704000116.C591@blackrider> + Branch: perl + ! ext/util/make_ext lib/ExtUtils.t lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 11133] By: jhi on 2001/07/04 01:55:20 + Log: The #11132 missed singleton characters (not part + of a unilo..unihi range) in Unicode scripts. + Branch: perl + ! lib/unicode/In/0.pl lib/unicode/In/1.pl lib/unicode/In/10.pl + ! lib/unicode/In/11.pl lib/unicode/In/12.pl lib/unicode/In/13.pl + ! lib/unicode/In/15.pl lib/unicode/In/16.pl lib/unicode/In/17.pl + ! lib/unicode/In/18.pl lib/unicode/In/19.pl lib/unicode/In/20.pl + ! lib/unicode/In/21.pl lib/unicode/In/24.pl lib/unicode/In/29.pl + ! lib/unicode/In/3.pl lib/unicode/In/30.pl lib/unicode/In/34.pl + ! lib/unicode/In/35.pl lib/unicode/In/37.pl lib/unicode/In/39.pl + ! lib/unicode/In/4.pl lib/unicode/In/5.pl lib/unicode/In/6.pl + ! lib/unicode/In/8.pl lib/unicode/In/9.pl lib/unicode/Scripts.pl + ! lib/unicode/mktables.PL t/op/pat.t + ____________________________________________________________________________ + [ 11132] By: jhi on 2001/07/04 01:32:11 + Log: Support preferentially the Unicode 'scripts' definition + in the \p{In...} notation since according to Unicode the + scripts concept is more natural for matching than using + the somewhat artificial block names. The block names are + still available, though, and if there's a name conflict, + the scripts one wins and the blocks one has to do with + 'Block' appended to its name. For more information see + + http://www.unicode.org/unicode/reports/tr24/ + Branch: perl + + lib/unicode/In/100.pl lib/unicode/In/101.pl + + lib/unicode/In/102.pl lib/unicode/In/103.pl + + lib/unicode/In/104.pl lib/unicode/In/105.pl + + lib/unicode/In/106.pl lib/unicode/In/107.pl + + lib/unicode/In/108.pl lib/unicode/In/109.pl + + lib/unicode/In/110.pl lib/unicode/In/111.pl + + lib/unicode/In/112.pl lib/unicode/In/113.pl + + lib/unicode/In/114.pl lib/unicode/In/115.pl + + lib/unicode/In/116.pl lib/unicode/In/117.pl + + lib/unicode/In/118.pl lib/unicode/In/119.pl + + lib/unicode/In/120.pl lib/unicode/In/121.pl + + lib/unicode/In/122.pl lib/unicode/In/123.pl + + lib/unicode/In/124.pl lib/unicode/In/125.pl + + lib/unicode/In/126.pl lib/unicode/In/127.pl + + lib/unicode/In/128.pl lib/unicode/In/129.pl + + lib/unicode/In/130.pl lib/unicode/In/131.pl + + lib/unicode/In/132.pl lib/unicode/In/133.pl + + lib/unicode/In/134.pl lib/unicode/In/135.pl + + lib/unicode/In/96.pl lib/unicode/In/97.pl lib/unicode/In/98.pl + + lib/unicode/In/99.pl lib/unicode/Scripts.pl + ! (edit 106 files) + ____________________________________________________________________________ + [ 11131] By: jhi on 2001/07/03 23:02:02 + Log: Better document the difference between a block and a script. + Branch: perl + ! lib/Unicode/UCD.pm + ____________________________________________________________________________ + [ 11130] By: jhi on 2001/07/03 22:49:15 + Log: Subject: [ perl 5.6.1 ] CPAN.pm doc patch + From: Elaine -HFB- Ashton + Date: Tue, 3 Jul 2001 15:04:23 -0500 + Message-ID: <20010703150423.C9787@chaos.wustl.edu> + Branch: perl + ! lib/CPAN.pm + ____________________________________________________________________________ + [ 11129] By: jhi on 2001/07/03 22:45:41 + Log: Add tests for charscript(). + Branch: perl + ! lib/Unicode/UCD.pm lib/Unicode/UCD.t + ____________________________________________________________________________ + [ 11128] By: jhi on 2001/07/03 20:41:54 + Log: Add charscript() to get the UTR#24 script names of characters. + Branch: perl + ! lib/Unicode/UCD.pm + ____________________________________________________________________________ + [ 11127] By: jhi on 2001/07/03 19:53:29 + Log: Todo updates. + Branch: perl + ! pod/perltodo.pod + ____________________________________________________________________________ + [ 11126] By: jhi on 2001/07/03 19:45:30 + Log: Unicode::UCD updates. + Branch: perl + ! lib/Unicode/UCD.pm + ____________________________________________________________________________ + [ 11125] By: jhi on 2001/07/03 16:12:20 + Log: (Retracted by #11174) + Subject: MakeMaker should pass through DEFINE and INC to subdirs + From: Alan Burlison + Date: Tue, 03 Jul 2001 15:20:13 +0100 + Message-ID: <3B41D49D.A923D4F9@sun.com> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 11124] By: jhi on 2001/07/03 16:06:53 + Log: Subject: Patch needed for UTS + From: hom00@utsglobal.com (Hal Morris) + Date: Tue, 3 Jul 2001 09:38:22 -0700 (PDT) + Message-Id: <200107031638.JAA11998@cepheus.utsglobal.com> + + Replace #11113 with a better version. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 11123] By: jhi on 2001/07/03 16:04:49 + Log: Subject: Re: POINTERRIGOR + From: Andy Dougherty + Date: Tue, 3 Jul 2001 11:49:28 -0400 (EDT) + Message-ID: + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 11122] By: jhi on 2001/07/03 16:03:31 + Log: Subject: Re: [PATCH @11016] Fixes compile errors in four files + From: "Philip Newton" + Date: Tue, 3 Jul 2001 17:03:34 +0200 + Message-ID: <3B41FAE6.29564.660E117@localhost> + Branch: perl + ! pp_hot.c + ____________________________________________________________________________ + [ 11121] By: jhi on 2001/07/03 13:26:08 + Log: Typos. + Branch: perl + ! INSTALL + ____________________________________________________________________________ + [ 11120] By: jhi on 2001/07/03 11:34:47 + Log: Subject: [PATCH 5.6.1] debugger fixes + From: Ilya Zakharevich + Date: Tue, 3 Jul 2001 03:38:18 -0400 + Message-ID: <20010703033818.A16788@math.ohio-state.edu> + + The $^S is working again. + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 11119] By: jhi on 2001/07/03 11:33:27 + Log: Subject: Re: [PATCH 5.6.1] OS/2 improvements + From: Ilya Zakharevich + Date: Tue, 3 Jul 2001 03:34:06 -0400 + Message-ID: <20010703033406.A16776@math.ohio-state.edu> + Branch: perl + ! os2/OS2/Process/Process.pm + ____________________________________________________________________________ + [ 11118] By: jhi on 2001/07/03 11:29:54 + Log: Subject: [PATCH bleadperl] Bad lishp in change 11084 + From: "Philip Newton" + Date: Tue, 3 Jul 2001 09:11:27 +0200 + Message-Id: <200107030706.KAA04596@taas.iki.fi> + Branch: perl + ! lib/FindBin.pm + ____________________________________________________________________________ + [ 11117] By: jhi on 2001/07/03 11:25:14 + Log: Delta delta. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11116] By: jhi on 2001/07/02 23:06:50 + Log: Metaconfig unit change for 11115. + Branch: metaconfig + ! U/modified/libc.U + ____________________________________________________________________________ + [ 11115] By: jhi on 2001/07/02 23:06:27 + Log: Whitespace allowed at the ends of /lib/syscalls.exp lines + (from Richard Hatch) (this was the cause of pipes() and + times() myeteriously not being found) + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 11114] By: jhi on 2001/07/02 22:58:41 + Log: Retract #10142, the real culprit found by Richard Hatch, + coming soon to Configure near you. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11113] By: jhi on 2001/07/02 22:56:09 + Log: (Replaced by #11124) UTS workaround from Hal Morris. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 11112] By: jhi on 2001/07/02 22:53:29 + Log: Subject: [PATCH] grok not grocking correctly + From: Nicholas Clark + Date: Tue, 3 Jul 2001 00:19:08 +0100 + Message-ID: <20010703001908.H59620@plum.flirble.org> + Branch: perl + ! numeric.c + ____________________________________________________________________________ + [ 11111] By: jhi on 2001/07/02 22:48:42 + Log: Subject: [PATCH Deparse.t] test just-posted patches + From: Robin Houston + Date: Mon, 2 Jul 2001 23:46:15 +0100 + Message-Id: + Branch: perl + ! ext/B/Deparse.t + ____________________________________________________________________________ + [ 11110] By: jhi on 2001/07/02 22:27:10 + Log: Subject: [PATCH toke.c] autosplit into @F + From: Robin Houston + Date: Mon, 2 Jul 2001 23:18:20 +0100 + Message-Id: + Branch: perl + ! perl.c toke.c + ____________________________________________________________________________ + [ 11109] By: jhi on 2001/07/02 22:25:03 + Log: Subject: [PATCH B::Deparse] hash key auto-quoting + From: Robin Houston + Date: Mon, 2 Jul 2001 23:00:48 +0100 + Message-Id: + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 11108] By: jhi on 2001/07/02 19:21:18 + Log: Subject: Re: [PATCH perlsnap] '-' !~ /\w/ + From: "Philip Newton" + Date: Mon, 2 Jul 2001 22:06:22 +0200 + (no Message-Id) + Branch: perl + ! ext/NDBM_File/hints/linux.pl + ____________________________________________________________________________ + [ 11107] By: jhi on 2001/07/02 19:19:25 + Log: Subject: Re: Fixed pack problem - sort of + From: Nicholas Clark + Date: Mon, 2 Jul 2001 20:59:20 +0100 + Message-ID: <20010702205919.F59620@plum.flirble.org> + Branch: perl + ! pp_pack.c t/op/pack.t + ____________________________________________________________________________ + [ 11106] By: jhi on 2001/07/02 19:18:28 + Log: Subject: Re: [PATCH 5.6.1] OS/2 cwd + From: Ilya Zakharevich + Date: Mon, 2 Jul 2001 15:45:41 -0400 + Message-ID: <20010702154541.B24295@math.ohio-state.edu> + Branch: perl + ! os2/os2.c + ____________________________________________________________________________ + [ 11105] By: jhi on 2001/07/02 19:17:27 + Log: (Mistaken retraction) + Branch: perl + ! utils/pl2pm.PL + ____________________________________________________________________________ + [ 11104] By: jhi on 2001/07/02 18:56:15 + Log: Detypo in #11103. + Branch: perl + ! utils/pl2pm.PL + ____________________________________________________________________________ + [ 11103] By: jhi on 2001/07/02 18:54:53 + Log: Subject: [PATCH 2 pl2pm.PL] (was Re: [PATCH pl2pm.PL] Make pl2pm be nice with 'strict' and 'warnings') + From: Jonathan Stowe + Date: Mon, 2 Jul 2001 19:17:21 +0100 (BST) + Message-ID: + Branch: perl + ! utils/pl2pm.PL + ____________________________________________________________________________ + [ 11102] By: jhi on 2001/07/02 18:16:09 + Log: Subject: [PATCH perl@11059] UCD.pm: if at first you don't succeed, croak? + From: "Craig A. Berry" + Date: Mon, 02 Jul 2001 14:11:23 -0500 + Message-Id: <5.1.0.14.0.20010702140058.01b6c9c0@exchi01> + Branch: perl + ! lib/Unicode/UCD.pm + ____________________________________________________________________________ + [ 11101] By: jhi on 2001/07/02 18:14:51 + Log: Subject: [PATCH] Re: op/numconvert.t failures + From: Nicholas Clark + Date: Mon, 2 Jul 2001 20:10:48 +0100 + Message-ID: <20010702201048.E59620@plum.flirble.org> + Branch: perl + ! t/op/numconvert.t + ____________________________________________________________________________ + [ 11100] By: jhi on 2001/07/02 17:51:44 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11099] By: jhi on 2001/07/02 17:46:31 + Log: Retract #11055, didn't help much (2736 bytes vs 2725 bytes leaked). + The real fix must be more involved. The line of code all the leaky + call stacks seem to go through is op.c:2949, the PmopSTASH_set() + line of Perl_newPMOP(). + Branch: perl + ! op.h + ____________________________________________________________________________ + [ 11098] By: jhi on 2001/07/02 17:37:44 + Log: Based on + + Subject: Re: sizeof(struct sembuf) + From: Nicholas Clark + Date: Sun, 1 Jul 2001 22:26:48 +0100 + Message-ID: <20010701222648.W59620@plum.flirble.org> + + but do semop() always the slow way. + Branch: perl + ! doio.c + ____________________________________________________________________________ + [ 11097] By: jhi on 2001/07/02 17:22:14 + Log: Subject: [PATCH] Encode/Tcl.t, for esc-seq encodings + From: SADAHIRO Tomoyuki + Date: Tue, 03 Jul 2001 00:56:30 +0900 + Message-Id: <20010703005600.2225.BQW10602@nifty.com> + Branch: perl + ! ext/Encode/Encode/Tcl.t + ____________________________________________________________________________ + [ 11096] By: jhi on 2001/07/02 17:11:24 + Log: Subject: [PATCH] Encode/Tcl.pm, continuous sequences + From: SADAHIRO Tomoyuki + Date: Tue, 03 Jul 2001 00:55:46 +0900 + Message-Id: <20010703005516.2222.BQW10602@nifty.com> + Branch: perl + ! ext/Encode/Encode/Tcl.pm + ____________________________________________________________________________ + [ 11095] By: jhi on 2001/07/02 17:07:14 + Log: Regen api and toc. + Branch: perl + ! pod/perlapi.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 11094] By: jhi on 2001/07/02 16:29:42 + Log: Metaconfig unit change for #11093. + Branch: metaconfig/U/perl + ! d_fcntl_can_lock.U + ____________________________________________________________________________ + [ 11093] By: jhi on 2001/07/02 16:28:56 + Log: The fcntl locking test may hang if NFS locking messed up; + break out with alarm(10). + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 11092] By: jhi on 2001/07/02 14:11:31 + Log: Move the mdelete.bat from win32/bin to win32. + Branch: perl + ! MANIFEST + ____________________________________________________________________________ + [ 11091] By: jhi on 2001/07/02 14:10:01 + Log: Typo in #11083. + Branch: perl + ! ext/Time/Piece/Piece.t + ____________________________________________________________________________ + [ 11090] By: jhi on 2001/07/02 13:36:58 + Log: Netware tweaks from Guruprasad. + Branch: perl + - NetWare/perlsdio.h + ! MANIFEST NetWare/Makefile NetWare/interface.c + ! NetWare/interface.h NetWare/iperlhost.h NetWare/nwtinfo.h + ! perlsdio.h + ____________________________________________________________________________ + [ 11089] By: jhi on 2001/07/02 13:25:40 + Log: Subject: Re: [PATH] shared -> unique; + From: Abhijit Menon-Sen + Date: Wed, 27 Jun 2001 03:51:27 +0530 + Message-ID: <20010627035127.A17623@lustre.lustre.dyn.wiw.org> + Branch: perl + ! dump.c gv.c gv.h op.c pp_sys.c sv.c toke.c xsutils.c + ____________________________________________________________________________ + [ 11088] By: jhi on 2001/07/02 13:24:27 + Log: Subject: Re: AIX / gcc-3.0 + From: "H.Merijn Brand" + Date: Mon, 02 Jul 2001 15:20:21 +0200 + Message-Id: <20010702151904.49BB.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11087] By: jhi on 2001/07/02 13:23:21 + Log: Subject: Re: Bug report: split splits on wrong pattern + From: Abhijit Menon-Sen + Message-ID: <20010702163133.A23186@lustre.dyn.wiw.org> + Date: Mon, 2 Jul 2001 16:31:33 +0530 + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 11086] By: jhi on 2001/07/02 13:22:30 + Log: Subject: [PATCH 5.6.1] test harness + From: Ilya Zakharevich + Date: Mon, 2 Jul 2001 06:29:21 -0400 + Message-ID: <20010702062921.A1810@math.ohio-state.edu> + Branch: perl + ! lib/Test/Harness.pm + ____________________________________________________________________________ + [ 11085] By: jhi on 2001/07/02 13:21:39 + Log: Subject: [PATCH 5.6.1] debugger goof + From: Ilya Zakharevich + Date: Mon, 2 Jul 2001 06:27:22 -0400 + Message-ID: <20010702062722.A1746@math.ohio-state.edu> + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 11084] By: jhi on 2001/07/02 13:20:50 + Log: Subject: [PATCH 5.6.1] OS/2 cwd + From: Ilya Zakharevich + Date: Mon, 2 Jul 2001 06:21:17 -0400 + Message-ID: <20010702062117.A1401@math.ohio-state.edu> + Branch: perl + ! lib/Cwd.pm lib/File/Find/taint.t lib/FindBin.pm os2/os2.c + ____________________________________________________________________________ + [ 11083] By: jhi on 2001/07/02 13:19:18 + Log: Make #11082 more OS/2-specific. + Branch: perl + ! ext/Time/Piece/Piece.t + ____________________________________________________________________________ + [ 11082] By: jhi on 2001/07/02 13:14:36 + Log: Subject: [PATCH 5.6.1] OS/2 gmtime() + From: Ilya Zakharevich + Date: Mon, 2 Jul 2001 06:06:34 -0400 + Message-ID: <20010702060634.A1356@math.ohio-state.edu> + Branch: perl + ! ext/Time/Piece/Piece.t + ____________________________________________________________________________ + [ 11081] By: jhi on 2001/07/02 13:13:08 + Log: Subject: [PATCH B::Deparse] version number & changes + From: Robin Houston + Date: Sun, 1 Jul 2001 17:17:29 +0100 + Message-ID: <20010701171729.A30678@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 11080] By: jhi on 2001/07/02 13:11:48 + Log: Subject: a small fix. + From: "Konovalov, Vadim Vladimirovich (Vadim)" + Date: Mon, 2 Jul 2001 12:17:53 +0200 + Message-ID: + Branch: perl + ! ext/Thread/Thread.xs + ____________________________________________________________________________ + [ 11079] By: jhi on 2001/07/02 13:10:39 + Log: Subject: RE: perl@10907 + From: "Konovalov, Vadim Vladimirovich (Vadim)" + Date: Mon, 2 Jul 2001 12:06:16 +0200 + Message-ID: + + Borland C vs PerlIO. + Branch: perl + ! win32/config.bc win32/config_H.bc + ____________________________________________________________________________ + [ 11078] By: jhi on 2001/07/02 13:03:44 + Log: Subject: [PATCH] Report /pro/3gl/CPAN/perl-5.7.1 + From: "H.M. Brand" + Date: Mon, 02 Jul 2001 11:18:57 +0200 + Message-Id: <20010702100811.4999.MERIJN@l1.procura.nl> + Branch: perl + ! t/op/write.t + ____________________________________________________________________________ + [ 11077] By: jhi on 2001/07/02 12:58:27 + Log: Subject: [PATCH] Deleting ext/util/mkbootstrap + From: Michael G Schwern + Date: Mon, 2 Jul 2001 00:26:24 -0400 + Message-ID: <20010702002624.A18302@blackrider> + Branch: perl + - ext/util/mkbootstrap + ____________________________________________________________________________ + [ 11076] By: jhi on 2001/07/02 12:56:20 + Log: Subject: [PATCH op.h] v minor comment tweak + From: Robin Houston + Date: Mon, 2 Jul 2001 00:42:01 +0100 + Message-Id: + Branch: perl + ! op.h + ____________________________________________________________________________ + [ 11075] By: jhi on 2001/07/02 12:53:48 + Log: SysV IPC semops use native shorts, not forced-to-16-bit-shorts. + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 11074] By: jhi on 2001/07/02 12:52:28 + Log: Subject: Re: sizeof(struct sembuf) + From: Nicholas Clark + Date: Sun, 1 Jul 2001 19:23:16 +0100 + Message-ID: <20010701192316.V59620@plum.flirble.org> + + s/signaling/signalling/ + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 11073] By: jhi on 2001/07/02 12:49:51 + Log: Subject: [PATCH perlsnap] Suggestion for mnemonic for $^N + From: "Philip Newton" + Date: Sun, 1 Jul 2001 09:37:56 +0200 + Message-Id: <200107010733.KAA03920@taas.iki.fi> + Branch: perl + ! pod/perlvar.pod + ____________________________________________________________________________ + [ 11072] By: jhi on 2001/07/02 12:48:03 + Log: Subject: [PATCH perlsnap] /^qnx|nto$/ --> /^(?:qnx|nto)$/ + From: "Philip Newton" + Date: Sun, 1 Jul 2001 09:37:56 +0200 + Message-Id: <200107010733.KAA03925@taas.iki.fi> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm lib/File/Spec/Unix.pm + ____________________________________________________________________________ + [ 11071] By: jhi on 2001/07/02 12:45:12 + Log: Metaconfig unit change for #11070. + Branch: metaconfig + ! U/compline/randfunc.U + ____________________________________________________________________________ + [ 11070] By: jhi on 2001/07/02 12:43:58 + Log: Subject: [PATCH perlsnap] its --> it's --> its + From: "Philip Newton" + Date: Sun, 1 Jul 2001 09:37:56 +0200 + Message-Id: <200107010733.KAA03914@taas.iki.fi> + Branch: perl + ! Porting/config_H + ____________________________________________________________________________ + [ 11069] By: jhi on 2001/07/02 12:01:52 + Log: Sync with Sarathy; integrate with perlio. + Branch: perl + !> gv.c + ____________________________________________________________________________ + [ 11068] By: gsar on 2001/07/02 08:07:54 + Log: regenerate win32/config_H.?c files + Branch: perl + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 11067] By: gsar on 2001/07/02 08:03:55 + Log: rename s/sv_getcwd/getcwd_sv/ for better conformance to existing + naming discipline + + win32 fix: enable getcwd_sv() to work on windows (POSIX.t was failing + because of this) + + fix a warning about "fd" being used without being set in Cwd.xs + Branch: perl + ! embed.h embed.pl ext/Cwd/Cwd.xs ext/POSIX/POSIX.t + ! ext/POSIX/POSIX.xs global.sym objXSUB.h perlapi.c + ! pod/perlapi.pod proto.h util.c win32/config.bc win32/config.gc + ! win32/config.vc + ____________________________________________________________________________ + [ 11066] By: gsar on 2001/07/02 07:12:10 + Log: win32 fixes: fix various syntax errors ("no preprocessor directives + within macro arguments") and warnings ("unary minus applied to + unsigned type", among others) + Branch: perl + ! gv.c hv.c op.c pp.c sv.c toke.c + ____________________________________________________________________________ + [ 11065] By: gsar on 2001/07/02 06:26:22 + Log: win32 fixes: more spurious CRs + Branch: perl + ! win32/mdelete.bat + ____________________________________________________________________________ + [ 11064] By: gsar on 2001/07/02 06:25:22 + Log: win32 tweaks: remove extra CRs from makefile.mk; move mdelete.bat + from win32/bin (or it gets deleted by distclean); don't delete + lib/Cwd.pm during distclean; mdelete.bat doesn't work properly on + NT (should be made Win9x specific, and added to makefile.mk) + Branch: perl + +> win32/mdelete.bat + - win32/bin/mdelete.bat + ! win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 11063] By: nick on 2001/07/01 18:54:09 + Log: Quick for for #ifdef mess + Branch: perlio + ! gv.c + ____________________________________________________________________________ + [ 11062] By: nick on 2001/07/01 18:47:42 + Log: Raw integrate - does not build #if mess in gv.c + Branch: perlio + !> (integrate 29 files) + ____________________________________________________________________________ + [ 11061] By: jhi on 2001/07/01 15:20:38 + Log: Make 'compile' target a little less broken. + Still very broken, though: -Wall warnings from + the generated code, boot_Foo prototypes missing, + can't autoload Fcntl::SEEK_CUR et alia, ... + Branch: perl + ! ext/B/B/C.pm pod/Makefile.SH t/TEST utils/Makefile + ! utils/perlcc.PL x2p/Makefile.SH + ____________________________________________________________________________ + [ 11060] By: jhi on 2001/07/01 14:04:20 + Log: Upgrade to Storable 1.0.12, from Raphael Manfredi. + Branch: perl + ! ext/Storable/ChangeLog ext/Storable/Storable.pm + ! ext/Storable/Storable.xs ext/Storable/t/freeze.t + ____________________________________________________________________________ + [ 11059] By: jhi on 2001/07/01 05:02:59 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11058] By: jhi on 2001/07/01 04:57:05 + Log: Still one typo, regen toc. + Branch: perl + ! lib/Unicode/UCD.pm pod/perltoc.pod + ____________________________________________________________________________ + [ 11057] By: jhi on 2001/07/01 04:54:35 + Log: Detypos and regen toc. + Branch: perl + ! README.os2 lib/Unicode/UCD.pm pod/perltoc.pod + ____________________________________________________________________________ + [ 11056] By: jhi on 2001/07/01 04:26:08 + Log: VERSION tweak. + Branch: perl + ! ext/List/Util/lib/List/Util.pm + ____________________________________________________________________________ + [ 11055] By: jhi on 2001/06/30 22:18:37 + Log: Attempt at plugging the leak under ithreads detected by Doug. + Branch: perl + ! op.h + ____________________________________________________________________________ + [ 11054] By: jhi on 2001/06/30 21:33:29 + Log: gcc -Wall lint after #11051. + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 11053] By: jhi on 2001/06/30 21:13:55 + Log: Integrate perlio. + Branch: perl + !> lib/File/Find/taint.t + ____________________________________________________________________________ + [ 11052] By: jhi on 2001/06/30 21:07:38 + Log: Don't use the v-strings for module VERSIONs. + Branch: perl + ! lib/Unicode/UCD.pm + ____________________________________________________________________________ + [ 11051] By: jhi on 2001/06/30 20:59:57 + Log: Code cleanup based on turning off the -woffs in IRIX. + Not all of the gripes cleaned up (hairy code in hv.c and + regcomp.c; unused newsp, gimme, and optype from cop.h macros; + unused 'key' arguments in ?DBM_File.xs) (and the -woffs left + to the IRIX hints) + Branch: perl + ! ext/DB_File/DB_File.xs ext/Data/Dumper/Dumper.xs + ! ext/IPC/SysV/SysV.xs ext/List/Util/Util.xs + ! ext/PerlIO/Scalar/Scalar.xs gv.c mg.c op.c perlio.c pp_sys.c + ! regcomp.c sv.c + ____________________________________________________________________________ + [ 11050] By: nick on 2001/06/30 20:46:46 + Log: Jeffrey Friedl's fix for lib/File/Find/taint.t + Branch: perlio + ! lib/File/Find/taint.t + ____________________________________________________________________________ + [ 11049] By: nick on 2001/06/30 18:13:33 + Log: Integrate mainline + Branch: perlio + +> NetWare/nwstdio.h NetWare/perlsdio.h + +> ext/Encode/Encode/7bit-jis.enc ext/Encode/Encode/7bit-kana.enc + +> ext/Encode/Encode/7bit-kr.enc lib/Unicode/UCD.pm + +> lib/Unicode/UCD.t t/run/exit.t + !> (integrate 60 files) + ____________________________________________________________________________ + [ 11048] By: jhi on 2001/06/30 16:23:39 + Log: Delta delta. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11047] By: jhi on 2001/06/30 16:03:40 + Log: More VERSION tuning: to avoid unnecessary Perl upgrades + by CPAN.pm, use rather _00. + Branch: perl + ! ext/Errno/Errno_pm.PL ext/IO/lib/IO/Dir.pm + ! ext/IO/lib/IO/Handle.pm ext/IO/lib/IO/Seekable.pm + ! ext/IO/lib/IO/Socket/UNIX.pm ext/IPC/SysV/Msg.pm + ! ext/IPC/SysV/Semaphore.pm ext/IPC/SysV/SysV.pm + ! ext/Time/HiRes/HiRes.pm lib/CGI/Pretty.pm lib/CPAN/Nox.pm + ! lib/ExtUtils/Embed.pm lib/Test.pm + ____________________________________________________________________________ + [ 11046] By: jhi on 2001/06/30 15:53:22 + Log: Add a simple Unicode character database interface, Unicode::UCD. + Branch: perl + + lib/Unicode/UCD.pm lib/Unicode/UCD.t + ! MANIFEST + ____________________________________________________________________________ + [ 11045] By: jhi on 2001/06/30 13:42:37 + Log: Subject: [PATCH] op/numconver.t + From: Nicholas Clark + Date: Sat, 30 Jun 2001 15:40:10 +0100 + Message-ID: <20010630154010.I59620@plum.flirble.org> + Branch: perl + ! t/op/numconvert.t + ____________________________________________________________________________ + [ 11044] By: jhi on 2001/06/30 13:29:25 + Log: The $^N is now taken (by #11038). + Branch: perl + ! t/base/lex.t + ____________________________________________________________________________ + [ 11043] By: jhi on 2001/06/30 13:15:59 + Log: The #11040 had slipped to a wrong function... + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 11042] By: jhi on 2001/06/30 13:08:25 + Log: In 64-bit AIX 5L (oslevel 5.1.0.0, ccversion 5.0.2.0) + the Configure library symbol probe mysteriously finds all + symbols but those of pipe() and times(). + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11041] By: jhi on 2001/06/30 13:01:25 + Log: Subject: [PATCH] (was Re: not OK: perl@11006 on HP-UX B.11.00) + From: Nicholas Clark + Date: Fri, 29 Jun 2001 23:49:07 +0100 + Message-ID: <20010629234907.D59620@plum.flirble.org> + Branch: perl + ! lib/ExtUtils.t + ____________________________________________________________________________ + [ 11040] By: jhi on 2001/06/30 13:00:24 + Log: Subject: [PATCH] weakref fix 2, not yet there + From: Artur Bergman + Date: Sat, 30 Jun 2001 01:18:16 +0200 + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 11039] By: jhi on 2001/06/30 12:59:25 + Log: Subject: [PATCH t/run/exit.t] Another shot at testing exit codes. + From: Michael G Schwern + Date: Fri, 29 Jun 2001 19:39:11 -0400 + Message-ID: <20010629193910.D25304@blackrider> + Branch: perl + + t/run/exit.t + ! MANIFEST + ____________________________________________________________________________ + [ 11038] By: jhi on 2001/06/30 12:58:16 + Log: Add support for $^N, the most-recently closed group. + Branch: perl + ! embedvar.h gv.c mg.c perlapi.h pod/perlretut.pod + ! pod/perltoc.pod pod/perlvar.pod regexec.c regexp.h t/op/pat.t + ! thrdvar.h + ____________________________________________________________________________ + [ 11037] By: jhi on 2001/06/30 12:53:40 + Log: Subject: [ID 20010630.001] Editorial nits in README.solaris + From: lvirden@cas.org + Date: Sat, 30 Jun 2001 04:12:36 -0400 (EDT) + Message-Id: <200106300812.f5U8CaG10447@lwv26awu.cas.org> + + Subject: [ID 20010630.002] Another editorial tweak to README.solaris + From: lvirden@cas.org + Date: Sat, 30 Jun 2001 04:17:55 -0400 (EDT) + Message-Id: <200106300817.f5U8HtN10626@lwv26awu.cas.org> + Branch: perl + ! README.solaris + ____________________________________________________________________________ + [ 11036] By: jhi on 2001/06/30 12:51:45 + Log: Subject: [PATCH] Encode.pm to use escape-sequence encoding + From: SADAHIRO Tomoyuki + Date: Sat, 30 Jun 2001 07:33:37 +0900 + Message-Id: <20010630073226.7C79.BQW10602@nifty.com> + + Subject: Re: [PATCH] Encode.pm to use escape-sequence encoding + From: SADAHIRO Tomoyuki + Date: Sat, 30 Jun 2001 21:38:14 +0900 + Message-Id: <20010630213554.F67A.BQW10602@nifty.com> + Branch: perl + + ext/Encode/Encode/7bit-jis.enc ext/Encode/Encode/7bit-kana.enc + + ext/Encode/Encode/7bit-kr.enc + ! MANIFEST ext/Encode/Encode/Tcl.pm + ____________________________________________________________________________ + [ 11035] By: jhi on 2001/06/30 12:44:51 + Log: NetWare tweaks from Guruprasad. + Branch: perl + + NetWare/nwstdio.h NetWare/perlsdio.h + ! MANIFEST NetWare/Makefile NetWare/config.wc + ! NetWare/config_H.wc NetWare/nwperlsys.c NetWare/nwperlsys.h + ! NetWare/t/Readme.txt + ____________________________________________________________________________ + [ 11034] By: jhi on 2001/06/29 23:28:16 + Log: More module $VERSION bump-ups. + Branch: perl + ! ext/Devel/Peek/Peek.pm lib/ExtUtils/Embed.pm + ! lib/ExtUtils/Liblist.pm lib/ExtUtils/Manifest.pm + ! lib/ExtUtils/Mksymlists.pm lib/IPC/Open3.pm + ____________________________________________________________________________ + [ 11033] By: jhi on 2001/06/29 21:25:23 + Log: Doc update due to #11032. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11032] By: jhi on 2001/06/29 21:19:44 + Log: Subject: [PATCH: perl@11006] s/div/lib\$ediv/ in Time::HiRes for VAX + From: Peter Prymmer + Date: Fri, 29 Jun 2001 14:02:16 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/Time/HiRes/HiRes.xs + ____________________________________________________________________________ + [ 11031] By: jhi on 2001/06/29 14:31:53 + Log: -lpthreads missing in AIX. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11030] By: jhi on 2001/06/29 14:08:12 + Log: Subject: [PATCH] CLONE && weakrefs + From: Artur Bergman + Date: Fri, 29 Jun 2001 17:02:00 +0200 + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 11029] By: jhi on 2001/06/29 14:06:50 + Log: Subject: Re: Bug report: split splits on wrong pattern + From: Radu Greab + Date: Wed, 27 Jun 2001 21:50:52 +0300 + Message-ID: <15162.11020.279064.471031@ix.netsoft.ro> + Branch: perl + ! pp_ctl.c t/op/split.t + ____________________________________________________________________________ + [ 11028] By: jhi on 2001/06/29 13:47:38 + Log: Metaconfig unit change for #11027. + Branch: metaconfig/U/perl + ! d_modfl.U + ____________________________________________________________________________ + [ 11027] By: jhi on 2001/06/29 13:47:03 + Log: I thought this Configure glitch for AIX was just recently fixed? + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 11026] By: jhi on 2001/06/29 13:14:07 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11025] By: jhi on 2001/06/29 13:07:57 + Log: Subject: Re: perl@10967, File::Find, and Cwd + From: Mike Guy + Date: Fri, 29 Jun 2001 14:56:49 +0100 + Message-Id: + Branch: perl + ! lib/File/Find/taint.t + ____________________________________________________________________________ + [ 11024] By: jhi on 2001/06/29 12:39:23 + Log: Update the sv_pvprintify() spec. + Branch: perl + ! pod/perltodo.pod + ____________________________________________________________________________ + [ 11023] By: jhi on 2001/06/29 12:33:33 + Log: Known test failures update. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 11022] By: jhi on 2001/06/29 12:24:32 + Log: Based on + + Subject: [PATCH @11016] More );) fixes + From: Richard Soderberg + Date: Fri, 29 Jun 2001 04:09:24 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/Thread/Thread.xs ext/Thread/typemap + ____________________________________________________________________________ + [ 11021] By: jhi on 2001/06/29 12:21:51 + Log: Subject: [PATCH @11016] Fixes compile errors in four files + From: Richard Soderberg + Date: Fri, 29 Jun 2001 03:35:11 -0700 (PDT) + Message-ID: + Branch: perl + ! mg.c pp.c pp_hot.c util.c + ____________________________________________________________________________ + [ 11020] By: jhi on 2001/06/29 12:05:54 + Log: AIX hints tweaking continues, from Merijn Brand. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11019] By: jhi on 2001/06/29 12:05:10 + Log: HP-UX needs gccversion sooner, from Merijn Brand. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 11018] By: jhi on 2001/06/29 11:52:31 + Log: Subject: [PATCH 5.6.1] OS/2 docs + From: Ilya Zakharevich + Date: Fri, 29 Jun 2001 02:34:12 -0400 + Message-ID: <20010629023412.A6033@math.ohio-state.edu> + Branch: perl + ! README.os2 os2/Changes + ____________________________________________________________________________ + [ 11017] By: nick on 2001/06/29 10:20:30 + Log: Integrate mainline + Branch: perlio + +> (branch 37 files) + - ext/ODBM_File/sdbm.t + !> (integrate 211 files) + ____________________________________________________________________________ + [ 11016] By: jhi on 2001/06/29 03:38:56 + Log: Bump up the VERSIONs of modules that have changed since 5.6.0, + the modules found using a script written by Larry Schatzer Jr. + Branch: perl + ! ext/IO/lib/IO/Dir.pm ext/IO/lib/IO/Handle.pm + ! ext/IO/lib/IO/Seekable.pm ext/IO/lib/IO/Select.pm + ! ext/IO/lib/IO/Socket/INET.pm ext/IO/lib/IO/Socket/UNIX.pm + ! ext/IPC/SysV/Msg.pm ext/IPC/SysV/Semaphore.pm + ! ext/IPC/SysV/SysV.pm ext/Opcode/Opcode.pm ext/Opcode/Safe.pm + ! ext/Thread/Thread.pm ext/attrs/attrs.pm ext/re/re.pm + ! lib/AutoSplit.pm lib/Benchmark.pm lib/CGI/Pretty.pm + ! lib/CPAN/Nox.pm lib/Exporter.pm lib/ExtUtils/Command.pm + ! lib/ExtUtils/MakeMaker.pm lib/ExtUtils/Packlist.pm + ! lib/File/Compare.pm lib/FileHandle.pm lib/Math/Complex.pm + ! lib/Math/Trig.pm lib/Pod/Html.pm lib/Symbol.pm + ! lib/Text/ParseWords.pm lib/Text/Soundex.pm lib/Text/Tabs.pm + ! lib/Tie/Array.pm lib/attributes.pm lib/autouse.pm lib/base.pm + ! lib/constant.pm lib/fields.pm lib/strict.pm + ____________________________________________________________________________ + [ 11015] By: jhi on 2001/06/29 02:55:58 + Log: The latest JPL from the anoncvs. + Branch: perl + ! jpl/JNI/JNI.pm jpl/JNI/JNI.xs jpl/JNI/Makefile.PL + ____________________________________________________________________________ + [ 11014] By: jhi on 2001/06/29 02:16:55 + Log: In EBCDIC assume UTF-EBCDIC, not UTF-8. + Branch: perl + ! t/op/pat.t + ____________________________________________________________________________ + [ 11013] By: jhi on 2001/06/28 23:14:53 + Log: Worrying about insecure directories now is a bit too late. + Branch: perl + ! lib/File/Find/taint.t + ____________________________________________________________________________ + [ 11012] By: jhi on 2001/06/28 21:36:36 + Log: Cannot DIE() in a void function, + from Richard Hatch . + Branch: perl + ! ext/IPC/SysV/SysV.xs + ____________________________________________________________________________ + [ 11011] By: jhi on 2001/06/28 19:32:13 + Log: Subject: [PATCH: perl@11006] s/qdiv/div/ in Time::HiRes for VAX + From: Peter Prymmer + Date: Thu, 28 Jun 2001 13:00:18 -0700 (PDT) + Message-ID: + + (unfinished: time/hires tests 3, 5, 14 failing, but better + than wholesale failure) + Branch: perl + ! ext/Time/HiRes/HiRes.xs + ____________________________________________________________________________ + [ 11010] By: jhi on 2001/06/28 19:10:54 + Log: Subject: [PATCH 5.6.1] OS/2 improvements + From: Ilya Zakharevich + Date: Thu, 28 Jun 2001 16:03:14 -0400 + Message-ID: <20010628160314.A17906@math.ohio-state.edu> + Branch: perl + + os2/os2_base.t + ! MANIFEST hints/os2.sh makedef.pl os2/OS2/PrfDB/PrfDB.xs + ! os2/OS2/Process/Process.pm os2/OS2/Process/Process.xs + ! os2/OS2/REXX/REXX.xs os2/dl_os2.c os2/dlfcn.h os2/os2.c + ! os2/os2ish.h + ____________________________________________________________________________ + [ 11009] By: jhi on 2001/06/28 18:54:14 + Log: Subject: Incrementing Extutils::Manifest's $VERSION + From: Michael G Schwern + Date: Thu, 28 Jun 2001 13:13:49 -0400 + Message-ID: <20010628131349.A14738@blackrider> + Branch: maint-5.6/perl + ! lib/ExtUtils/Manifest.pm + ____________________________________________________________________________ + [ 11008] By: jhi on 2001/06/28 18:52:20 + Log: AIX tweak from Merijn Brand. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11007] By: jhi on 2001/06/28 17:46:27 + Log: Create the macperl branch. + Branch: maint-5.6/macperl + +> (branch 1728 files) + ____________________________________________________________________________ + [ 11006] By: jhi on 2001/06/28 14:46:21 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 11005] By: jhi on 2001/06/28 14:40:11 + Log: More Perforce lore. + Branch: perl + ! Porting/repository.pod + ____________________________________________________________________________ + [ 11004] By: jhi on 2001/06/28 14:12:50 + Log: Metaconfig unit changes for #11003. + Branch: metaconfig/U/perl + + d_nl_langinfo.U i_langinfo.U + ____________________________________________________________________________ + [ 11003] By: jhi on 2001/06/28 14:12:27 + Log: Add Configure probes for nl_langinfo() and . + Expected not to exist in non-UNIX excepting in VMS, where + according to a quick web survey they just might. + Branch: perl + ! Configure NetWare/config.wc Porting/Glossary Porting/config.sh + ! Porting/config_H config_h.SH configure.com epoc/config.sh + ! perl.h uconfig.h uconfig.sh vos/config.alpha.def + ! vos/config.alpha.h vos/config.ga.def vos/config.ga.h + ! win32/config.bc win32/config.gc win32/config.vc + ____________________________________________________________________________ + [ 11002] By: jhi on 2001/06/28 13:39:11 + Log: One shouldn't use XBS5_ILP32_OFFBIG_CFLAGS et alia + in AIX is one is doing a 64-bit build. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 11001] By: jhi on 2001/06/28 13:28:37 + Log: Metaconfig unit changes for #11000. + Branch: metaconfig/U/perl + ! use64bits.U uselfs.U + ____________________________________________________________________________ + [ 11000] By: jhi on 2001/06/28 13:21:16 + Log: Move use64bitint and use64bitall before uselargefiles. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10999] By: jhi on 2001/06/28 03:49:07 + Log: Subject: [ID 20010625.009] open(FILE,"+foo") [PATCH] + From: Robert Spier + Message-ID: <15162.41164.618712.841415@rls.cx> + Date: Wed, 27 Jun 2001 23:13:16 -0400 + Branch: perl + ! doio.c + ____________________________________________________________________________ + [ 10998] By: jhi on 2001/06/28 03:42:57 + Log: Subject: [PATCH: perl@10996] avoid overflow in numeric.c:S_mulexp10() on VAX + From: Peter Prymmer + Date: Wed, 27 Jun 2001 19:25:49 -0700 (PDT) + Message-ID: + Branch: perl + ! numeric.c + ____________________________________________________________________________ + [ 10997] By: jhi on 2001/06/28 03:42:12 + Log: Subject: [patch perl@10996] "fix" VAX Digest/MD5, Fcntl, brokennes in SDBM + From: Peter Prymmer + Date: Wed, 27 Jun 2001 17:33:33 -0700 (PDT) + Message-ID: + Branch: perl + ! configure.com ext/Digest/MD5/Makefile.PL + ____________________________________________________________________________ + [ 10996] By: jhi on 2001/06/27 20:34:11 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10995] By: jhi on 2001/06/27 20:06:28 + Log: Tiny EPOC updates. + Branch: perl + ! epoc/config.sh + ____________________________________________________________________________ + [ 10994] By: jhi on 2001/06/27 19:55:16 + Log: The Test::More and Test::Simple tests required help + thanks to our schizophrenic test scheme. + Branch: perl + ! lib/Test/More/t/fail-like.t lib/Test/More/t/fail.t + ! lib/Test/More/t/plan_is_noplan.t lib/Test/More/t/skipall.t + ! lib/Test/Simple/t/exit.t lib/Test/Simple/t/extra.t + ! lib/Test/Simple/t/fail.t lib/Test/Simple/t/missing.t + ! lib/Test/Simple/t/no_plan.t lib/Test/Simple/t/plan_is_noplan.t + ____________________________________________________________________________ + [ 10993] By: jhi on 2001/06/27 17:17:30 + Log: Upgrade to Test::Simple 0.09. + Branch: perl + + lib/Test/Simple/Changes + ! MANIFEST lib/Test/Simple.pm lib/Test/Simple/t/exit.t + ! lib/Test/Simple/t/extra.t lib/Test/Simple/t/fail.t + ! lib/Test/Simple/t/missing.t lib/Test/Simple/t/no_plan.t + ! lib/Test/Simple/t/plan_is_noplan.t + ____________________________________________________________________________ + [ 10992] By: jhi on 2001/06/27 17:11:28 + Log: Upgrade to Test::More 0.07. + Branch: perl + + lib/Test/More/Changes + ! MANIFEST lib/Test/More.pm lib/Test/More/t/fail-like.t + ! lib/Test/More/t/fail.t lib/Test/More/t/plan_is_noplan.t + ! lib/Test/More/t/skipall.t + ____________________________________________________________________________ + [ 10991] By: jhi on 2001/06/27 17:04:13 + Log: Subject: Re: [PATCH] gcc-3.0 warnings on HP-UX + From: "H.Merijn Brand" + Date: Wed, 27 Jun 2001 18:40:04 +0200 + Message-Id: <20010627182601.7261.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 10990] By: jhi on 2001/06/27 17:02:55 + Log: Subject: [PATCH README.qnx hints/qnx.sh] + From: Norton Allen + Date: Wed, 27 Jun 2001 13:46:03 -0400 (edt) + Message-Id: <200106271746.NAA02789@bottesini.harvard.edu> + Branch: perl + ! README.qnx hints/qnx.sh + ____________________________________________________________________________ + [ 10989] By: jhi on 2001/06/27 14:33:53 + Log: Subject: [PATCH] two little documentation nits + From: Abhijit Menon-Sen + Date: Wed, 27 Jun 2001 20:07:50 +0530 + Message-ID: <20010627200750.A15756@lustre.lustre.dyn.wiw.org> + Branch: perl + ! sv.c sv.h + ____________________________________________________________________________ + [ 10988] By: jhi on 2001/06/27 13:33:32 + Log: Subject: [PATCH File/Spec/Unix.pm ExtUtils/MM_Unix.pm] for QNX + From: Norton Allen + Date: Wed, 27 Jun 2001 10:33:05 -0400 (edt) + Message-Id: <200106271433.KAA04947@bottesini.harvard.edu> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm lib/File/Spec/Unix.pm + ____________________________________________________________________________ + [ 10987] By: jhi on 2001/06/27 12:14:36 + Log: Subject: [PATCH vms/test.com] Adding TODO tests (was: Re: a report on perl@10930 results on a couple of Alphas) + From: Michael G Schwern + Date: Wed, 27 Jun 2001 02:34:58 -0400 + Message-ID: <20010627023458.K23874@blackrider> + Branch: perl + ! vms/test.com + ____________________________________________________________________________ + [ 10986] By: jhi on 2001/06/27 12:01:49 + Log: Add perl_clone_host() for Netware. + Branch: perl + ! NetWare/nw5.c + ____________________________________________________________________________ + [ 10985] By: jhi on 2001/06/27 11:56:53 + Log: GCC 3.0 hints for HP-UX. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 10984] By: jhi on 2001/06/27 11:55:06 + Log: In some Linux distributions the libndbm is broken + (no null key support), therefore link with libgdbm + (if available), since it has a working ndbm emulation, + from Jonathan Stowe. + Branch: perl + + ext/NDBM_File/hints/linux.pl + ! MANIFEST + ____________________________________________________________________________ + [ 10983] By: jhi on 2001/06/27 11:48:56 + Log: Subject: [PATCH perl@10930] find.t hack for VMS + From: "Craig A. Berry" + Date: Tue, 26 Jun 2001 23:40:25 -0500 + Message-Id: + Branch: perl + ! lib/File/Find/find.t + ____________________________________________________________________________ + [ 10982] By: jhi on 2001/06/27 11:47:30 + Log: AUTHORS updates. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10981] By: jhi on 2001/06/27 11:46:02 + Log: Metaconfig unit change like #10980. + Branch: metaconfig + ! U/compline/d_stdstdio.U + ____________________________________________________________________________ + [ 10980] By: jhi on 2001/06/27 11:45:29 + Log: "lose the it's", from Abhijit Menon-Sen. + ("It's" not searched, pods not searched.) + Branch: perl + ! Porting/Glossary Porting/config_H README.qnx config_h.SH + ! emacs/cperl-mode.el ext/IPC/SysV/Semaphore.pm + ! ext/List/Util/lib/Scalar/Util.pm hints/next_3.sh hints/qnx.sh + ! lib/CPAN/Nox.pm lib/ExtUtils/Embed.pm lib/ExtUtils/MM_NW5.pm + ! lib/ExtUtils/MM_Unix.pm lib/ExtUtils/MM_VMS.pm + ! lib/ExtUtils/MM_Win32.pm lib/Net/DummyInetd.pm win32/win32.c + ____________________________________________________________________________ + [ 10979] By: jhi on 2001/06/27 11:36:40 + Log: "lose the looses", from Abhijit Menon-Sen. + Branch: perl + ! ext/B/B/Assembler.pm gv.c + ____________________________________________________________________________ + [ 10978] By: jhi on 2001/06/27 11:35:38 + Log: Catch FP exceptions also in z/OS (aka OS/390), from Peter Prymmer. + Branch: perl + ! hints/os390.sh + ____________________________________________________________________________ + [ 10977] By: jhi on 2001/06/27 11:33:28 + Log: DEC C 5.3 on the VAX simply doesn't seem to like + compiling the MD5 extension, disable it there for now, + from Peter Prymmer. + Branch: perl + ! configure.com + ____________________________________________________________________________ + [ 10976] By: jhi on 2001/06/26 21:35:40 + Log: Subject: Re: [PATCH perlfaq3.pod] and a question about it. + From: Jonathan Stowe + Date: Tue, 26 Jun 2001 20:53:40 +0100 (BST) + Message-ID: + Branch: perl + ! pod/perlfaq3.pod + ____________________________________________________________________________ + [ 10975] By: jhi on 2001/06/26 21:32:41 + Log: Subject: [PATCH 5.6.1] perlxs misprints + From: Ilya Zakharevich + Date: Tue, 26 Jun 2001 17:20:00 -0400 + Message-ID: <20010626172000.A26951@math.ohio-state.edu> + Branch: perl + ! pod/perlxs.pod + ____________________________________________________________________________ + [ 10974] By: jhi on 2001/06/26 21:31:51 + Log: Subject: [PATCH 5.6.1] xsubpp flags from the command line + From: Ilya Zakharevich + Date: Tue, 26 Jun 2001 17:27:07 -0400 + Message-ID: <20010626172707.A27097@math.ohio-state.edu> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 10973] By: jhi on 2001/06/26 21:27:05 + Log: Subject: [PATCH 5.6.1] OPTIMIZE=-g + From: Ilya Zakharevich + Date: Tue, 26 Jun 2001 17:23:24 -0400 + Message-ID: <20010626172324.A27003@math.ohio-state.edu> + Branch: perl + ! hints/os2.sh lib/ExtUtils/MM_Unix.pm os2/Makefile.SHs + ____________________________________________________________________________ + [ 10972] By: jhi on 2001/06/26 20:27:19 + Log: Better place for nop IN_LOCALE_NUMERIC, pointed out + by Olaf Flebbe. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 10971] By: jhi on 2001/06/26 19:59:41 + Log: Detypo. + Branch: perl + ! lib/Memoize/t/tie_sdbm.t + ____________________________________________________________________________ + [ 10970] By: jhi on 2001/06/26 19:10:19 + Log: perl_clone_host() needs PERL_IMPLICIT_SYS. + Branch: perl + ! win32/perllib.c + ____________________________________________________________________________ + [ 10969] By: jhi on 2001/06/26 17:21:31 + Log: Subject: [patch] perl_clone+CvFILE + From: Doug MacEachern + Date: Tue, 26 Jun 2001 09:01:16 -0700 (PDT) + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10968] By: jhi on 2001/06/26 16:48:32 + Log: Subject: Re: SDBM on VMS (was Re: a report on perl@10930 results on a couple of Alphas) + From: Mark-Jason Dominus + Date: Tue, 26 Jun 2001 12:33:01 -0400 + Message-ID: <20010626163301.31298.qmail@plover.com> + Branch: perl + ! lib/Memoize/t/tie.t lib/Memoize/t/tie_sdbm.t + ____________________________________________________________________________ + [ 10967] By: jhi on 2001/06/26 14:21:49 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10966] By: jhi on 2001/06/26 14:08:34 + Log: Also catfile() needs now to explicitly exported. + Branch: perl + ! lib/Memoize/t/tie.t lib/Memoize/t/tie_sdbm.t + ____________________________________________________________________________ + [ 10965] By: jhi on 2001/06/26 13:57:54 + Log: Regen toc. + Branch: perl + ! pod/perltoc.pod + ____________________________________________________________________________ + [ 10964] By: jhi on 2001/06/26 13:56:11 + Log: Nonexistent pod command. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10963] By: jhi on 2001/06/26 13:50:53 + Log: Be more portable in the quest for tmpdir. + Branch: perl + ! lib/Memoize/t/tie.t lib/Memoize/t/tie_sdbm.t + ____________________________________________________________________________ + [ 10962] By: jhi on 2001/06/26 13:43:51 + Log: Be more portable in finding out the home directory, + and use File::Spec to do the concat. + (Come to think of it, couldn't File::Spec provide + for a ->homedir method?) + Branch: perl + ! lib/Net/Config.pm + ____________________________________________________________________________ + [ 10961] By: jhi on 2001/06/26 13:37:30 + Log: Doc patch for #10959. + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10960] By: jhi on 2001/06/26 13:33:07 + Log: Subject: Re: [DOC PATCH bleadperl] Document $count = () = $string =~ /\d+/g + From: "Philip Newton" + Date: Tue, 26 Jun 2001 16:26:47 +0200 + Message-ID: <3B38B7C7.32635.1E8DC14@localhost> + Branch: perl + ! pod/perldata.pod + ____________________________________________________________________________ + [ 10959] By: jhi on 2001/06/26 13:31:57 + Log: Subject: [PATH] shared -> unique; + From: "Artur Bergman" + Date: Tue, 26 Jun 2001 16:18:40 +0200 + Message-ID: <002001c0fe4a$e623ba30$21000a0a@vogw2kdev> + + Because "shared" isn't: it's read-only. + Branch: perl + ! toke.c xsutils.c + ____________________________________________________________________________ + [ 10958] By: jhi on 2001/06/26 13:28:27 + Log: Escape multiline croak messages. + Branch: perl + ! t/op/ver.t + ____________________________________________________________________________ + [ 10957] By: jhi on 2001/06/26 13:18:34 + Log: No more pragma/*.t for minitest. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 10956] By: jhi on 2001/06/26 13:18:00 + Log: AUTHORS updates. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10955] By: jhi on 2001/06/26 13:17:05 + Log: delta updates. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10954] By: jhi on 2001/06/26 12:36:07 + Log: Subject: [PATCH] Adds perl_clone_host under IMPLICIT SYS + From: Artur Bergman + Date: Tue, 26 Jun 2001 15:32:53 +0200 + Message-ID: + Branch: perl + ! makedef.pl sv.c sv.h win32/perllib.c + ____________________________________________________________________________ + [ 10953] By: jhi on 2001/06/26 12:33:55 + Log: Subject: [PATCH ext/Time/HiRes/Makefile.PL perl@10929] Test Fails on SCO + From: Jonathan Stowe + Date: Tue, 26 Jun 2001 10:29:57 +0100 (BST) + Message-ID: + + SCO OpenServer 5.0.5 needs an explicit -lc for usleep(). + Branch: perl + + ext/Time/HiRes/hints/sco.pl + ! MANIFEST + ____________________________________________________________________________ + [ 10952] By: jhi on 2001/06/26 11:57:44 + Log: Subject: [PATCH 5.6.1] static build + From: Ilya Zakharevich + Date: Tue, 26 Jun 2001 04:22:25 -0400 + Message-ID: <20010626042225.A2604@math.ohio-state.edu> + Branch: perl + ! ext/List/Util/Makefile.PL lib/ExtUtils.t + ! lib/ExtUtils/MM_Unix.pm os2/Makefile.SHs + ____________________________________________________________________________ + [ 10951] By: jhi on 2001/06/26 11:55:59 + Log: DJGPP patches from Laszlo Molnar. + Branch: perl + ! djgpp/djgpp.c perl.c util.c + ____________________________________________________________________________ + [ 10950] By: jhi on 2001/06/26 11:54:32 + Log: Netware patches from Ananth Kesari. + Branch: perl + ! NetWare/Makefile NetWare/config_H.wc NetWare/nw5sck.c + ! NetWare/nw5sck.h NetWare/nwperlsys.c NetWare/nwperlsys.h + ! NetWare/nwtinfo.h + ____________________________________________________________________________ + [ 10949] By: jhi on 2001/06/26 11:49:09 + Log: Detypo. + Branch: perl + ! ext/Errno/Errno_pm.PL + ____________________________________________________________________________ + [ 10948] By: jhi on 2001/06/26 03:44:29 + Log: There seems to be two ways of spelling the $^O in *STEP. + Branch: perl + ! ext/Errno/Errno_pm.PL + ____________________________________________________________________________ + [ 10947] By: jhi on 2001/06/26 03:01:01 + Log: OpenSTEP has gcc 2.7.2.1 which recognizes but does not implement + the -dM flag, from Daniel Ashton . + Branch: perl + ! ext/Errno/Errno_pm.PL + ____________________________________________________________________________ + [ 10946] By: jhi on 2001/06/26 02:50:46 + Log: Known bugs update. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10945] By: jhi on 2001/06/26 01:15:39 + Log: The default installation of Cygwin has 500 as root's uid. + Branch: perl + ! lib/User/pwent.t + ____________________________________________________________________________ + [ 10944] By: jhi on 2001/06/26 01:12:39 + Log: Be even more relaxed (re-allow having only one entry). + Branch: perl + ! t/op/grent.t t/op/pwent.t + ____________________________________________________________________________ + [ 10943] By: jhi on 2001/06/26 01:03:30 + Log: Test failure updates. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10942] By: jhi on 2001/06/25 23:32:05 + Log: MPE/iX test tweaks from Mark Bixby. + Branch: perl + ! ext/POSIX/POSIX.t ext/Storable/t/lock.t ext/Time/HiRes/HiRes.t + ! t/io/fs.t t/op/stat.t + ____________________________________________________________________________ + [ 10941] By: jhi on 2001/06/25 22:18:31 + Log: Microperl findings. + Branch: perl + ! perl.h pp_sys.c + ____________________________________________________________________________ + [ 10940] By: jhi on 2001/06/25 21:59:29 + Log: Touch uconfig.h. + Branch: perl + ! uconfig.h + ____________________________________________________________________________ + [ 10939] By: jhi on 2001/06/25 21:32:52 + Log: Subject: [PATCH] Proposed fix for Pod::Man + From: Rob Napier + Date: Mon, 25 Jun 2001 15:49:24 -0400 + Message-ID: <20010625154924.N27568@rnapier-u5.cisco.com> + + Cater for Solaris nroff brokenness (shortchanges daisywheel + printers, but hey, we also no more support PDPs.) + Branch: perl + ! lib/Pod/Man.pm + ____________________________________________________________________________ + [ 10938] By: jhi on 2001/06/25 21:14:41 + Log: Typo in #10937. + Branch: perl + ! ext/POSIX/sigaction.t + ____________________________________________________________________________ + [ 10937] By: jhi on 2001/06/25 19:42:02 + Log: SIGCONT not trappable in VMS. + Branch: perl + ! ext/POSIX/sigaction.t + ____________________________________________________________________________ + [ 10936] By: jhi on 2001/06/25 19:28:13 + Log: Subject: [DRAFT] Encode-Tcl.t + From: SADAHIRO Tomoyuki + Date: Tue, 26 Jun 2001 03:38:08 +0900 + Message-Id: <20010626033550.BC35.BQW10602@nifty.com> + Branch: perl + + ext/Encode/Encode/Tcl.t + ! MANIFEST ext/Encode/Encode/Tcl.pm + ____________________________________________________________________________ + [ 10935] By: jhi on 2001/06/25 18:40:03 + Log: Because of #10932 retract also the perlfunc hunk of #10910. + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10934] By: jhi on 2001/06/25 18:27:19 + Log: Tweak the XSFUNCTION, from Doug MacEachern, as suggested + by Ilya Zakharevich in + http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2001-05/msg01582.html + Branch: perl + ! XSUB.h + ____________________________________________________________________________ + [ 10933] By: jhi on 2001/06/25 18:25:26 + Log: Typo in #10889. + Branch: perl + ! hints/uts.sh + ____________________________________________________________________________ + [ 10932] By: jhi on 2001/06/25 18:23:30 + Log: Subject: Re: [ID 20010621.007] readline() not quite as equal as <> + From: Abhijit Menon-Sen + Date: Mon, 25 Jun 2001 23:45:45 +0530 + Message-ID: <20010625234545.A5022@lustre.linux.in> + Branch: perl + ! lib/overload.t opcode.h opcode.pl t/op/flip.t + ____________________________________________________________________________ + [ 10931] By: jhi on 2001/06/25 17:50:38 + Log: Subject: [PATCH lib/Test.pm] Re: "Deprecated interface" ?? + From: Michael G Schwern + Date: Mon, 25 Jun 2001 14:35:51 -0400 + Message-ID: <20010625143551.H13819@blackrider> + Branch: perl + ! lib/Test.pm + ____________________________________________________________________________ + [ 10930] By: jhi on 2001/06/25 14:33:46 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10929] By: jhi on 2001/06/25 14:17:57 + Log: Regen toc and modlib. + Branch: perl + ! pod/perlmodlib.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 10928] By: jhi on 2001/06/25 14:13:09 + Log: Enclose the new symbols in START_EXTERN_C and END_EXTERN_C + for the benefit of C++ compilers, as suggested by Guruprasad. + Branch: perl + ! embed.pl proto.h + ____________________________________________________________________________ + [ 10927] By: jhi on 2001/06/25 14:11:59 + Log: Subject: [PATCH ] Re: [ID 20010625.003] perlfaq5 correction + From: Jonathan Stowe + Date: Mon, 25 Jun 2001 14:39:43 +0100 (BST) + Message-ID: + Branch: perl + ! pod/perlfaq5.pod + ____________________________________________________________________________ + [ 10926] By: jhi on 2001/06/25 14:04:07 + Log: Missed from #10925. + Branch: perl + ! gv.c + ____________________________________________________________________________ + [ 10925] By: jhi on 2001/06/25 14:00:06 + Log: Subject: [PATCH] Re: CvFILE corruption under ithreads + From: Robin Houston + Date: Sat, 19 May 2001 16:19:34 +0100 + Message-ID: <20010519161934.A12751@puffinry.freeserve.co.uk> + Branch: perl + ! cv.h gv.h op.c + ____________________________________________________________________________ + [ 10924] By: jhi on 2001/06/25 13:58:18 + Log: Netware README tweak. + Branch: perl + ! README.netware + ____________________________________________________________________________ + [ 10923] By: jhi on 2001/06/25 13:57:13 + Log: Subject: [PATCH] Re: overload.t fails + From: Abhijit Menon-Sen + Date: Mon, 25 Jun 2001 14:52:20 +0530 + Message-ID: <20010625145220.A24114@lustre.linux.in> + Branch: perl + ! lib/overload.t + ____________________________________________________________________________ + [ 10922] By: jhi on 2001/06/25 13:56:20 + Log: Subject: Re: [PATCH] Re: [ID 20010624.001] debugger T, and Carp::carp don't trace arg of + From: Mike Guy + Date: Mon, 25 Jun 2001 11:43:23 +0100 + Message-Id: + Branch: perl + ! lib/Carp.pm + ____________________________________________________________________________ + [ 10921] By: jhi on 2001/06/25 13:50:02 + Log: Subject: Re: [PATCH 5.6.1] OS2 syslog + From: Ilya Zakharevich + Date: Sun, 24 Jun 2001 05:17:05 -0400 + Message-ID: <20010624051704.A27604@math.ohio-state.edu> + Branch: perl + ! os2/os2ish.h + ____________________________________________________________________________ + [ 10920] By: jhi on 2001/06/25 13:49:13 + Log: Subject: [PATCH 5.6.1] crypt() on OS/2 + From: Ilya Zakharevich + Date: Mon, 25 Jun 2001 05:52:27 -0400 + Message-ID: <20010625055227.A24635@math.ohio-state.edu> + Branch: perl + ! hints/os2.sh + ____________________________________________________________________________ + [ 10919] By: jhi on 2001/06/25 13:48:30 + Log: Subject: Re: [PATCH 5.6.1] OS2 system() broken + From: Ilya Zakharevich + Date: Mon, 25 Jun 2001 05:23:35 -0400 + Message-ID: <20010625052334.A24320@math.ohio-state.edu> + Branch: perl + ! os2/os2.c + ____________________________________________________________________________ + [ 10918] By: jhi on 2001/06/25 13:47:46 + Log: Subject: Re: [PATCH 5.6.1] OS2::DLL + From: Ilya Zakharevich + Date: Mon, 25 Jun 2001 05:04:32 -0400 + Message-ID: <20010625050432.A24128@math.ohio-state.edu> + Branch: perl + ! os2/OS2/REXX/DLL/DLL.pm + ____________________________________________________________________________ + [ 10917] By: jhi on 2001/06/25 13:44:14 + Log: Subject: Re: [PATCH 5.6.1] $^E on OS/2 + From: Ilya Zakharevich + Date: Mon, 25 Jun 2001 05:02:36 -0400 + Message-ID: <20010625050235.A24046@math.ohio-state.edu> + Branch: perl + ! mg.c os2/dl_os2.c os2/os2.c + ____________________________________________________________________________ + [ 10916] By: jhi on 2001/06/25 13:41:20 + Log: Subject: Re: [PATCH 5.6.1] misprints + From: Ilya Zakharevich + Date: Mon, 25 Jun 2001 04:50:50 -0400 + Message-ID: <20010625045049.A23965@math.ohio-state.edu> + Branch: perl + ! os2/os2.c pp_sys.c + ____________________________________________________________________________ + [ 10915] By: jhi on 2001/06/25 13:39:59 + Log: Add Test::More and Test::Simple to the delta. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10914] By: jhi on 2001/06/25 13:38:08 + Log: Add Test::More, from Michael G Schwern. + Branch: perl + + lib/Test/More.pm lib/Test/More/t/More.t + + lib/Test/More/t/fail-like.t lib/Test/More/t/fail.t + + lib/Test/More/t/plan_is_noplan.t lib/Test/More/t/skipall.t + + t/lib/Test/More/Catch.pm + ! MANIFEST + ____________________________________________________________________________ + [ 10913] By: jhi on 2001/06/25 13:35:41 + Log: Add Test::Simple from Michael G Schwern. + Branch: perl + + lib/Test/Simple.pm lib/Test/Simple/t/exit.t + + lib/Test/Simple/t/extra.t lib/Test/Simple/t/fail.t + + lib/Test/Simple/t/missing.t lib/Test/Simple/t/no_plan.t + + lib/Test/Simple/t/plan_is_noplan.t lib/Test/Simple/t/simple.t + + t/lib/Test/Simple/Catch.pm + + t/lib/Test/Simple/sample_tests/death.plx + + t/lib/Test/Simple/sample_tests/death_in_eval.plx + + t/lib/Test/Simple/sample_tests/extras.plx + + t/lib/Test/Simple/sample_tests/five_fail.plx + + t/lib/Test/Simple/sample_tests/last_minute_death.plx + + t/lib/Test/Simple/sample_tests/one_fail.plx + + t/lib/Test/Simple/sample_tests/require.plx + + t/lib/Test/Simple/sample_tests/success.plx + + t/lib/Test/Simple/sample_tests/too_few.plx + + t/lib/Test/Simple/sample_tests/two_fail.plx + ! MANIFEST + ____________________________________________________________________________ + [ 10912] By: jhi on 2001/06/25 13:31:57 + Log: Subject: [PATCH perl@10907] RETURN requires dSP in pp_sys.c + From: "Craig A. Berry" + Date: Sun, 24 Jun 2001 23:41:36 -0500 + Message-Id: + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10911] By: jhi on 2001/06/25 13:05:00 + Log: Upgrade to Attribute::Handlers 0.70. + Branch: perl + + lib/Attribute/Handlers/Changes lib/Attribute/Handlers/README + ! MANIFEST lib/Attribute/Handlers.pm + ____________________________________________________________________________ + [ 10910] By: jhi on 2001/06/25 00:09:27 + Log: Subject: Re: [ID 20010621.007] readline() not quite as equal as <> + From: Abhijit Menon-Sen + Date: Sat, 23 Jun 2001 05:17:44 +0530 + Message-ID: <20010623051744.A18583@lustre.linux.in> + + (Can't think of a good place to put tests.) + Branch: perl + ! opcode.pl pod/perlfunc.pod t/op/flip.t toke.c + ____________________________________________________________________________ + [ 10909] By: jhi on 2001/06/24 23:45:13 + Log: Subject: [PATCH] t/op/pat.t typo fix + From: Richard Soderberg + Date: Sun, 24 Jun 2001 12:07:42 -0700 (PDT) + Message-ID: + Branch: perl + ! t/op/pat.t + ____________________________________________________________________________ + [ 10908] By: jhi on 2001/06/24 22:24:49 + Log: Move the pack warnings to their own file, as pointed + out by Spider. + Branch: perl + + t/lib/warnings/pp_pack + ! MANIFEST t/lib/warnings/pp + ____________________________________________________________________________ + [ 10907] By: jhi on 2001/06/24 19:55:15 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10906] By: jhi on 2001/06/24 19:50:40 + Log: Partially fix a problem noticed by IRIX compiler: + the initialization of parse_start was bypassed by + several gotos. Now initialized to zero, which may + not be the best choice. + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 10905] By: jhi on 2001/06/24 19:43:25 + Log: Relax the group and password tests back to moaning only + if no matches at all are found. (Even with a small sample + I could find many sites where there are, umm, anomalies in + the said databases.) + Branch: perl + ! t/op/grent.t t/op/pwent.t + ____________________________________________________________________________ + [ 10904] By: jhi on 2001/06/24 18:45:55 + Log: Argh. How hard it can be to re-apply a patch manually? :-) + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 10903] By: jhi on 2001/06/24 18:40:52 + Log: De-cut-and-pasto in #10902. + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 10902] By: jhi on 2001/06/24 18:35:18 + Log: The #10771 didn't take? + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 10901] By: jhi on 2001/06/24 18:29:50 + Log: Undo the filetests part of #10900, under multiplicity + weird errors take place. + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10900] By: jhi on 2001/06/24 18:20:36 + Log: Misplaces dSPs and the like revealed by MPE/iX and Cygwin. + Branch: perl + ! ext/Cwd/Cwd.xs ext/Devel/Peek/Peek.xs pp_sys.c + ____________________________________________________________________________ + [ 10899] By: jhi on 2001/06/24 17:00:34 + Log: (Replaced by #10922) + + Subject: Re: [PATCH] Re: [ID 20010624.001] debugger T, and Carp::carp don't trace arg of + From: Tony Bowden + Date: Sun, 24 Jun 2001 17:32:40 +0100 + Message-ID: <20010624173240.A16293@blackstar.co.uk> + + Document (well, mention) shortmess() and longmess() + to rob people of their fun of reinventing the weel. + Branch: perl + ! lib/Carp.pm + ____________________________________________________________________________ + [ 10898] By: jhi on 2001/06/24 16:51:40 + Log: Subject: Patch: pp_system() bounces out of Cygwin subsystem + From: Brian Jepson + Date: Sun, 24 Jun 2001 12:13:21 -0400 (EDT) + Message-ID: + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10897] By: jhi on 2001/06/24 16:38:23 + Log: Subject: [PATCH CPAN.pm] missing DATE_OF_02 + From: Robin Barker + Date: Fri, 22 Jun 2001 19:25:56 +0100 (BST) + Message-Id: <200106221825.TAA16884@tempest.npl.co.uk> + Branch: perl + ! lib/CPAN.pm + ____________________________________________________________________________ + [ 10896] By: jhi on 2001/06/24 16:36:32 + Log: Memoize patch from mjd. + Branch: perl + ! lib/Memoize/t/tie_storable.t + ____________________________________________________________________________ + [ 10895] By: jhi on 2001/06/24 16:33:59 + Log: Spec the sv_pvprintify() a bit more. + Branch: perl + ! pod/perltodo.pod + ____________________________________________________________________________ + [ 10894] By: jhi on 2001/06/24 14:43:36 + Log: Upgrade to Memoize 0.65. + Branch: perl + + lib/Memoize/t/array_confusion.t + ! MANIFEST lib/Memoize.pm lib/Memoize/AnyDBM_File.pm + ! lib/Memoize/Expire.pm lib/Memoize/ExpireFile.pm + ! lib/Memoize/ExpireTest.pm lib/Memoize/NDBM_File.pm + ! lib/Memoize/README lib/Memoize/SDBM_File.pm + ! lib/Memoize/Saves.pm lib/Memoize/Storable.pm lib/Memoize/TODO + ! lib/Memoize/t/errors.t lib/Memoize/t/expire.t + ! lib/Memoize/t/expire_file.t lib/Memoize/t/expire_module_n.t + ! lib/Memoize/t/expire_module_t.t lib/Memoize/t/speed.t + ! lib/Memoize/t/tie.t lib/Memoize/t/tie_gdbm.t + ! lib/Memoize/t/tie_ndbm.t lib/Memoize/t/tie_sdbm.t + ! lib/Memoize/t/tie_storable.t + ____________________________________________________________________________ + [ 10893] By: jhi on 2001/06/24 14:21:09 + Log: Metaconfig unit change for #10892. + Branch: metaconfig + ! U/modified/Options.U + ____________________________________________________________________________ + [ 10892] By: jhi on 2001/06/24 14:20:38 + Log: Subject: Re: [PATCH 5.6.1] OS2 Configure + From: Ilya Zakharevich + Date: Sun, 24 Jun 2001 05:24:40 -0400 + Message-ID: <20010624052440.A27698@math.ohio-state.edu> + Branch: perl + ! Configure hints/os2.sh + ____________________________________________________________________________ + [ 10891] By: jhi on 2001/06/24 13:50:26 + Log: Subject: [PATCH] Re: [ID 20010624.001] debugger T, and Carp::carp don't trace arg of + From: Mike Guy + Date: Sun, 24 Jun 2001 15:28:39 +0100 + Message-Id: + + Fix an ancient (5.002) bug. + Branch: perl + ! lib/Carp/Heavy.pm + ____________________________________________________________________________ + [ 10890] By: jhi on 2001/06/24 13:44:43 + Log: The #10881 was too vigorous in pp_system() in moving 'unused' + variables. + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10889] By: jhi on 2001/06/24 13:24:00 + Log: Make UTS as per #10888. + Branch: perl + ! hints/uts.sh + ____________________________________________________________________________ + [ 10888] By: jhi on 2001/06/24 13:21:23 + Log: Factor the PERL_SYS_INIT() code, from Hugo van der Sanden. + Branch: perl + ! hints/freebsd.sh hints/posix-bc.sh hints/sco.sh + ! mpeix/mpeixish.h perl.h unixish.h + ____________________________________________________________________________ + [ 10887] By: jhi on 2001/06/24 13:15:45 + Log: AUTHORS update. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10886] By: jhi on 2001/06/24 13:14:31 + Log: Subject: Encode::Tcl for multibyte doesnot work + From: SADAHIRO Tomoyuki + Date: Sun, 24 Jun 2001 22:48:21 +0900 + Message-Id: <20010624223252.6658.BQW10602@nifty.com> + Branch: perl + ! ext/Encode/Encode/Tcl.pm + ____________________________________________________________________________ + [ 10885] By: jhi on 2001/06/24 13:12:46 + Log: Subject: [PATCH] Remove tautology in error messages + From: Mike Guy + Date: Sun, 24 Jun 2001 13:31:00 +0100 + Message-Id: + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10884] By: jhi on 2001/06/24 13:11:36 + Log: Darwin needs -traditional-cpp for cppflags to build Errno. + Branch: perl + ! hints/darwin.sh + ____________________________________________________________________________ + [ 10883] By: jhi on 2001/06/24 13:09:55 + Log: Subject: Re: [PATCH 5.6.1] test suite + From: Ilya Zakharevich + Date: Sun, 24 Jun 2001 05:47:05 -0400 + Message-ID: <20010624054705.A27890@math.ohio-state.edu> + + Test suite fixes. + Branch: perl + ! ext/POSIX/sigaction.t lib/File/stat.t perl.c t/io/utf8.t + ____________________________________________________________________________ + [ 10882] By: jhi on 2001/06/24 13:07:46 + Log: Subject: Re: [PATCH 5.6.1] OS2 warnings + From: Ilya Zakharevich + Date: Sun, 24 Jun 2001 05:37:19 -0400 + Message-ID: <20010624053719.A27866@math.ohio-state.edu> + Branch: perl + ! os2/dl_os2.c os2/os2.c os2/os2ish.h + ____________________________________________________________________________ + [ 10881] By: jhi on 2001/06/24 13:05:24 + Log: Subject: Re: [PATCH 5.6.1] pp_sys.c warnings + From: Ilya Zakharevich + Date: Sun, 24 Jun 2001 05:34:50 -0400 + Message-ID: <20010624053450.A27856@math.ohio-state.edu> + + Pacify compiler warnings. + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10880] By: jhi on 2001/06/24 13:02:30 + Log: Subject: Re: [PATCH 5.6.1] OS2 linking + From: Ilya Zakharevich + Date: Sun, 24 Jun 2001 05:21:18 -0400 + Message-ID: <20010624052118.A27615@math.ohio-state.edu> + + Enable compression of executables during link time. + Branch: perl + ! hints/os2.sh + ____________________________________________________________________________ + [ 10879] By: jhi on 2001/06/24 13:00:47 + Log: Subject: Re: [PATCH 5.6.1] OS2 linking + From: Ilya Zakharevich + Date: Sun, 24 Jun 2001 05:15:11 -0400 + Message-ID: <20010624051511.A27544@math.ohio-state.edu> + + Add ordinals to the export list for Perl DLL. + (Breaks intra-version DLL compatibility.) + Branch: perl + ! makedef.pl + ____________________________________________________________________________ + [ 10878] By: jhi on 2001/06/24 02:12:04 + Log: Allow (displaying and) re-editing the Subject in perlbug. + Also abstract the Subject quality control into a function. + Branch: perl + ! utils/perlbug.PL + ____________________________________________________________________________ + [ 10877] By: jhi on 2001/06/24 01:40:53 + Log: Display $ENV{CYGWIN} in perlbug if set (like #10875 for perl -V). + Branch: perl + ! utils/perlbug.PL + ____________________________________________________________________________ + [ 10876] By: jhi on 2001/06/24 01:37:05 + Log: Regen toc and modlib. + Branch: perl + ! pod/perlmodlib.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 10875] By: jhi on 2001/06/24 01:29:33 + Log: In Cygwin display the $ENV{CYGWIN} under perl -V, as suggested + by John Peacock. (Can be 'ntea' which means emulate UNIX file + attribute semantics as much as possible, or 'ntsec' which uses + native NTFS semantics.) (See also #10877.) + Branch: perl + ! perl.c + ____________________________________________________________________________ + [ 10874] By: jhi on 2001/06/23 23:57:28 + Log: Hack to get rid of the UNEXPECTEDLY succeeded message for now. + Branch: perl + ! lib/Test/Harness.pm + ____________________________________________________________________________ + [ 10873] By: jhi on 2001/06/23 23:36:56 + Log: Just zap the -uPerlio. + Branch: perl + ! ext/B/Stash.t + ____________________________________________________________________________ + [ 10872] By: jhi on 2001/06/23 21:29:10 + Log: Do not test PerlIO if PerlIO not used. + Branch: perl + ! ext/PerlIO/PerlIO.t + ____________________________________________________________________________ + [ 10871] By: jhi on 2001/06/23 21:12:49 + Log: Regen perlapi. + Branch: perl + ! pod/perlapi.pod + ____________________________________________________________________________ + [ 10870] By: jhi on 2001/06/23 21:03:31 + Log: Subject: [PATCH] Re: [PATCH] nuke strtol (was Re: One fix for strtoul not setting errno) + From: Nicholas Clark + Date: Sat, 23 Jun 2001 22:55:47 +0100 + Message-ID: <20010623225547.Z98663@plum.flirble.org> + Branch: perl + ! numeric.c + ____________________________________________________________________________ + [ 10869] By: jhi on 2001/06/23 17:13:21 + Log: Subject: [PATCH: perl@10825] MacOS fixups for new lib/h2xs.t + From: Prymmer/Kahn + Date: Sat, 23 Jun 2001 11:08:52 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/h2xs.t + ____________________________________________________________________________ + [ 10868] By: jhi on 2001/06/23 16:04:38 + Log: cygwin needs cygwin1.dll in PATH or cwd to run external programs. + cygwin does not taint cwd, just like win32. + Branch: perl + ! lib/File/Find/taint.t t/op/taint.t + ____________________________________________________________________________ + [ 10867] By: jhi on 2001/06/23 15:39:15 + Log: Retract #10865, the patch should be unnecessary. + (But seemingly helpful in Cygwin? Strange.) + Branch: perl + ! lib/Memoize/t/tie_ndbm.t + ____________________________________________________________________________ + [ 10866] By: jhi on 2001/06/23 15:06:30 + Log: Misplaced test file; plus Cygwin filesystem semantics. + Branch: perl + + ext/SDBM_File/sdbm.t + - ext/ODBM_File/sdbm.t + ! MANIFEST + ____________________________________________________________________________ + [ 10865] By: jhi on 2001/06/23 15:01:02 + Log: (Retracted by #10867.) + Branch: perl + ! lib/Memoize/t/tie_ndbm.t + ____________________________________________________________________________ + [ 10864] By: jhi on 2001/06/23 14:25:43 + Log: Metaconfig unit change for #10863. + Branch: metaconfig/U/perl + ! Extensions.U + ____________________________________________________________________________ + [ 10863] By: jhi on 2001/06/23 14:25:20 + Log: In Cygwin do not build NDBM_File and ODBM_File unless + -lndbm and -ldbm are available. + Branch: perl + ! Configure config_h.SH + ____________________________________________________________________________ + [ 10862] By: jhi on 2001/06/23 14:02:14 + Log: More Cygwin filesystem semantics. + Branch: perl + ! t/io/fs.t t/op/stat.t + ____________________________________________________________________________ + [ 10861] By: jhi on 2001/06/23 13:38:00 + Log: More DOSish permission semantics for Cygwin. + Branch: perl + ! lib/AnyDBM_File.t + ____________________________________________________________________________ + [ 10860] By: jhi on 2001/06/23 13:32:41 + Log: Cygwin too has different permission semantics. + Branch: perl + ! ext/GDBM_File/gdbm.t + ____________________________________________________________________________ + [ 10859] By: jhi on 2001/06/23 13:30:06 + Log: The group (and assumedly passwd) databases can have + only one entry (this is the case in cygwin). + Branch: perl + ! t/op/grent.t t/op/pwent.t + ____________________________________________________________________________ + [ 10858] By: jhi on 2001/06/23 13:16:26 + Log: Also in Cygwin use Socket to figure out domainname + (if any) (avoids trying to call external 'domainname', + which doesn't at the moment exist in Cygwin) + Branch: perl + ! lib/Net/Domain.pm + ____________________________________________________________________________ + [ 10857] By: jhi on 2001/06/23 12:48:32 + Log: Remove also the lib$Foo.def, not just $Foo.def. + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 10856] By: jhi on 2001/06/23 12:21:53 + Log: In UTS do signal(SIGFPE, SIG_IGN) in PERL_SYS_INIT(). + Branch: perl + ! unixish.h + ____________________________________________________________________________ + [ 10855] By: jhi on 2001/06/23 12:14:15 + Log: Fix for ID 20010619.003, the [[:print:]] is not supposed + to match the whole isprint(), only the space character. + Branch: perl + ! handy.h pod/perlre.pod t/op/pat.t + ____________________________________________________________________________ + [ 10854] By: nick on 2001/06/23 08:09:33 + Log: Integrate mainline + Branch: perlio + !> Configure ext/IPC/SysV/Semaphore.pm hints/unicos.sh + !> lib/ExtUtils.t lib/File/Find/taint.t + !> lib/Math/BigInt/t/bigintpm.t lib/Net/netent.t + !> lib/Net/protoent.t lib/Net/servent.t mg.c t/op/mkdir.t + !> t/op/sprintf.t vms/descrip_mms.template vms/ext/Stdio/Stdio.xs + ____________________________________________________________________________ + [ 10853] By: jhi on 2001/06/23 03:48:09 + Log: Make also the bigintpm.t (like op/sprintf.t) be less demanding + with its floats in os390 and s390 (UTS). + Branch: perl + ! lib/Math/BigInt/t/bigintpm.t + ____________________________________________________________________________ + [ 10852] By: jhi on 2001/06/23 03:38:53 + Log: Add also UTS (s390) to the non-IEEE float platforms. + Branch: perl + ! t/op/sprintf.t + ____________________________________________________________________________ + [ 10851] By: jhi on 2001/06/23 03:36:04 + Log: Subject: RFC: what are applicable standards for exponent sizes? + From: Peter Prymmer + Date: Tue, 19 Jun 2001 17:18:06 -0700 (PDT) + Message-ID: + Branch: perl + ! t/op/sprintf.t + ____________________________________________________________________________ + [ 10850] By: jhi on 2001/06/23 03:29:04 + Log: Subject: [PATCH: perl@10825] build (and test!) VMS::Stdio on VMS + From: Peter Prymmer + Date: Fri, 22 Jun 2001 19:08:23 -0700 (PDT) + Message-ID: + Branch: perl + ! vms/descrip_mms.template vms/ext/Stdio/Stdio.xs + ____________________________________________________________________________ + [ 10849] By: jhi on 2001/06/23 03:27:21 + Log: Subject: [PATCH: perl@10825] correction to lib/ExtUtils.t patch + From: Peter Prymmer + Date: Fri, 22 Jun 2001 17:56:01 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/ExtUtils.t + ____________________________________________________________________________ + [ 10848] By: jhi on 2001/06/22 21:51:31 + Log: Retract #10845. + Branch: perl + ! lib/File/Find/taint.t + ____________________________________________________________________________ + [ 10847] By: jhi on 2001/06/22 21:50:38 + Log: Yet another error message. + Branch: perl + ! t/op/mkdir.t + ____________________________________________________________________________ + [ 10846] By: jhi on 2001/06/22 21:48:39 + Log: The croak message for nonexistent socket functions may vary. + Branch: perl + ! lib/Net/netent.t lib/Net/protoent.t lib/Net/servent.t + ____________________________________________________________________________ + [ 10845] By: jhi on 2001/06/22 21:42:38 + Log: (Retracted by #10848.) + Branch: perl + ! lib/File/Find/taint.t + ____________________________________________________________________________ + [ 10844] By: jhi on 2001/06/22 21:32:58 + Log: Integrate perlio. + Branch: perl + !> lib/File/Find/taint.t t/op/write.t + ____________________________________________________________________________ + [ 10843] By: nick on 2001/06/22 21:24:51 + Log: Back out debug in taint.t + Branch: perlio + ! lib/File/Find/taint.t + ____________________________________________________________________________ + [ 10842] By: jhi on 2001/06/22 21:20:02 + Log: setitimer() does not exist in Unicos, despite of what + Configure thinks, from Mark P. Lutz. + Branch: perl + ! hints/unicos.sh + ____________________________________________________________________________ + [ 10841] By: nick on 2001/06/22 21:19:36 + Log: Skip cwd test on Win32 ??? + Branch: perlio + ! lib/File/Find/taint.t + ____________________________________________________________________________ + [ 10840] By: jhi on 2001/06/22 21:17:34 + Log: Casting this way seems to keep both 64-bitint x86 FreeBSD + and Tru64 gcc -Wall happy. + Branch: perl + ! mg.c + ____________________________________________________________________________ + [ 10839] By: jhi on 2001/06/22 21:15:32 + Log: The packs must be done in native shorts, fix from Mark P. Lutz. + Branch: perl + ! ext/IPC/SysV/Semaphore.pm + ____________________________________________________________________________ + [ 10838] By: jhi on 2001/06/22 21:12:02 + Log: Metaconfig unit change for #10837. + Branch: metaconfig/U/perl + ! Cross.U + ____________________________________________________________________________ + [ 10837] By: jhi on 2001/06/22 21:09:42 + Log: Cleanup of the cross-compilation unit. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10836] By: nick on 2001/06/22 20:45:12 + Log: Skip |- based op/write.t on Win32 as well as VMS + Branch: perlio + ! t/op/write.t + ____________________________________________________________________________ + [ 10835] By: jhi on 2001/06/22 20:44:20 + Log: Integrate perlio. + Branch: perl + !> util.c + ____________________________________________________________________________ + [ 10834] By: nick on 2001/06/22 20:41:54 + Log: Integrate mainline + Branch: perlio + !> Configure Porting/Glossary Porting/config.sh Porting/config_H + !> config_h.SH pp_sys.c uconfig.h util.c vos/config.alpha.h + !> vos/config.ga.h + ____________________________________________________________________________ + [ 10833] By: nick on 2001/06/22 20:22:58 + Log: Patcho fix. + Branch: perlio + ! util.c + ____________________________________________________________________________ + [ 10832] By: jhi on 2001/06/22 20:13:02 + Log: Metaconfig unit changes for #10831. + Branch: metaconfig + ! U/compline/d_safebcpy.U U/compline/d_safemcpy.U + ____________________________________________________________________________ + [ 10831] By: jhi on 2001/06/22 20:12:29 + Log: Subject: [PATCH 5.7.x] Further tiny bcopy cleanup + From: Andy Dougherty + Date: Fri, 22 Jun 2001 14:29:51 -0400 (EDT) + Message-ID: + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH uconfig.h vos/config.alpha.h vos/config.ga.h + ____________________________________________________________________________ + [ 10830] By: jhi on 2001/06/22 19:50:15 + Log: MPE/iX prototype nits from Mark Bixby. + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10829] By: jhi on 2001/06/22 16:25:16 + Log: Detypo. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10828] By: nick on 2001/06/22 15:33:37 + Log: Integrate mainline (in near desperate attempt to get Win32 to build...) + Branch: perlio + +> lib/h2xs.t + !> AUTHORS Changes MANIFEST Makefile.SH NetWare/t/NWScripts.pl + !> ext/B/Deparse.t ext/POSIX/POSIX.xs lib/ExtUtils.t + !> lib/ExtUtils/Constant.pm lib/I18N/LangTags.pm + !> lib/I18N/LangTags/ChangeLog lib/I18N/LangTags/test.pl + !> lib/Locale/Maketext.pm lib/Locale/Maketext.pod + !> lib/Locale/Maketext/ChangeLog lib/Locale/Maketext/test.pl + !> lib/Math/BigFloat.pm lib/Math/BigInt.pm patchlevel.h + !> t/op/write.t t/pod/plainer.t utils/h2xs.PL vms/vms.c + !> vms/vmsish.h + ____________________________________________________________________________ + [ 10827] By: jhi on 2001/06/22 14:15:26 + Log: Subject: [PATCH perl@10800] sigaction workaround for VMS + Date: Fri, 22 Jun 2001 10:08:35 -0500 + From: "Craig A. Berry" + Message-Id: + Branch: perl + ! vms/vms.c vms/vmsish.h + ____________________________________________________________________________ + [ 10826] By: jhi on 2001/06/22 13:35:37 + Log: NetWare scripts tweak from Ananth Kesari. + Branch: perl + ! NetWare/t/NWScripts.pl + ____________________________________________________________________________ + [ 10825] By: jhi on 2001/06/22 13:00:55 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10824] By: jhi on 2001/06/22 12:46:56 + Log: Add .i and .s targets. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 10823] By: jhi on 2001/06/22 12:25:20 + Log: Upgrade to Locale::Maketext 1.03. + Branch: perl + ! lib/Locale/Maketext.pm lib/Locale/Maketext.pod + ! lib/Locale/Maketext/ChangeLog lib/Locale/Maketext/test.pl + ____________________________________________________________________________ + [ 10822] By: jhi on 2001/06/22 12:23:57 + Log: Upgrade to I18N::LangTags 0.26. + Branch: perl + ! lib/I18N/LangTags.pm lib/I18N/LangTags/ChangeLog + ! lib/I18N/LangTags/test.pl + ____________________________________________________________________________ + [ 10821] By: jhi on 2001/06/22 12:16:41 + Log: The #10792 didn't take, and s/sighni/signi/, as noticed by + Philip Newton. + Branch: perl + ! lib/ExtUtils/Constant.pm lib/Locale/Maketext.pod + ! lib/Math/BigFloat.pm lib/Math/BigInt.pm + ____________________________________________________________________________ + [ 10820] By: jhi on 2001/06/22 12:13:37 + Log: Subject: [PATCH: perl@10800] trigraphs and tests for h2xs + From: Prymmer/Kahn + Date: Fri, 22 Jun 2001 00:03:24 -0700 (PDT) + Message-ID: + Branch: perl + + lib/h2xs.t + ! MANIFEST utils/h2xs.PL + ____________________________________________________________________________ + [ 10819] By: jhi on 2001/06/22 12:11:56 + Log: Subject: [PATCH: perl@10800] nmake specific cleanliness for lib/ExtUtils.t + From: Prymmer/Kahn + Date: Thu, 21 Jun 2001 23:53:27 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/ExtUtils.t + ____________________________________________________________________________ + [ 10818] By: jhi on 2001/06/22 12:11:08 + Log: Subject: [PATCH: perl@10800] clean up after t/pod/plainer.t on Win32 + From: Prymmer/Kahn + Date: Thu, 21 Jun 2001 23:45:15 -0700 (PDT) + Message-ID: + Branch: perl + ! t/pod/plainer.t + ____________________________________________________________________________ + [ 10817] By: jhi on 2001/06/22 12:10:05 + Log: AUTHORS update. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10816] By: jhi on 2001/06/22 12:08:24 + Log: Subject: should POSIX.xs use XSRETURN_UNDEF in sigaction? + From: "Craig A. Berry" + Date: Thu, 21 Jun 2001 18:20:38 -0500 + Message-Id: <5.1.0.14.0.20010621180227.02a8e930@exchi01> + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 10815] By: jhi on 2001/06/22 12:07:19 + Log: Subject: [PATCH perl@10765] fix Deparse.t and write.t for VMS + From: "Craig A. Berry" + Date: Thu, 21 Jun 2001 09:58:52 -0500 + Message-Id: <5.1.0.14.0.20010620172532.033cdb88@exchi01> + Branch: perl + ! ext/B/Deparse.t t/op/write.t + ____________________________________________________________________________ + [ 10814] By: nick on 2001/06/22 08:13:09 + Log: Integrate mainline. + Branch: perlio + !> (integrate 46 files) + ____________________________________________________________________________ + [ 10813] By: jhi on 2001/06/22 02:48:58 + Log: Change the prefixes only if $prefix is unset, + as originally patched by Marcel Grunauer. + Branch: perl + ! hints/darwin.sh hints/rhapsody.sh + ____________________________________________________________________________ + [ 10812] By: jhi on 2001/06/22 02:44:41 + Log: Subject: Re: Patch for hints/darwin.sh + From: Wilfredo Sanchez + Date: Thu, 21 Jun 2001 11:23:46 -0700 + Message-Id: <200106211823.OAA01089@melbourne-city-street.mit.edu> + Branch: perl + ! hints/darwin.sh hints/rhapsody.sh + ____________________________________________________________________________ + [ 10811] By: jhi on 2001/06/22 02:34:27 + Log: Add .PHONY targets for non-file targets, + from Wilfredo Sánchez. Should help saying + "make install" on case-insensitive filesystems. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 10810] By: jhi on 2001/06/22 02:01:23 + Log: Subject: Re: Automated smoke report for patch 10764 (truncated) + From: Doug MacEachern + Date: Thu, 21 Jun 2001 19:32:05 -0700 (PDT) + Message-ID: + + plus reword the getcwd() comment, plus use getcwd() buffer + size minus one. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10809] By: jhi on 2001/06/22 01:16:58 + Log: More gprofing from Doug MacEachern. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 10808] By: jhi on 2001/06/22 01:15:11 + Log: Metaconfig unit change for #10807. + Branch: metaconfig/U/perl + ! d_sfio.U + ____________________________________________________________________________ + [ 10807] By: jhi on 2001/06/22 01:14:43 + Log: Tell that you are removing the unneeded -lsfio. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10806] By: jhi on 2001/06/22 01:03:14 + Log: More MPE/iX tweaks from Mark Bixby. + Branch: perl + ! perl.c t/op/magic.t + ____________________________________________________________________________ + [ 10805] By: jhi on 2001/06/21 22:41:11 + Log: The fchdir() proto is supposed to live in . + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 10804] By: jhi on 2001/06/21 22:24:42 + Log: This town is too small for the Cwd extension and me, + it would seem... + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 10803] By: jhi on 2001/06/21 21:54:00 + Log: Metaconfig unit change for #10802. + Branch: metaconfig/U/perl + ! d_modfl.U + ____________________________________________________________________________ + [ 10802] By: jhi on 2001/06/21 21:53:37 + Log: More d'ohs. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10801] By: jhi on 2001/06/21 21:38:38 + Log: Off-by-one. I'm so classic. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10800] By: jhi on 2001/06/21 20:10:19 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10799] By: jhi on 2001/06/21 20:03:54 + Log: Subject: Documentation patch for Net::FTP + From: Marcel Grunauer + Date: Wed, 20 Jun 2001 23:03:26 +0200 + Message-Id: <20010620210309.DCMT6087.viemta06@localhost> + Branch: perl + ! lib/Net/FTP.pm + ____________________________________________________________________________ + [ 10798] By: jhi on 2001/06/21 20:01:14 + Log: Retract the #10417 mg.c and embed.pl parts because of + strange SEGVs in 64bit x86 FreeBSD observed by + Nicholas Clark. + Branch: perl + ! embed.pl mg.c perlapi.c pod/perlintern.pod proto.h + ____________________________________________________________________________ + [ 10797] By: jhi on 2001/06/21 19:40:34 + Log: Add fchdir() probe (in non-UNIX systems assume it doesn't exist). + Branch: perl + ! Configure NetWare/config.wc NetWare/config_H.wc + ! Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH configure.com epoc/config.sh uconfig.h uconfig.sh + ! vos/config.alpha.def vos/config.alpha.h vos/config.ga.def + ! vos/config.ga.h win32/config.bc win32/config.gc + ! win32/config.vc win32/config_H.bc win32/config_H.gc + ! win32/config_H.vc + ____________________________________________________________________________ + [ 10796] By: jhi on 2001/06/21 19:08:28 + Log: Cwd tweak from Doug MacEachern. + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 10795] By: jhi on 2001/06/21 19:03:48 + Log: Protect the fchdir() and lstat() with ifdefs. + fchdir() needs a Configure probe. + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 10794] By: nick on 2001/06/21 17:11:35 + Log: Integrate mainline + Branch: perlio + +> ext/File/Glob/t/basic.t ext/File/Glob/t/case.t + +> ext/File/Glob/t/global.t ext/File/Glob/t/taint.t + +> lib/Attribute/Handlers/test.pl lib/File/Temp/t/mktemp.t + +> lib/File/Temp/t/posix.t lib/File/Temp/t/security.t + +> lib/File/Temp/t/tempfile.t lib/Getopt/Long/t/basic.t + +> lib/Getopt/Long/t/compat.t lib/Getopt/Long/t/linkage.t + +> lib/Getopt/Long/t/oo.t lib/Text/TabsWrap/t/fill.t + +> lib/Text/TabsWrap/t/tabs.t lib/Text/TabsWrap/t/wrap.t + - lib/Attribute/Handlers.t lib/File/Glob/basic.t + - lib/File/Glob/case.t lib/File/Glob/global.t + - lib/File/Glob/taint.t lib/File/Temp/mktemp.t + - lib/File/Temp/posix.t lib/File/Temp/security.t + - lib/File/Temp/tempfile.t lib/Getopt/Long/basic.t + - lib/Getopt/Long/compat.t lib/Getopt/Long/linkage.t + - lib/Getopt/Long/oo.t lib/Text/Tabs.t lib/Text/Wrap/fill.t + - lib/Text/Wrap/wrap.t + !> (integrate 41 files) + ____________________________________________________________________________ + [ 10793] By: jhi on 2001/06/21 17:01:26 + Log: Subject: [PATCH perl@10765] fix Cwd.xs for VMS + From: "Craig A. Berry" + Date: Thu, 21 Jun 2001 13:04:54 -0500 + Message-Id: <5.1.0.14.0.20010621124127.029fe120@exchi01> + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 10792] By: jhi on 2001/06/21 16:13:57 + Log: Subject: [PATCH pod] overlong =item + From: Robin Barker + Date: Thu, 21 Jun 2001 18:08:04 +0100 (BST) + Message-Id: <200106211708.SAA08097@tempest.npl.co.uk> + Branch: perl + ! lib/ExtUtils/Constant.pm lib/Locale/Maketext.pod + ! lib/Math/BigFloat.pm lib/Math/BigInt.pm + ____________________________________________________________________________ + [ 10791] By: jhi on 2001/06/21 16:10:51 + Log: Subject: [PATCH perlio.c] format + From: Robin Barker + Date: Thu, 21 Jun 2001 18:05:02 +0100 (BST) + Message-Id: <200106211705.SAA08067@tempest.npl.co.uk> + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 10790] By: jhi on 2001/06/21 15:52:04 + Log: Subject: Re: [PATCH 5.7.1] sv.c documentation + From: Radu Greab + Date: Thu, 21 Jun 2001 19:06:02 +0300 + Message-ID: <15154.7018.376419.295092@ix.netsoft.ro> + Branch: perl + ! pod/perlapi.pod sv.c + ____________________________________________________________________________ + [ 10789] By: jhi on 2001/06/21 14:48:25 + Log: The metaconfig unit changes for #10788. + Branch: metaconfig/U/perl + ! Cross.U fflushall.U + ____________________________________________________________________________ + [ 10788] By: jhi on 2001/06/21 14:47:48 + Log: Cross-configuration changes: make $from to rm the files + before copying them over (this means that he rm can be + removed from the fflushall test), create $targetmkdir + (not documented in install since it is supposed to internal + use only), make $run to copy over the executable only if + a stamp file .xok doesn't already exist (to avoid unnecessary + copying of the executable) + Branch: perl + ! Configure Makefile.SH + ____________________________________________________________________________ + [ 10787] By: nick on 2001/06/21 14:16:18 + Log: Integrate mainline + Branch: perlio + +> lib/I18N/LangTags/ChangeLog lib/I18N/LangTags/List.pm + +> lib/I18N/LangTags/README lib/Locale/Maketext/ChangeLog + +> lib/Locale/Maketext/README lib/Locale/Maketext/test.pl + - lib/I18N/LangTags/List.pod lib/Locale/Maketext.t + !> (integrate 34 files) + ____________________________________________________________________________ + [ 10786] By: jhi on 2001/06/21 13:59:32 + Log: Re-add the files as text. + Branch: perl + + t/lib/locale/latin1 t/lib/locale/utf8 t/lib/warnings/utf8 + ____________________________________________________________________________ + [ 10785] By: jhi on 2001/06/21 13:57:55 + Log: Delete the binary files. + Branch: perl + - t/lib/locale/latin1 t/lib/locale/utf8 t/lib/warnings/utf8 + ____________________________________________________________________________ + [ 10784] By: jhi on 2001/06/21 13:49:47 + Log: Subject: [PATCH 5.7.x] Unnecessary pod2man calls in new extensions + From: Andy Dougherty + Date: Thu, 21 Jun 2001 10:44:05 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/Digest/MD5/Makefile.PL ext/List/Util/Makefile.PL + ! ext/MIME/Base64/Makefile.PL ext/PerlIO/Scalar/Makefile.PL + ! ext/PerlIO/Via/Makefile.PL ext/Time/HiRes/Makefile.PL + ! ext/Time/Piece/Makefile.PL ext/XS/Typemap/Makefile.PL + ____________________________________________________________________________ + [ 10783] By: jhi on 2001/06/21 13:46:50 + Log: Subject: [ID 20010621.002] UnixWare 7.1.1 and Perl-5.6.1 problems + From: 0000-Admin (0000) + Date: Wed, 20 Jun 2001 14:11:49 +0200 (MET DST) + Message-Id: <200106201211.f5KCBnm24320@egg.karlov.mff.cuni.cz> + + Setting umask to something friendlier. + Branch: perl + ! installman installperl + ____________________________________________________________________________ + [ 10782] By: jhi on 2001/06/21 13:42:17 + Log: Shuffle around tests to (ext|lib)/.../t/ subdirectories. + Resort MANIFEST with sort -f, looks much better. + Branch: perl + + ext/File/Glob/t/basic.t ext/File/Glob/t/case.t + + ext/File/Glob/t/global.t ext/File/Glob/t/taint.t + + lib/Attribute/Handlers/test.pl lib/File/Temp/t/mktemp.t + + lib/File/Temp/t/posix.t lib/File/Temp/t/security.t + + lib/File/Temp/t/tempfile.t lib/Getopt/Long/t/basic.t + + lib/Getopt/Long/t/compat.t lib/Getopt/Long/t/linkage.t + + lib/Getopt/Long/t/oo.t lib/Text/TabsWrap/t/fill.t + + lib/Text/TabsWrap/t/tabs.t lib/Text/TabsWrap/t/wrap.t + - lib/Attribute/Handlers.t lib/File/Glob/basic.t + - lib/File/Glob/case.t lib/File/Glob/global.t + - lib/File/Glob/taint.t lib/File/Temp/mktemp.t + - lib/File/Temp/posix.t lib/File/Temp/security.t + - lib/File/Temp/tempfile.t lib/Getopt/Long/basic.t + - lib/Getopt/Long/compat.t lib/Getopt/Long/linkage.t + - lib/Getopt/Long/oo.t lib/Text/Tabs.t lib/Text/Wrap/fill.t + - lib/Text/Wrap/wrap.t + ! MANIFEST + ____________________________________________________________________________ + [ 10781] By: jhi on 2001/06/21 13:16:04 + Log: Upgrade to I18N::LangTags 0.25. + Branch: perl + ! lib/I18N/LangTags.pm lib/I18N/LangTags/ChangeLog + ! lib/I18N/LangTags/List.pm + ____________________________________________________________________________ + [ 10780] By: jhi on 2001/06/21 13:12:54 + Log: Subject: [PATCH] Step 2: Use the new PM_GETRE/SETRE macros everywhere. + From: Richard Soderberg + Date: Thu, 21 Jun 2001 07:01:22 -0700 (PDT) + Message-ID: + Branch: perl + ! dump.c ext/B/B.xs ext/B/B/C.pm ext/ByteLoader/bytecode.h mg.c + ! op.c pp.c pp_ctl.c pp_hot.c regexec.c + ____________________________________________________________________________ + [ 10779] By: jhi on 2001/06/21 12:59:57 + Log: Test obsoleted by change #10777. + Branch: perl + ! t/op/sub_lval.t + ____________________________________________________________________________ + [ 10778] By: jhi on 2001/06/21 12:52:37 + Log: Case of confused test numbering. + Branch: perl + ! t/op/pat.t + ____________________________________________________________________________ + [ 10777] By: jhi on 2001/06/21 12:30:57 + Log: Subject: Re: Opinion on undef lvalue + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 13:04:46 +0530 + Message-ID: <20010617130446.B27925@lustre.linux.in> + + Allow lvalue subs to return undef in array context. + Branch: perl + ! pp_hot.c + ____________________________________________________________________________ + [ 10776] By: jhi on 2001/06/21 12:27:48 + Log: Just a guess that using the same hack for cygwin as + for win32 might help. + Branch: perl + ! lib/File/Find/find.t + ____________________________________________________________________________ + [ 10775] By: jhi on 2001/06/21 12:25:58 + Log: NetWare tweaks from Guruprasad. + Branch: perl + ! NetWare/Makefile NetWare/Nwmain.c NetWare/config.wc + ! NetWare/config_H.wc NetWare/nw5sck.c NetWare/nw5sck.h + ! NetWare/nwperlsys.c NetWare/t/NWModify.pl + ! NetWare/t/NWScripts.pl NetWare/t/Readme.txt + ____________________________________________________________________________ + [ 10774] By: jhi on 2001/06/21 12:21:17 + Log: Subject: Re: perl@10722: Bogus warnings on REs + From: Hugo + Date: Thu, 21 Jun 2001 09:51:17 +0100 + Message-Id: <200106210851.JAA01942@crypt.compulink.co.uk> + + Unroll to avoid a UTS compiler bug. + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 10773] By: jhi on 2001/06/21 12:13:13 + Log: Subject: Re: [PATCH] Make /o work under i?threads + From: Artur Bergman + Date: Thu, 21 Jun 2001 14:38:03 +0200 + Message-ID: + Branch: perl + ! t/op/pat.t + ____________________________________________________________________________ + [ 10772] By: jhi on 2001/06/21 12:12:23 + Log: Subject: Re: [PATCH] Step 1 of moving regexps to the pad + From: Artur Bergman + Date: Thu, 21 Jun 2001 14:27:33 +0200 + Message-ID: + + Plus extra parentheses. + Branch: perl + ! op.h + ____________________________________________________________________________ + [ 10771] By: jhi on 2001/06/21 12:10:29 + Log: Subject: [PATCH] Make /o work under i?threads + From: Richard Soderberg + Date: Thu, 21 Jun 2001 05:21:43 -0700 (PDT) + Message-ID: + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 10770] By: jhi on 2001/06/21 12:09:28 + Log: Subject: Re: [PATCH] Step 1 of moving regexps to the pad + From: Artur Bergman + Date: Thu, 21 Jun 2001 14:04:54 +0200 + Message-ID: + Branch: perl + ! op.h + ____________________________________________________________________________ + [ 10769] By: jhi on 2001/06/21 12:08:03 + Log: Subject: Re: perl@10765: sv.c not OK on win32 + From: Artur Bergman + Date: Thu, 21 Jun 2001 10:31:06 +0200 + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10768] By: jhi on 2001/06/21 12:03:56 + Log: Subject: [PATCH 5.6.1] OS2 getpw*, getgr* + From: Ilya Zakharevich + Date: Thu, 21 Jun 2001 06:23:56 -0400 + Message-ID: <20010621062356.A8619@math.ohio-state.edu> + + Subject: Re: [PATCH 5.6.1] OS2 getpw*, getgr* + From: Ilya Zakharevich + Date: Thu, 21 Jun 2001 06:32:21 -0400 + Message-ID: <20010621063221.A8823@math.ohio-state.edu> + Branch: perl + ! lib/File/Glob/basic.t makedef.pl os2/os2.c os2/os2ish.h + ____________________________________________________________________________ + [ 10767] By: jhi on 2001/06/21 12:00:07 + Log: Subject: [PATCH] make syslog test more verbose + From: Robert Spier + Date: Thu, 21 Jun 2001 00:54:32 -0400 + Message-ID: <15153.32264.295807.333073@rls.cx> + Branch: perl + ! ext/Sys/Syslog/syslog.t + ____________________________________________________________________________ + [ 10766] By: jhi on 2001/06/20 23:27:57 + Log: Subject: op/study.t refinements + From: Hugo + Date: Thu, 21 Jun 2001 00:29:07 +0100 + Message-Id: <200106202329.AAA31397@crypt.compulink.co.uk> + Branch: perl + ! t/op/study.t + ____________________________________________________________________________ + [ 10765] By: jhi on 2001/06/20 19:51:47 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10764] By: jhi on 2001/06/20 19:00:23 + Log: Subject: Re: [PATCH] djgpp updates + From: Laszlo Molnar + Date: Wed, 20 Jun 2001 10:05:15 +0200 + Message-ID: <20010620100515.L5600@libra.eth.ericsson.se> + Branch: perl + ! djgpp/config.over + ____________________________________________________________________________ + [ 10763] By: jhi on 2001/06/20 18:58:06 + Log: Fix for ID 20010619.002 "When building hash, hash keys that + are function calls are not being called", from Abhijit. + Branch: perl + ! t/base/lex.t toke.c + ____________________________________________________________________________ + [ 10762] By: jhi on 2001/06/20 18:45:00 + Log: Upgrade to Locale::Maketext 1.02, from Sean Burke. + Branch: perl + + lib/Locale/Maketext/ChangeLog lib/Locale/Maketext/README + + lib/Locale/Maketext/test.pl + - lib/Locale/Maketext.t + ! MANIFEST lib/Locale/Maketext.pm lib/Locale/Maketext.pod + ! lib/Locale/Maketext/TPJ13.pod + ____________________________________________________________________________ + [ 10761] By: jhi on 2001/06/20 18:44:15 + Log: Metaconfig unit change for #10760. + Branch: metaconfig + ! U/modified/Cppsym.U + ____________________________________________________________________________ + [ 10760] By: jhi on 2001/06/20 18:42:04 + Log: Do not remove the ccsym* Cppsym* files since + they are useful for metaconfig units coming after us. + (This is the Configure nit mentioned in #10752.) + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10759] By: jhi on 2001/06/20 18:02:18 + Log: Update to I18N::LangTags 0.24, from Sean Burke. + Branch: perl + + lib/I18N/LangTags/ChangeLog lib/I18N/LangTags/List.pm + + lib/I18N/LangTags/README + - lib/I18N/LangTags/List.pod + ! MANIFEST lib/I18N/LangTags.pm lib/I18N/LangTags/test.pl + ____________________________________________________________________________ + [ 10758] By: jhi on 2001/06/20 17:34:43 + Log: Regen headers. + Branch: perl + ! embed.h embedvar.h global.sym perlapi.c perlapi.h + ! pod/perlapi.pod proto.h + ____________________________________________________________________________ + [ 10757] By: jhi on 2001/06/20 17:23:08 + Log: Subject: [PATCH] Fixes case of CvDEPTH for perl_clone + From: Artur Bergman + Date: Wed, 20 Jun 2001 11:31:32 +0200 + Message-ID: + Branch: perl + ! embed.pl hv.c intrpvar.h sv.c sv.h + ____________________________________________________________________________ + [ 10756] By: jhi on 2001/06/20 17:13:26 + Log: Subject: Fix for [ID 20010124.001] POSIX::errno unreliable + From: Tim Sweetman + Date: Wed, 13 Jun 2001 14:25:17 +0100 + Message-ID: <3B2769BD.68B4F4B3@aldigital.co.uk> + Branch: perl + ! ext/POSIX/POSIX.t lib/AutoLoader.pm + ____________________________________________________________________________ + [ 10755] By: nick on 2001/06/20 16:12:37 + Log: Integrate mainline + Branch: perlio + !> embed.h embed.pl ext/Cwd/Cwd.xs ext/Filter/t/call.t + !> ext/IO/lib/IO/Socket/INET.pm ext/IO/lib/IO/t/io_sock.t + !> ext/POSIX/POSIX.xs hints/mpeix.sh lib/File/Temp/security.t + !> lib/FileHandle.t mpeix/mpeixish.h mpeix/relink objXSUB.h + !> perlapi.c pod/perldiag.pod pp_sys.c proto.h t/op/pwent.t + !> t/op/study.t util.c + ____________________________________________________________________________ + [ 10754] By: gsar on 2001/06/20 15:22:27 + Log: missing ld entry in Config.pm on Windows (makefile.mk had it, + but not Makefile) + Branch: maint-5.6/perl + ! win32/Makefile + ____________________________________________________________________________ + [ 10753] By: jhi on 2001/06/20 14:03:20 + Log: Security tweak on readlink(). + Branch: perl + ! pp_sys.c + ____________________________________________________________________________ + [ 10752] By: jhi on 2001/06/20 14:00:23 + Log: MPE/iX fixes from Mark Bixby (a Configure fix is also needed.) + Branch: perl + ! ext/Filter/t/call.t ext/IO/lib/IO/t/io_sock.t hints/mpeix.sh + ! lib/File/Temp/security.t lib/FileHandle.t mpeix/mpeixish.h + ! mpeix/relink t/op/pwent.t + ____________________________________________________________________________ + [ 10751] By: jhi on 2001/06/20 13:57:27 + Log: Reinstate #10725 (with probe for alarm()). + Branch: perl + ! t/op/study.t + ____________________________________________________________________________ + [ 10750] By: jhi on 2001/06/20 13:53:46 + Log: Replace our implementation of realpath() with OpenBSD's + (src/lib/libc/stdlib/realpath.c 1.4). + Branch: perl + ! embed.h embed.pl ext/Cwd/Cwd.xs objXSUB.h perlapi.c + ! pod/perldiag.pod proto.h util.c + ____________________________________________________________________________ + [ 10749] By: jhi on 2001/06/20 13:07:49 + Log: Integrate perlio. + Branch: perl + !> perlio.c + ____________________________________________________________________________ + [ 10748] By: jhi on 2001/06/20 13:07:18 + Log: No point in going into memory-saving contortions + with getcwd() since there's a danger of buffer overflow. + Also make the POSIX extension to use sv_getcwd(). + Finally, a missed proto.h fragment. + Branch: perl + ! ext/POSIX/POSIX.xs proto.h util.c + ____________________________________________________________________________ + [ 10747] By: nick on 2001/06/20 12:38:26 + Log: Fix PERLIO=unix bug, while restoring maximal buffer in PerlIOBuf_unread. + Branch: perlio + ! perlio.c + ____________________________________________________________________________ + [ 10746] By: jhi on 2001/06/20 11:51:10 + Log: Subject: Re: Bug in IO::Socket::INET module (repeat) + From: Graham Barr + Date: Wed, 20 Jun 2001 11:05:49 +0100 + Message-ID: <20010620110549.I19188@pobox.com> + + reported in + + Subject: Bug in IO::Socket::INET module (repeat) + From: "Harmon S. Nine" + Date: Tue, 19 Jun 2001 09:41:35 -0400 + Message-ID: <3B2F568F.8080605@netarx.com> + + The bug was that the IO::Socket::INET constructor + did not allow a 'LocalPort' of 0. + Branch: perl + ! ext/IO/lib/IO/Socket/INET.pm + ____________________________________________________________________________ + [ 10745] By: nick on 2001/06/20 08:56:39 + Log: Integrate mainline. + Branch: perlio + !> (integrate 37 files) + ____________________________________________________________________________ + [ 10744] By: jhi on 2001/06/20 04:54:53 + Log: After some reading I don't think we can blindly + use systems' realpath(). Too many security problems, + too many buggy implementations. + + TODO: the realpath() emulation code in util.c doesn't + seem fully operational? (readlink(), for example?) + Branch: perl + ! Configure Makefile.micro Porting/Glossary Porting/config.sh + ! Porting/config_H config_h.SH embed.h embed.pl global.sym + ! objXSUB.h perlapi.c pod/perldiag.pod pod/perltoc.pod uconfig.h + ! uconfig.sh util.c vos/config.alpha.def vos/config.alpha.h + ! vos/config.ga.def vos/config.ga.h win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10743] By: jhi on 2001/06/20 00:48:48 + Log: Metaconfig unit change for #10738. + Branch: metaconfig + ! U/compline/d_gconvert.U + ____________________________________________________________________________ + [ 10742] By: jhi on 2001/06/20 00:48:20 + Log: Integrate change #10739 from maintperl: + + C fails to compile correctly + Branch: perl + !> t/op/pat.t toke.c + ____________________________________________________________________________ + [ 10741] By: jhi on 2001/06/20 00:41:05 + Log: Retract #10725 (Hugo asked NOT to apply the patch) + Branch: perl + ! t/op/study.t + ____________________________________________________________________________ + [ 10740] By: jhi on 2001/06/19 23:58:25 + Log: The test.third results were funnily named because of the + new test scheme. + Branch: perl + ! t/TEST + ____________________________________________________________________________ + [ 10739] By: gsar on 2001/06/19 23:49:15 + Log: C fails to compile correctly + Branch: maint-5.6/perl + ! t/op/pat.t toke.c + ____________________________________________________________________________ + [ 10738] By: jhi on 2001/06/19 23:04:15 + Log: Subject: [ID 20010619.012] Not OK: perl v5.7.1 +DEVEL10721 +devel-10722 on alpha-dec_osf-per lio 4.0f (UNINSTALLED) + From: Spider Boardman + Date: Tue, 19 Jun 2001 19:15:40 -0400 + Message-Id: <200106192315.TAA18531@Orb.Nashua.NH.US> + + The bigintpm.t #1183 failing in Tru64 (and also Cygwin) + because "1e+129" being expected but "1.e+129" being returned. + The culprit (at least in Tru64) is the use of gcvt(). + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10737] By: jhi on 2001/06/19 22:56:52 + Log: Subject: [PATCH perl@10722] test hunting on VMS + From: "Craig A. Berry" + Message-Id: <5.1.0.14.0.20010619183530.01c4bdb8@exchi01> + Date: Tue, 19 Jun 2001 18:59:01 -0500 + Branch: perl + ! vms/test.com + ____________________________________________________________________________ + [ 10736] By: jhi on 2001/06/19 21:32:29 + Log: Subject: [PATCH] s/typos// + From: Abhijit Menon-Sen + Date: Wed, 20 Jun 2001 02:15:02 +0530 + Message-ID: <20010620021502.A14541@lustre.linux.in> + + Without the op.h s/bearword/bareword/ hunk, see + http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-02/msg00370.html + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10735] By: jhi on 2001/06/19 21:26:43 + Log: Metaconfig unit change for #10732 and #10733. + Branch: metaconfig/U/perl + ! fflushall.U + ____________________________________________________________________________ + [ 10734] By: jhi on 2001/06/19 21:24:41 + Log: Subject: [PATCH perl@10722] build ext/Socket dynamically on VMS + From: "Craig A. Berry" + Date: Tue, 19 Jun 2001 17:19:48 -0500 + Message-Id: <5.1.0.14.0.20010619165650.01bd8478@exchi01> + Branch: perl + ! configure.com vms/descrip_mms.template + ____________________________________________________________________________ + [ 10733] By: jhi on 2001/06/19 19:57:44 + Log: Subject: [ID 20010619.011] Not OK: perl v5.7.1 +DEVEL10721 +devel-10722 on alpha-dec_osf-per lio 4.0f (UNINSTALLED) + From: Spider Boardman + Date: Tue, 19 Jun 2001 16:48:07 -0400 + Message-Id: <200106192048.QAA20849@Orb.Nashua.NH.US> + + Further fixes to fflush(NULL) detection. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10732] By: jhi on 2001/06/19 19:38:20 + Log: AIX test -s hangs with non-existent files? + (A genuine logic bug in Configure, but AIX also broken?) + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10731] By: jhi on 2001/06/19 19:17:35 + Log: AUTHORS updates. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10730] By: jhi on 2001/06/19 19:03:07 + Log: Subject: [ID 20010619.007] Not OK: perl v5.7.1 +DEVEL10721 +devel-10722 on alpha-dec_osf-perlio 4.0f (UNINSTALLED) + From: Spider Boardman + Date: Tue, 19 Jun 2001 15:33:25 -0400 + Message-Id: <200106191933.PAA08415@Orb.Nashua.NH.US> + Branch: perl + ! ext/POSIX/POSIX.t lib/warnings.t perlio.c t/lib/1_compile.t + ! t/lib/warnings/pp + ____________________________________________________________________________ + [ 10729] By: jhi on 2001/06/19 18:34:10 + Log: Integrate perlio. + Branch: perl + !> lib/File/Find/find.t win32/distclean.bat + ____________________________________________________________________________ + [ 10728] By: nick on 2001/06/19 18:24:53 + Log: Hack File/Find/find.t to use File::Spec::Unix on Win32. + Branch: perlio + ! lib/File/Find/find.t win32/distclean.bat + ____________________________________________________________________________ + [ 10727] By: jhi on 2001/06/19 18:07:31 + Log: Furthwer tweak the fdopen() spot as suggseted by Jeff Pinyan; + also add information how to find out whether one has PerlIO. + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10726] By: jhi on 2001/06/19 17:59:30 + Log: Subject: [ID 20010619.005] two typos in pod/perlfunc.pod + From: Jeffrey Friedl + Date: Tue, 19 Jun 2001 11:36:32 -0700 (PDT) + Message-Id: <200106191836.LAA21471@ventrue.corp.yahoo.com> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10725] By: jhi on 2001/06/19 17:28:30 + Log: Subject: Re: [ID 20010618.006] some end-anchored regexps hang when using study + From: Hugo + Date: Tue, 19 Jun 2001 12:37:30 +0100 + Message-Id: <200106191137.MAA15185@crypt.compulink.co.uk> + Branch: perl + ! t/op/study.t + ____________________________________________________________________________ + [ 10724] By: jhi on 2001/06/19 17:22:20 + Log: Subject: Re: [ID 20010618.006] some end-anchored regexps hang when using study + From: Hugo + Message-Id: <200106191215.NAA17691@crypt.compulink.co.uk> + Date: Tue, 19 Jun 2001 13:15:17 +0100 + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10723] By: nick on 2001/06/19 14:46:15 + Log: Integrate mainline + Branch: perlio + +> ext/IPC/SysV/ipcsysv.t ext/Thread/create.tx ext/Thread/die.tx + +> ext/Thread/die2.tx ext/Thread/io.tx ext/Thread/join.tx + +> ext/Thread/join2.tx ext/Thread/list.tx ext/Thread/lock.tx + +> ext/Thread/queue.tx ext/Thread/specific.tx ext/Thread/sync.tx + +> ext/Thread/sync2.tx ext/Thread/unsync.tx ext/Thread/unsync2.tx + +> ext/Thread/unsync3.tx ext/Thread/unsync4.tx + - ext/Thread/create.t ext/Thread/die.t ext/Thread/die2.t + - ext/Thread/io.t ext/Thread/join.t ext/Thread/join2.t + - ext/Thread/list.t ext/Thread/lock.t ext/Thread/queue.t + - ext/Thread/specific.t ext/Thread/sync.t ext/Thread/sync2.t + - ext/Thread/unsync.t ext/Thread/unsync2.t ext/Thread/unsync3.t + - ext/Thread/unsync4.t + !> Changes MANIFEST NetWare/Makefile NetWare/config.wc + !> djgpp/config.over djgpp/fixpmain + !> ext/DynaLoader/DynaLoader_pm.PL ext/IPC/SysV/t/msg.t + !> ext/IPC/SysV/t/sem.t handy.h hv.c lib/ExtUtils/MM_Unix.pm + !> patchlevel.h perl.h utils/libnetcfg.PL win32/Makefile + ____________________________________________________________________________ + [ 10722] By: jhi on 2001/06/19 11:55:30 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10721] By: jhi on 2001/06/19 11:29:34 + Log: The existence shall be MANIFESted. + Branch: perl + ! MANIFEST + ____________________________________________________________________________ + [ 10720] By: jhi on 2001/06/19 10:58:09 + Log: The old libnet.cfg is first searched from the current directory, + only then from the module path. + Branch: perl + ! utils/libnetcfg.PL + ____________________________________________________________________________ + [ 10719] By: jhi on 2001/06/19 10:55:59 + Log: NetWare tweaks from Guruprasad. + Branch: perl + ! NetWare/Makefile NetWare/config.wc + ____________________________________________________________________________ + [ 10718] By: jhi on 2001/06/19 10:54:22 + Log: Subject: [PATCH] djgpp updates + From: Laszlo Molnar + Date: Tue, 19 Jun 2001 10:59:06 +0200 + Message-ID: <20010619105906.C5600@libra.eth.ericsson.se> + Branch: perl + ! djgpp/config.over djgpp/fixpmain + ____________________________________________________________________________ + [ 10717] By: jhi on 2001/06/19 10:53:20 + Log: Subject: [PATCH: perl@10689]let MS VC 5 resolve _PerlIO_win32 + From: Prymmer/Kahn + Date: Mon, 18 Jun 2001 23:48:52 -0700 (PDT) + Message-ID: + Branch: perl + ! win32/Makefile + ____________________________________________________________________________ + [ 10716] By: jhi on 2001/06/19 10:52:25 + Log: The INT32_MIN_BROKEN and INT64_MIN_BROKEN tweaks needs + to happen right after the inclusion of , + from Edward Moy. + Branch: perl + ! handy.h perl.h + ____________________________________________________________________________ + [ 10715] By: jhi on 2001/06/19 10:49:21 + Log: Subject: [patch] preserve @DynaLoader::dl_{librefs,modules} + From: Doug MacEachern + Date: Mon, 18 Jun 2001 22:13:38 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/DynaLoader/DynaLoader_pm.PL + ____________________________________________________________________________ + [ 10714] By: jhi on 2001/06/19 10:48:19 + Log: Revert #10656 for perfomance reasons but leave in the + use of Hv*() macros -- in comments, so that grepping the + source is easier, from Abhijit. (Also add the ENV_HV_NAME speedup + suggested by Sarathy, also by Abhijit.) + Branch: perl + ! hv.c + ____________________________________________________________________________ + [ 10713] By: jhi on 2001/06/19 10:46:08 + Log: Subject: [patch] .s MakeMaker suffix + From: Doug MacEachern + Date: Mon, 18 Jun 2001 21:23:11 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 10712] By: jhi on 2001/06/19 10:34:35 + Log: One test lost in the big shuffle restored. + Branch: perl + + ext/IPC/SysV/ipcsysv.t + ! MANIFEST ext/IPC/SysV/t/msg.t ext/IPC/SysV/t/sem.t + ____________________________________________________________________________ + [ 10711] By: jhi on 2001/06/19 10:25:46 + Log: Rename the old non-standard threads tests so that + they won't be invoked. + Branch: perl + + ext/Thread/create.tx ext/Thread/die.tx ext/Thread/die2.tx + + ext/Thread/io.tx ext/Thread/join.tx ext/Thread/join2.tx + + ext/Thread/list.tx ext/Thread/lock.tx ext/Thread/queue.tx + + ext/Thread/specific.tx ext/Thread/sync.tx ext/Thread/sync2.tx + + ext/Thread/unsync.tx ext/Thread/unsync2.tx + + ext/Thread/unsync3.tx ext/Thread/unsync4.tx + - ext/Thread/create.t ext/Thread/die.t ext/Thread/die2.t + - ext/Thread/io.t ext/Thread/join.t ext/Thread/join2.t + - ext/Thread/list.t ext/Thread/lock.t ext/Thread/queue.t + - ext/Thread/specific.t ext/Thread/sync.t ext/Thread/sync2.t + - ext/Thread/unsync.t ext/Thread/unsync2.t ext/Thread/unsync3.t + - ext/Thread/unsync4.t + ! MANIFEST + ____________________________________________________________________________ + [ 10710] By: jhi on 2001/06/19 10:18:41 + Log: Integrate perlio. + Branch: perl + !> win32/config_sh.PL + ____________________________________________________________________________ + [ 10709] By: nick on 2001/06/19 08:18:18 + Log: Integrate mainline + Branch: perlio + +> (branch 40 files) + - lib/locale/latin1 lib/locale/utf8 lib/strict/refs + - lib/strict/subs lib/strict/vars lib/warnings/1global + - lib/warnings/2use lib/warnings/3both lib/warnings/4lint + - lib/warnings/5nolint lib/warnings/6default lib/warnings/7fatal + - lib/warnings/8signal lib/warnings/9enabled lib/warnings/av + - lib/warnings/doio lib/warnings/doop lib/warnings/gv + - lib/warnings/hv lib/warnings/malloc lib/warnings/mg + - lib/warnings/op lib/warnings/perl lib/warnings/perlio + - lib/warnings/perly lib/warnings/pp lib/warnings/pp_ctl + - lib/warnings/pp_hot lib/warnings/pp_sys lib/warnings/regcomp + - lib/warnings/regexec lib/warnings/run lib/warnings/sv + - lib/warnings/taint lib/warnings/toke lib/warnings/universal + - lib/warnings/utf8 lib/warnings/util + !> (integrate 57 files) + ____________________________________________________________________________ + [ 10708] By: nick on 2001/06/19 07:57:10 + Log: Get Win32 known_extensions and extensions right in config.sh and hence Config.pm + Branch: perlio + ! win32/config_sh.PL + ____________________________________________________________________________ + [ 10707] By: nick on 2001/06/19 07:05:07 + Log: Perly.y and related file fixes to keep mainframe yacc (and bison) happy. + Branch: perl + ! perly.c perly.y perly_c.diff vms/perly_c.vms + ____________________________________________________________________________ + [ 10706] By: jhi on 2001/06/19 02:58:26 + Log: More perl572delta tweaks. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10705] By: jhi on 2001/06/19 01:53:40 + Log: Update perl572delta. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10704] By: jhi on 2001/06/19 01:28:40 + Log: VOS updates from Paul Green. + Branch: perl + ! vos/Changes vos/build.cm vos/perl.bind + ____________________________________________________________________________ + [ 10703] By: jhi on 2001/06/19 01:03:53 + Log: Update the vos/config.*.* files. + Branch: perl + ! vos/config.alpha.def vos/config.alpha.h vos/config.ga.def + ! vos/config.ga.h + ____________________________________________________________________________ + [ 10702] By: jhi on 2001/06/19 01:03:32 + Log: Add a makefile for more painless adding of symbols to the + VOS headers while in UNIX (in VOS the vos/configure_perl.cm + takes care of the adding) + Branch: perl + + vos/Makefile + ____________________________________________________________________________ + [ 10701] By: jhi on 2001/06/19 00:51:44 + Log: Make libnetcfg by default display the libnet configuration, + -c to change, add -i for old config, document all options, + regen toc. + Branch: perl + ! pod/perltoc.pod pod/perlutil.pod utils/libnetcfg.PL + ____________________________________________________________________________ + [ 10700] By: jhi on 2001/06/18 23:45:12 + Log: gcc -Wall sweep. + Branch: perl + ! ext/IO/IO.xs ext/Time/Piece/Piece.xs + ____________________________________________________________________________ + [ 10699] By: jhi on 2001/06/18 23:19:53 + Log: So there. + Branch: perl + ! universal.c + ____________________________________________________________________________ + [ 10698] By: jhi on 2001/06/18 23:10:22 + Log: Document the need for sv_printify(). + + Document that 'use utf8' has been considered. + + (An unfinished, gcc 3.0 -Wall nit fix also slipped in, gack.) + Branch: perl + ! pod/perltodo.pod universal.c + ____________________________________________________________________________ + [ 10697] By: jhi on 2001/06/18 22:50:53 + Log: Subject: Re: [PATCH] Re: [PATCH] Re: perl@10611 + From: Nicholas Clark + Date: Mon, 18 Jun 2001 23:29:23 +0100 + Message-ID: <20010618232923.I98663@plum.flirble.org> + Branch: perl + ! ext/POSIX/Makefile.PL ext/Socket/Makefile.PL + ! ext/Sys/Syslog/Makefile.PL + ____________________________________________________________________________ + [ 10696] By: jhi on 2001/06/18 22:39:32 + Log: Subject: [PATCH: 5.6.1] perl5db.pl v1.07 + docs + From: Scott.L.Miller@Compaq.com + Date: Mon, 18 Jun 2001 10:12:27 -0500 + Message-ID: <86256A6F.00538A54.00@omacmta01.custom-edge.com> + Branch: perl + ! lib/perl5db.pl pod/perldebug.pod + ____________________________________________________________________________ + [ 10695] By: jhi on 2001/06/18 22:35:13 + Log: Subject: [PATCH lib/Carp/Heavy.pm] malformed POSIX negation + From: "Jeff 'japhy' Pinyan" + Date: Mon, 18 Jun 2001 16:52:24 -0400 (EDT) + Message-ID: + Branch: perl + ! lib/Carp/Heavy.pm + ____________________________________________________________________________ + [ 10694] By: jhi on 2001/06/18 22:34:06 + Log: Subject: [PATCH] Documentation changes for CLONE + From: Artur Bergman + Date: Mon, 18 Jun 2001 22:06:37 +0200 + Message-ID: + Branch: perl + ! pod/perlmod.pod pod/perlsub.pod + ____________________________________________________________________________ + [ 10693] By: jhi on 2001/06/18 22:31:38 + Log: Subject: Re: configure.com + From: "Craig A. Berry" + Date: Mon, 18 Jun 2001 16:04:38 -0500 + Message-Id: <5.1.0.14.0.20010618154549.0318c090@mail.mac.com> + Branch: perl + ! configure.com + ____________________________________________________________________________ + [ 10692] By: jhi on 2001/06/18 22:30:43 + Log: Subject: PL_nullstash + perl_clone() + From: Doug MacEachern + Date: Mon, 18 Jun 2001 16:24:22 -0700 (PDT) + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10691] By: jhi on 2001/06/18 22:26:20 + Log: Subject: Re: [PATCH 5.7.1] sv.c documentation + From: davem@fdgroup.co.uk + Date: Mon, 18 Jun 2001 21:29:45 +0100 (BST) + Message-Id: <200106182029.VAA06503@gizmo.fdgroup.co.uk> + Branch: perl + ! embed.pl pod/perlapi.pod + ____________________________________________________________________________ + [ 10690] By: jhi on 2001/06/18 22:17:05 + Log: More cross-compilation defaults gleaned from -Dcc + if it is CPU-OS-gcc. + Branch: metaconfig + ! U/modified/libc.U + Branch: metaconfig/U/perl + ! Cross.U + Branch: perl + ! Configure INSTALL + ____________________________________________________________________________ + [ 10689] By: jhi on 2001/06/18 13:59:47 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10688] By: jhi on 2001/06/18 13:44:18 + Log: Subject: [PATCH 5.7.1] sv.c documentation + From: davem@fdgroup.co.uk + Date: Mon, 18 Jun 2001 00:47:52 +0100 (BST) + Message-Id: <200106172347.AAA05475@gizmo.fdgroup.co.uk> + Branch: perl + ! embed.pl pod/perlapi.pod pod/perlguts.pod pod/perlintern.pod + ! sv.c sv.h + ____________________________________________________________________________ + [ 10687] By: jhi on 2001/06/18 13:38:03 + Log: Subject: [PATCH bleadperl DOC] $@ Clarification in pod/perlvar.pod + From: "Jon Gunnip" + Date: Sun, 17 Jun 2001 18:24:29 -0400 + Message-ID: + Branch: perl + ! pod/perlvar.pod + ____________________________________________________________________________ + [ 10686] By: jhi on 2001/06/18 13:32:13 + Log: Move the locale/strict/warnings helper files back + under the t/lib; this way the amount of non-installabled + stuff under lib/ stays smaller. + Branch: perl + + t/lib/locale/latin1 t/lib/locale/utf8 t/lib/strict/refs + + t/lib/strict/subs t/lib/strict/vars t/lib/warnings/1global + + t/lib/warnings/2use t/lib/warnings/3both t/lib/warnings/4lint + + t/lib/warnings/5nolint t/lib/warnings/6default + + t/lib/warnings/7fatal t/lib/warnings/8signal + + t/lib/warnings/9enabled t/lib/warnings/av t/lib/warnings/doio + + t/lib/warnings/doop t/lib/warnings/gv t/lib/warnings/hv + + t/lib/warnings/malloc t/lib/warnings/mg t/lib/warnings/op + + t/lib/warnings/perl t/lib/warnings/perlio t/lib/warnings/perly + + t/lib/warnings/pp t/lib/warnings/pp_ctl t/lib/warnings/pp_hot + + t/lib/warnings/pp_sys t/lib/warnings/regcomp + + t/lib/warnings/regexec t/lib/warnings/run t/lib/warnings/sv + + t/lib/warnings/taint t/lib/warnings/toke + + t/lib/warnings/universal t/lib/warnings/utf8 + + t/lib/warnings/util + - lib/locale/latin1 lib/locale/utf8 lib/strict/refs + - lib/strict/subs lib/strict/vars lib/warnings/1global + - lib/warnings/2use lib/warnings/3both lib/warnings/4lint + - lib/warnings/5nolint lib/warnings/6default lib/warnings/7fatal + - lib/warnings/8signal lib/warnings/9enabled lib/warnings/av + - lib/warnings/doio lib/warnings/doop lib/warnings/gv + - lib/warnings/hv lib/warnings/malloc lib/warnings/mg + - lib/warnings/op lib/warnings/perl lib/warnings/perlio + - lib/warnings/perly lib/warnings/pp lib/warnings/pp_ctl + - lib/warnings/pp_hot lib/warnings/pp_sys lib/warnings/regcomp + - lib/warnings/regexec lib/warnings/run lib/warnings/sv + - lib/warnings/taint lib/warnings/toke lib/warnings/universal + - lib/warnings/utf8 lib/warnings/util + ! MANIFEST installperl lib/locale.t lib/strict.t + ____________________________________________________________________________ + [ 10685] By: jhi on 2001/06/18 13:11:49 + Log: Split off the pack/unpack code, from Nicholas Clark. + Branch: perl + + pp_pack.c + ! MANIFEST Makefile.SH Makefile.micro cflags.SH embed.h embed.pl + ! objXSUB.h perlapi.c pod/perlhack.pod pp.c proto.h + ! vms/descrip_mms.template win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 10684] By: jhi on 2001/06/18 12:25:55 + Log: Guard the SysV IPC tests against being invoked in + SysV-IPC-less places. + Branch: perl + ! ext/IPC/SysV/t/msg.t ext/IPC/SysV/t/sem.t + ____________________________________________________________________________ + [ 10683] By: nick on 2001/06/18 12:24:42 + Log: Integrate mainline (new test scheme now ok on Linux). + Branch: perlio + +> lib/warnings.t + !> dump.c sv.c + ____________________________________________________________________________ + [ 10682] By: jhi on 2001/06/18 12:20:50 + Log: Add the locale.c and numeric.c to the microperl sources. + Branch: perl + ! Makefile.micro win32/Makefile + ____________________________________________________________________________ + [ 10681] By: jhi on 2001/06/18 11:57:45 + Log: Subject: [PATCH dump.c] FLAGS = (...,OUR,TYPED,...) + From: Abhijit Menon-Sen + Date: Mon, 18 Jun 2001 14:23:44 +0530 + Message-ID: <20010618142344.A13136@lustre.linux.in> + Branch: perl + ! dump.c + ____________________________________________________________________________ + [ 10680] By: jhi on 2001/06/18 11:56:12 + Log: Subject: Re: [PATCH] more anonymous stash cleanups + From: Abhijit Menon-Sen + Date: Mon, 18 Jun 2001 15:50:32 +0530 + Message-ID: <20010618155032.A13223@lustre.linux.in> + + Plus the comment left in as suggested by NI-S. + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10679] By: jhi on 2001/06/18 11:49:27 + Log: One missed file. + Branch: perl + + lib/warnings.t + ____________________________________________________________________________ + [ 10678] By: nick on 2001/06/18 08:05:29 + Log: Integrate mainline (part2 - the deletes) + Branch: perlio + - lib/Text/Abbrev/t/abbrev.t t/lib/anydbm.t t/lib/b-stash.t + - t/lib/bigfltpm.t t/lib/bigintpm.t t/lib/cwd.t t/lib/db-btree.t + - t/lib/db-hash.t t/lib/db-recno.t t/lib/extutils.t + - t/lib/filefind.t t/lib/filehand.t t/lib/filter-util.t + - t/lib/findtaint.t t/lib/ftmp-security.t t/lib/gdbm.t + - t/lib/glob-basic.t t/lib/glob-case.t t/lib/io_dup.t + - t/lib/io_poll.t t/lib/io_sel.t t/lib/io_taint.t t/lib/mbimbf.t + - t/lib/ndbm.t t/lib/net-hostent.t t/lib/odbm.t t/lib/open2.t + - t/lib/open3.t t/lib/posix.t t/lib/sdbm.t t/lib/sigaction.t + - t/lib/syslfs.t t/pragma/locale.t t/pragma/strict.t + - t/pragma/subs.t t/pragma/warn/mg t/pragma/warnings.t + ____________________________________________________________________________ + [ 10677] By: nick on 2001/06/18 08:04:44 + Log: Integrate mainline (part1) + Branch: perlio + +> (branch 376 files) + - (delete 219 files) + !> (integrate 151 files) + ____________________________________________________________________________ + [ 10676] By: jhi on 2001/06/18 04:17:15 + Log: The Grand Trek: move the *.t files from t/ to lib/ and ext/. + No doubt I made some mistakes like missed some files or + misnamed some files. The naming rules were more or less: + (1) if the module is from CPAN, follows its ways, be it + t/*.t or test.pl. + (2) otherwise if there are multiple tests for a module + put them in a t/ + (3) otherwise if there's only one test put it in Module.t + (4) helper files go to module/ (locale, strict, warnings) + (5) use longer filenames now that we can (but e.g. the + compat-0.6.t and the Text::Balanced test files still + were renamed to be more civil against the 8.3 people) + installperl was updated appropriately not to install the + *.t files or the help files from under lib. + + TODO: some helper files still remain under t/ that could + follow their 'masters'. UPDATE: On second thoughts, why + should they. They can continue to live under t/lib, and + in fact the locale/strict/warnings helpers that were moved + could be moved back. This way the amount of non-installable + stuff under lib/ stays smaller. + Branch: perl + + (add 253 files) + - (delete 254 files) + ! MANIFEST installperl lib/Test/Harness.pm t/TEST t/harness + ____________________________________________________________________________ + [ 10675] By: jhi on 2001/06/18 03:15:02 + Log: The warning no more comes from util.c, it comes from numeric.c. + Branch: perl + ! README.tru64 + ____________________________________________________________________________ + [ 10674] By: jhi on 2001/06/18 00:56:22 + Log: Subject: Re: anyone good at casting spells? + From: Spider Boardman + Date: Sun, 17 Jun 2001 21:21:04 -0400 + Message-Id: <200106180121.VAA10195@Orb.Nashua.NH.US> + Branch: perl + ! ext/POSIX/POSIX.xs hv.h + ____________________________________________________________________________ + [ 10673] By: jhi on 2001/06/17 22:24:53 + Log: Protect the (original) thread tests against testing if no 5.005 + threads have been configured. + Branch: perl + ! ext/Thread/create.t ext/Thread/die.t ext/Thread/die2.t + ! ext/Thread/io.t ext/Thread/join.t ext/Thread/join2.t + ! ext/Thread/list.t ext/Thread/lock.t ext/Thread/queue.t + ! ext/Thread/specific.t ext/Thread/sync.t ext/Thread/sync2.t + ! ext/Thread/unsync.t ext/Thread/unsync2.t ext/Thread/unsync3.t + ! ext/Thread/unsync4.t + ____________________________________________________________________________ + [ 10672] By: jhi on 2001/06/17 22:09:28 + Log: Try the new test scanning scheme on Text::Abbrev. + Branch: perl + + lib/Text/Abbrev.t + - lib/Text/Abbrev/t/abbrev.t + ! MANIFEST + ____________________________________________________________________________ + [ 10671] By: jhi on 2001/06/17 22:07:08 + Log: Change the scan policy of the *.t and test.pl files, + now the *.t do not need to live in a t/ directory. + Branch: perl + ! t/TEST t/harness + ____________________________________________________________________________ + [ 10670] By: jhi on 2001/06/17 20:32:35 + Log: Subject: [PATCH perlfaq7.pod] fix dangling L + From: Ilmari Karonen + Date: Mon, 18 Jun 2001 00:30:21 +0300 (EET DST) + Message-ID: + Branch: perl + ! pod/perlfaq7.pod + ____________________________________________________________________________ + [ 10669] By: jhi on 2001/06/17 20:30:22 + Log: Quench the warnings from Tru64; the HP-UX is still + broken because it really, REALLY, doesn't like the + HvARRAY() being lvalue: + + cc: "hv.c", line 192: warning 524: Cast (non-lvalue) appears on left-hand side of assignment. + cc: "hv.c", line 192: error 1549: Modifiable lvalue required for assignment operator. + Branch: perl + ! hv.c + ____________________________________________________________________________ + [ 10668] By: jhi on 2001/06/17 19:13:24 + Log: Integrate change #10667 from maintperl: + + change#10449 broke the special-case that makes lexicals inside the + eval"" within DB::DB() visible + Branch: perl + !> op.c + ____________________________________________________________________________ + [ 10667] By: gsar on 2001/06/17 19:08:27 + Log: change#10449 broke the special-case that makes lexicals inside the + eval"" within DB::DB() visible + Branch: maint-5.6/perl + ! op.c + ____________________________________________________________________________ + [ 10666] By: jhi on 2001/06/17 17:50:07 + Log: Still spurious output; indent the code a bit. + + TODO1: separate the utility functions like MkDir + into a helper script? + + TODO2: I see a lot of repetition in the filepath() + and dirpath() calls. + Branch: perl + ! t/lib/filefind.t t/lib/findtaint.t + ____________________________________________________________________________ + [ 10665] By: jhi on 2001/06/17 16:59:42 + Log: Regen modlib, toc. + Branch: perl + ! pod/perlmodlib.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 10664] By: jhi on 2001/06/17 16:55:28 + Log: Add libnetcfg to perlutil. + Branch: perl + ! pod/perlutil.pod + ____________________________________________________________________________ + [ 10663] By: jhi on 2001/06/17 16:53:29 + Log: Initial integration of libnet-1.0703. + The Configure script renamed as libnetcfg, will be + installed along other utilities. + Branch: perl + + lib/Net/ChangeLog.libnet lib/Net/Cmd.pm lib/Net/Config.eg + + lib/Net/Config.pm lib/Net/Domain.pm lib/Net/DummyInetd.pm + + lib/Net/FTP.pm lib/Net/FTP/A.pm lib/Net/FTP/E.pm + + lib/Net/FTP/I.pm lib/Net/FTP/L.pm lib/Net/FTP/dataconn.pm + + lib/Net/Hostname.eg lib/Net/NNTP.pm lib/Net/Netrc.pm + + lib/Net/PH.pm lib/Net/POP3.pm lib/Net/README.config + + lib/Net/README.libnet lib/Net/SMTP.pm lib/Net/SNPP.pm + + lib/Net/Time.pm lib/Net/demos/ftp lib/Net/demos/inetd + + lib/Net/demos/nntp lib/Net/demos/nntp.mirror + + lib/Net/demos/pop3 lib/Net/demos/smtp.self lib/Net/demos/snpp + + lib/Net/demos/time lib/Net/libnet.ppd lib/Net/libnetFAQ.pod + + lib/Net/t/ftp.t lib/Net/t/hostname.t lib/Net/t/nntp.t + + lib/Net/t/ph.t lib/Net/t/require.t lib/Net/t/smtp.t + + utils/libnetcfg.PL + ! MANIFEST utils.lst utils/Makefile + ____________________________________________________________________________ + [ 10662] By: jhi on 2001/06/17 15:37:32 + Log: Less potentially test-harness-confusing output. + Branch: perl + ! lib/Memoize/t/expire_module_t.t + ____________________________________________________________________________ + [ 10661] By: jhi on 2001/06/17 15:31:04 + Log: The final print annoys make test. + Branch: perl + ! t/lib/filefind.t t/lib/findtaint.t + ____________________________________________________________________________ + [ 10660] By: jhi on 2001/06/17 14:00:21 + Log: Add an option for handling dangling symbolic links. + Branch: perl + ! lib/File/Find.pm t/lib/filefind.t + ____________________________________________________________________________ + [ 10659] By: jhi on 2001/06/17 13:45:48 + Log: Subject: Re: [MacPerl-Porters] Re: [PATCH] File::Find for bleadperl, Mac OS etc. + From: Thomas Wegner + Date: Sun, 17 Jun 2001 14:43:11 +0200 + Message-Id: + Branch: perl + + t/lib/findtaint.t + ! MANIFEST lib/File/Find.pm t/lib/filefind.t + ____________________________________________________________________________ + [ 10658] By: jhi on 2001/06/17 13:13:25 + Log: Subject: [PATCH ExtUtils/MM_Unix.pm perl@10654] Remove tmon.out in make clean + From: Jonathan Stowe + Date: Sun, 17 Jun 2001 11:26:21 +0100 (BST) + Message-ID: + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 10657] By: jhi on 2001/06/17 13:12:25 + Log: Subject: [PATCH] more anonymous stash cleanups + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 11:44:06 +0530 + Message-ID: <20010617114406.A25203@lustre.linux.in> + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 10656] By: jhi on 2001/06/17 13:11:11 + Log: Subject: [PATCH #1/7] xhv_array (was Re: Using xhv_foo instead of HvFOO) + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 08:02:59 +0530 + Message-ID: <20010617080259.A28776@lustre.linux.in> + + Subject: [PATCH #2/7] xhv_eiter + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 08:13:18 +0530 + Message-ID: <20010617081318.B28776@lustre.linux.in> + + Subject: [PATCH #3/7] xhv_fill + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 08:25:16 +0530 + Message-ID: <20010617082516.C28776@lustre.linux.in> + + Subject: [PATCH #4/7] xhv_keys + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 08:36:17 +0530 + Message-ID: <20010617083617.D28776@lustre.linux.in> + + Subject: [PATCH #5/7] xhv_max + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 08:39:48 +0530 + Message-ID: <20010617083948.E28776@lustre.linux.in> + + Subject: [PATCH #6,7/7] xhv_pmroot, xhv_riter + From: Abhijit Menon-Sen + Date: Sun, 17 Jun 2001 08:51:11 +0530 + Message-ID: <20010617085111.F28776@lustre.linux.in> + Branch: perl + ! hv.c + ____________________________________________________________________________ + [ 10655] By: jhi on 2001/06/16 23:32:03 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10654] By: jhi on 2001/06/16 23:18:37 + Log: Subject: [PATCH] Re: DYNAMIC_ENV_FETCH HvNAME abuse. + From: Abhijit Menon-Sen + Date: Sat, 16 Jun 2001 07:41:19 +0530 + Message-ID: <20010616074119.A24720@lustre.linux.in> + Branch: perl + ! hv.c perl.c vms/vmsish.h win32/win32.h + ____________________________________________________________________________ + [ 10653] By: jhi on 2001/06/16 23:15:11 + Log: Document tests failing when threaded, since we now have more. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10652] By: jhi on 2001/06/16 23:12:19 + Log: -Wall cleanup. + Branch: perl + ! ext/Thread/Thread.xs + ____________________________________________________________________________ + [ 10651] By: jhi on 2001/06/16 23:06:55 + Log: pthread_attr_setstacksize() isn't absolutely necessary + to call, only iff THREAD_CREATE_NEEDS_STACK. + Branch: perl + ! ext/Thread/Thread.xs + ____________________________________________________________________________ + [ 10650] By: jhi on 2001/06/16 22:58:48 + Log: -Wall strays. + Branch: perl + ! perl.c util.c + ____________________________________________________________________________ + [ 10649] By: jhi on 2001/06/16 22:47:40 + Log: Add workaround for Darwin's (Mac OS X's) INT32_MIN + (and INT64_MIN) brokenness. + Branch: perl + ! hints/darwin.sh perl.h + ____________________________________________________________________________ + [ 10648] By: jhi on 2001/06/16 22:27:48 + Log: Subject: [PATCH] Re: [PATCH] Re: perl@10611 + From: Nicholas Clark + Date: Sun, 17 Jun 2001 00:16:05 +0100 + Message-ID: <20010617001605.V98663@plum.flirble.org> + Branch: perl + ! ext/Fcntl/Fcntl.xs ext/Fcntl/Makefile.PL ext/File/Glob/Glob.pm + ! ext/File/Glob/Glob.xs ext/File/Glob/Makefile.PL + ! lib/ExtUtils/Constant.pm t/lib/extutils.t + ____________________________________________________________________________ + [ 10647] By: jhi on 2001/06/16 22:24:47 + Log: Add perlnetware to docs; regen toc; supply skeleton + docs for some Memoize submodules. + Branch: perl + ! lib/Memoize/AnyDBM_File.pm lib/Memoize/ExpireFile.pm + ! lib/Memoize/ExpireTest.pm lib/Memoize/NDBM_File.pm + ! lib/Memoize/SDBM_File.pm lib/Memoize/Storable.pm + ! pod/buildtoc.PL pod/perl.pod pod/perlport.pod pod/perltoc.pod + ! win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 10646] By: jhi on 2001/06/16 22:06:52 + Log: pod cleanup. + Branch: perl + ! README.netware + ____________________________________________________________________________ + [ 10645] By: jhi on 2001/06/16 21:47:00 + Log: Integrate Memoize 0.64. Few tweaks were required in + the test scripts. Note that the speed and expire* + tests take several dozen seconds to run. + Branch: perl + + lib/Memoize.pm lib/Memoize/AnyDBM_File.pm + + lib/Memoize/Expire.pm lib/Memoize/ExpireFile.pm + + lib/Memoize/ExpireTest.pm lib/Memoize/NDBM_File.pm + + lib/Memoize/README lib/Memoize/SDBM_File.pm + + lib/Memoize/Saves.pm lib/Memoize/Storable.pm lib/Memoize/TODO + + lib/Memoize/t/array.t lib/Memoize/t/correctness.t + + lib/Memoize/t/errors.t lib/Memoize/t/expire.t + + lib/Memoize/t/expire_file.t lib/Memoize/t/expire_module_n.t + + lib/Memoize/t/expire_module_t.t lib/Memoize/t/flush.t + + lib/Memoize/t/normalize.t lib/Memoize/t/prototype.t + + lib/Memoize/t/speed.t lib/Memoize/t/tie.t + + lib/Memoize/t/tie_gdbm.t lib/Memoize/t/tie_ndbm.t + + lib/Memoize/t/tie_sdbm.t lib/Memoize/t/tie_storable.t + + lib/Memoize/t/tiefeatures.t lib/Memoize/t/unmemoize.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10644] By: jhi on 2001/06/16 20:35:49 + Log: Document the cross-compilation options. + Branch: perl + ! Cross/README INSTALL + ____________________________________________________________________________ + [ 10643] By: jhi on 2001/06/16 19:46:38 + Log: NetWare port from Guruprasad S . + Branch: perl + + NetWare/CLIBsdio.h NetWare/CLIBstr.h NetWare/CLIBstuf.c + + NetWare/CLIBstuf.h NetWare/Main.c NetWare/Makefile + + NetWare/NWTInfo.c NetWare/NWUtil.c NetWare/Nwmain.c + + NetWare/Nwpipe.c NetWare/bat/BldNWExt.bat + + NetWare/bat/Buildtype.bat NetWare/bat/MPKBuild.bat + + NetWare/bat/SetNWBld.bat NetWare/bat/Setmpksdk.bat + + NetWare/bat/Setnlmsdk.bat NetWare/bat/Setwatcom.bat + + NetWare/bat/ToggleD2.bat NetWare/bat/ToggleXDC.bat + + NetWare/config.wc NetWare/config_H.wc NetWare/config_h.PL + + NetWare/config_sh.PL NetWare/deb.h NetWare/dl_netware.xs + + NetWare/intdef.h NetWare/interface.c NetWare/interface.h + + NetWare/iperlhost.h NetWare/netware.h NetWare/nw5.c + + NetWare/nw5iop.h NetWare/nw5sck.c NetWare/nw5sck.h + + NetWare/nw5thread.c NetWare/nw5thread.h NetWare/nwperlsys.c + + NetWare/nwperlsys.h NetWare/nwpipe.h NetWare/nwplglob.c + + NetWare/nwplglob.h NetWare/nwtinfo.h NetWare/nwutil.h + + NetWare/t/NWModify.pl NetWare/t/NWScripts.pl + + NetWare/t/Readme.txt NetWare/testnlm/echo/echo.c + + NetWare/testnlm/type/type.c NetWare/win32ish.h README.netware + + lib/ExtUtils/MM_NW5.pm + ! MANIFEST XSUB.h dosish.h ext/Errno/Errno_pm.PL ext/IO/IO.xs + ! ext/POSIX/POSIX.xs ext/Socket/Socket.xs installperl iperlsys.h + ! lib/AutoLoader.pm lib/AutoSplit.pm lib/ExtUtils/MakeMaker.pm + ! lib/File/Copy.pm lib/File/Find.pm lib/perl5db.pl makedef.pl + ! perl.c perl.h perlio.c perlio.h pp_sys.c t/comp/multiline.t + ! t/comp/script.t t/io/argv.t t/io/dup.t t/io/fs.t + ! t/io/inplace.t t/io/iprefix.t t/io/tell.t t/lib/anydbm.t + ! t/lib/b-stash.t t/lib/cwd.t t/lib/db-btree.t t/lib/db-hash.t + ! t/lib/db-recno.t t/lib/filehand.t t/lib/filter-util.t + ! t/lib/ftmp-security.t t/lib/gdbm.t t/lib/glob-basic.t + ! t/lib/glob-case.t t/lib/io_dup.t t/lib/io_poll.t + ! t/lib/io_sel.t t/lib/io_taint.t t/lib/ndbm.t + ! t/lib/net-hostent.t t/lib/odbm.t t/lib/open2.t t/lib/open3.t + ! t/lib/posix.t t/lib/sdbm.t t/lib/sigaction.t t/lib/syslfs.t + ! t/op/anonsub.t t/op/closure.t t/op/die_exit.t t/op/exec.t + ! t/op/fork.t t/op/goto.t t/op/groups.t t/op/lfs.t t/op/magic.t + ! t/op/misc.t t/op/rand.t t/op/runlevel.t t/op/split.t + ! t/op/stat.t t/op/sysio.t t/op/taint.t t/op/write.t + ! t/pragma/locale.t t/pragma/strict.t t/pragma/subs.t + ! t/pragma/warn/mg t/pragma/warnings.t thread.h toke.c util.c + ! util.h x2p/a2py.c + ____________________________________________________________________________ + [ 10642] By: jhi on 2001/06/16 19:16:04 + Log: Resort MANIFEST. + Branch: perl + ! MANIFEST + ____________________________________________________________________________ + [ 10641] By: jhi on 2001/06/16 18:52:26 + Log: Integrate perlio. + Branch: perl + +> win32/win32io.c + !> MANIFEST perlio.c perliol.h win32/makefile.mk + ____________________________________________________________________________ + [ 10640] By: nick on 2001/06/16 18:38:31 + Log: Disable :win32 layer as default till I get it working + Branch: perlio + ! MANIFEST perlio.c + ____________________________________________________________________________ + [ 10639] By: jhi on 2001/06/16 18:35:46 + Log: Try the new scheme by moving the Text::Abbrev test + to a new place under lib. + Branch: perl + + lib/Text/Abbrev/t/abbrev.t + - t/lib/abbrev.t + ! MANIFEST + ____________________________________________________________________________ + [ 10638] By: jhi on 2001/06/16 18:34:30 + Log: Make the code even more dynamical so that testname + suffix length can change. + Branch: perl + ! lib/Test/Harness.pm t/TEST + ____________________________________________________________________________ + [ 10637] By: jhi on 2001/06/16 18:16:28 + Log: Allow for deeper t/ and also a single test.pl. + Branch: perl + ! t/TEST t/harness + ____________________________________________________________________________ + [ 10636] By: jhi on 2001/06/16 18:13:59 + Log: #define fix from Nicholas Clark. + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 10635] By: jhi on 2001/06/16 17:50:43 + Log: Initialization is nice. + Branch: perl + ! lib/Test/Harness.pm + ____________________________________________________________________________ + [ 10634] By: jhi on 2001/06/16 17:38:53 + Log: Make t/TEST and t/harness to test also the t/ tests + under the main lib/ and ext/ directories. Fix Test::Harness + to dynamically change the width of its "foo/bar....ok" output. + Branch: perl + ! lib/Test/Harness.pm t/TEST t/TestInit.pm t/harness + ____________________________________________________________________________ + [ 10633] By: jhi on 2001/06/16 16:58:57 + Log: Subject: [PATCH] Re: perl@10611 + From: Nicholas Clark + Date: Sat, 16 Jun 2001 16:52:47 +0100 + Message-ID: <20010616165247.O98663@plum.flirble.org> + + The .xs parts, too. + Branch: perl + ! ext/GDBM_File/GDBM_File.xs ext/POSIX/POSIX.xs + ! ext/Socket/Socket.xs ext/Sys/Syslog/Syslog.xs + ____________________________________________________________________________ + [ 10632] By: nick on 2001/06/16 16:44:35 + Log: Work-in-progress win32 layer semi-functional, checking + for UNIX breakage. + Branch: perlio + ! perlio.c perliol.h win32/makefile.mk win32/win32io.c + ____________________________________________________________________________ + [ 10631] By: jhi on 2001/06/16 16:40:30 + Log: Subject: [PATCH] Re: perl@10611 + From: Nicholas Clark + Date: Sat, 16 Jun 2001 16:52:47 +0100 + Message-ID: <20010616165247.O98663@plum.flirble.org> + Branch: perl + ! ext/GDBM_File/GDBM_File.xs ext/GDBM_File/Makefile.PL + ! ext/POSIX/Makefile.PL ext/POSIX/POSIX.xs + ! ext/Socket/Makefile.PL ext/Socket/Socket.xs + ! ext/Sys/Syslog/Makefile.PL ext/Sys/Syslog/Syslog.xs + ! lib/ExtUtils/Constant.pm + ____________________________________________________________________________ + [ 10630] By: jhi on 2001/06/16 15:11:38 + Log: Metaconfig unit change for #10629. + Branch: metaconfig + ! U/modified/Finish.U + ____________________________________________________________________________ + [ 10629] By: jhi on 2001/06/16 15:11:10 + Log: The extraction changed directories. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10628] By: jhi on 2001/06/16 14:59:38 + Log: Math::BigInt 1.35 from Tels. + Branch: perl + + t/lib/mbimbf.t + ! MANIFEST lib/Math/BigFloat.pm lib/Math/BigInt.pm + ! t/lib/bigfltpm.t t/lib/bigintpm.t + ____________________________________________________________________________ + [ 10627] By: nick on 2001/06/16 14:54:52 + Log: Work in progress UNIX-side edit of win32 PerLIO layer + Branch: perlio + + win32/win32io.c + ! perlio.c win32/makefile.mk + ____________________________________________________________________________ + [ 10626] By: jhi on 2001/06/16 14:01:50 + Log: Subject: [PATCH 5.6.1] os2/diff-configure + From: Ilya Zakharevich + Date: Fri, 15 Jun 2001 01:19:36 -0400 + Message-ID: <20010615011936.A26982@math.ohio-state.edu> + + Empty all of it because I think #10624 made even the + last patch hunk unnecessary. + Branch: perl + ! os2/diff.configure + ____________________________________________________________________________ + [ 10625] By: jhi on 2001/06/16 13:58:34 + Log: Metaconfig unit change for 10624. + Branch: metaconfig + ! U/modified/libc.U + Branch: perl + ! config_h.SH + ____________________________________________________________________________ + [ 10624] By: jhi on 2001/06/16 13:58:13 + Log: Move the initialization of libnames to the beginning so + that can one 'seed' it (as OS/2 does.) + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10623] By: jhi on 2001/06/16 13:47:54 + Log: Subject: [PATCH 5.6.1] OS2::DLL patch + From: Ilya Zakharevich + Date: Fri, 15 Jun 2001 19:10:57 -0400 + Message-ID: <20010615191057.A8050@math.ohio-state.edu> + Branch: perl + ! os2/OS2/REXX/DLL/DLL.pm + ____________________________________________________________________________ + [ 10622] By: jhi on 2001/06/16 13:29:42 + Log: Subject: [PATCH perl@10611] make VMS find util.c's offspring + From: "Craig A. Berry" + Date: Fri, 15 Jun 2001 17:00:03 -0500 + Message-Id: + Branch: perl + ! vms/descrip_mms.template + ____________________________________________________________________________ + [ 10621] By: jhi on 2001/06/16 13:28:37 + Log: Subject: [PATCH perl@10611] get extutils.t working on VMS (again) + From: "Craig A. Berry" + Date: Fri, 15 Jun 2001 18:39:42 -0500 + Message-Id: + Branch: perl + ! lib/File/Spec/VMS.pm t/lib/extutils.t + ____________________________________________________________________________ + [ 10620] By: jhi on 2001/06/16 13:25:06 + Log: Integrate perlio. + Branch: perl + !> embed.h embed.pl lib/open.pm perl.c perlio.c proto.h + !> t/io/utf8.t t/lib/io_scalar.t + ____________________________________________________________________________ + [ 10619] By: nick on 2001/06/15 21:05:19 + Log: Generated files + Branch: perlio + ! embed.h proto.h + ____________________________________________________________________________ + [ 10618] By: nick on 2001/06/15 20:27:42 + Log: Fix open.pm to work via XS-implemented method calls rather + than *open::layers variables which caused all the HV/AV hassle. + Branch: perlio + ! embed.pl lib/open.pm perl.c perlio.c t/io/utf8.t + ! t/lib/io_scalar.t + ____________________________________________________________________________ + [ 10617] By: jhi on 2001/06/15 18:50:53 + Log: Integrate perlio. + Branch: perl + !> lib/ExtUtils/Constant.pm + ____________________________________________________________________________ + [ 10616] By: nick on 2001/06/15 18:46:47 + Log: pTHX_ / aTHX_ for ExtUtils/Constant.pm + Branch: perlio + ! lib/ExtUtils/Constant.pm + ____________________________________________________________________________ + [ 10615] By: jhi on 2001/06/15 18:36:43 + Log: Integrate perlio. + Branch: perl + !> ext/Socket/Socket.xs + ____________________________________________________________________________ + [ 10614] By: nick on 2001/06/15 18:33:37 + Log: MULTIPLICITY fix for Socket.xs + Branch: perlio + ! ext/Socket/Socket.xs + ____________________________________________________________________________ + [ 10613] By: jhi on 2001/06/15 16:34:06 + Log: Subject: Re: perl@10611 + From: Doug MacEachern + Date: Fri, 15 Jun 2001 10:10:33 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/Socket/Socket.xs + ____________________________________________________________________________ + [ 10612] By: nick on 2001/06/15 16:14:38 + Log: Raw integrate on mainline - MULTIPLICITY issues with Socket.xs + Branch: perlio + !> Changes ext/GDBM_File/GDBM_File.pm ext/GDBM_File/GDBM_File.xs + !> ext/Socket/Socket.pm ext/Socket/Socket.xs + !> lib/ExtUtils/Constant.pm lib/File/Find.pm opcode.pl + !> patchlevel.h perlio.c t/lib/extutils.t t/lib/filefind.t + !> t/lib/gdbm.t t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t + !> utils/h2ph.PL + ____________________________________________________________________________ + [ 10611] By: jhi on 2001/06/15 14:29:04 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10610] By: jhi on 2001/06/15 14:20:33 + Log: Upping the test count. + Branch: perl + ! t/lib/filefind.t + ____________________________________________________________________________ + [ 10609] By: jhi on 2001/06/15 14:13:29 + Log: Integrate perlio. + Branch: perl + !> win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10608] By: jhi on 2001/06/15 14:12:31 + Log: Subject: Re: [ID 20010608.010] File::Find re-entrancy + From: andreas.koenig@anima.de (Andreas J. Koenig) + Date: 15 Jun 2001 13:30:39 +0200 + Message-ID: + + Record the grim history. + Branch: perl + ! lib/File/Find.pm + ____________________________________________________________________________ + [ 10607] By: jhi on 2001/06/15 14:08:19 + Log: Subject: Re: [ID 20010608.010] File::Find re-entrancy + From: Brian McCauley + Date: 15 Jun 2001 07:51:26 +0100 + Message-Id: <200106150923.f5F9NpG02725@wcl-l.bham.ac.uk> + Branch: perl + ! lib/File/Find.pm t/lib/filefind.t + ____________________________________________________________________________ + [ 10606] By: nick on 2001/06/15 14:00:08 + Log: regen_config_h for Win32. + Branch: perlio + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10605] By: jhi on 2001/06/15 13:49:55 + Log: Subject: [PATCH: perl@10576] handle tri graphs in h2ph.PL -> h2ph* + From: Peter Prymmer + Date: Thu, 14 Jun 2001 16:25:33 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/h2ph.h t/lib/h2ph.pht t/lib/h2ph.t utils/h2ph.PL + ____________________________________________________________________________ + [ 10604] By: jhi on 2001/06/15 13:45:03 + Log: Some filesystems require writability for rename/unlink. + Branch: perl + ! opcode.pl + ____________________________________________________________________________ + [ 10603] By: jhi on 2001/06/15 13:41:34 + Log: Subject: Re: [PATCH} perlio and threading @ 10576 + report + From: "H.Merijn Brand" + Date: Fri, 15 Jun 2001 12:08:53 +0200 + Message-Id: <20010615120320.F009.H.M.BRAND@hccnet.nl> + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 10602] By: jhi on 2001/06/15 13:27:04 + Log: Subject: Re: [PATCH] opcode.pl is chmod'ing the original source tree + From: Mike Guy + Date: Fri, 15 Jun 2001 14:11:49 +0100 + Message-Id: + Branch: perl + ! opcode.pl + ____________________________________________________________________________ + [ 10601] By: jhi on 2001/06/15 13:21:18 + Log: Subject: [PATCH ?] INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE + From: Nicholas Clark + Date: Thu, 14 Jun 2001 23:52:56 +0100 + Message-ID: <20010614235256.G98663@plum.flirble.org> + Branch: perl + ! ext/Socket/Socket.pm ext/Socket/Socket.xs + ! lib/ExtUtils/Constant.pm t/lib/extutils.t + ____________________________________________________________________________ + [ 10600] By: jhi on 2001/06/15 13:16:56 + Log: Subject: Re: [PATCH] GDBM_File (wasRe: ext/ + -Wall) + From: Russ Allbery + Date: 14 Jun 2001 13:24:43 -0700 + Message-ID: + Branch: perl + ! ext/GDBM_File/GDBM_File.pm + ____________________________________________________________________________ + [ 10599] By: jhi on 2001/06/15 13:15:26 + Log: Subject: [PATCH] GDBM_File (wasRe: ext/ + -Wall) + From: Nicholas Clark + Date: Thu, 14 Jun 2001 20:37:47 +0100 + Message-ID: <20010614203747.F98663@plum.flirble.org> + Branch: perl + ! ext/GDBM_File/GDBM_File.pm ext/GDBM_File/GDBM_File.xs + ! t/lib/gdbm.t + ____________________________________________________________________________ + [ 10598] By: jhi on 2001/06/15 13:13:13 + Log: Integrate perlio. + Branch: perl + !> makedef.pl sv.c + ____________________________________________________________________________ + [ 10597] By: nick on 2001/06/15 11:08:13 + Log: Check that HVs with HvNAME() != NULL are really stashes before + treating them as such. Also be more defensive on the GvCV. + Win32 fork and dprof now working again. + Branch: perlio + ! sv.c + ____________________________________________________________________________ + [ 10596] By: nick on 2001/06/15 10:11:20 + Log: Integrate mainline. + Branch: perlio + +> Cross/README + !> Configure Makefile.SH Porting/Glossary Porting/config.sh + !> Porting/config_H config_h.SH configure.com epoc/config.sh + !> hints/linux.sh pod/perltoc.pod uconfig.h uconfig.sh + !> vos/config.alpha.def vos/config.alpha.h vos/config.ga.def + !> vos/config.ga.h win32/config.bc win32/config.gc + !> win32/config.vc win32/config_H.bc win32/config_H.gc + !> win32/config_H.vc + ____________________________________________________________________________ + [ 10595] By: nick on 2001/06/15 09:37:17 + Log: Skip Perl_my_bcopy in .def file as we do not provide it. + - Win32 (VC++) now builds but fails: + filefind.t - suspect Win32's builtin cwd is not doing insecure dir test + fork.t - No &___ENV_HV_NAME___::CLONE method ??? + write.t - open(...,"|-") not implemented on Win32 + Branch: perlio + ! makedef.pl + ____________________________________________________________________________ + [ 10594] By: jhi on 2001/06/15 00:17:16 + Log: Integrate perlio. + Branch: perl + !> perlio.c win32/makefile.mk + ____________________________________________________________________________ + [ 10593] By: jhi on 2001/06/15 00:16:44 + Log: Metaconfig unit changes for #10592. + Branch: metaconfig + + U/modified/i_varhdr.U U/modified/startsh.U + - U/a_dvisory/crosscompile.U U/target/Target.U + ! U/a_dvisory/intsize.U U/compline/alignbytes.U + ! U/compline/bitpbyte.U U/compline/byteorder.U + ! U/compline/ccflags.U U/compline/charsize.U + ! U/compline/d_casti32.U U/compline/d_castneg.U + ! U/compline/d_closedir.U U/compline/d_fd_set.U + ! U/compline/d_gconvert.U U/compline/d_gnulibc.U + ! U/compline/d_keepsig.U U/compline/d_open3.U + ! U/compline/d_safebcpy.U U/compline/d_safemcpy.U + ! U/compline/d_sanemcmp.U U/compline/d_scannl.U + ! U/compline/d_sgndchr.U U/compline/d_sigsetjmp.U + ! U/compline/d_stdstdio.U U/compline/d_vprintf.U + ! U/compline/doublesize.U U/compline/floatsize.U + ! U/compline/nblock_io.U U/compline/orderlib.U + ! U/compline/ptrsize.U U/compline/ssizetype.U U/ebcdic/ebcdic.U + ! U/modified/Cppsym.U U/modified/Oldconfig.U U/modified/Signal.U + ! U/modified/d_getpgrp.U U/modified/d_longdbl.U + ! U/modified/d_longlong.U U/modified/d_setpgrp.U + ! U/modified/d_strtoul.U U/modified/d_union_semun.U + ! U/modified/spitshell.U U/threads/archname.U + ! U/threads/d_pthreadj.U U/typedefs/gidsign.U + ! U/typedefs/gidsize.U U/typedefs/lseektype.U + ! U/typedefs/pidsign.U U/typedefs/pidsize.U + ! U/typedefs/sizesize.U U/typedefs/ssizesize.U + ! U/typedefs/uidsign.U U/typedefs/uidsize.U + Branch: metaconfig/U/perl + + Cross.U + ! d_dlsymun.U d_fcntl_can_lock.U d_modfl.U d_printfed.U + ! d_strtoll.U d_strtoull.U d_strtouq.U d_u32align.U dlsrc.U + ! fflushall.U fpossize.U gccvers.U i_db.U longdblfio.U + ! need_va_copy.U perlxv.U quadfio.U selectminbits.U + ! stdio_streams.U uselfs.U + ____________________________________________________________________________ + [ 10592] By: jhi on 2001/06/15 00:15:52 + Log: The first steps towards cross-compilation. + + Abstract execution of compiled test executables with $run, + and abstract transfer of files with $to and $from. + + Under cross-compilation the $run, $to, and $from will point + to appropriate wrapper scripts, by default ssh and scp, + but also rsh, rcp, and cp are supported. If not + cross-compiling, they will be set to '', ':', and ':', + respectively. + + With these patches I was able to get Configure for + iPAQ ARM Linux on an Intel Linux about 95% right + (only a few tests failed to execute or they produced + incorrect results), and I was able to compile + a functional miniperl. + + The symbol crosscompile renamed to be usecrosscompile, + the corresponding C symbol from CROSSCOMPILE to + USE_CROSS_COMPILE. + Branch: perl + ! Configure Cross/README Makefile.SH Porting/Glossary + ! Porting/config.sh Porting/config_H config_h.SH configure.com + ! epoc/config.sh hints/linux.sh pod/perltoc.pod uconfig.h + ! uconfig.sh vos/config.alpha.def vos/config.alpha.h + ! vos/config.ga.def vos/config.ga.h win32/config.bc + ! win32/config.gc win32/config.vc win32/config_H.bc + ! win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10591] By: nick on 2001/06/14 20:00:12 + Log: Steps along the road toward Win32 building again. + Branch: perlio + ! perlio.c win32/makefile.mk + ____________________________________________________________________________ + [ 10590] By: jhi on 2001/06/14 16:11:11 + Log: Integrate perlio. + Branch: perl + !> win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10589] By: nick on 2001/06/14 13:54:07 + Log: Routine regen_config_h for Win32 + Branch: perlio + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10588] By: jhi on 2001/06/14 12:30:46 + Log: Integrate perlio. + Branch: perl + +> perlyline.pl + !> MANIFEST Makefile.SH perly.c t/lib/filefind.t + ____________________________________________________________________________ + [ 10587] By: jhi on 2001/06/14 12:23:24 + Log: A placeholder. + Branch: perl + + Cross/README + ____________________________________________________________________________ + [ 10586] By: nick on 2001/06/14 08:25:07 + Log: Add new step to run_byacc which: + A. Corrects #line NNN "perly.c" lines so warnings etc. are trackable + B. Adds extra () to the two if (var = ...) constructs gcc -Wall winges about. + Branch: perlio + + perlyline.pl + ! MANIFEST Makefile.SH perly.c + ____________________________________________________________________________ + [ 10585] By: nick on 2001/06/14 08:22:29 + Log: Integrate mainline + Branch: perlio + +> locale.c numeric.c + !> Changes cygwin/Makefile.SHs embed.h embed.pl + !> ext/re/Makefile.PL lib/Math/BigFloat.pm lib/Math/BigInt.pm + !> objXSUB.h opcode.pl patchlevel.h perlapi.c pod/perlapi.pod + !> proto.h t/lib/bigfltpm.t t/lib/bigintpm.t util.c + !> x2p/Makefile.SH + ____________________________________________________________________________ + [ 10584] By: nick on 2001/06/14 08:05:53 + Log: Hack to remove insecure directories from PATH so test will run. + Branch: perlio + ! t/lib/filefind.t + ____________________________________________________________________________ + [ 10583] By: jhi on 2001/06/14 03:11:16 + Log: The test doesn't work (yet?), Math::BigInt::round_mode() is missing. + Branch: perl + - t/lib/mbimbf.t + ! MANIFEST + ____________________________________________________________________________ + [ 10582] By: jhi on 2001/06/14 03:04:51 + Log: Detypo. + Branch: perl + ! x2p/Makefile.SH + ____________________________________________________________________________ + [ 10581] By: jhi on 2001/06/14 03:03:14 + Log: de-$CONFIG continues. + Branch: perl + ! cygwin/Makefile.SHs x2p/Makefile.SH + ____________________________________________________________________________ + [ 10580] By: jhi on 2001/06/13 23:56:59 + Log: Subject: [PATCH] opcode.pl is chmod'ing the original source tree + From: Nicholas Clark + Date: Wed, 13 Jun 2001 21:20:13 +0100 + Message-ID: <20010613212013.D98663@plum.flirble.org> + Branch: perl + ! opcode.pl + ____________________________________________________________________________ + [ 10579] By: jhi on 2001/06/13 23:55:29 + Log: Subject: splitting util.c + From: Hugo + Date: Thu, 14 Jun 2001 00:41:08 +0100 + Message-Id: <200106132341.AAA24935@crypt.compulink.co.uk> + Branch: perl + + locale.c numeric.c + ! MANIFEST Makefile.SH embed.h embed.pl objXSUB.h perlapi.c + ! pod/perlapi.pod proto.h util.c + ____________________________________________________________________________ + [ 10578] By: jhi on 2001/06/13 23:45:11 + Log: Upgrade to Math::BigInt 1.34 from Tels. + Branch: perl + + t/lib/mbimbf.t + ! MANIFEST lib/Math/BigFloat.pm lib/Math/BigInt.pm + ! t/lib/bigfltpm.t t/lib/bigintpm.t + ____________________________________________________________________________ + [ 10577] By: nick on 2001/06/13 19:02:48 + Log: Integrate mainline. Storable fail has gone, insecure dependancy still there. + Branch: perlio + !> (integrate 125 files) + ____________________________________________________________________________ + [ 10576] By: jhi on 2001/06/13 18:10:01 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10575] By: jhi on 2001/06/13 18:05:09 + Log: Subject: Re: [PATCH perl@10538] make ext/re play nice with DEBUGGING override + From: "Craig A. Berry" + Date: Wed, 13 Jun 2001 13:24:28 -0500 + Message-Id: <5.1.0.14.0.20010613131907.01bbc210@mail.mac.com> + Branch: perl + ! ext/re/Makefile.PL + ____________________________________________________________________________ + [ 10574] By: jhi on 2001/06/13 17:34:36 + Log: Mc.u.c. for #10573. + Branch: metaconfig + ! U/threads/usethreads.U + ____________________________________________________________________________ + [ 10573] By: jhi on 2001/06/13 17:34:00 + Log: It would be also be good if I could type. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10572] By: jhi on 2001/06/13 17:26:29 + Log: Metaconfig unit change for #10571. + Branch: metaconfig + ! U/threads/usethreads.U + ____________________________________________________________________________ + [ 10571] By: jhi on 2001/06/13 17:26:05 + Log: A non-empty default is a good thing. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10570] By: jhi on 2001/06/13 17:15:16 + Log: Metaconfig unit change for #10569. + Branch: metaconfig + ! U/threads/usethreads.U + ____________________________________________________________________________ + [ 10569] By: jhi on 2001/06/13 17:14:17 + Log: Add Configure directive -Dusereentrant for Artur's ithreads work, + extremely experimental, not even prompted for. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH configure.com epoc/config.sh perl.h uconfig.h + ! uconfig.sh vos/config.alpha.def vos/config.ga.def + ! win32/config.bc win32/config.gc win32/config.vc + ____________________________________________________________________________ + [ 10568] By: jhi on 2001/06/13 16:22:27 + Log: FAQ tweak for Vanina Arca . + Branch: perl + ! pod/perlfaq6.pod + ____________________________________________________________________________ + [ 10567] By: jhi on 2001/06/13 16:20:23 + Log: Integrate perlio; conflicts, accept Nick's versions. + Branch: perl + !> ext/Encode/Encode.xs ext/PerlIO/Scalar/Scalar.xs + !> ext/PerlIO/Via/Via.xs perlio.c perlio.h perliol.h + ____________________________________________________________________________ + [ 10566] By: jhi on 2001/06/13 16:17:42 + Log: Subject: Re: ext/ + -Wall + From: Doug MacEachern + Date: Wed, 13 Jun 2001 10:02:16 -0700 (PDT) + Message-ID: + Branch: perl + ! XSUB.h lib/ExtUtils/xsubpp perl.h + ____________________________________________________________________________ + [ 10565] By: jhi on 2001/06/13 16:16:07 + Log: Similar logic as DB_File.xs, using the modern macros and + defines them to older ones for older Perls where PERL_VERSION + is not defined, from Doug MacEachern. + Branch: perl + ! ext/Storable/Storable.xs + ____________________________________________________________________________ + [ 10564] By: nick on 2001/06/13 15:22:01 + Log: Avoid AV and HV in perlio.c by inventing PerlIO_list_t which is AV-ish + and using that instead (name lookups are sequential search for now). + Branch: perlio + ! ext/Encode/Encode.xs ext/PerlIO/Scalar/Scalar.xs + ! ext/PerlIO/Via/Via.xs perlio.c perlio.h perliol.h + ____________________________________________________________________________ + [ 10563] By: jhi on 2001/06/13 14:07:43 + Log: Subject: [PATCH] Re: [ID 20010526.001] localized glob loses value when assigned to + From: "Richard Soderberg" + Date: Sat, 26 May 2001 06:44:20 -0700 + Message-ID: + Branch: perl + ! sv.c t/op/glob.t + ____________________________________________________________________________ + [ 10562] By: jhi on 2001/06/13 13:55:10 + Log: Subject: [PATCH perl@10538] make ext/re play nice with DEBUGGING override + From: "Craig A. Berry" + Date: Tue, 12 Jun 2001 23:55:26 -0500 + Message-Id: + Branch: perl + ! ext/re/Makefile.PL ext/re/re.xs + ____________________________________________________________________________ + [ 10561] By: jhi on 2001/06/13 13:44:58 + Log: Hide __attribute__((unused)) behind PERL_UNUSED_DECL as + suggested by NI-S. + Branch: perl + ! XSUB.h malloc.c perl.h + ____________________________________________________________________________ + [ 10560] By: jhi on 2001/06/13 13:35:42 + Log: Regen toc. + Branch: perl + ! pod/perltoc.pod + ____________________________________________________________________________ + [ 10559] By: jhi on 2001/06/13 12:53:18 + Log: Subject: [patch] perl.gprof control + From: Doug MacEachern + Date: Tue, 12 Jun 2001 23:05:44 -0700 (PDT) + Message-ID: + Branch: perl + ! miniperlmain.c perl.h + ____________________________________________________________________________ + [ 10558] By: jhi on 2001/06/13 12:51:47 + Log: Subject: Re: ext/ + -Wall + From: Doug MacEachern + Date: Tue, 12 Jun 2001 22:04:50 -0700 (PDT) + Message-ID: + + Document ax and break up dXSARGS. + Branch: perl + ! XSUB.h pod/perlapi.pod + ____________________________________________________________________________ + [ 10557] By: jhi on 2001/06/13 12:39:55 + Log: More AIX tweakage from Merijn. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 10556] By: jhi on 2001/06/13 03:26:58 + Log: Subject: [PATCH perl@10538] make VMS autosplit earlier in build + From: "Craig A. Berry" + Date: Tue, 12 Jun 2001 22:57:45 -0500 + Message-Id: + Branch: perl + ! vms/descrip_mms.template + ____________________________________________________________________________ + [ 10555] By: jhi on 2001/06/13 02:50:43 + Log: Subject: Re: hacking util.c, attrs.xs, and re.xs to compile on VMS + From: "Craig A. Berry" + Date: Tue, 12 Jun 2001 22:21:39 -0500 + Message-Id: + Branch: perl + ! configure.com util.c + ____________________________________________________________________________ + [ 10554] By: jhi on 2001/06/13 02:23:16 + Log: New AIX dynaloading code from Jens-Uwe Mager. + Does break binary compatibility. + Branch: perl + ! ext/DynaLoader/dl_aix.xs hints/aix.sh makedef.pl + ____________________________________________________________________________ + [ 10553] By: jhi on 2001/06/13 02:10:16 + Log: VMS DEC C compiler found nits by Peter Prymmer. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10552] By: jhi on 2001/06/13 01:36:12 + Log: Subject: [PATCH: perl@10538] fix for file locking and filecomp test + From: Peter Prymmer + Date: Tue, 12 Jun 2001 19:34:08 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/filecomp.t + ____________________________________________________________________________ + [ 10551] By: jhi on 2001/06/13 01:26:53 + Log: I wonder how many $CONFIGs still lurk in the shadows. + Branch: perl + ! pod/Makefile.SH x2p/cflags.SH + ____________________________________________________________________________ + [ 10550] By: jhi on 2001/06/13 01:25:12 + Log: Grok three kinds of line endings, should fix [ID 20010612.003] + Branch: perl + ! pod/checkpods.PL + ____________________________________________________________________________ + [ 10549] By: jhi on 2001/06/13 01:05:28 + Log: Use __attribute__((unused)) to silence -Wall on unused ax. + Branch: perl + ! XSUB.h ext/DB_File/DB_File.xs lib/ExtUtils/xsubpp + ____________________________________________________________________________ + [ 10548] By: jhi on 2001/06/13 00:41:28 + Log: Subject: [patch] rid local_patches warnings + From: Doug MacEachern + Date: Tue, 12 Jun 2001 10:26:34 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/List/Util/Util.xs ext/Storable/Storable.xs + ____________________________________________________________________________ + [ 10547] By: jhi on 2001/06/13 00:40:29 + Log: Subject: Re: ext/ + -Wall + From: Doug MacEachern + Date: Tue, 12 Jun 2001 09:38:09 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/attrs/attrs.xs + ____________________________________________________________________________ + [ 10546] By: jhi on 2001/06/13 00:39:06 + Log: Subject: [PATCH] perlretut.pod: unterminated C<> + From: Ronald J Kimball + Date: Tue, 12 Jun 2001 14:36:20 -0400 + Message-ID: <20010612143619.A37113@linguist.thayer.dartmouth.edu> + Branch: perl + ! pod/perlretut.pod + ____________________________________________________________________________ + [ 10545] By: jhi on 2001/06/13 00:38:02 + Log: Subject: Re: [ID 20010612.001] out of memory during regex compilation + From: Mike Guy + Date: Tue, 12 Jun 2001 19:10:31 +0100 + Message-Id: + + Subject: Re: [ID 20010612.001] out of memory during regex compilation + From: Mike Guy + Date: Tue, 12 Jun 2001 19:21:01 +0100 + Message-Id: + Branch: perl + ! pod/perlop.pod + ____________________________________________________________________________ + [ 10544] By: jhi on 2001/06/13 00:34:39 + Log: AIX tweaks from Merijn H. Brand. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 10543] By: jhi on 2001/06/13 00:11:42 + Log: Subject: [PATCH] 5.6.1 -- add LC_MESSAGES constant to POSIX module + From: "Brendan O'Dea" + Date: Wed, 13 Jun 2001 05:16:47 +1000 + Message-ID: <20010613051647.A8945@compusol.com.au> + Branch: maint-5.6/perl + ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 10542] By: jhi on 2001/06/13 00:07:50 + Log: Subject: Small bcopy cleanup + From: Andy Dougherty + Date: Tue, 12 Jun 2001 17:11:52 -0400 (EDT) + Message-ID: + Branch: perl + ! embed.h embed.pl objXSUB.h perlapi.c proto.h util.c x2p/a2p.h + ____________________________________________________________________________ + [ 10541] By: jhi on 2001/06/13 00:05:18 + Log: Subject: [PATCH] Re: ext/ + -Wall + From: Nicholas Clark + Date: Wed, 13 Jun 2001 00:04:30 +0100 + Message-ID: <20010613000430.M5901@plum.flirble.org> + Branch: perl + ! ext/POSIX/POSIX.pm ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 10540] By: jhi on 2001/06/13 00:02:25 + Log: Subject: [PATCH] Re: [PATCH] ExtUtils::Constant + From: Nicholas Clark + Date: Tue, 12 Jun 2001 23:53:07 +0100 + Message-ID: <20010612235307.L5901@plum.flirble.org> + Branch: perl + ! lib/ExtUtils/Constant.pm t/lib/extutils.t + ____________________________________________________________________________ + [ 10539] By: jhi on 2001/06/12 23:59:10 + Log: MPE/iX tweaks from Mark Bixby. + Branch: perl + ! hints/mpeix.sh mpeix/mpeixish.h util.c + ____________________________________________________________________________ + [ 10538] By: jhi on 2001/06/12 14:16:15 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10537] By: jhi on 2001/06/12 14:11:26 + Log: One less -Wall whine (found under DEBUGGING). + Branch: perl + ! x2p/Makefile.SH x2p/a2p.c + ____________________________________________________________________________ + [ 10536] By: jhi on 2001/06/12 13:32:09 + Log: s/case-independent/case-insensitive/g + Branch: perl + ! pod/perldebug.pod + ____________________________________________________________________________ + [ 10535] By: jhi on 2001/06/12 13:27:28 + Log: As suggested in + + Subject: Re: ext/ + -Wall + From: Gurusamy Sarathy + Date: Mon, 11 Jun 2001 23:34:31 -0700 + Message-Id: <200106120634.f5C6YVM07246@smtp3.ActiveState.com> + Branch: perl + ! ext/PerlIO/Scalar/Scalar.xs ext/PerlIO/Via/Via.xs globals.c + ! perl.h + ____________________________________________________________________________ + [ 10534] By: jhi on 2001/06/12 13:13:27 + Log: Subject: ext/ + -Wall + From: Doug MacEachern + Date: Mon, 11 Jun 2001 22:19:45 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/ByteLoader/ByteLoader.xs ext/DB_File/DB_File.xs + ! ext/DB_File/version.c ext/Devel/DProf/DProf.xs + ! ext/DynaLoader/dl_dlopen.xs ext/DynaLoader/dlutils.c + ! ext/Encode/Encode.xs ext/File/Glob/bsd_glob.c + ! ext/Filter/Util/Call/Call.xs ext/GDBM_File/GDBM_File.xs + ! ext/List/Util/Util.xs ext/MIME/Base64/Base64.xs + ! ext/POSIX/POSIX.xs ext/PerlIO/Scalar/Scalar.xs + ! ext/PerlIO/Via/Via.xs ext/Time/HiRes/HiRes.xs + ! ext/Time/Piece/Piece.xs ext/attrs/attrs.xs globals.c + ! lib/ExtUtils/xsubpp + ____________________________________________________________________________ + [ 10533] By: jhi on 2001/06/12 12:52:57 + Log: Subject: [PATCH] anonymous stashes + From: Abhijit Menon-Sen + Date: Tue, 12 Jun 2001 12:47:04 +0530 + Message-ID: <20010612124704.A29029@lustre.linux.in> + Branch: perl + ! dump.c gv.c sv.c xsutils.c + ____________________________________________________________________________ + [ 10532] By: jhi on 2001/06/12 12:37:36 + Log: One more test for $^S. + Branch: perl + ! t/op/magic.t + ____________________________________________________________________________ + [ 10531] By: jhi on 2001/06/12 12:35:02 + Log: Subject: [PATCH 20010612.002] $^S almost entirely broken with 5.6.1 + From: Abhijit Menon-Sen + Date: Tue, 12 Jun 2001 17:35:55 +0530 + Message-ID: <20010612173555.A32426@lustre.linux.in> + Branch: perl + ! mg.c t/op/magic.t + ____________________________________________________________________________ + [ 10530] By: jhi on 2001/06/12 12:31:11 + Log: Subject: Re: [ID 20010612.001] out of memory during regex compilation + From: Mike Guy + Date: Tue, 12 Jun 2001 13:14:15 +0100 + Message-Id: + Branch: perl + ! pod/perlop.pod + ____________________________________________________________________________ + [ 10529] By: jhi on 2001/06/12 12:21:06 + Log: AUTHORS updates. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10528] By: jhi on 2001/06/12 12:19:47 + Log: Subject: [PATCH] rhapsody/darwin minor cleanup + From: Wilfredo Sanchez + Content-Transfer-Encoding: 7bit + Message-Id: <200106121009.GAA01968@melbourne-city-street.mit.edu> + Branch: perl + ! Makefile.SH hints/darwin.sh hints/rhapsody.sh + ____________________________________________________________________________ + [ 10527] By: jhi on 2001/06/12 11:58:53 + Log: Subject: [MacPerl-Porters] Re: [PATCH] Mac OS Compatability for bleadperl + From: "Philip Newton" + Date: Mon, 11 Jun 2001 07:08:03 +0200 + Message-Id: <200106120802.LAA08992@taas.iki.fi> + Branch: perl + ! t/base/term.t + ____________________________________________________________________________ + [ 10526] By: jhi on 2001/06/12 01:35:34 + Log: Cleanup the a2p.c for -Wall. + Branch: perl + ! x2p/Makefile.SH x2p/a2p.c + ____________________________________________________________________________ + [ 10525] By: jhi on 2001/06/12 01:10:56 + Log: File::Find update for MacOS from Chris Nandor. + Branch: perl + ! lib/File/Find.pm t/lib/filefind.t + ____________________________________________________________________________ + [ 10524] By: jhi on 2001/06/12 00:29:20 + Log: gcc -Wall nits picked out by a non-UNIX system + (courtesy of Mark Bixby) + Branch: perl + ! doio.c ext/Devel/Peek/Peek.xs ext/DynaLoader/dl_mpeix.xs + ! ext/IO/IO.xs ext/PerlIO/Via/Via.xs ext/Socket/Socket.xs + ! pp_sys.c util.c + ____________________________________________________________________________ + [ 10523] By: jhi on 2001/06/11 22:34:03 + Log: Metaconfig unit change for #10522. (The d_modfl changes + placate metalint.) + Branch: metaconfig/U/perl + ! d_modfl.U d_u32align.U + ____________________________________________________________________________ + [ 10522] By: jhi on 2001/06/11 22:33:00 + Log: Buglet found by Mark Bixby: "./try >&2 >/dev/null" should + be "./try 2>&1 >/dev/null". + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10521] By: jhi on 2001/06/11 19:49:54 + Log: Subject: [PATCH perl@10517] DCL quoting syntax drives pumpking mad + From: "Craig A. Berry" + Date: Mon, 11 Jun 2001 14:00:32 -0500 + Message-Id: <5.1.0.14.0.20010611134750.03985cb8@exchi01> + Branch: perl + ! configure.com + ____________________________________________________________________________ + [ 10520] By: jhi on 2001/06/11 17:55:47 + Log: Move the full \p\P lists to perlunicode. + Branch: perl + ! pod/perlretut.pod pod/perlunicode.pod + ____________________________________________________________________________ + [ 10519] By: jhi on 2001/06/11 17:10:00 + Log: VOS build tweak for 5.6.1 from Paul Green. + Branch: maint-5.6/perl + ! vos/build.cm + ____________________________________________________________________________ + [ 10518] By: jhi on 2001/06/11 17:07:03 + Log: Subject: [PATCH perl@10476] no PerlIO at startup time on VMS + From: "Craig A. Berry" + Date: Fri, 8 Jun 2001 18:08:18 -0500 + Message-Id: + Branch: perl + ! vms/vms.c + ____________________________________________________________________________ + [ 10517] By: jhi on 2001/06/11 14:52:01 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10516] By: jhi on 2001/06/11 14:46:33 + Log: Add the modfl_pow32_bug (anti)definition also to VOS headers. + Branch: perl + ! vos/config.alpha.h vos/config.ga.h + ____________________________________________________________________________ + [ 10515] By: jhi on 2001/06/11 14:39:05 + Log: VOS updates from Paul Green for @10476. + Branch: perl + ! README.vos vos/Changes vos/build.cm vos/compile_perl.cm + ! vos/config.alpha.def vos/config.alpha.h vos/config.ga.def + ! vos/config.ga.h vos/configure_perl.cm + ____________________________________________________________________________ + [ 10514] By: jhi on 2001/06/11 12:58:43 + Log: Subject: [PATCH] Not many people know this ... + From: Mike Guy + Date: Mon, 11 Jun 2001 14:55:15 +0100 + Message-Id: + Branch: perl + ! pod/perldebug.pod + ____________________________________________________________________________ + [ 10513] By: jhi on 2001/06/11 12:30:06 + Log: Add final commas to lists as suggested by Philip Newton. + Branch: perl + ! lib/ExtUtils/Constant.pm t/lib/extutils.t + ____________________________________________________________________________ + [ 10512] By: jhi on 2001/06/11 12:28:49 + Log: Subject: [MacPerl-Porters] [PATCH] Mac OS Compatability for bleadperl + Date: Sun, 10 Jun 2001 23:35:38 -0400 + From: Chris Nandor + Message-Id: + Branch: perl + ! lib/DirHandle.pm lib/File/Basename.pm lib/diagnostics.pm + ! perl.c t/base/term.t t/comp/cpp.t t/comp/multiline.t + ! t/comp/script.t t/lib/anydbm.t t/lib/autoloader.t + ! t/lib/dirhand.t t/lib/selfloader.t t/op/anonsub.t + ! t/op/closure.t t/op/defins.t t/op/exec.t t/op/goto.t + ! t/op/pack.t t/op/regexp.t t/op/regexp_noamp.t t/op/split.t + ! t/op/write.t t/pragma/strict.t + ____________________________________________________________________________ + [ 10511] By: jhi on 2001/06/11 12:13:31 + Log: Subject: [RESEND] [PATCH] Mac OS lib patches for bleadperl + From: Chris Nandor + Date: Mon, 11 Jun 2001 08:24:28 -0400 + Message-Id: + Branch: perl + ! ext/IO/lib/IO/Dir.pm lib/File/Copy.pm t/lib/filecopy.t + ! t/lib/io_dir.t + ____________________________________________________________________________ + [ 10510] By: jhi on 2001/06/11 12:03:16 + Log: One more run_byacc (a hand-tweaked version had slipped in). + Branch: perl + ! perly.c vms/perly_c.vms + ____________________________________________________________________________ + [ 10509] By: nick on 2001/06/11 07:49:15 + Log: Integrate mainline + Branch: perlio + !> Makefile.SH embed.h embed.pl global.sym + !> lib/ExtUtils/Constant.pm lib/ExtUtils/Manifest.pm objXSUB.h + !> perl.h perlapi.c perlapi.h perly.c perly.fixer perly.h perly.y + !> perly_c.diff pod/perl572delta.pod pod/perlapi.pod proto.h sv.c + !> t/lib/extutils.t util.c vms/perly_c.vms vms/perly_h.vms + ____________________________________________________________________________ + [ 10508] By: jhi on 2001/06/10 22:38:05 + Log: Subject: [PATCH] ExtUtils::Manifest not -w clean + From: Mike Guy + Reply-To: mjtg@cam.ac.uk + Message-Id: + Branch: perl + ! lib/ExtUtils/Manifest.pm + ____________________________________________________________________________ + [ 10507] By: jhi on 2001/06/10 22:37:16 + Log: Subject: [PATCH] ExtUtils::Constant + From: Nicholas Clark + Date: Sun, 10 Jun 2001 23:25:41 +0100 + Message-ID: <20010610232540.C76396@plum.flirble.org> + Branch: perl + ! lib/ExtUtils/Constant.pm t/lib/extutils.t + ____________________________________________________________________________ + [ 10506] By: jhi on 2001/06/10 20:57:20 + Log: Integrate perlio. + Branch: perl + !> iperlsys.h + ____________________________________________________________________________ + [ 10505] By: jhi on 2001/06/10 18:37:57 + Log: Move the grok_number and its lieutenant grok_numeric_radix + from sv.c statics to util.c and public. + Branch: perl + ! embed.h embed.pl global.sym objXSUB.h perl.h perlapi.c + ! perlapi.h pod/perlapi.pod proto.h sv.c util.c + ____________________________________________________________________________ + [ 10504] By: nick on 2001/06/10 17:47:06 + Log: Fix (valid) -Wall warnings in perlio.c + Branch: perlio + ! iperlsys.h + ____________________________________________________________________________ + [ 10503] By: jhi on 2001/06/10 17:38:28 + Log: Update perly_c.diff, update perly.fixer to edit away + some of the -Wall noise. + Branch: perl + ! perly.c perly.fixer perly_c.diff vms/perly_c.vms + ____________________________________________________________________________ + [ 10502] By: jhi on 2001/06/10 17:09:42 + Log: Check the version of byacc. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 10501] By: jhi on 2001/06/10 17:00:08 + Log: Subject: [PATCH] perly.y overhaul + From: Simon Cozens + Date: Sun, 10 Jun 2001 16:56:54 +0100 + Message-ID: <20010610165654.A16597@deep-dark-truthful-mirror.pmb.ox.ac.uk> + + Plus make run_byacc. + Branch: perl + ! perly.c perly.h perly.y vms/perly_c.vms vms/perly_h.vms + ____________________________________________________________________________ + [ 10500] By: jhi on 2001/06/10 16:07:28 + Log: Integrate perlio. + Branch: perl + !> perlio.c perlsfio.h + ____________________________________________________________________________ + [ 10499] By: nick on 2001/06/10 15:01:08 + Log: Integrate mainline + Branch: perlio + !> Changes Configure embed.h embed.pl patchlevel.h proto.h sv.c + !> t/pragma/locale.t util.c + ____________________________________________________________________________ + [ 10498] By: jhi on 2001/06/10 13:49:23 + Log: Put some meat on the perl572delta bones. The list of + selected bug fixes needs more work, as does still the + whole document. + Branch: perl + ! pod/perl572delta.pod + ____________________________________________________________________________ + [ 10497] By: nick on 2001/06/10 12:27:51 + Log: Paper over a crack or two with USE_SFIO + Branch: perlio + ! perlio.c perlsfio.h + ____________________________________________________________________________ + [ 10496] By: jhi on 2001/06/10 11:04:22 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10495] By: jhi on 2001/06/10 10:55:34 + Log: Subject: Re: pragma/locale.t #107 + From: Hugo + Date: Sun, 10 Jun 2001 11:23:30 +0100 + Message-Id: <200106101023.LAA32085@crypt.compulink.co.uk> + + Encapsulate the scan of the decimal radix separator. + Branch: perl + ! embed.h embed.pl proto.h sv.c + ____________________________________________________________________________ + [ 10494] By: jhi on 2001/06/10 03:00:17 + Log: Try to grok numbers both with the locale specific separator + and with the usual "." (if different from the lss); add a test + to locale.t to do also a little bit of math in addition to just + equalness testing; remove extraneous logic as suggested in + + Subject: Re: pragma/locale.t #107 + From: Nicholas Clark + Date: Sat, 9 Jun 2001 22:37:36 +0100 + Message-ID: <20010609223735.Y76396@plum.flirble.org> + Branch: perl + ! sv.c t/pragma/locale.t + ____________________________________________________________________________ + [ 10493] By: jhi on 2001/06/10 01:25:23 + Log: Metaconfig unit change for #10492. + Branch: metaconfig/U/perl + ! Extensions.U + ____________________________________________________________________________ + [ 10492] By: jhi on 2001/06/10 01:23:59 + Log: Subject: [PATCH] Don't build Thread.pm if USEITHREADS + From: Artur Bergman + Date: Sat, 09 Jun 2001 21:03:51 +0200 + Message-ID: + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10491] By: jhi on 2001/06/10 01:15:40 + Log: Integrate perlio. + Branch: perl + !> perlsfio.h + ____________________________________________________________________________ + [ 10490] By: jhi on 2001/06/10 01:08:26 + Log: Do locale specific separator if only in locale. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10489] By: nick on 2001/06/09 19:13:25 + Log: Make XS/Typemap compile (but fail) with sfio + Branch: perlio + ! perlsfio.h + ____________________________________________________________________________ + [ 10488] By: nick on 2001/06/09 19:12:51 + Log: Re-integrate mainline + Branch: perlio + !> embed.h embed.pl embedvar.h intrpvar.h perl.h perlapi.h + !> proto.h sv.c util.c + ____________________________________________________________________________ + [ 10487] By: nick on 2001/06/09 16:26:29 + Log: Integrate mainline + Branch: perlio + !> (integrate 31 files) + ____________________________________________________________________________ + [ 10486] By: jhi on 2001/06/09 16:11:51 + Log: Subject: [PATCH] New attempt to clone callack + From: Artur Bergman + Date: Thu, 07 Jun 2001 11:52:16 +0200 + Message-ID: + Branch: perl + ! embedvar.h intrpvar.h perlapi.h sv.c + ____________________________________________________________________________ + [ 10485] By: jhi on 2001/06/09 15:23:52 + Log: Numeric conversion tweaks suggested by Hugo and Nicholas. + Branch: perl + ! embed.h embed.pl perl.h proto.h sv.c util.c + ____________________________________________________________________________ + [ 10484] By: jhi on 2001/06/09 14:47:25 + Log: Subject: Re: pragma/locale.t #107 + From: Nicholas Clark + Date: Sat, 9 Jun 2001 16:26:10 +0100 + Message-ID: <20010609162609.V76396@plum.flirble.org> + + A missing NVification. + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10483] By: jhi on 2001/06/08 19:40:32 + Log: Redo the #10482, there already was a test script for formats. + Branch: perl + - t/io/format.t + ! MANIFEST t/op/write.t + ____________________________________________________________________________ + [ 10482] By: jhi on 2001/06/08 19:34:45 + Log: Twisted format testing, from Merijn. + Branch: perl + + t/io/format.t + ! MANIFEST + ____________________________________________________________________________ + [ 10481] By: jhi on 2001/06/08 19:21:56 + Log: More \p{In...} testing, combined with \N{...}. + Branch: perl + ! lib/utf8_heavy.pl t/op/pat.t + ____________________________________________________________________________ + [ 10480] By: jhi on 2001/06/08 14:16:06 + Log: Metaconfig changes for #10479. + Branch: metaconfig + ! U/Glossary.patch + Branch: metaconfig/U/perl + ! d_modfl.U + ____________________________________________________________________________ + [ 10479] By: jhi on 2001/06/08 14:15:32 + Log: Be inspired more by Hugo-- introduce HAS_MODFL_POW32_BUG. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH configure.com epoc/config.sh pp.c uconfig.h + ! uconfig.sh vos/config.alpha.def vos/config.ga.def + ! win32/config.bc win32/config.gc win32/config.vc + ____________________________________________________________________________ + [ 10478] By: jhi on 2001/06/08 12:20:41 + Log: Subject: Re: [PATCH perl@10439] fix old $^S description in perlvms.pod + From: "Craig A. Berry" + Date: Thu, 7 Jun 2001 14:27:20 -0500 + Message-Id: + Branch: perl + ! vms/perlvms.pod + ____________________________________________________________________________ + [ 10477] By: jhi on 2001/06/08 12:19:00 + Log: Subject: [PATCH] Unresolved symbol in ext/re/re.xs + From: Gisle Aas + Date: 07 Jun 2001 17:04:29 -0700 + Message-ID: + Branch: perl + ! ext/re/re.xs + ____________________________________________________________________________ + [ 10476] By: jhi on 2001/06/08 01:35:42 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10475] By: jhi on 2001/06/08 00:53:45 + Log: Regen Glossary et alia. + Branch: perl + ! Porting/Glossary Porting/config.sh Porting/config_H + ____________________________________________________________________________ + [ 10474] By: jhi on 2001/06/07 22:06:38 + Log: Metaconfig unit changes for #10473. + Branch: metaconfig/U/perl + ! d_modfl.U + ____________________________________________________________________________ + [ 10473] By: jhi on 2001/06/07 22:06:16 + Log: Harumph, also AIX will spill its guts (i.e. dump core) + if an executable contains modfl() but it hasn't been + compiled right (in the case of AIX, with cc -qlongdouble). + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10472] By: gsar on 2001/06/07 20:04:28 + Log: integrate change#10471 from mainline + + in change#10451, check that CvOUTSIDE is a CV before looking in + (it can apparently be SVt_NULL during global destruction) + Branch: maint-5.6/perl + !> op.c + ____________________________________________________________________________ + [ 10471] By: gsar on 2001/06/07 20:01:31 + Log: in change#10451, check that CvOUTSIDE is a CV before looking in + (it can apparently be SVt_NULL during global destruction) + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 10470] By: jhi on 2001/06/07 12:17:51 + Log: Subject: Re: [PATCH perl@10439] diagnostics and long C<=item>s + From: Robin Barker + Date: Thu, 7 Jun 2001 13:01:06 +0100 (BST) + Message-Id: <200106071201.NAA13627@tempest.npl.co.uk> + Branch: perl + ! lib/diagnostics.pm pod/perldiag.pod + ____________________________________________________________________________ + [ 10469] By: jhi on 2001/06/07 12:16:12 + Log: Subject: [PATCH perl@10439] long =item + From: Robin Barker + Date: Thu, 7 Jun 2001 12:34:08 +0100 (BST) + Message-Id: <200106071134.MAA10288@tempest.npl.co.uk> + Branch: perl + ! README.amiga lib/Attribute/Handlers.pm + ! lib/ExtUtils/Constant.pm lib/Locale/Maketext.pod + ____________________________________________________________________________ + [ 10468] By: jhi on 2001/06/07 12:08:56 + Log: Subject: [PATCH 5.7.1 pod/perlguts.pod] IOK vs pIOK docs + Date: Thu, 7 Jun 2001 10:09:59 +0100 (BST) + Reply-To: Dave Mitchell + Message-Id: <200106070909.KAA25610@gizmo.fdgroup.co.uk> + Branch: perl + ! pod/perlguts.pod + ____________________________________________________________________________ + [ 10467] By: jhi on 2001/06/07 12:04:26 + Log: Integrate perlio. + Branch: perl + !> sv.c + ____________________________________________________________________________ + [ 10466] By: nick on 2001/06/07 10:25:40 + Log: MULTIPLICITY fix for S_grok_number(), also a few gratuitious trailing + whitespace tweaks. + Still coredumps in pragma/overload.t - what a nice hard fail that is... + Branch: perlio + ! sv.c + ____________________________________________________________________________ + [ 10465] By: nick on 2001/06/07 08:41:58 + Log: Raw integrate of mainline for S_grok_number debug + (sv.c has MULTIPLICITY issues as well as whatever else ...) + Branch: perlio + - plan9/perlplan9.doc plan9/perlplan9.pod + !> (integrate 46 files) + ____________________________________________________________________________ + [ 10464] By: jhi on 2001/06/06 23:33:58 + Log: The proper prototyping for #10463. + Branch: perl + ! embed.h embed.pl proto.h sv.c + ____________________________________________________________________________ + [ 10463] By: jhi on 2001/06/06 23:15:30 + Log: Subject: Re: [PATCH] nuke strtol (was Re: One fix for strtoul not setting errno) + From: Nicholas Clark + Date: Thu, 7 Jun 2001 00:29:59 +0100 + Message-ID: <20010607002959.Z76396@plum.flirble.org> + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10462] By: jhi on 2001/06/06 23:13:19 + Log: Subject: [PATCH perl@10439] fix old $^S description in perlvms.pod + From: "Craig A. Berry" + Date: Wed, 06 Jun 2001 17:54:30 -0500 + Message-Id: <5.1.0.14.0.20010606174814.03c2c880@exchi01> + Branch: perl + ! vms/perlvms.pod + ____________________________________________________________________________ + [ 10461] By: jhi on 2001/06/06 23:10:00 + Log: Podify the remaining README.platform files; + merge README.plan9 and plan9/perlplan9.pod; + delete plan9/perlplan9.* (the perlplan.doc needs to + be regenerated in Plan 9); make the =head1 and =head2 + in the README.platform to be a little more verbose + (skipped README.os2 not to anger Ilya) so that they + look better in the toc; regen toc. + Branch: perl + - plan9/perlplan9.doc plan9/perlplan9.pod + ! MANIFEST README.aix README.amiga README.apollo README.beos + ! README.bs2000 README.cygwin README.dgux README.dos README.epoc + ! README.hpux README.hurd README.machten README.macos + ! README.micro README.mint README.mpeix README.os390 + ! README.plan9 README.qnx README.solaris README.threads + ! README.tru64 README.vmesa README.vms README.vos README.win32 + ! plan9/mkfile pod/buildtoc.PL pod/perl.pod pod/perlport.pod + ! pod/perltoc.pod win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 10460] By: jhi on 2001/06/06 20:58:53 + Log: Subject: [PATCH] Re: Bug in perlguts documentation? + From: Mike Guy + Reply-To: mjtg@cam.ac.uk + Message-Id: + Branch: perl + ! pod/perlguts.pod + ____________________________________________________________________________ + [ 10459] By: jhi on 2001/06/06 20:58:15 + Log: Subject: [PATCH] Re: [ID 20010604.015] taint + comma = false insecurity + From: Mike Guy + Reply-To: mjtg@cam.ac.uk + Message-Id: + Branch: perl + ! pod/perlsec.pod + ____________________________________________________________________________ + [ 10458] By: jhi on 2001/06/06 20:56:04 + Log: Disable long doubles from pre-5.0 Tru64s. + Branch: perl + ! README.tru64 hints/dec_osf.sh + ____________________________________________________________________________ + [ 10457] By: jhi on 2001/06/06 20:49:23 + Log: The #10455 exposed that modfl() is fundamentally busted + (as in: dumps core) in pre-5.0 Tru64, so better avoid even + testing it. + Branch: perl + ! hints/dec_osf.sh + ____________________________________________________________________________ + [ 10456] By: jhi on 2001/06/06 20:48:35 + Log: Metaconfig unit change for #10455. + Branch: metaconfig/U/perl + ! d_modfl.U + ____________________________________________________________________________ + [ 10455] By: jhi on 2001/06/06 20:48:09 + Log: Configure check for geborken modfl(), inspired by + + Subject: Re: [20010118.017] op/int.t failure + From: Hugo + Date: Tue, 05 Jun 2001 13:43:27 +0100 + Message-Id: <200106051243.NAA15525@crypt.compulink.co.uk> + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10454] By: jhi on 2001/06/06 11:45:08 + Log: Integrate changes #10450 and #10451 from maintperl: + + optimize change#10448 slightly (don't repeat search in eval""s lexical + scope, since that has already been searched) + + change#9108 needs subtler treatment for case of closures created + within eval"" + Branch: perl + !> op.c t/op/misc.t + ____________________________________________________________________________ + [ 10453] By: jhi on 2001/06/06 11:42:10 + Log: MakeMaker magic to compile (when no dynamic loading) + List/Util.xsc as (ListUtil.c and) ListUtil.o since + POSIX-BC (BS2000) linker has an evil limitation of + being unable to include in the same executable several + object files with the same name - case-insensitively - + because otherwise we conflict with util.c. + Strictly speaking currently required only in POSIX-BC + but probably will do no harm elsewhere where static + linking is required. + Branch: perl + ! ext/List/Util/Makefile.PL + ____________________________________________________________________________ + [ 10452] By: nick on 2001/06/06 08:59:51 + Log: Integrate mainline. + Branch: perlio + +> lib/Attribute/Handlers/demo/Demo.pm + +> lib/Attribute/Handlers/demo/Descriptions.pm + +> lib/Attribute/Handlers/demo/MyClass.pm + +> lib/Attribute/Handlers/demo/demo.pl + +> lib/Attribute/Handlers/demo/demo2.pl + +> lib/Attribute/Handlers/demo/demo3.pl + +> lib/Attribute/Handlers/demo/demo4.pl + +> lib/Attribute/Handlers/demo/demo_call.pl + +> lib/Attribute/Handlers/demo/demo_chain.pl + +> lib/Attribute/Handlers/demo/demo_cycle.pl + +> lib/Attribute/Handlers/demo/demo_hashdir.pl + +> lib/Attribute/Handlers/demo/demo_phases.pl + +> lib/Attribute/Handlers/demo/demo_range.pl + +> lib/Attribute/Handlers/demo/demo_rawdata.pl t/op/override.t + +> uts/strtol_wrap.c + !> (integrate 91 files) + ____________________________________________________________________________ + [ 10451] By: gsar on 2001/06/06 07:11:36 + Log: change#9108 needs subtler treatment for case of closures created + within eval"" + Branch: maint-5.6/perl + ! op.c t/op/misc.t + ____________________________________________________________________________ + [ 10450] By: gsar on 2001/06/06 05:47:25 + Log: optimize change#10448 slightly (don't repeat search in eval""s lexical + scope, since that has already been searched) + Branch: maint-5.6/perl + ! op.c + ____________________________________________________________________________ + [ 10449] By: jhi on 2001/06/06 01:33:31 + Log: Integrate change #10448 from maintperl; lexicals + outside an eval"" weren't resolved correctly inside a subroutine + definition inside the eval"" if they were not already referenced + in the toplevel of the eval""-ed code + Branch: perl + !> cop.h op.c pp_ctl.c t/op/misc.t + ____________________________________________________________________________ + [ 10448] By: gsar on 2001/06/06 01:03:26 + Log: fix yet another bug of hoary vintage found by change#10394: lexicals + outside an eval"" weren't resolved correctly inside a subroutine + definition inside the eval"" if they were not already referenced + in the toplevel of the eval""-ed code + Branch: maint-5.6/perl + ! cop.h op.c pp_ctl.c t/op/misc.t + ____________________________________________________________________________ + [ 10447] By: jhi on 2001/06/06 00:51:04 + Log: Subject: [PATCH] perl570delta.pod + From: Peter Scott + Date: Tue, 05 Jun 2001 18:51:02 -0700 + Message-Id: <4.3.2.7.2.20010605183619.00a94400@psdt.com> + Branch: perl + ! pod/perl570delta.pod + ____________________________________________________________________________ + [ 10446] By: jhi on 2001/06/05 23:45:05 + Log: The fudge factor is no more needed. I hope. + Branch: perl + ! t/lib/posix.t + ____________________________________________________________________________ + [ 10445] By: jhi on 2001/06/05 23:19:19 + Log: Subject: Re: [ID 20010529.006] String plus zero inconsistent across platforms + From: Hugo + Date: Tue, 05 Jun 2001 12:58:19 +0100 + Message-Id: <200106051158.MAA04605@crypt.compulink.co.uk> + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10444] By: jhi on 2001/06/05 11:09:01 + Log: Make up prototypes only for those who have the functions + but not the prototypes. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 10443] By: jhi on 2001/06/05 11:02:13 + Log: Subject: Re: Not OK: perl@10439 on win32 + From: Prymmer/Kahn + Date: Mon, 4 Jun 2001 22:11:02 -0700 (PDT) + Message-ID: + Branch: perl + ! perl.h util.c + ____________________________________________________________________________ + [ 10442] By: jhi on 2001/06/05 00:55:46 + Log: The metaconfig units changes for #10441. + Branch: metaconfig + ! U/modified/Extract.U U/modified/Extractall.U + ! U/modified/Finish.U + ____________________________________________________________________________ + [ 10441] By: jhi on 2001/06/05 00:55:17 + Log: Extraction of the *.SH wasn't quite working with -Dmksymlinks. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10440] By: jhi on 2001/06/05 00:28:27 + Log: Unnecessary fuzziness undone, noted by Mike Guy. + Branch: perl + ! t/op/tr.t + ____________________________________________________________________________ + [ 10439] By: jhi on 2001/06/04 17:14:31 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10438] By: jhi on 2001/06/04 17:10:16 + Log: Test case for 'eval "a.b.c.d.e.f;sub"' save stack imbalance + bug found by Ilmari Karonen; the bug fixed by Sarathy's lexical + leakage patch. + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 10437] By: jhi on 2001/06/04 17:01:06 + Log: Test case for #10433/#10424. + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 10436] By: jhi on 2001/06/04 16:54:21 + Log: Subject: One fix for strtoul not setting errno + From: hom00@utsglobal.com (Hal Morris) + Date: Sat, 2 Jun 2001 09:23:11 -0700 (PDT) + Message-Id: <200106021623.JAA06906@cepheus.utsglobal.com> + Branch: perl + + uts/strtol_wrap.c + ! MANIFEST hints/uts.sh + ____________________________________________________________________________ + [ 10435] By: jhi on 2001/06/04 16:54:01 + Log: Metaconfig units changes for #10434. + Branch: metaconfig + ! U/modified/Cppsym.U + Branch: metaconfig/U/perl + + d_dbminitproto.U d_flockproto.U d_sockatmarkproto.U + + d_syscallproto.U d_usleepproto.U + ! longdblfio.U quadfio.U + ____________________________________________________________________________ + [ 10434] By: jhi on 2001/06/04 16:48:33 + Log: Configure tweaks; add prototype probes, make the cpp symbols + probe to cast, not whine; test for %Ld and %Lf before %lld and + %llf because the L is the ANSI way. + Branch: perl + ! Configure config_h.SH configure.com epoc/config.sh + ! ext/ODBM_File/ODBM_File.xs perl.h pod/perltoc.pod uconfig.h + ! uconfig.sh vos/config.alpha.def vos/config.ga.def + ! win32/config.bc win32/config.gc win32/config.vc x2p/str.c + ____________________________________________________________________________ + [ 10433] By: jhi on 2001/06/04 16:45:23 + Log: Sigh. This is what #10424 was supposed to check in. + Branch: perl + ! op.c sv.c sv.h + ____________________________________________________________________________ + [ 10432] By: jhi on 2001/06/04 16:29:40 + Log: More verbose failure. + Branch: perl + ! t/op/ver.t + ____________________________________________________________________________ + [ 10431] By: jhi on 2001/06/04 16:21:55 + Log: The .pm changes to go with #10428. + Branch: perl + ! ext/Fcntl/Fcntl.pm ext/Socket/Socket.pm + ! ext/Sys/Syslog/Syslog.pm + ____________________________________________________________________________ + [ 10430] By: jhi on 2001/06/04 16:05:20 + Log: On second thoughts show to utf8 skippage message only + on failures, it's too confusing otherwise, + Branch: perl + ! t/pragma/locale.t + ____________________________________________________________________________ + [ 10429] By: jhi on 2001/06/04 14:47:50 + Log: Do not import anything from Encode. + Branch: perl + ! ext/MIME/Base64/QuotedPrint.pm + ____________________________________________________________________________ + [ 10428] By: jhi on 2001/06/04 14:45:47 + Log: The #10402 didn't take. Weird. + Branch: perl + ! ext/Fcntl/Fcntl.xs ext/Socket/Socket.xs + ! ext/Sys/Syslog/Syslog.xs + ____________________________________________________________________________ + [ 10427] By: jhi on 2001/06/04 12:55:39 + Log: Eradicate traces of 'asciirange' re subpragma. + Branch: perl + ! ext/B/B/Deparse.pm ext/MIME/Base64/QuotedPrint.pm ext/re/re.pm + ! pod/perldiag.pod + ____________________________________________________________________________ + [ 10426] By: jhi on 2001/06/04 12:44:05 + Log: use is a compile-time thing. + Branch: perl + ! ext/MIME/Base64/QuotedPrint.pm + ____________________________________________________________________________ + [ 10425] By: jhi on 2001/06/04 12:39:44 + Log: Subject: [PATCH perl@10419] -Wall casting patch + From: Robin Barker + Date: Mon, 4 Jun 2001 14:27:28 +0100 (BST) + Message-Id: <200106041327.OAA15338@tempest.npl.co.uk> + Branch: perl + ! ext/Devel/DProf/DProf.xs mg.c + ____________________________________________________________________________ + [ 10424] By: jhi on 2001/06/04 12:23:30 + Log: Subject: [PATCH #2] introducing SVpad_TYPED + From: Abhijit Menon-Sen + Date: Mon, 4 Jun 2001 12:26:02 +0530 + Message-ID: <20010604122602.A5775@lustre.linux.in> + Branch: perl + ! op.c sv.c sv.h + ____________________________________________________________________________ + [ 10423] By: gsar on 2001/06/04 05:12:18 + Log: testsuite for change#10192 (from Gisle Aas) + Branch: perl + + t/op/override.t + ! MANIFEST + ____________________________________________________________________________ + [ 10422] By: gsar on 2001/06/04 02:32:03 + Log: integrate changes#10414-10416 from mainline + + Potential buffer overrun if the radix separator is more than + one byte. Also, under locales, prefer the locale-specific + separator over the old boring ".". + + "10.", that is, decimal numbers can have no decimal part at all. + + The non-locale places need love, too. + Branch: maint-5.6/perl + !> perl.h sv.c + ____________________________________________________________________________ + [ 10421] By: jhi on 2001/06/04 02:25:53 + Log: Missed from #10420. + Branch: perl + ! epoc/config.sh + ____________________________________________________________________________ + [ 10420] By: jhi on 2001/06/04 02:19:58 + Log: Missed HAS_SETRESGID_PROTO. No serious harm done since + often this prototype goes with HAS_SETRESUID_PROTO. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH configure.com perl.h uconfig.h + ____________________________________________________________________________ + [ 10419] By: jhi on 2001/06/04 00:24:55 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10418] By: jhi on 2001/06/03 23:58:04 + Log: -Wall "subscript has type `char'" cleanup. + Branch: perl + ! ext/File/Glob/bsd_glob.c x2p/a2py.c x2p/str.c x2p/walk.c + ____________________________________________________________________________ + [ 10417] By: jhi on 2001/06/03 23:37:17 + Log: Various "cast to pointer from integer of different size" + picked up by gcc -Wall (in Tru64 where pointers are 64 bits + wide but I32 (int) only 32 bits wide). + + WARNING: the classnum and tagnum changes in Storable.xs + may not be wise, they may be breaking binary compatibility + (in 64-bit platforms), asked Raphael Manfredi about the changes. + Branch: perl + ! embed.pl ext/Devel/DProf/DProf.xs ext/Storable/Storable.xs + ! mg.c proto.h + ____________________________________________________________________________ + [ 10416] By: jhi on 2001/06/03 23:15:24 + Log: The non-locale places need love, too. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 10415] By: jhi on 2001/06/03 23:10:55 + Log: "10.", that is, decimal numbers can have no decimal part at all. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 10414] By: jhi on 2001/06/03 22:49:55 + Log: Potential buffer overrun if the radix separator is more than + one byte. Also, under locales, prefer the locale-specific + separator over the old boring ".". + Branch: perl + ! perl.h sv.c + ____________________________________________________________________________ + [ 10413] By: jhi on 2001/06/03 22:42:10 + Log: Integrate change #10412 from maintperl; locale is now + per-cop, not per-op; plus retweak the locale.t to always + list the skipped utf8 locales. + Branch: perl + ! t/pragma/locale.t + !> embed.h lib/locale.pm op.c op.h opcode.h opcode.pl perl.h pp.c + !> pp.sym pp_ctl.c pp_proto.h pp_sys.c util.c + ____________________________________________________________________________ + [ 10412] By: gsar on 2001/06/03 22:23:16 + Log: rationalize locale handling to fix the bugs uncovered by change#10394 + + the major issue was that the runtime was looking at PL_hints rather + than op_private to notice whether locale was enabled + + the secondary issue was that many locale-sensitive numeric ops didn't + have HINT_LOCALE propagated into their op_private + + HINT_LOCALE is now propagated per-statement (i.e., via PL_curcop) + instead of per-op, just like HINT_BYTE and the hints for lexical + warnings (this makes the hint available to every op via PL_curcop) + + pragma/locale.t may need to be reworked with these fixes in mind + (it currently passes its tests) + Branch: maint-5.6/perl + ! embed.h lib/locale.pm op.c op.h opcode.h opcode.pl perl.h pp.c + ! pp.sym pp_ctl.c pp_proto.h pp_sys.c t/pragma/locale.t util.c + ____________________________________________________________________________ + [ 10411] By: jhi on 2001/06/03 17:50:49 + Log: More verbose debugging. + Branch: perl + ! t/pragma/locale.t + ____________________________________________________________________________ + [ 10410] By: jhi on 2001/06/03 17:36:40 + Log: Subject: RE: [PATCHES] regcomp.c, pod/perldiag.pod, t/op/pat.t + From: "Paul Marquess" + Date: Sat, 2 Jun 2001 22:53:33 +0100 + Message-ID: <000601c0ebae$77d10dc0$99dcfea9@bfs.phone.com> + Branch: perl + ! regcomp.c t/pragma/warn/regcomp + ____________________________________________________________________________ + [ 10409] By: jhi on 2001/06/03 17:27:13 + Log: Mention that lexicalizing $a or $b is a bad idea if one + wants to use sort(). + Branch: perl + ! pod/perlvar.pod + ____________________________________________________________________________ + [ 10408] By: jhi on 2001/06/03 16:52:41 + Log: Tweak the test to be happy if the accuracy is 'good enough'. + Branch: perl + ! t/lib/posix.t + ____________________________________________________________________________ + [ 10407] By: jhi on 2001/06/03 16:50:33 + Log: Upgrade to Attribute::Handlers 0.70. + + NOTE: this unearthed the "too late for CHECK block" bug, + that's why the 1_compile.t change. + Branch: perl + + lib/Attribute/Handlers/demo/Demo.pm + + lib/Attribute/Handlers/demo/Descriptions.pm + + lib/Attribute/Handlers/demo/MyClass.pm + + lib/Attribute/Handlers/demo/demo.pl + + lib/Attribute/Handlers/demo/demo2.pl + + lib/Attribute/Handlers/demo/demo3.pl + + lib/Attribute/Handlers/demo/demo4.pl + + lib/Attribute/Handlers/demo/demo_call.pl + + lib/Attribute/Handlers/demo/demo_chain.pl + + lib/Attribute/Handlers/demo/demo_cycle.pl + + lib/Attribute/Handlers/demo/demo_hashdir.pl + + lib/Attribute/Handlers/demo/demo_phases.pl + + lib/Attribute/Handlers/demo/demo_range.pl + + lib/Attribute/Handlers/demo/demo_rawdata.pl + ! MANIFEST lib/Attribute/Handlers.pm t/lib/1_compile.t + ! t/lib/attrhand.t + ____________________________________________________________________________ + [ 10406] By: jhi on 2001/06/03 16:40:03 + Log: One less -Wall whine. + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 10405] By: jhi on 2001/06/03 16:30:34 + Log: Integrate change #10404 from maintperl; eval.t was in pre-10394 mood. + Branch: perl + !> t/op/eval.t + ____________________________________________________________________________ + [ 10404] By: gsar on 2001/06/03 16:23:07 + Log: eval.t was relying on pre-change#10394 buggy behavior (lexicals + aren't "normally" visible inside eval""s contained in subs unless + a cloned reference to them already exists) + + strangely enough, t/harness didn't show this up as a failure + (harness needs fixing?) + Branch: maint-5.6/perl + ! t/op/eval.t + ____________________________________________________________________________ + [ 10403] By: jhi on 2001/06/03 16:22:59 + Log: Update to Text::Balanced 1.85. + Branch: perl + ! lib/Text/Balanced.pm t/lib/tb-xvari.t + ____________________________________________________________________________ + [ 10402] By: jhi on 2001/06/03 16:18:09 + Log: Subject: [PATCH] Re: ext/Socket/Socket.xs + From: Nicholas Clark + Date: Sun, 3 Jun 2001 17:54:36 +0100 + Message-ID: <20010603175436.E76396@plum.flirble.org> + Branch: perl + ! ext/Fcntl/Fcntl.xs ext/Socket/Socket.xs + ! ext/Sys/Syslog/Syslog.xs + ____________________________________________________________________________ + [ 10401] By: jhi on 2001/06/03 16:09:33 + Log: Unused variables. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10400] By: jhi on 2001/06/03 16:04:26 + Log: Subject: [PATCH] APIfy op_clear + From: Simon Cozens + Date: Sun, 3 Jun 2001 13:51:46 +0100 + Message-ID: <20010603135146.A9984@deep-dark-truthful-mirror.pmb.ox.ac.uk> + + (despite the subject line, op_null is APIfied by the patch) + Branch: perl + ! embed.h embed.pl global.sym objXSUB.h perlapi.c + ____________________________________________________________________________ + [ 10399] By: jhi on 2001/06/03 15:51:35 + Log: Subject: [PATCH] t/lib/extutils.t + From: Nicholas Clark + Date: Sat, 2 Jun 2001 23:57:05 +0100 + Message-ID: <20010602235705.Q12698@plum.flirble.org> + Branch: perl + ! lib/ExtUtils/Constant.pm t/lib/extutils.t + ____________________________________________________________________________ + [ 10398] By: jhi on 2001/06/03 15:34:11 + Log: Subject: [PATCH: perl@10360] update two win32 Makefiles + From: Prymmer/Kahn + Date: Sun, 3 Jun 2001 08:55:14 -0700 (PDT) + Message-ID: + Branch: perl + ! win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 10397] By: jhi on 2001/06/03 15:12:13 + Log: Subject: Re: 'decimal digits' macro? + From: Hugo + Date: Sun, 03 Jun 2001 04:26:36 +0100 + Message-Id: <200106030326.EAA18786@crypt.compulink.co.uk> + Branch: perl + ! handy.h t/lib/posix.t t/op/tr.t + ____________________________________________________________________________ + [ 10396] By: jhi on 2001/06/03 15:10:49 + Log: Subject: Re: [ID 20010529.006] String plus zero inconsistent across platforms + From: Hugo + Date: Sun, 03 Jun 2001 14:56:30 +0100 + Message-Id: <200106031356.OAA12517@crypt.compulink.co.uk> + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10395] By: jhi on 2001/06/03 14:59:41 + Log: Integrate change #10394 from maintperl; lexical file scope leakage. + Branch: perl + !> perly.c perly.y t/op/misc.t t/pragma/warn/universal + !> vms/perly_c.vms + ____________________________________________________________________________ + [ 10394] By: gsar on 2001/06/03 03:05:43 + Log: fix leakage of lexicals at file scope into subroutines that were + declared before them; this appears to be a longstanding bug that + meant that lexicals at file scope were never "deintroduced", meaning + their scope range was never properly closed, and their visibility + extended to all subsequent eval""s or requires + + added a test case + + seems to also fix a case of bogus duplicate warnings + Branch: maint-5.6/perl + ! perly.c perly.y t/op/misc.t t/pragma/warn/universal + ! vms/perly_c.vms + ____________________________________________________________________________ + [ 10393] By: jhi on 2001/06/02 16:55:03 + Log: More VMS tweaks from Craig A. Berry. + Branch: perl + ! configure.com t/lib/extutils.t + ____________________________________________________________________________ + [ 10392] By: jhi on 2001/06/02 16:48:26 + Log: -Wall cleanup continues. + Branch: perl + ! README.tru64 embed.h embed.pl ext/NDBM_File/NDBM_File.xs + ! ext/POSIX/POSIX.xs ext/PerlIO/Scalar/Scalar.xs + ! ext/Storable/Storable.xs ext/Sys/Hostname/Hostname.xs + ! ext/Sys/Syslog/Syslog.xs perl.c proto.h regcomp.c regexec.c + ! run.c toke.c util.c + ____________________________________________________________________________ + [ 10391] By: jhi on 2001/06/02 13:29:47 + Log: The metaconfig unit change for #10390. + Branch: metaconfig/U/perl + ! gccvers.U + ____________________________________________________________________________ + [ 10390] By: jhi on 2001/06/02 13:29:12 + Log: Drop the -ansi from the default gcc flags. + + Off_t/off_t is a struct in Solaris with largefiles, and with -ansi + that struct cannot be compared with a flat integer, such as STRLEN. + The -ansi will also cause a lot of noise in Solaris because of: + /usr/include/sys/resource.h:148: warning: `struct rlimit64' declared inside parameter list + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10389] By: jhi on 2001/06/02 13:14:57 + Log: Integrate perlio. + Branch: perl + !> pod/perlapi.pod util.c + ____________________________________________________________________________ + [ 10388] By: nick on 2001/06/02 08:01:12 + Log: Integrate mainline + Branch: perlio + +> lib/Attribute/Handlers.pm t/lib/attrhand.t + !> MANIFEST configure.com ext/MIME/Base64/QuotedPrint.pm + !> lib/File/Find.pm pod/perlmodlib.pod pod/perltoc.pod + !> t/lib/1_compile.t t/lib/mimeqp.t + ____________________________________________________________________________ + [ 10387] By: nick on 2001/06/02 07:39:17 + Log: Tweak util.c's atof2 for MULTIPLICITY + Branch: perlio + ! util.c + ____________________________________________________________________________ + [ 10386] By: nick on 2001/06/02 07:38:33 + Log: Integrate mainline + Branch: perlio + !> (integrate 41 files) + ____________________________________________________________________________ + [ 10385] By: jhi on 2001/06/01 22:12:48 + Log: Add Attribute::Handlers 0.61 from Damian Conway. + Branch: perl + + lib/Attribute/Handlers.pm t/lib/attrhand.t + ! MANIFEST pod/perlmodlib.pod pod/perltoc.pod t/lib/1_compile.t + ____________________________________________________________________________ + [ 10384] By: jhi on 2001/06/01 21:53:14 + Log: Subject: [PATCH: perl@10328] allow MIME::QuotePrint to handle ASCII code numbers on EBCDIC machines + From: Peter Prymmer + Date: Fri, 1 Jun 2001 15:49:22 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/MIME/Base64/QuotedPrint.pm t/lib/mimeqp.t + ____________________________________________________________________________ + [ 10383] By: jhi on 2001/06/01 21:36:11 + Log: Subject: [PATCH File::Find] 'do 1' and puzzling (?>...) + From: Jeff Pinyan + Date: Fri, 1 Jun 2001 14:13:56 -0400 (EDT) + Message-ID: + Branch: perl + ! lib/File/Find.pm + ____________________________________________________________________________ + [ 10382] By: jhi on 2001/06/01 21:35:02 + Log: Subject: [PATCH perl@10381] configure.com tweaks + From: "Craig A. Berry" + Date: Fri, 1 Jun 2001 13:55:43 -0500 + Message-Id: + Branch: perl + ! configure.com + ____________________________________________________________________________ + [ 10381] By: jhi on 2001/06/01 16:37:21 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10380] By: jhi on 2001/06/01 16:19:18 + Log: Subject: [PATCH] Re: [ID 20010529.004] program doesn't work unless in debug mode + From: Mike Guy + Date: Fri, 01 Jun 2001 18:17:02 +0100 + Message-Id: + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 10379] By: jhi on 2001/06/01 16:13:28 + Log: Subject: Re: [ID 20010529.006] String plus zero inconsistent across platforms + From: Hugo + Date: Thu, 31 May 2001 20:49:48 +0100 + Message-Id: <200105311949.UAA02798@crypt.compulink.co.uk> + Branch: perl + ! embed.h embed.pl global.sym objXSUB.h perl.h perlapi.c proto.h + ! util.c + ____________________________________________________________________________ + [ 10378] By: jhi on 2001/06/01 15:56:35 + Log: Zero() is not available in x2p (or, rather, some of its + implementations like memzero() might not be available.) + Branch: perl + ! x2p/hash.c + ____________________________________________________________________________ + [ 10377] By: jhi on 2001/06/01 15:44:48 + Log: Subject: [PATCH x2p/hash.c] bzero -> memset + From: Michael G Schwern + Date: Fri, 1 Jun 2001 12:00:29 +0100 + Message-ID: <20010601120029.F29027@blackrider.blackstar.co.uk> + + (But use Zero() instead of memset.) + Branch: perl + ! x2p/hash.c + ____________________________________________________________________________ + [ 10376] By: jhi on 2001/06/01 15:39:52 + Log: Subject: Re: [PATCHES] regcomp.c, pod/perldiag.pod, t/op/pat.t + From: Jeff Pinyan + Date: Fri, 1 Jun 2001 10:33:55 -0400 (EDT) + Message-ID: + Branch: perl + ! pod/perldiag.pod regcomp.c t/op/pat.t + ____________________________________________________________________________ + [ 10375] By: jhi on 2001/06/01 15:36:35 + Log: Retract #10324 and #10333; not needed. + Branch: perl + ! hints/irix_6.sh hints/linux.sh + ____________________________________________________________________________ + [ 10374] By: jhi on 2001/06/01 15:35:19 + Log: The #10370 wasn't quite right. + Branch: perl + ! ext/XS/Typemap/Typemap.xs + ____________________________________________________________________________ + [ 10373] By: jhi on 2001/06/01 15:34:49 + Log: The metaconfig units changes for #10372. + Branch: metaconfig/U/perl + + d_realpath.U d_sresgproto.U d_sresuproto.U + ! gccvers.U i_db.U + ____________________________________________________________________________ + [ 10372] By: jhi on 2001/06/01 15:34:24 + Log: Configure tweaks; record the Berkeley DB version, + probe for realpath(), for setresuid() and setresgid() + prototypes; use realpath() (try to be paranoid enough), + use the setres[ug]id prototypes because glibc has the functions + but not their prototypes; add -Wall -ansi to gcc ccflags; + regen toc. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH configure.com epoc/config.sh + ! ext/DB_File/DB_File.xs perl.h pod/perlapi.pod pod/perltoc.pod + ! uconfig.h uconfig.sh util.c vos/config.alpha.def + ! vos/config.ga.def win32/config.bc win32/config.gc + ! win32/config.vc + ____________________________________________________________________________ + [ 10371] By: jhi on 2001/06/01 12:50:05 + Log: Subject: Re: [PATCH xsutils.c] Quieting warnings + From: Michael G Schwern + Date: Fri, 1 Jun 2001 11:28:14 +0100 + Message-ID: <20010601112814.B29027@blackrider.blackstar.co.uk> + Branch: perl + ! lib/attributes.pm xsutils.c + ____________________________________________________________________________ + [ 10370] By: jhi on 2001/06/01 12:48:55 + Log: Subject: [PATCH] Fix -Wall on XS::Typemap + From: Tim Jenness + Date: Thu, 31 May 2001 16:15:37 -1000 (HST) + Message-ID: + Branch: perl + ! ext/XS/Typemap/Typemap.xs + ____________________________________________________________________________ + [ 10369] By: jhi on 2001/06/01 12:47:21 + Log: Subject: [patch] Cwd.xs optimizations/abstraction + From: Doug MacEachern + Date: Thu, 31 May 2001 17:37:37 -0700 (PDT) + Message-ID: + Branch: perl + ! embed.h embed.pl ext/Cwd/Cwd.xs global.sym lib/Cwd.pm + ! objXSUB.h perlapi.c pod/perlapi.pod proto.h util.c + ____________________________________________________________________________ + [ 10368] By: jhi on 2001/06/01 12:32:00 + Log: Subject: Re: Why t/lib/extutils.t is failing (was Re: [PATCH] Re: [PATCH] Re: [SPAM] Re: [SPAM] Re: [EGGS] Re: [BACON] Re: [TOAST] Re: [PATCH] Re: [PATCH] Re: h2xs [was Re: HEAR YE, HEAR YE!]) + From: Nicholas Clark + Date: Thu, 31 May 2001 23:56:40 +0100 + Message-ID: <20010531235640.F12698@plum.flirble.org> + + Make the test work also under only static extensions + (sh Configure -Uusedl fakes this nicely) + Branch: perl + ! t/lib/extutils.t + ____________________________________________________________________________ + [ 10367] By: jhi on 2001/06/01 12:27:53 + Log: Subject: [PATCH hv.c] Eliminating trigraph + From: Michael G Schwern + Message-ID: <20010601114955.E29027@blackrider.blackstar.co.uk> + Date: Fri, 1 Jun 2001 11:49:56 +0100 + Branch: perl + ! hv.c + ____________________________________________________________________________ + [ 10366] By: jhi on 2001/06/01 12:14:57 + Log: Subject: Re: [PATCH] Tests for File::Compare + From: "Philip Newton" + Date: Thu, 31 May 2001 19:44:05 +0200 + Message-Id: <200105311748.f4VHmCt18269@chaos.wustl.edu> + + Unnecessary "quotation marks". + Branch: perl + ! t/lib/filecomp.t + ____________________________________________________________________________ + [ 10365] By: jhi on 2001/06/01 12:13:26 + Log: Integrate perlio. + Branch: perl + !> lib/ExtUtils/MM_Win32.pm t/lib/filecomp.t + ____________________________________________________________________________ + [ 10364] By: nick on 2001/06/01 10:13:31 + Log: Cleanup dll.base and dll.exp created by GCC builds. + Branch: perlio + ! lib/ExtUtils/MM_Win32.pm + ____________________________________________________________________________ + [ 10363] By: nick on 2001/06/01 10:02:17 + Log: Make filecomp test work on CRLF platforms by adding binmode. + Branch: perlio + ! t/lib/filecomp.t + ____________________________________________________________________________ + [ 10362] By: nick on 2001/06/01 08:37:17 + Log: Integrate mainline + Branch: perlio + !> Changes Configure patchlevel.h perlio.c + ____________________________________________________________________________ + [ 10361] By: jhi on 2001/05/31 15:09:34 + Log: panic:claustrophobia. + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 10360] By: jhi on 2001/05/31 13:04:25 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10359] By: nick on 2001/05/31 12:35:50 + Log: Integrate mainline. + Branch: perlio + +> t/lib/filecomp.t + !> AUTHORS MANIFEST ext/Storable/Storable.xs gv.c perl.c perl.h + !> pp_ctl.c sv.c t/lib/1_compile.t toke.c util.c + ____________________________________________________________________________ + [ 10358] By: jhi on 2001/05/31 12:35:05 + Log: Integrate perlio. + Branch: perl + !> t/pragma/warn/toke win32/config_H.bc win32/config_H.gc + !> win32/config_H.vc + ____________________________________________________________________________ + [ 10357] By: jhi on 2001/05/31 12:34:04 + Log: Metaconfig unit change for #10356. + Branch: metaconfig + ! U/installdirs/inc_version_list.U + ____________________________________________________________________________ + [ 10356] By: jhi on 2001/05/31 12:33:41 + Log: Allow Configure -Dinc_version_list='5.6.0/$archname 5.6.0' ... + (idea from Sarathy; implementation from Andy) + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10355] By: jhi on 2001/05/31 12:18:06 + Log: More AUTHORS. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10354] By: jhi on 2001/05/31 12:16:24 + Log: Subject: Re: [PATCH] Tests for File::Compare + From: Alexander Gough + Date: Thu, 31 May 2001 13:26:34 +0100 (GMT) + Message-Id: + Branch: perl + + t/lib/filecomp.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10353] By: jhi on 2001/05/31 12:11:24 + Log: Subject: [PATCH] DEBUG_* macro cleanups + From: Abhijit Menon-Sen + Date: Thu, 31 May 2001 12:16:22 +0530 + Message-ID: <20010531121622.B4829@lustre.linux.in> + + Subject: Re: [PATCH] DEBUG_* macro cleanups + From: Abhijit Menon-Sen + Date: Thu, 31 May 2001 13:57:01 +0530 + Message-ID: <20010531135701.A21775@lustre.linux.in> + + (The DEBUG_ definitions in perl.h changed to use the + STMT_START and STMT_END.) + Branch: perl + ! perl.h pp_ctl.c sv.c toke.c + ____________________________________________________________________________ + [ 10352] By: jhi on 2001/05/31 11:53:31 + Log: Subject: [PATCH] -Wall cleanups: perl.c, gv.c, Storable.xs + From: Abhijit Menon-Sen + Date: Thu, 31 May 2001 08:27:55 +0530 + Message-ID: <20010531082755.A10018@lustre.linux.in> + Branch: perl + ! ext/Storable/Storable.xs gv.c perl.c + ____________________________________________________________________________ + [ 10351] By: jhi on 2001/05/31 11:45:16 + Log: Subject: [PATCH] AUTHORS + From: "Daniel S. Lewart" + Date: Thu, 31 May 2001 01:27:59 -0500 + Message-ID: <20010531012758.A1595@staff1.cso.uiuc.edu> + + Subject: Re: [PATCH] AUTHORS + From: "Philip Newton" + Date: Thu, 31 May 2001 10:08:06 +0200 + (Message-Id missing?) + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10350] By: nick on 2001/05/31 11:40:43 + Log: win32 - dmake regen_config_h + Branch: perlio + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10349] By: jhi on 2001/05/31 11:38:27 + Log: Subject: Re: [PATCH util.c] More warning cleanups. + From: "Philip Newton" + Date: Thu, 31 May 2001 07:41:36 +0200 + Message-Id: <200105310538.IAA25458@taku.hut.fi> + + Undo C++-ism that snekt in. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 10348] By: nick on 2001/05/31 11:36:46 + Log: Tolerate Win32 numerics + Branch: perlio + ! t/pragma/warn/toke + ____________________________________________________________________________ + [ 10347] By: jhi on 2001/05/31 11:29:40 + Log: Integrate perlio. + Branch: perl + !> perlio.c win32/win32.h + ____________________________________________________________________________ + [ 10346] By: nick on 2001/05/31 10:54:55 + Log: Hack to restore Win32 pseudo fork broken by Multiple Interpreter + perlio.c change 10255. + Branch: perlio + ! perlio.c + ____________________________________________________________________________ + [ 10345] By: nick on 2001/05/31 10:01:57 + Log: Conditionaly put back some "unused" dTHX which are used + with PERL_IMPLICIT_SYS + Branch: perlio + ! perlio.c + ____________________________________________________________________________ + [ 10344] By: nick on 2001/05/31 10:00:59 + Log: Fix Win32 for new spelling IN_BYTES + Branch: perlio + ! win32/win32.h + ____________________________________________________________________________ + [ 10343] By: nick on 2001/05/31 08:01:32 + Log: perlio.c -Wall cleaner under MULTIPLICITY + - still minor noise with linux stdio + Branch: perlio + ! perlio.c + ____________________________________________________________________________ + [ 10342] By: nick on 2001/05/31 07:52:23 + Log: Integrate mainline. + Branch: perlio + !> (integrate 42 files) + ____________________________________________________________________________ + [ 10341] By: jhi on 2001/05/31 01:39:02 + Log: AUTHORS updates. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 10340] By: jhi on 2001/05/31 00:19:29 + Log: Subject: [PATCH: perl@10328] new md5sum for modified MD5.xs file + From: Peter Prymmer + Date: Wed, 30 May 2001 17:57:20 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/md5-file.t + ____________________________________________________________________________ + [ 10339] By: jhi on 2001/05/31 00:16:44 + Log: Salvage bits and pieces from the experimental 'utf8 everywhere' + patch: rename HINT_BYTE and IN_BYTE to HINT_BYTES and IN_BYTES + to match the pragma name; various robustness cleanups. + Branch: perl + ! lib/utf8_heavy.pl mg.c perl.h pp.c pp_ctl.c pp_sys.c regexec.c + ! sv.c toke.c utf8.c utf8.h utfebcdic.h + ____________________________________________________________________________ + [ 10338] By: jhi on 2001/05/30 23:56:14 + Log: More -Wall sweeping. + Branch: perl + ! av.c doio.c ext/Cwd/Cwd.xs ext/Devel/DProf/DProf.xs + ! ext/Devel/Peek/Peek.xs ext/Encode/Encode.xs + ! ext/List/Util/Util.xs gv.c op.c pp.c pp_ctl.c pp_hot.c + ! regcomp.c sv.c toke.c utf8.c + ____________________________________________________________________________ + [ 10337] By: jhi on 2001/05/30 23:20:23 + Log: Subject: [PATCH] (was Re: [PATCH] Re: Report /pro/3gl/CPAN/perl-5.7.1) + From: Nicholas Clark + Date: Wed, 30 May 2001 22:34:41 +0100 + Message-ID: <20010530223441.Y86445@plum.flirble.org> + Branch: perl + ! t/op/cmp.t + ____________________________________________________________________________ + [ 10336] By: jhi on 2001/05/30 23:18:48 + Log: It's is not, it isn't ain't, and it's it's, not its, + if you mean it is. If you don't, it's its. Then too, + it's hers. It isn't her's. It isn't our's either. + It's ours, and likewise yours and theirs. + -- Oxford University Press, Edpress News + Branch: perl + ! lib/autouse.pm + ____________________________________________________________________________ + [ 10335] By: jhi on 2001/05/30 23:12:30 + Log: More -Wall silencing from Michael Schwern and Jarkko Hietaniemi. + Branch: perl + ! doop.c ext/ByteLoader/bytecode.h ext/DB_File/DB_File.xs mg.c + ! perl.c perlio.c regexec.c universal.c util.c x2p/a2py.c + ! x2p/str.c x2p/walk.c xsutils.c + ____________________________________________________________________________ + [ 10334] By: jhi on 2001/05/30 22:52:41 + Log: Subject: [PATCH perl.c t/run/runenv.t] (was Re: [[ID 20010514.042] Perl v5.6.1 mangles PERL5OPT]) + From: Michael G Schwern + Date: Wed, 30 May 2001 17:10:38 +0100 + Message-ID: <20010530171038.L670@blackrider.blackstar.co.uk> + + Subject: Re: [PATCH perl.c t/run/runenv.t] (was Re: [ID 20010514.042] Perl v5.6.1 mangles PERL5OPT]) + From: Abhijit Menon-Sen + Date: Wed, 30 May 2001 23:16:13 +0530 + Message-ID: <20010530231613.A31933@lustre.linux.in> + Branch: perl + ! perl.c t/run/runenv.t + ____________________________________________________________________________ + [ 10333] By: jhi on 2001/05/30 22:25:02 + Log: (Retracted by #10375.) + + IRIX hints patch from Merijn Broeren. + + TODO: (this and the earlier Linux hints patch) should be solved + at Configure level. Merijn: -ldb should not be used on any platform + for perl, just when linking DBFile itself. Trying to be helpful here + is counterproductive. + Branch: perl + ! hints/irix_6.sh + ____________________________________________________________________________ + [ 10332] By: jhi on 2001/05/30 22:11:13 + Log: Subject: Re: [PATCH doop.c] unused variable in Perl_do_join + From: Nicholas Clark + Date: Wed, 30 May 2001 23:20:58 +0100 + Message-ID: <20010530232058.B86445@plum.flirble.org> + Branch: perl + ! doop.c + ____________________________________________________________________________ + [ 10331] By: jhi on 2001/05/30 22:09:49 + Log: Subject: Re: [PATCH perl@10298] fix extutils.t and autouse.t for VMS + From: Michael G Schwern + Date: Wed, 30 May 2001 15:24:20 +0100 + Message-ID: <20010530152420.H670@blackrider.blackstar.co.uk> + Branch: perl + ! t/pragma/autouse.t + ____________________________________________________________________________ + [ 10330] By: jhi on 2001/05/30 22:02:21 + Log: The regex trick wasn't a good idea. + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 10329] By: nick on 2001/05/30 18:34:35 + Log: Integrate mainline + Branch: perlio + !> (integrate 40 files) + ____________________________________________________________________________ + [ 10328] By: jhi on 2001/05/30 14:28:39 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10327] By: jhi on 2001/05/30 14:07:01 + Log: The metaconfig unit change for #10325. + Branch: metaconfig + + U/modified/afs.U + ____________________________________________________________________________ + [ 10326] By: jhi on 2001/05/30 14:06:36 + Log: More -Wall cleanup from Schwern; the EBCDIC MD5.xs checksum + is now wrong. + Branch: perl + ! ext/Digest/MD5/MD5.xs t/lib/md5-file.t + ____________________________________________________________________________ + [ 10325] By: jhi on 2001/05/30 14:04:28 + Log: Introduce $Config{afsroot}. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH epoc/config.sh uconfig.sh win32/config.bc + ! win32/config.gc win32/config.vc + ____________________________________________________________________________ + [ 10324] By: jhi on 2001/05/30 13:49:44 + Log: (Retracted by #10375.) + + Linux DB tweak from Merijn Broeren . + Branch: perl + ! hints/linux.sh + ____________________________________________________________________________ + [ 10323] By: jhi on 2001/05/30 13:49:29 + Log: AFS patches from Merijn Broeren . + (Also Configure tweaks needed; coming up soon.) + Branch: perl + ! t/io/fs.t t/lib/glob-basic.t t/op/stat.t + ____________________________________________________________________________ + [ 10322] By: jhi on 2001/05/30 13:37:56 + Log: Subject: [PATCH lib/perl5db.pl] Conditional breakpoints + From: Michael G Schwern + Date: Sun, 27 May 2001 10:29:43 +0100 + Message-ID: <20010527102942.J711@blackrider.blackstar.co.uk> + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 10321] By: jhi on 2001/05/30 13:36:28 + Log: Medley of -Wall cleanups from Michael Schwen, Hugo van der Sanden, + and Abhijit Menon-Sen. + Branch: perl + ! av.c doio.c doop.c dump.c ext/Digest/MD5/MD5.xs malloc.c op.c + ! perl.c pp_sys.c regcomp.c + ____________________________________________________________________________ + [ 10320] By: jhi on 2001/05/30 13:35:27 + Log: Fix the BOOT section to call myU2time properly. + Branch: perl + ! ext/Time/HiRes/HiRes.xs + ____________________________________________________________________________ + [ 10319] By: jhi on 2001/05/30 13:06:09 + Log: Subject: Re: [PATCH pod/perlfaq4.pod] Example of working in integers to avoid floating point errors + From: Ronald J Kimball + Date: Wed, 30 May 2001 09:44:29 -0400 + Message-ID: <20010530094429.B133085@linguist.thayer.dartmouth.edu> + + Detypo; plus add one more trick. + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 10318] By: jhi on 2001/05/30 12:47:11 + Log: Subject: Re: [PATCH lib/autouse.pm t/pragma/autouse.t] (was Re: [ID 20010528.001] use autouse 'URI::Escape' => qw(URI::Escape::uri_escape) failed) + From: Michael G Schwern + Date: Wed, 30 May 2001 14:39:06 +0100 + Message-ID: <20010530143906.E670@blackrider.blackstar.co.uk> + Branch: perl + ! lib/autouse.pm t/pragma/autouse.t + ____________________________________________________________________________ + [ 10317] By: jhi on 2001/05/30 12:46:02 + Log: Subject: Re: AIX and gcc (moving targets) + From: "H.Merijn Brand" + Date: Wed, 30 May 2001 15:25:08 +0200 + Message-Id: <20010530152117.7097.H.M.BRAND@hccnet.nl> + Branch: perl + ! ext/Time/HiRes/HiRes.xs + ____________________________________________________________________________ + [ 10316] By: jhi on 2001/05/30 12:40:46 + Log: Subject: [PATCH t/TEST] sorting tests + From: Michael G Schwern + Date: Wed, 30 May 2001 10:24:02 +0100 + Message-ID: <20010530102402.Q670@blackrider.blackstar.co.uk> + Branch: perl + ! t/TEST + ____________________________________________________________________________ + [ 10315] By: jhi on 2001/05/30 12:37:43 + Log: Subject: [ID 20010529.002] typos in man page perlre + From: bart@cg681574-a.adubn1.nj.home.com + Date: Tue, 29 May 2001 13:58:59 -0500 + Message-Id: + Branch: perl + ! pod/perlre.pod + ____________________________________________________________________________ + [ 10314] By: jhi on 2001/05/30 12:33:53 + Log: Subject: [PATCH perl@10298] fix extutils.t and autouse.t for VMS + From: "Craig A. Berry" + Date: Tue, 29 May 2001 23:23:45 -0500 + Message-Id: + Branch: perl + ! t/lib/extutils.t t/pragma/autouse.t + ____________________________________________________________________________ + [ 10313] By: jhi on 2001/05/30 12:32:17 + Log: Subject: Re: [ID 20010529.003] find2perl and File::Find doesn't emulate find when path is a symlink (patch to t/lib/filefind.t as requested) + From: David Dyck + Date: Tue, 29 May 2001 22:05:28 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/filefind.t + ____________________________________________________________________________ + [ 10312] By: jhi on 2001/05/30 12:31:02 + Log: AIX hints update for gcc from Merijn H. Brand. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 10311] By: jhi on 2001/05/30 12:18:20 + Log: Retract #10295 and #10296: a more generic solution + is needed (there's something funny with gcc on AIX). + Branch: perl + ! ext/POSIX/Makefile.PL ext/Storable/Makefile.PL + ____________________________________________________________________________ + [ 10310] By: jhi on 2001/05/30 12:08:07 + Log: Subject: Re: [ID 20010528.004] dual bug under utf8: $@ has UTF8 flag and \s+ does not match + From: Hugo + Date: Wed, 30 May 2001 11:59:19 +0100 + Message-Id: <200105301059.LAA03182@crypt.compulink.co.uk> + + localizing $@ has unfortunate semantics - if you die past + a local $@, the die message is lost. + Branch: perl + ! lib/utf8_heavy.pl + ____________________________________________________________________________ + [ 10309] By: nick on 2001/05/30 08:23:02 + Log: Integrate mainline (autouse works again.) + Branch: perlio + !> ext/Time/Piece/Piece.pm hints/os2.sh lib/File/Find.pm + !> lib/autouse.pm pod/perlfaq4.pod pod/perlfaq6.pod + !> pod/perlvar.pod t/op/cmp.t + ____________________________________________________________________________ + [ 10308] By: jhi on 2001/05/30 01:55:02 + Log: Subject: [ID 20010529.003] find2perl and File::Find doesn't emulate find when path is a symlink (with proposed patch) + From: David Dyck + Date: Tue, 29 May 2001 12:19:38 -0700 (PDT) + Message-Id: + Branch: perl + ! lib/File/Find.pm + ____________________________________________________________________________ + [ 10307] By: jhi on 2001/05/30 01:47:22 + Log: Subject: [PATCH] Re: Report /pro/3gl/CPAN/perl-5.7.1 + From: Nicholas Clark + Date: Tue, 29 May 2001 23:16:09 +0100 + Message-ID: <20010529231609.U86445@plum.flirble.org> + + Make the test output slightly clearer by distinguishing + between '' and undef. + Branch: perl + ! t/op/cmp.t + ____________________________________________________________________________ + [ 10306] By: jhi on 2001/05/30 01:45:12 + Log: Subject: [PATCH 5.6.1] flushNULL OS/2 + From: Ilya Zakharevich + Date: Tue, 29 May 2001 19:15:19 -0400 + Message-ID: <20010529191519.A16020@math.ohio-state.edu> + Branch: perl + ! hints/os2.sh + ____________________________________________________________________________ + [ 10305] By: jhi on 2001/05/30 01:42:36 + Log: Subject: perlvar.pod addition + From: Peter Gessner + Date: Fri, 25 May 2001 20:23:12 +0200 + Message-ID: <3B0EA310.B265C048@post.rwth-aachen.de> + + Subject: Re: perlvar.pod addition + From: "Abigail" + Date: Fri, 25 May 2001 22:00:39 +0200 + Message-ID: <20010525200039.28029.qmail@foad.org> + + Mention $a and $b in perlvar. + Branch: perl + ! pod/perlvar.pod + ____________________________________________________________________________ + [ 10304] By: jhi on 2001/05/30 01:36:37 + Log: Subject: [PATCH] perlvar.pod -- why isn't @F here? + From: Jeff Pinyan + Date: Tue, 29 May 2001 22:27:51 -0400 (EDT) + Message-ID: + Branch: perl + ! pod/perlvar.pod + ____________________________________________________________________________ + [ 10303] By: jhi on 2001/05/30 01:35:31 + Log: Subject: Re: [PATCH] perlfaq6.pod -- case-aware s/// + From: Jeff Pinyan + Date: Tue, 29 May 2001 18:03:27 -0400 (EDT) + Message-ID: + Branch: perl + ! pod/perlfaq6.pod + ____________________________________________________________________________ + [ 10302] By: jhi on 2001/05/29 20:18:49 + Log: Mention Time::localtime and Time::gmtime. + Branch: perl + ! ext/Time/Piece/Piece.pm + ____________________________________________________________________________ + [ 10301] By: jhi on 2001/05/29 20:13:54 + Log: Subject: [PATCH pod/perlfaq4.pod] Example of working in integers to avoid floating point errors + From: Michael G Schwern + Date: Tue, 29 May 2001 18:51:32 +0100 + Message-ID: <20010529185132.C706@blackrider.blackstar.co.uk> + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 10300] By: jhi on 2001/05/29 20:12:09 + Log: Retract #10243. + Branch: perl + ! lib/autouse.pm + ____________________________________________________________________________ + [ 10299] By: nick on 2001/05/29 18:41:19 + Log: Post weekend integrate mainline (fails one test pragma/autouse). + Branch: perlio + +> (branch 29 files) + !> (integrate 91 files) + ____________________________________________________________________________ + [ 10298] By: jhi on 2001/05/29 16:29:19 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10297] By: jhi on 2001/05/29 16:25:47 + Log: Fix Perl_swash_init & Perl_swash_fetch to save ERRSV (= $@) + before Perl_load_module/Perl_call_method and restore the value + after if !SvTRUE(ERRSV). (from Inaba Hiroto) + Branch: perl + ! utf8.c + ____________________________________________________________________________ + [ 10296] By: jhi on 2001/05/29 16:01:53 + Log: Subject: Re: AIX and gcc (moving targets) + From: "H.Merijn Brand" + Date: Tue, 29 May 2001 17:59:40 +0200 + Message-Id: <20010529175841.7078.H.M.BRAND@hccnet.nl> + Branch: perl + ! ext/Storable/Makefile.PL + ____________________________________________________________________________ + [ 10295] By: jhi on 2001/05/29 15:59:05 + Log: Subject: Re: AIX and gcc (moving targets) + From: "H.Merijn Brand" + Date: Tue, 29 May 2001 12:32:57 +0200 + Message-Id: <20010529115151.9FE0.H.M.BRAND@hccnet.nl> + Branch: perl + ! ext/POSIX/Makefile.PL + ____________________________________________________________________________ + [ 10294] By: jhi on 2001/05/29 15:53:43 + Log: Subject: [PATCH lib/Test/Harness.pm t/lib/test-harness.t] Syncing with 1.21 + From: Michael G Schwern + Date: Tue, 29 May 2001 09:53:29 +0100 + Message-ID: <20010529095329.T675@blackrider.blackstar.co.uk> + + (#10280 retracted) + Branch: perl + ! lib/Test/Harness.pm t/lib/test-harness.t + ____________________________________________________________________________ + [ 10293] By: jhi on 2001/05/29 15:46:10 + Log: Subject: [PATCH t/TEST lib/Test.pm t/lib/Test/*.t] Syncing with Test-1.17 + From: Michael G Schwern + Date: Tue, 29 May 2001 09:19:52 +0100 + Message-ID: <20010529091952.R675@blackrider.blackstar.co.uk> + Branch: perl + + t/lib/Test/fail.t t/lib/Test/mix.t t/lib/Test/onfail.t + + t/lib/Test/qr.t t/lib/Test/skip.t t/lib/Test/success.t + + t/lib/Test/todo.t + ! MANIFEST lib/Test.pm t/TEST + ____________________________________________________________________________ + [ 10292] By: jhi on 2001/05/29 15:34:08 + Log: From: Michael G Schwern + Subject: Re: [PATCH t/TEST] Allowing deeper test subdirectories + Date: Tue, 29 May 2001 08:26:09 +0100 + Message-ID: <20010529082609.P675@blackrider.blackstar.co.uk> + Branch: perl + ! t/TEST + ____________________________________________________________________________ + [ 10291] By: jhi on 2001/05/29 15:29:37 + Log: Add tests for Time::gmtime and Time::localtime. + Branch: perl + + t/lib/time-gmtime.t t/lib/time-localtime.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10290] By: jhi on 2001/05/29 15:15:44 + Log: Add test for File::stat. + Branch: perl + + t/lib/filestat.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10289] By: jhi on 2001/05/29 15:05:38 + Log: Add test for Net::servent. + Branch: perl + + t/lib/net-sent.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10288] By: jhi on 2001/05/29 14:57:15 + Log: Add test for Net::protoent. + Branch: perl + + t/lib/net-pent.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10287] By: jhi on 2001/05/29 14:53:10 + Log: Add test for Net::netent. + Branch: perl + + t/lib/net-nent.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10286] By: jhi on 2001/05/29 14:31:57 + Log: Add test for User::grent. Portability doubtful. + Branch: perl + + t/lib/user-grent.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10285] By: jhi on 2001/05/29 14:24:20 + Log: Add test for User::pwent. + Probably will fall down somewhere for portability reasons. + Branch: perl + + t/lib/user-pwent.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10284] By: jhi on 2001/05/29 13:26:43 + Log: Metaconfig units changes for #10283. + Branch: metaconfig + ! U/installdirs/inc_version_list.U U/installdirs/perl5.U + ! U/installdirs/siteman1.U U/installdirs/siteman3.U + ! U/installdirs/sitescript.U U/modified/Signal.U + ____________________________________________________________________________ + [ 10283] By: jhi on 2001/05/29 13:26:24 + Log: Subject: [PATCH 5.6.1] signal names in Configure + From: Ilya Zakharevich + Date: Tue, 29 May 2001 03:52:25 -0400 + Message-ID: <20010529035225.A9400@math.ohio-state.edu> + + Subject: [PATCH 5.6.1] older perl in Configure + From: Ilya Zakharevich + Date: Tue, 29 May 2001 03:55:40 -0400 + Message-ID: <20010529035539.A9411@math.ohio-state.edu> + + Subject: [PATCH 5.6.1] goofs in Configure + From: Ilya Zakharevich + Date: Tue, 29 May 2001 04:13:07 -0400 + Message-ID: <20010529041307.A9658@math.ohio-state.edu> + + Configure portability tweaks. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10282] By: jhi on 2001/05/29 12:41:41 + Log: Subject: [PATCH 5.6.1] extLibpath for OS/2 + From: Ilya Zakharevich + Date: Tue, 29 May 2001 04:07:06 -0400 + Message-ID: <20010529040706.A9579@math.ohio-state.edu> + Branch: perl + ! os2/os2.c + ____________________________________________________________________________ + [ 10281] By: jhi on 2001/05/29 12:40:31 + Log: Subject: [PATCH 5.6.1] extra static libs for OS/2 + From: Ilya Zakharevich + Date: Tue, 29 May 2001 04:01:38 -0400 + Message-ID: <20010529040138.A9482@math.ohio-state.edu> + Branch: perl + ! hints/os2.sh os2/Makefile.SHs + ____________________________________________________________________________ + [ 10280] By: jhi on 2001/05/29 12:38:48 + Log: Subject: Re: [PATCH 5.6.1] Test::Harness clumsy + From: Ilya Zakharevich + Date: Tue, 29 May 2001 03:50:18 -0400 + Message-ID: <20010529035018.A9387@math.ohio-state.edu> + Branch: perl + ! lib/Test/Harness.pm + ____________________________________________________________________________ + [ 10279] By: jhi on 2001/05/29 12:34:53 + Log: Additional safeguard against $@ getting trampled; idea from Hugo. + Branch: perl + ! lib/utf8_heavy.pl + ____________________________________________________________________________ + [ 10278] By: jhi on 2001/05/29 02:15:24 + Log: Subject: Re: [ID 20010528.004] dual bug under utf8: $@ has UTF8 flag and \s+ does not match + From: Hugo + Date: Tue, 29 May 2001 03:03:45 +0100 + Message-Id: <200105290203.DAA00825@crypt.compulink.co.uk> + + Explanation why the $@ always gets the UTF8 flag when under use utf8-- + because we told it to have the flag when under use utf8. + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 10277] By: jhi on 2001/05/29 00:51:34 + Log: At least a partial fix for 20010528.004. + Branch: perl + ! lib/utf8_heavy.pl + ____________________________________________________________________________ + [ 10276] By: jhi on 2001/05/29 00:42:59 + Log: Subject: Re: Report /pro/3gl/CPAN/perl-5.7.1 + From: Nicholas Clark + Date: Mon, 28 May 2001 23:39:38 +0100 + Message-ID: <20010528233938.M86445@plum.flirble.org> + + More portable non-zero UV. + Branch: perl + ! t/lib/extutils.t + ____________________________________________________________________________ + [ 10275] By: jhi on 2001/05/29 00:40:28 + Log: Subject: [PATCH] (was Re: Why t/lib/extutils.t is failing ... + From: Nicholas Clark + Date: Mon, 28 May 2001 22:46:09 +0100 + Message-ID: <20010528224608.L86445@plum.flirble.org> + + Test also "make clean". + Branch: perl + ! t/lib/extutils.t + ____________________________________________________________________________ + [ 10274] By: jhi on 2001/05/29 00:39:18 + Log: Subject: Re: Would -Wno-unused -Wall be better? + From: Michael G Schwern + Date: Tue, 29 May 2001 00:55:54 +0100 + Message-ID: <20010529005553.B675@blackrider.blackstar.co.uk> + Branch: perl + ! pp.h + ____________________________________________________________________________ + [ 10273] By: jhi on 2001/05/29 00:36:06 + Log: Add a test for 20010528.007, fixed in #10272. + Branch: perl + ! t/op/misc.t toke.c + ____________________________________________________________________________ + [ 10272] By: jhi on 2001/05/29 00:21:12 + Log: Subject: Re: [ID 20010528.007] "\x{" causes panic:constant overflowed allocated space + From: Hugo + Date: Tue, 29 May 2001 00:23:23 +0100 + Message-Id: <200105282323.AAA07930@crypt.compulink.co.uk> + Branch: perl + ! toke.c + ____________________________________________________________________________ + [ 10271] By: jhi on 2001/05/28 22:52:11 + Log: Subject: Re: [ID 20010528.001] use autouse 'URI::Escape' => qw(URI::Escape::uri_escape) failed + From: Michael G Schwern + Date: Tue, 29 May 2001 00:42:59 +0100 + Message-ID: <20010529004259.A675@blackrider.blackstar.co.uk> + Branch: perl + ! t/pragma/autouse.t + ____________________________________________________________________________ + [ 10270] By: jhi on 2001/05/28 21:44:06 + Log: Some shells seemingly arrange the signal handlers differently + (bug id 20010521.004). + Branch: perl + ! t/lib/sigaction.t + ____________________________________________________________________________ + [ 10269] By: jhi on 2001/05/28 20:34:21 + Log: Regen perlmodlib. + Branch: perl + ! pod/perlmodlib.pod + ____________________________________________________________________________ + [ 10268] By: jhi on 2001/05/28 19:08:45 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10267] By: jhi on 2001/05/28 19:03:54 + Log: Subject: [PATCH] perlnewmod.pod to reflect DLSI(P) change + From: Elaine -HFB- Ashton + Date: Mon, 28 May 2001 14:56:35 -0500 + Message-ID: <20010528145635.L8487@chaos.wustl.edu> + Branch: perl + ! pod/perlnewmod.pod + ____________________________________________________________________________ + [ 10266] By: jhi on 2001/05/28 18:35:03 + Log: Regen toc. + Branch: perl + ! pod/perltoc.pod + ____________________________________________________________________________ + [ 10265] By: jhi on 2001/05/28 18:33:32 + Log: Subject: [PATCH] RE: [20000223.001] no test cases for splice(@array) + From: "Richard Soderberg" + Date: Mon, 28 May 2001 12:31:23 -0700 + Message-ID: + Branch: perl + ! t/op/splice.t + ____________________________________________________________________________ + [ 10264] By: jhi on 2001/05/28 17:59:00 + Log: The #10260 was too bold: locales and utf8 still do not mix. + Branch: perl + ! t/pragma/locale.t + ____________________________________________________________________________ + [ 10263] By: jhi on 2001/05/28 17:52:25 + Log: Subject: [PATCH] Pod nitpicks + From: "Richard Soderberg" + Date: Mon, 28 May 2001 10:08:58 -0700 + Message-ID: + Branch: perl + ! pod/perl571delta.pod pod/perlapi.pod sv.h + ____________________________________________________________________________ + [ 10262] By: jhi on 2001/05/28 17:50:05 + Log: Upgrade to I18N::LangTags 0.22. + Branch: perl + + lib/I18N/LangTags/List.pod + ! MANIFEST lib/I18N/LangTags.pm + ____________________________________________________________________________ + [ 10261] By: jhi on 2001/05/28 17:23:40 + Log: A slightly more serious bug found by -Mutf8; op/misc and + lib/complex dumped core. + Branch: perl + ! regexec.c + ____________________________________________________________________________ + [ 10260] By: jhi on 2001/05/28 16:58:11 + Log: Various buglets shaken out by -Mutf8. + Branch: perl + ! t/io/utf8.t t/lib/charnames.t t/lib/lc-language.t + ! t/pragma/locale.t + ____________________________________________________________________________ + [ 10259] By: jhi on 2001/05/28 15:48:46 + Log: STDERR looks much like STDOUT. (Subtest #2 wasn't really okay.) + Branch: perl + ! t/lib/carp.t + ____________________________________________________________________________ + [ 10258] By: jhi on 2001/05/28 15:32:41 + Log: Subject: [PATCH] todo patch + From: Artur Bergman + Date: Mon, 28 May 2001 17:03:51 +0200 + Message-ID: + Branch: perl + ! pod/perltodo.pod + ____________________________________________________________________________ + [ 10257] By: jhi on 2001/05/28 15:31:25 + Log: Subject: typo in perlguts.pod + From: "John P. Linderman" + Date: Mon, 28 May 2001 09:35:47 -0400 (EDT) + Message-Id: <200105281335.JAA27851@raptor.research.att.com> + Branch: perl + ! pod/perlguts.pod + ____________________________________________________________________________ + [ 10256] By: jhi on 2001/05/28 15:30:42 + Log: Subject: AIX and gcc (moving targets) + From: "H.Merijn Brand" + Date: Mon, 28 May 2001 12:54:04 +0200 + Message-Id: <20010528124531.9FAB.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 10255] By: jhi on 2001/05/28 15:28:55 + Log: Subject: Re: perlio + multiple perl_alloc..destruct + From: Doug MacEachern + Date: Sun, 27 May 2001 13:47:13 -0700 (PDT) + Message-ID: + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 10254] By: jhi on 2001/05/28 15:27:49 + Log: The #10251 wasn't quite up-to-the-code. + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 10253] By: jhi on 2001/05/28 15:26:39 + Log: Test case for bug 20010526.004, fixed in #10252. + Branch: perl + ! t/op/taint.t + ____________________________________________________________________________ + [ 10252] By: jhi on 2001/05/28 15:26:14 + Log: Subject: Re: [ID 20010526.004] Taint looses value + From: Hugo + Date: Sun, 27 May 2001 20:39:32 +0100 + Message-Id: <200105271939.UAA27591@crypt.compulink.co.uk> + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10251] By: jhi on 2001/05/28 15:13:40 + Log: Test case for 20010422.005, fixed by #10250. + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 10250] By: jhi on 2001/05/28 15:11:16 + Log: Subject: [PATCH] Re: [ID 20010422.005] perl -e '{s//${}/; //}' # segfaults on FreeBSD + From: Spider Boardman + Date: Mon, 28 May 2001 06:39:12 -0400 + Message-Id: <200105281039.GAA03962@Orb.Nashua.NH.US> + Branch: perl + ! toke.c + ____________________________________________________________________________ + [ 10249] By: jhi on 2001/05/28 15:09:24 + Log: Linerewrapping. + Branch: perl + ! lib/open.pm + ____________________________________________________________________________ + [ 10248] By: jhi on 2001/05/28 15:09:07 + Log: Updates on the modules list. + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 10247] By: jhi on 2001/05/28 15:03:35 + Log: Add a test for PerlIO. + + (I probably got the crlf/raw thing wrong for clrfy platforms...) + Branch: perl + + t/lib/perlio.t + ! MANIFEST lib/PerlIO.pm + ____________________________________________________________________________ + [ 10246] By: jhi on 2001/05/28 14:24:08 + Log: Add a test for carp et alia. + Branch: perl + + t/lib/carp.t + ! MANIFEST + ____________________________________________________________________________ + [ 10245] By: jhi on 2001/05/28 13:42:55 + Log: Adding the new test would be swell. + Branch: perl + + t/pragma/autouse.t + ____________________________________________________________________________ + [ 10244] By: jhi on 2001/05/28 13:42:34 + Log: Add a test for the autouse pragma. + Branch: perl + ! MANIFEST + ____________________________________________________________________________ + [ 10243] By: jhi on 2001/05/28 13:26:25 + Log: Subject: [ID 20010528.001] use autouse 'URI::Escape' => qw(URI::Escape::uri_escape) failed + From: dLux + Date: Sun, 27 May 2001 16:14:26 +0200 + Message-Id: + Branch: perl + ! lib/autouse.pm + ____________________________________________________________________________ + [ 10242] By: jhi on 2001/05/28 13:21:50 + Log: Subject: [PATCH #2] RE: [ID 20010528.002] dprofpp: "-R" does not work + From: "Richard Soderberg" + Date: Mon, 28 May 2001 03:56:36 -0700 + Message-ID: + Branch: perl + ! utils/dprofpp.PL + ____________________________________________________________________________ + [ 10241] By: jhi on 2001/05/28 13:18:56 + Log: Subject: Re: [ID 20010522.003] Time::Local module bug + From: "Stephen P. Potter" + Date: Tue, 22 May 2001 11:40:25 -0400 + Message-Id: <20010522154030.584F4729E2@belgarath.spotter.yi.org> + + Subject: Re: [ID 20010522.003] Time::Local module bug + From: Ronald J Kimball + Date: Tue, 22 May 2001 11:50:19 -0400 + Message-ID: <20010522115019.D48634@linguist.thayer.dartmouth.edu> + Branch: perl + ! lib/Time/Local.pm + ____________________________________________________________________________ + [ 10240] By: jhi on 2001/05/27 22:44:49 + Log: The PERL_DL_NONLAZY can have whitespace in front. + Branch: perl + ! t/lib/extutils.t + ____________________________________________________________________________ + [ 10239] By: jhi on 2001/05/27 21:23:21 + Log: Document strftime() and strptime(). + Branch: perl + ! ext/POSIX/POSIX.pod ext/Time/Piece/Piece.pm t/lib/time-piece.t + ____________________________________________________________________________ + [ 10238] By: jhi on 2001/05/27 20:29:07 + Log: Make Time::Piece::strptime() to be a function, not a method. + Branch: perl + ! ext/Time/Piece/Piece.pm t/lib/time-piece.t + ____________________________________________________________________________ + [ 10237] By: jhi on 2001/05/27 20:22:09 + Log: Tweak the test to be more portable. + Branch: perl + ! t/lib/extutils.t + ____________________________________________________________________________ + [ 10236] By: jhi on 2001/05/27 19:15:54 + Log: Subject: PATCH: Re: Re: Attributes that tie + From: Leon Brocard + Date: Sun, 27 May 2001 12:37:29 +0100 + Message-ID: <20010527123729.A22663@ns0.astray.com> + + Document that variable attributes are not currently usable + for tieing. (An ugly limitation that should be fixed.) + Branch: perl + ! lib/attributes.pm + ____________________________________________________________________________ + [ 10235] By: jhi on 2001/05/27 19:03:31 + Log: Microperl tweaks. + Branch: perl + ! Makefile.micro uconfig.h uconfig.sh + ____________________________________________________________________________ + [ 10234] By: jhi on 2001/05/27 18:22:09 + Log: Add make target for microperl (kind of silly, but convenient). + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 10233] By: jhi on 2001/05/27 18:18:56 + Log: O_APPEND and O_TRUNC are not portable. (Not available e.g. + for microperl.) + Branch: perl + ! doio.c + ____________________________________________________________________________ + [ 10232] By: jhi on 2001/05/27 17:57:18 + Log: Subject: [PATCH] [ID 19991013.005] utime undef, undef, @files + From: rspier@pobox.com (Robert Spier) + Date: Sat, 26 May 2001 20:05:23 -0400 + Message-ID: <15120.17603.148648.12430@rls.cx> + + Subject: Re: [PATCH] [ID 19991013.005] utime undef, undef, @files + From: rspier@pobox.com (Robert Spier) + Date: Sun, 27 May 2001 00:23:12 -0400 + Message-ID: <15120.33072.511966.767230@rls.cx> + Branch: perl + ! doio.c pod/perlfunc.pod + ____________________________________________________________________________ + [ 10231] By: jhi on 2001/05/27 15:45:20 + Log: Regen toc. (And add the README.tru64 from #10230 to MANIFEST.) + Branch: perl + ! MANIFEST pod/buildtoc.PL pod/perl.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 10230] By: jhi on 2001/05/27 15:41:06 + Log: Add README.tru64. + Branch: perl + + README.tru64 + ____________________________________________________________________________ + [ 10229] By: jhi on 2001/05/27 13:50:57 + Log: Integrate Locale::Maketext 1.01 from Sean Burke. + Branch: perl + + lib/Locale/Maketext.pm lib/Locale/Maketext.pod + + lib/Locale/Maketext/TPJ13.pod t/lib/lc-maketext.t + ! MANIFEST + ____________________________________________________________________________ + [ 10228] By: jhi on 2001/05/27 13:43:38 + Log: Integrate I18N::LangTags from Sean Burke. + + TODO: the language list from RFC 3066 needs to be integrated + and made available somehow. The list is included in the + I18N-LangTags 0.21 distribution, but it is undocumented + and unconnected to the module. + Branch: perl + + lib/I18N/LangTags.pm t/lib/i18n-langtags.t + ! MANIFEST + ____________________________________________________________________________ + [ 10227] By: jhi on 2001/05/27 01:41:33 + Log: Allow 'eval "v200"' to work (part of 20000323.059); fix as + envisioned by Sarathy. + Branch: perl + ! t/op/ver.t toke.c + ____________________________________________________________________________ + [ 10226] By: jhi on 2001/05/27 00:28:34 + Log: Subject: [ID 20010525.001] Pod typo nits fixed + From: lvirden@cas.org + Date: Fri, 25 May 2001 06:57:43 -0400 (EDT) + Message-Id: <200105251057.f4PAvhY13003@lwv26awu.cas.org> + + minus the perlsolaris decimation plus the + + Subject: Re: [ID 20010525.001] Pod typo nits fixed + From: "Philip Newton" + Date: Fri, 25 May 2001 18:05:55 +0200 + Message-Id: <200105251604.f4PG4kt15034@chaos.wustl.edu> + Branch: perl + ! README.amiga README.cygwin README.mpeix pod/perl5005delta.pod + ! pod/perldebtut.pod pod/perlebcdic.pod pod/perlfaq3.pod + ! pod/perlhack.pod pod/perltoc.pod pod/perltodo.pod + ! pod/perlutil.pod pod/perlxstut.pod + ____________________________________________________________________________ + [ 10225] By: jhi on 2001/05/26 22:38:16 + Log: return clauses are nice. + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10224] By: jhi on 2001/05/26 22:35:31 + Log: Subject: change 10199 backwards? + From: Doug MacEachern + Date: Sat, 26 May 2001 11:26:07 -0700 (PDT) + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10223] By: jhi on 2001/05/26 22:31:46 + Log: Subject: Re: 5.6.*, bleadperl: bugs in pp_concat + From: Hugo + Date: Sat, 26 May 2001 17:05:12 +0100 + Message-Id: <200105261605.RAA12295@crypt.compulink.co.uk> + Branch: perl + + t/op/gmagic.t + ! MANIFEST doop.c embed.h embed.pl global.sym + ! lib/File/Basename.pm objXSUB.h perlapi.c pod/perlapi.pod + ! pp_hot.c proto.h sv.c sv.h t/pragma/warn/pp_hot + ____________________________________________________________________________ + [ 10222] By: jhi on 2001/05/26 22:10:38 + Log: Regen headers for #10221. + Branch: perl + ! global.sym objXSUB.h perlapi.c + ____________________________________________________________________________ + [ 10221] By: jhi on 2001/05/26 22:06:06 + Log: Subject: [ID 20010506.012] Patch for 5.6.1 embed.pl (shared libperl&mod_perl) + From: Juha Laiho + Date: Thu, 3 May 2001 09:51:30 +0300 + Message-Id: <200105030651.JAA327254@tokka.elma.fi> + Branch: perl + ! embed.pl + ____________________________________________________________________________ + [ 10220] By: jhi on 2001/05/26 22:01:30 + Log: Subject: Re: [PATCH] Re: stability of sort()? + From: "John P. Linderman" + Date: Sat, 26 May 2001 13:27:19 -0400 + Message-Id: <200105261727.NAA06654@raptor.research.att.com> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10219] By: jhi on 2001/05/26 14:02:34 + Log: Integrate perlio. + Branch: perl + !> pod/perlguts.pod + ____________________________________________________________________________ + [ 10218] By: jhi on 2001/05/26 13:39:52 + Log: Subject: [PATCH perl@10210] PerlIO for VMS + From: "Craig A. Berry" + Date: Sat, 26 May 2001 09:34:11 -0500 + Message-Id: + Branch: perl + ! configure.com doio.c iperlsys.h perlio.c perlio.h perliol.h + ! perlsdio.h vms/ext/Stdio/Stdio.xs vms/gen_shrfls.pl vms/vms.c + ! vms/vmsish.h + ____________________________________________________________________________ + [ 10217] By: jhi on 2001/05/26 13:19:05 + Log: Subject: patch to fix: [ID 20010524.004] perl5db.pl version 1.12 doesn't stop on breakpoints + From: David Dyck + Date: Fri, 25 May 2001 00:03:04 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 10216] By: jhi on 2001/05/26 13:17:47 + Log: Subject: utf8 regexp tests + From: Hugo + Date: Fri, 25 May 2001 22:35:01 +0100 + Message-Id: <200105252135.WAA03197@crypt.compulink.co.uk> + Branch: perl + ! t/op/regexp.t + ____________________________________________________________________________ + [ 10215] By: jhi on 2001/05/26 13:15:40 + Log: Subject: [PATCH] Re: stability of sort()? + From: Nicholas Clark + Date: Fri, 25 May 2001 22:40:19 +0100 + Message-ID: <20010525224019.B86445@plum.flirble.org> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10214] By: jhi on 2001/05/26 13:14:30 + Log: Subject: Re: [ID 20010426.005] Magic not being removed at scope exit [PATCH] + From: John Peacock + Date: Thu, 24 May 2001 22:14:01 -0400 + Message-ID: <3B0DBFE9.A7C49084@rowman.com> + Branch: perl + ! mg.c scope.c sv.c + ____________________________________________________________________________ + [ 10213] By: jhi on 2001/05/26 13:08:56 + Log: Subject: [PATCH] Re: [PATCH] Re: h2xs [was Re: HEAR YE, HEAR YE!] + From: Nicholas Clark + Date: Sun, 20 May 2001 19:24:13 +0100 + Message-ID: <20010520192413.G83222@plum.flirble.org> + Branch: perl + + lib/ExtUtils/Constant.pm t/lib/extutils.t + ! MANIFEST utils/h2xs.PL + ____________________________________________________________________________ + [ 10212] By: nick on 2001/05/26 09:49:28 + Log: Change perlguts docs to not suggest PUSHi etc. for multiple results, + add a few more notes there on use of mortals on the stack. + Branch: perlio + ! pod/perlguts.pod + ____________________________________________________________________________ + [ 10211] By: nick on 2001/05/26 09:05:36 + Log: Integrate mainline + Branch: perlio + +> t/lib/fcntl.t t/pragma/vars.t + !> (integrate 49 files) + ____________________________________________________________________________ + [ 10210] By: jhi on 2001/05/25 12:29:16 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10209] By: jhi on 2001/05/25 12:24:45 + Log: Based on + + Subject: [PATCH pp.c] Wrapping pack("C",256) + From: Simon Cozens + Date: Sat, 12 May 2001 17:58:41 +0100 + Message-ID: <20010512175841.A6132@netthink.co.uk> + Branch: perl + ! pod/perldiag.pod pp.c t/pragma/warn/pp + ____________________________________________________________________________ + [ 10208] By: jhi on 2001/05/25 01:37:03 + Log: Subject: [PATCH] 5.6.1 Term::Cap -- add terminfo fallback + From: "Brendan O'Dea" + Date: Fri, 25 May 2001 11:18:29 +1000 + Message-ID: <20010525111829.A28411@compusol.com.au> + + (Slightly modified.) + Branch: perl + ! lib/Term/Cap.pm + ____________________________________________________________________________ + [ 10207] By: jhi on 2001/05/25 01:12:14 + Log: Subject: Re: [ID 20010506.041] segfault when matching utf8 string + From: Hugo + Date: Fri, 25 May 2001 02:13:25 +0100 + Message-Id: <200105250113.CAA23158@crypt.compulink.co.uk> + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 10206] By: jhi on 2001/05/25 01:07:59 + Log: Subject: Re: [ID 20010506.041] segfault when matching utf8 string + From: Inaba Hiroto + Date: Fri, 25 May 2001 10:25:36 +0900 + Message-Id: <200105250124.KAA19571@toshiba.co.jp> + Branch: perl + ! regcomp.c regexec.c + ____________________________________________________________________________ + [ 10205] By: jhi on 2001/05/25 01:07:00 + Log: Subject: [PATCH #2] stash autovivification and method call error messages + From: Ilmari Karonen + Date: Thu, 24 May 2001 01:51:48 +0300 (EET DST) + Message-ID: + Branch: perl + ! gv.c pp_hot.c t/op/method.t + ____________________________________________________________________________ + [ 10204] By: jhi on 2001/05/25 01:03:50 + Log: Add make target and documentation for gprof profiling. + Branch: perl + ! Makefile.SH pod/perlhack.pod + ____________________________________________________________________________ + [ 10203] By: jhi on 2001/05/24 21:09:36 + Log: Subject: Don't think about UTF8 + From: Mike Guy + Date: Tue, 22 May 2001 14:35:39 +0100 + Message-Id: + Branch: perl + ! sv.h + ____________________________________________________________________________ + [ 10202] By: jhi on 2001/05/24 21:07:25 + Log: Subject: [ID 20010524.002] find2perl bug in fileglob_to_re + From: Geraint A Edwards + Date: Thu, 24 May 2001 22:51:24 +0100 + Message-Id: <20010524225124.A34981@cymru.serf.org> + Branch: perl + ! x2p/find2perl.PL + ____________________________________________________________________________ + [ 10201] By: jhi on 2001/05/24 21:02:30 + Log: DB_File has its own attribute story. + Branch: perl + ! ext/DB_File/DB_File.xs + ____________________________________________________________________________ + [ 10200] By: jhi on 2001/05/24 19:54:21 + Log: Subject: Re: Making perl with -Wall + From: Andy Dougherty + Date: Thu, 24 May 2001 14:33:37 -0400 (EDT) + Message-ID: + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 10199] By: jhi on 2001/05/24 15:15:03 + Log: Subject: RE: [ID 20010521.003] - [PATCH #2] sv.c: sv_dup_inc(SvRV(sstr)) wasn't checking SvWEAKREF + From: "Richard Soderberg" + Date: Thu, 24 May 2001 08:58:16 -0700 + Message-ID: + Branch: perl + ! sv.c + ____________________________________________________________________________ + [ 10198] By: jhi on 2001/05/24 15:10:04 + Log: IV/UV casting fixes from Nicholas Clark. + Branch: perl + ! perl.h pp_sys.c util.c + ____________________________________________________________________________ + [ 10197] By: jhi on 2001/05/24 14:19:44 + Log: Subject: Re: Making perl with -Wall + From: Michael G Schwern + Date: Thu, 24 May 2001 15:40:28 +0100 + Message-ID: <20010524154028.B1988@blackrider.blackstar.co.uk> + Branch: perl + ! malloc.c perl.h + ____________________________________________________________________________ + [ 10196] By: jhi on 2001/05/24 14:04:41 + Log: Subject: [PATCH] Re: [ID 20010521.004] Two test suite failures on this platform with latest rsync + From: "H.Merijn Brand" + Date: Tue, 22 May 2001 11:49:37 +0200 + Message-Id: <20010522114044.BC4E.H.M.BRAND@hccnet.nl> + Branch: metaconfig + ! U/modified/Oldsym.U + Branch: metaconfig/U/perl + ! patchlevel.U + Branch: perl + ! Configure config_h.SH myconfig.SH + ____________________________________________________________________________ + [ 10195] By: jhi on 2001/05/24 13:25:04 + Log: Under versiononly install also the scripts with the version suffix. + (e.g. .../bin/h2xs5.7.1) + Branch: perl + ! installperl + ____________________________________________________________________________ + [ 10194] By: jhi on 2001/05/24 13:02:49 + Log: Subject: [PATCH] Stop segfault in mg.c:636 + From: "Richard Soderberg" + Date: Thu, 24 May 2001 05:51:52 -0700 + Message-ID: + Branch: perl + ! mg.c + ____________________________________________________________________________ + [ 10193] By: jhi on 2001/05/24 12:37:13 + Log: Iteration continues; hopefully convergently. + Branch: perl + ! t/lib/b-stash.t + ____________________________________________________________________________ + [ 10192] By: jhi on 2001/05/24 12:36:35 + Log: Subject: [PATCH] CORE::GLOBAL::require override happens too early + From: Gisle Aas + Date: 23 May 2001 16:13:10 -0700 + Message-ID: + Branch: perl + ! op.c toke.c + ____________________________________________________________________________ + [ 10191] By: jhi on 2001/05/24 12:25:12 + Log: Subject: [PATCH] lib/dumpvar.pl, lib/perl5db.pl - fix warnings + From: "Daniel S. Lewart" + Date: Thu, 24 May 2001 05:05:22 -0500 + Message-ID: <20010524050522.A18997@staff1.cso.uiuc.edu> + Branch: perl + ! lib/dumpvar.pl lib/perl5db.pl + ____________________________________________________________________________ + [ 10190] By: jhi on 2001/05/24 12:24:07 + Log: Subject: Re: [ID 20010524.001] perl5db.pl x @INC doesn't work like it used to + From: David Dyck + Date: Thu, 24 May 2001 01:42:09 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 10189] By: jhi on 2001/05/23 22:43:31 + Log: Tiny pod nits on READMEs, mostly whitespace issues. + Branch: perl + ! README.amiga README.dos README.macos README.mpeix README.vmesa + ! README.win32 + ____________________________________________________________________________ + [ 10188] By: jhi on 2001/05/23 22:26:03 + Log: The DG/UX part of the 20010521.005. + Branch: perl + ! README.dgux + ____________________________________________________________________________ + [ 10187] By: jhi on 2001/05/23 22:04:05 + Log: Subject: Re: [ID 20000716.007] \G in a m//g expression causes problems + From: Hugo + Date: Mon, 21 May 2001 16:32:02 +0100 + Message-Id: <200105211532.QAA03999@crypt.compulink.co.uk> + Branch: perl + ! regcomp.c t/op/misc.t + ____________________________________________________________________________ + [ 10186] By: jhi on 2001/05/23 21:42:15 + Log: Subject: [PATCH] Extra UNIVERSAL tests + From: Mike Guy + Date: Wed, 23 May 2001 12:29:20 +0100 + Message-Id: + Branch: perl + ! t/op/universal.t + ____________________________________________________________________________ + [ 10185] By: jhi on 2001/05/23 21:38:48 + Log: Subject: [PATCH] Remove EQ keyword + From: Mike Guy + Message-Id: + Date: Wed, 23 May 2001 11:17:29 +0100 + Branch: perl + ! keywords.h keywords.pl + ____________________________________________________________________________ + [ 10184] By: jhi on 2001/05/23 21:29:41 + Log: Subject: [PATCH] lib/perl5db.pl + From: "Daniel S. Lewart" + Date: Wed, 23 May 2001 02:18:03 -0500 + Message-ID: <20010523021803.A21965@staff1.cso.uiuc.edu> + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 10183] By: jhi on 2001/05/23 21:27:54 + Log: Subject: [PATCH lib/Term/Cap.pm] Avoid -W warnings in Tgetent and Tputs + From: "Daniel S. Lewart" + Date: Tue, 22 May 2001 23:34:41 -0500 + Message-ID: <20010522233441.A12431@staff1.cso.uiuc.edu> + Branch: perl + ! lib/Term/Cap.pm + ____________________________________________________________________________ + [ 10182] By: jhi on 2001/05/23 21:24:30 + Log: Subject: [PATCH emacs/e2ctags.pl] big speedup + From: davem@fdgroup.co.uk + Date: Tue, 22 May 2001 22:08:09 +0100 (BST) + Message-Id: <200105222108.WAA09442@gizmo.fdgroup.co.uk> + Branch: perl + ! emacs/e2ctags.pl + ____________________________________________________________________________ + [ 10181] By: jhi on 2001/05/23 21:23:29 + Log: Subject: [PATCH lib/vars.pm] Sensible minimum version + From: Michael G Schwern + Date: Tue, 22 May 2001 14:15:09 +0100 + Message-ID: <20010522141509.J701@blackrider.blackstar.co.uk> + Branch: perl + ! lib/vars.pm + ____________________________________________________________________________ + [ 10180] By: jhi on 2001/05/23 21:22:14 + Log: Subject: [PATCH lib/vars.pm] Odd code nit + From: Michael G Schwern + Date: Tue, 22 May 2001 14:14:28 +0100 + Message-ID: <20010522141427.I701@blackrider.blackstar.co.uk> + Branch: perl + ! lib/vars.pm + ____________________________________________________________________________ + [ 10179] By: jhi on 2001/05/23 21:19:51 + Log: Use the new use vars feature. + Branch: perl + ! t/lib/b-stash.t + ____________________________________________________________________________ + [ 10178] By: jhi on 2001/05/23 21:19:28 + Log: Subject: [PATCH] vars.pm to support qualified variables (was Re: [ID 20010521.001]) + From: Mike Guy + Sender: "M.J.T. Guy" + Date: Tue, 22 May 2001 13:11:39 +0100 + Branch: perl + + t/pragma/vars.t + ! MANIFEST lib/vars.pm t/lib/1_compile.t + ____________________________________________________________________________ + [ 10177] By: jhi on 2001/05/23 21:01:48 + Log: -qlongdouble considered harmful by Merijn. + Branch: perl + ! hints/aix.sh + ____________________________________________________________________________ + [ 10176] By: jhi on 2001/05/21 13:21:21 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10175] By: jhi on 2001/05/21 13:17:28 + Log: Add a test of its very own for Fcntl. Hopefully portable. + Branch: perl + + t/lib/fcntl.t + ! MANIFEST + ____________________________________________________________________________ + [ 10174] By: jhi on 2001/05/21 12:45:41 + Log: Must be trickier for 'minitest' not to die. + Branch: perl + ! t/op/taint.t + ____________________________________________________________________________ + [ 10173] By: jhi on 2001/05/21 11:24:43 + Log: Can't declare other people's variables. + Branch: perl + ! t/lib/b-stash.t + ____________________________________________________________________________ + [ 10172] By: jhi on 2001/05/20 20:33:08 + Log: Fix for ID 20010519.003: sysopen() wasn't tainting :-( + Branch: perl + ! doio.c t/op/taint.t + ____________________________________________________________________________ + [ 10171] By: jhi on 2001/05/20 20:18:45 + Log: The OS/2 variable needs to be declared. + Branch: perl + ! t/lib/b-stash.t + ____________________________________________________________________________ + [ 10170] By: nick on 2001/05/20 16:48:29 + Log: Integrate mainline + Branch: perlio + !> (integrate 41 files) + ____________________________________________________________________________ + [ 10169] By: jhi on 2001/05/20 11:50:20 + Log: Small perlsec updates: clarify the taintedness of filename + globbing; suggest using Scalar::Util::tainted(). + Branch: perl + ! pod/perlsec.pod + ____________________________________________________________________________ + [ 10168] By: jhi on 2001/05/20 11:24:11 + Log: Subject: [PATCH 5.7.1@10135] [LARGE!] symbolic magic + From: Dave Mitchell + Date: Sat, 19 May 2001 20:12:56 +0100 (BST) + Message-Id: <200105191912.UAA23925@gizmo.fdgroup.co.uk> + Branch: perl + ! av.c cc_runtime.h doop.c dump.c gv.c hv.c mg.c op.c perl.c + ! perl.h perlio.c pod/perlguts.pod pp.c pp_ctl.c pp_hot.c + ! pp_sys.c regexec.c scope.c sv.c t/lib/peek.t taint.c util.c + ! xsutils.c + ____________________________________________________________________________ + [ 10167] By: jhi on 2001/05/20 11:12:14 + Log: Subject: [PATCH 5.6.1] DLL descriptions on OS/2 + From: Ilya Zakharevich + Date: Sat, 19 May 2001 04:08:46 -0400 + Message-ID: <20010519040846.A16969@math.ohio-state.edu> + Branch: perl + ! lib/ExtUtils/Mksymlists.pm makedef.pl + ____________________________________________________________________________ + [ 10166] By: jhi on 2001/05/20 11:08:27 + Log: Subject: [PATCH 5.6.1] DLL name mangling on OS/2 + From: Ilya Zakharevich + Date: Sat, 19 May 2001 04:30:45 -0400 + Message-ID: <20010519043045.A17033@math.ohio-state.edu> + Branch: perl + ! os2/os2.c + ____________________________________________________________________________ + [ 10165] By: jhi on 2001/05/20 11:07:06 + Log: Subject: [PATCH 5.6.1] build bugs OS/2 + From: Ilya Zakharevich + Date: Sat, 19 May 2001 04:35:28 -0400 + Message-ID: <20010519043528.A17363@math.ohio-state.edu> + Branch: perl + ! os2/Makefile.SHs os2/os2.c + ____________________________________________________________________________ + [ 10164] By: jhi on 2001/05/20 11:06:01 + Log: Subject: [PATCH 5.6.1] Mis-Failing tests + From: Ilya Zakharevich + Date: Sat, 19 May 2001 04:04:23 -0400 + Message-ID: <20010519040423.A16861@math.ohio-state.edu> + + (In bleadperl patched b-stash.t instead of b.t) + Branch: perl + ! t/lib/b-stash.t t/lib/bigfltpm.t + ____________________________________________________________________________ + [ 10163] By: jhi on 2001/05/20 10:59:46 + Log: Subject: [PATCH 5.6.1] perl5db + From: Ilya Zakharevich + Date: Sat, 19 May 2001 03:49:09 -0400 + Message-ID: <20010519034909.A14902@math.ohio-state.edu> + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 10162] By: jhi on 2001/05/20 10:58:18 + Log: Subject: [PATCH] require $mod where $mod has touched numeric context + From: Gisle Aas + Date: 18 May 2001 14:24:51 -0700 + Message-ID: + Branch: perl + ! pp_ctl.c + ____________________________________________________________________________ + [ 10161] By: jhi on 2001/05/20 10:57:00 + Log: Subject: [PATCH] Chomp should not always stringify + From: Gisle Aas + Date: 18 May 2001 07:55:25 -0700 + Message-ID: + Branch: perl + ! doop.c t/op/chop.t + ____________________________________________________________________________ + [ 10160] By: jhi on 2001/05/20 10:49:40 + Log: Integrate perlio. + Branch: perl + !> pod/perlfunc.pod + ____________________________________________________________________________ + [ 10159] By: nick on 2001/05/20 09:39:46 + Log: Document some more of open's features. + Branch: perlio + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10158] By: gsar on 2001/05/18 18:43:38 + Log: back out change#10153 (it has compatibility issues such as the + changed behavior of /[~%@+-]/, and after talking to Jarkko, the + benefit for 5.6.x doesn't seem worth the risk) + Branch: maint-5.6/perl + ! toke.c + ____________________________________________________________________________ + [ 10157] By: jhi on 2001/05/18 17:05:40 + Log: \$escaping the $vars in !GROK!THIS! section is a good idea. + Branch: perl + ! x2p/s2p.PL + ____________________________________________________________________________ + [ 10156] By: jhi on 2001/05/18 12:06:40 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10155] By: jhi on 2001/05/18 11:58:57 + Log: Integrate change #10144 from maintperl. + + s/CONFIGDOTSH/PERL_CONFIG_SH/ for Win32, too. + Branch: perl + !> win32/config.bc win32/config.gc win32/config.vc + !> win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10154] By: nick on 2001/05/18 07:23:03 + Log: Integrate mainline. + Branch: perlio + +> README.dgux t/lib/i18n-collate.t utils.lst + !> (integrate 49 files) + ____________________________________________________________________________ + [ 10153] By: jhi on 2001/05/18 00:41:51 + Log: Integrate change #7224 from mainline into maintperl. + + Allow @+ and @- to be doublequoted, from Simon Cozens. + (Approved by Larry, see Tom's comment in 20000830.005.) + Branch: maint-5.6/perl + !> toke.c + ____________________________________________________________________________ + [ 10152] By: jhi on 2001/05/17 23:18:15 + Log: Subject: [PATCH bleadperl] small lookbehind fix + From: Hugo + Date: Fri, 18 May 2001 00:07:19 +0100 + Message-Id: <200105172307.AAA06142@crypt.compulink.co.uk> + Branch: perl + ! regexec.c + ____________________________________________________________________________ + [ 10151] By: jhi on 2001/05/17 22:00:06 + Log: Detypos. + Branch: perl + ! installman utils.lst + ____________________________________________________________________________ + [ 10150] By: jhi on 2001/05/17 20:32:48 + Log: Add better debug to glob/basic #8 as suggested by Nick Clark + in 20001222.001. + Branch: perl + ! t/lib/glob-basic.t + ____________________________________________________________________________ + [ 10149] By: jhi on 2001/05/17 20:08:58 + Log: Subject: [PATCH] Test for bug 20010515.004 + From: Benjamin Sugars + Date: Thu, 17 May 2001 15:48:18 -0400 (EDT) + Message-ID: + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 10148] By: jhi on 2001/05/17 20:06:23 + Log: Integrate #10145 from maintperl. + + fix for ID 20010515.004 (needs test) + Branch: perl + !> pp_hot.c + ____________________________________________________________________________ + [ 10147] By: jhi on 2001/05/17 19:10:46 + Log: Thinko noticed by Doug MacEachern. + Branch: perl + ! thread.h + ____________________________________________________________________________ + [ 10146] By: jhi on 2001/05/17 17:30:37 + Log: Subject: Re: [PATCH] HERE mark in regex + From: Ronald J Kimball + Date: Thu, 17 May 2001 12:20:33 -0400 + Message-ID: <20010517122033.B1547290@linguist.thayer.dartmouth.edu> + Branch: perl + ! t/op/re_tests + ____________________________________________________________________________ + [ 10145] By: gsar on 2001/05/17 16:59:55 + Log: fix for ID 20010515.004 (needs test) + Branch: maint-5.6/perl + ! pp_hot.c + ____________________________________________________________________________ + [ 10144] By: gsar on 2001/05/17 16:39:02 + Log: s/CONFIGDOTSH/PERL_CONFIG_SH/g + Branch: maint-5.6/perl + ! win32/config.bc win32/config.gc win32/config.vc + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10143] By: jhi on 2001/05/17 14:21:08 + Log: Macrofy the getspecific (and use it also in util.c) + Branch: perl + ! thread.h util.c + ____________________________________________________________________________ + [ 10142] By: jhi on 2001/05/17 01:43:50 + Log: Use the unchecked thread-specific key fetch also in Tru64. + Branch: perl + ! thread.h + ____________________________________________________________________________ + [ 10141] By: jhi on 2001/05/17 01:41:07 + Log: Subject: [PATCH 5.6.1]Quick thread speedup + From: Dan Sugalski + Date: Wed, 16 May 2001 18:05:19 -0400 + Message-Id: <5.1.0.14.0.20010516175826.01afde08@24.8.96.48> + Branch: perl + ! thread.h util.c + ____________________________________________________________________________ + [ 10140] By: jhi on 2001/05/16 19:58:29 + Log: I think this is quite enough testing for a deprecated feature. + Branch: perl + + t/lib/i18n-collate.t + ! MANIFEST t/lib/1_compile.t + ____________________________________________________________________________ + [ 10139] By: jhi on 2001/05/16 18:47:03 + Log: More HP-UX lore from Jeff Okamoto. + Branch: perl + ! README.hpux + ____________________________________________________________________________ + [ 10138] By: jhi on 2001/05/16 18:21:04 + Log: Sort utils.lst for easier maintenance. + Branch: perl + ! utils.lst + ____________________________________________________________________________ + [ 10137] By: jhi on 2001/05/16 18:12:01 + Log: Subject: Re: [PATCH] Abstract "utility" information from installman + From: Tim Jenness + Date: Wed, 16 May 2001 08:59:59 -1000 (HST) + Message-ID: + + Add pod2latex to utils.lst. + Branch: perl + ! MANIFEST utils.lst + ____________________________________________________________________________ + [ 10136] By: jhi on 2001/05/16 18:00:00 + Log: Subject: Re: [PATCH] HERE mark in regex + From: Ronald J Kimball + Date: Wed, 16 May 2001 13:04:43 -0400 + Message-ID: <20010516130443.E1516273@linguist.thayer.dartmouth.edu> + Branch: perl + ! pod/perldiag.pod regcomp.c t/op/misc.t t/op/re_tests + ! t/op/regmesg.t t/pragma/warn/regcomp + ____________________________________________________________________________ + [ 10135] By: jhi on 2001/05/16 17:51:50 + Log: Subject: Re: [PATCH] Abstract "utility" information from installman + From: Simon Cozens + Date: Wed, 16 May 2001 18:02:08 +0100 + Message-ID: <20010516180208.A6458@netthink.co.uk> + Branch: perl + ! installman utils.lst + ____________________________________________________________________________ + [ 10134] By: jhi on 2001/05/16 17:47:26 + Log: Subject: Re: [ID 20010515.001] -DPERL_Y2KWARN doesn't do what it should (Not OK: perl v5.7.1 +DEVEL10104 on i586-linux 2.2.16-22 (UNINST + From: "Philip Newton" + Date: Tue, 15 May 2001 15:09:30 +0200 + Message-ID: <3B0146AA.2839.17BFDA6@localhost> + + Test case for #10128. + Branch: perl + ! t/pragma/warn/pp_hot + ____________________________________________________________________________ + [ 10133] By: jhi on 2001/05/16 15:12:52 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10132] By: jhi on 2001/05/16 14:50:55 + Log: Deprecate pseudo-hashes. + Branch: perl + ! pod/perl572delta.pod pod/perlref.pod pod/perltodo.pod + ____________________________________________________________________________ + [ 10131] By: jhi on 2001/05/16 14:26:01 + Log: HP-UX hints update from Merijn. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 10130] By: jhi on 2001/05/16 14:23:01 + Log: README.hpux update from Merijn. + Branch: perl + ! README.hpux + ____________________________________________________________________________ + [ 10129] By: jhi on 2001/05/16 14:18:56 + Log: Subject: Re: [PATCH] Abstract "utility" information from installman + From: Simon Cozens + Date: Wed, 16 May 2001 15:57:55 +0100 + Message-ID: <20010516155755.A4728@netthink.co.uk> + Branch: perl + + utils.lst + ! MANIFEST installman installperl + ____________________________________________________________________________ + [ 10128] By: jhi on 2001/05/16 14:15:36 + Log: Subject: Re: [ID 20010515.001] -DPERL_Y2KWARN doesn't do what it should (Not OK: perl v5.7.1 +DEVEL10104 on i586-linux 2.2.16-22 (UNINST + From: "Philip Newton" + Date: Tue, 15 May 2001 16:31:05 +0200 + Message-ID: <3B0159C9.1905.1C6AEF9@localhost> + + Fix PERL_Y2KWARN test to check before rather than after appending. + Branch: perl + ! pp_hot.c + ____________________________________________________________________________ + [ 10127] By: jhi on 2001/05/16 14:08:15 + Log: Regen Porting stuff. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH + ____________________________________________________________________________ + [ 10126] By: jhi on 2001/05/16 13:41:50 + Log: Metaconfig unit change for #10125. + Branch: metaconfig + ! U/modified/Oldconfig.U + ____________________________________________________________________________ + [ 10125] By: jhi on 2001/05/16 13:41:35 + Log: Use OSVERS. + Branch: perl + ! Configure config_h.SH perl.c + ____________________________________________________________________________ + [ 10124] By: jhi on 2001/05/16 13:41:09 + Log: Regen toc. + Branch: perl + ! pod/buildtoc.PL pod/perl.pod pod/perltoc.pod + ____________________________________________________________________________ + [ 10123] By: jhi on 2001/05/16 13:25:38 + Log: Adding the README.dgux to the MANIFEST would be a good idea. + Branch: perl + ! MANIFEST + ____________________________________________________________________________ + [ 10122] By: jhi on 2001/05/16 13:08:33 + Log: Move the stack desire definition to thread.h. + Branch: perl + ! ext/Thread/Thread.xs thread.h + ____________________________________________________________________________ + [ 10121] By: jhi on 2001/05/16 13:00:12 + Log: DG-UX threading patches, including a README.dgux, + from Takis Psarogiannakopoulos. + Branch: perl + + README.dgux + ! config_h.SH ext/Thread/Thread.xs hints/dgux.sh perl.c + ____________________________________________________________________________ + [ 10120] By: jhi on 2001/05/16 12:55:33 + Log: Subject: [PATCH B::Deparse] More on /x regexes + From: Robin Houston + Date: Tue, 15 May 2001 19:09:35 +0100 + Message-ID: <20010515190935.A27268@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10119] By: jhi on 2001/05/16 12:45:29 + Log: Document that the core time() may be rounding rather + than truncating, would have saved at least my confusion. + Branch: perl + ! ext/Time/HiRes/HiRes.pm + ____________________________________________________________________________ + [ 10118] By: jhi on 2001/05/16 12:37:57 + Log: Subject: perl-current/t/time-hires.t + From: John Peacock + Date: Fri, 11 May 2001 14:09:41 -0400 + Message-ID: <3AFC2AE5.5E787E54@rowman.com> + Branch: perl + ! t/lib/time-hires.t + ____________________________________________________________________________ + [ 10117] By: jhi on 2001/05/15 13:40:33 + Log: Subject: [PATCH dump.c] Op private flags + From: Simon Cozens + Date: Sun, 13 May 2001 20:20:36 +0100 + Message-ID: <20010513202036.A21896@netthink.co.uk> + Branch: perl + ! dump.c + ____________________________________________________________________________ + [ 10116] By: jhi on 2001/05/15 13:28:26 + Log: Upgrade to Switch 2.03. + Branch: perl + ! lib/Switch.pm + ____________________________________________________________________________ + [ 10115] By: jhi on 2001/05/15 13:19:01 + Log: Integrate change #10113 from mainline: rename CONFIGDOTSH + to PERL_CONFIG_SH and use it consistently. + Branch: maint-5.6/perl + !> Configure Makefile.SH Policy_sh.SH cflags.SH config_h.SH + !> configpm configure.com makeaperl.SH makedepend.SH makedir.SH + !> myconfig.SH writemain.SH + ____________________________________________________________________________ + [ 10114] By: jhi on 2001/05/15 13:13:21 + Log: Metaconfig units changes for #10113. + Branch: metaconfig + ! U/modified/Config_h.U U/modified/Extract.U U/modified/Oldsym.U + ____________________________________________________________________________ + [ 10113] By: jhi on 2001/05/15 13:12:40 + Log: The problem described in 20010514.031 still wasn't + fully cured, there were remnants of $CONFIG when + $CONFIGDOTSH was expected. Now renamed to PERL_CONFIG_SH + to avoid future conflicts. + Branch: perl + ! Configure Makefile.SH Policy_sh.SH cflags.SH config_h.SH + ! configpm configure.com makeaperl.SH makedepend.SH makedir.SH + ! myconfig.SH writemain.SH + ____________________________________________________________________________ + [ 10112] By: jhi on 2001/05/15 11:55:44 + Log: Half of #10107 got lost. + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10111] By: nick on 2001/05/15 08:39:14 + Log: Integrate mainline. + Branch: perlio + +> ext/POSIX/hints/uts.pl + - Todo Todo-5.6 t/camel-III/vstring.t + !> (integrate 48 files) + ____________________________________________________________________________ + [ 10110] By: jhi on 2001/05/15 02:04:05 + Log: Subject: [PATCH TestInit.pm] Give Deparse tester a fair chance + From: Robin Houston + Date: Mon, 14 May 2001 22:27:08 +0100 + Message-ID: <20010514222708.A22963@penderel> + Branch: perl + ! t/TestInit.pm + ____________________________________________________________________________ + [ 10109] By: jhi on 2001/05/15 02:03:12 + Log: Subject: [PATCH B::Deparse] Lvaluable method calls + From: Robin Houston + Date: Mon, 14 May 2001 22:16:43 +0100 + Message-ID: <20010514221643.A22437@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10108] By: jhi on 2001/05/15 02:02:17 + Log: Subject: [PATCH B::Deparse] C<$foo =~ give_me_a_regex>; /x modifier + From: Robin Houston + Date: Mon, 14 May 2001 22:03:44 +0100 + Message-ID: <20010514220344.A20643@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10107] By: jhi on 2001/05/15 02:01:24 + Log: Subject: [PATCH B::Deparse] "${foo}_bar" + From: Robin Houston + Date: Mon, 14 May 2001 22:10:07 +0100 + Message-ID: <20010514221007.A21118@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10106] By: jhi on 2001/05/15 01:41:26 + Log: Fix for 20010514.037; substr() didn't invalidate the locale + collation magic. + Branch: perl + ! pp.c + ____________________________________________________________________________ + [ 10105] By: jhi on 2001/05/14 18:18:24 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10104] By: jhi on 2001/05/14 18:09:07 + Log: Retract #10094. + Branch: perl + ! lib/Pod/Text.pm + ____________________________________________________________________________ + [ 10103] By: jhi on 2001/05/14 15:20:58 + Log: Integrate change #10100 from maintperl. + + PL_last_in_gv may not be a GV if it was a stale filehandle (fix for + bug ID 20010514.027) + Branch: perl + !> mg.c pp_ctl.c + ____________________________________________________________________________ + [ 10102] By: jhi on 2001/05/14 15:19:21 + Log: Document the deprecatedness of suidperl. + Branch: perl + ! INSTALL pod/perlfaq1.pod + ____________________________________________________________________________ + [ 10101] By: jhi on 2001/05/14 14:54:31 + Log: Subject: Re: [ID 20010514.022] Makemaker a bit too prefix-happy + From: Ronald J Kimball + Date: Mon, 14 May 2001 09:38:59 -0400 + Message-ID: <20010514093859.A1479715@linguist.thayer.dartmouth.edu> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 10100] By: gsar on 2001/05/14 14:43:50 + Log: PL_last_in_gv may not be a GV if it was a stale filehandle (fix for + bug ID 20010514.027) + + TODO: this needs a testsuite addition + Branch: maint-5.6/perl + ! mg.c pp_ctl.c + ____________________________________________________________________________ + [ 10099] By: jhi on 2001/05/14 13:42:38 + Log: More DWIMminess for Class::Struct: calling the array or hash + accessors only with one argument, an array or a hash reference, + sets the underlying array or hash. This mirrors nicely also + the usage in the constructor. + From Bernd Sokolowsky , via Damian Conway. + Branch: perl + ! lib/Class/Struct.pm t/lib/class-struct.t + ____________________________________________________________________________ + [ 10098] By: jhi on 2001/05/14 13:10:34 + Log: Reference cmp'ing should go through the whole stringification + process shebang, as pointed out by Sarathy in #10091. + Branch: perl + ! pp.c + ____________________________________________________________________________ + [ 10097] By: jhi on 2001/05/14 12:54:31 + Log: Subject: Re: [LONG] Cleaning up Todo/Todo-5.6/perltodo + From: Simon Cozens + Date: Sat, 12 May 2001 16:36:27 +0100 + Message-ID: <20010512163627.A5522@netthink.co.uk> + + with some additions salvaged from Todo and Todo-5.6 before + retiring them. + Branch: perl + - Todo Todo-5.6 + ! MANIFEST pod/perltodo.pod + ____________________________________________________________________________ + [ 10096] By: jhi on 2001/05/14 12:37:01 + Log: Subject: [ID 20010514.025] _SVID3 in + From: "Golubev I. N." + Date: Mon, 07 May 2001 14:33:34 (GMT) + Message-Id: <02453af6b23e63-gin@mo.msk.ru> + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 10095] By: jhi on 2001/05/14 12:34:24 + Log: Subject: [ID 20010514.022] Makemaker a bit too prefix-happy + From: "Todd C. Miller" + Date: Mon, 7 May 2001 09:35:57 -0600 (MDT) + Message-Id: <200105071535.f47FZvf27235@xerxes.courtesan.com> + Branch: perl + ! lib/ExtUtils/MM_Unix.pm + ____________________________________________________________________________ + [ 10094] By: jhi on 2001/05/14 12:32:44 + Log: (Retracted by #10104.) + + Subject: [PATCH bleadperl Pod::Text] avoid overquoting [Was: rand(0) is rand(1)] + From: barries + Date: Sat, 12 May 2001 01:28:10 -0400 + Message-ID: <20010512012810.B26358@jester.slaysys.com> + Branch: perl + ! lib/Pod/Text.pm + ____________________________________________________________________________ + [ 10093] By: jhi on 2001/05/14 12:30:38 + Log: Subject: [PATCH] Incorrect line numbers in AutoSplit + From: Mike Guy + Date: Sat, 12 May 2001 19:24:33 +0100 + Message-Id: + Branch: perl + ! lib/AutoSplit.pm + ____________________________________________________________________________ + [ 10092] By: jhi on 2001/05/14 12:29:21 + Log: Yet another HP-UX hints tweak from Merijn. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 10091] By: gsar on 2001/05/14 04:38:32 + Log: $ref1 == $ref2 behaves unpredictably on platforms where NV_PRESERVES_UV + isn't defined (changes#9366,9368,9370 from mainline without the + pp_scmp() change) + Branch: maint-5.6/perl + ! pp.c pp.h pp_hot.c + ____________________________________________________________________________ + [ 10090] By: jhi on 2001/05/12 13:39:43 + Log: The sorting seems to happen now automatically. + Branch: perl + ! t/lib/glob-basic.t + ____________________________________________________________________________ + [ 10089] By: jhi on 2001/05/12 03:38:15 + Log: Subject: Re: [PATCH perlfunc.pod] split on an empty string + From: Benjamin Sugars + Date: Fri, 11 May 2001 11:36:04 -0400 (EDT) + Message-ID: + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10088] By: jhi on 2001/05/12 03:37:00 + Log: Subject: Re: undef(&foo) does not work for XS functions + From: Doug MacEachern + Date: Fri, 11 May 2001 16:52:29 -0700 (PDT) + Message-ID: + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 10087] By: jhi on 2001/05/12 03:35:58 + Log: Subject: [PATCH: perl@10086] fixup t/op/append.t for UTF-EBCDIC + From: Peter Prymmer + Date: Fri, 11 May 2001 17:38:43 -0700 (PDT) + Message-ID: + Branch: perl + ! t/op/append.t + ____________________________________________________________________________ + [ 10086] By: jhi on 2001/05/11 14:23:08 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10085] By: jhi on 2001/05/11 14:08:20 + Log: Remove the 'asciir' re subpragma. Should instead implement + the 'physical vs logical' range scheme: + + \xAA-\xCC is a native physical range, you want that range of + codepoints in your native encoding. In EBCDIC the codepoints + in the gaps (between i-j and r-s) should be included. + + \x{AA}-\x{CC} is a physical Unicode range, you want that range of + codepoints in Unicode. + + a-z is a logical range, you want that range of 'logical' codepoints + in your native encoding. In EBCDIC the codepoints in the gaps + (between i-j and r-s) should not be included. + + Mixed cases (a-\xAA, etc) should either be errors, or maybe + the 'logical' endpoints should be converted to native/Unicode + codepoints, and the range handled as a physical range. + + 'Logical endpoints' are to be recognized only in the A-Z, a-z, + and 0-9 ranges. Probably a warning should be given for mixed + cases like A-z or a-9 (since such expressions are encoding + dependent), with a recommendation to use physical ranges. + Branch: perl + ! ext/re/re.pm perl.h regcomp.c regcomp.h t/op/pat.t + ! t/op/regexp.t + ____________________________________________________________________________ + [ 10084] By: jhi on 2001/05/11 13:56:16 + Log: Make the test to cleanup the test directory tree + both before and after the testing so that we always + have a clean slate to work with. + Branch: perl + ! t/lib/filefind.t + ____________________________________________________________________________ + [ 10083] By: jhi on 2001/05/11 13:46:30 + Log: Subject: Re: [PATCH perlfunc.pod] split on an empty string + From: Jon Eveland + Date: Fri, 11 May 2001 07:36:28 -0700 (PDT) + Message-ID: <20010511143628.24225.qmail@web10402.mail.yahoo.com> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10082] By: jhi on 2001/05/11 13:45:06 + Log: Merge the camel-III/vstring.t with op/ver.t. + Branch: perl + - t/camel-III/vstring.t + ! MANIFEST t/TEST t/harness t/op/ver.t + ____________________________________________________________________________ + [ 10081] By: jhi on 2001/05/11 13:15:55 + Log: Add test.deparse make target. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 10080] By: jhi on 2001/05/11 12:52:49 + Log: Subject: [PATCH B::Deparse] $foo->bar(0) + From: Robin Houston + Date: Fri, 11 May 2001 12:02:22 +0100 + Message-ID: <20010511120222.A11529@penderel> + Branch: perl + ! ext/B/B/Deparse.pm t/op/method.t + ____________________________________________________________________________ + [ 10079] By: jhi on 2001/05/11 01:59:06 + Log: A nicely working combination for UTS from Hal Morris. + Branch: perl + + ext/POSIX/hints/uts.pl + ! MANIFEST hints/uts.sh + ____________________________________________________________________________ + [ 10078] By: jhi on 2001/05/11 01:15:04 + Log: i_ieeefp=undef for UTS. + Branch: perl + ! hints/uts.sh + ____________________________________________________________________________ + [ 10077] By: jhi on 2001/05/10 22:42:35 + Log: Subject: RE: rand(0) is rand(1) + From: Larry Shatzer + Date: Thu, 10 May 2001 11:09:27 -0700 + Message-ID: <95CD90709D74D4118F4600D0B79E8BC9995027@mail.islanddata.com> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10076] By: jhi on 2001/05/10 22:36:50 + Log: Subject: [patch] make op_{clear,null} public + From: Doug MacEachern + Date: Thu, 10 May 2001 15:54:09 -0700 (PDT) + Message-ID: + Branch: perl + ! embed.h embed.pl op.c proto.h + ____________________________________________________________________________ + [ 10075] By: jhi on 2001/05/10 22:28:36 + Log: Subject: [PATCH B.xs] Extend tr/\0-\377/blah/c support + From: Robin Houston + Date: Thu, 10 May 2001 18:54:59 +0100 + Message-ID: <20010510185459.A5995@penderel> + Branch: perl + ! ext/B/B.xs ext/B/B/Deparse.pm t/op/tr.t + ____________________________________________________________________________ + [ 10074] By: jhi on 2001/05/10 22:23:41 + Log: Subject: [PATCH B::Deparse] t/op/64bitint.t + From: Robin Houston + Date: Thu, 10 May 2001 12:56:39 +0100 + Message-ID: <20010510125639.A2119@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10073] By: jhi on 2001/05/10 14:26:01 + Log: Retract #10070, not ready yet. + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10072] By: jhi on 2001/05/10 13:40:24 + Log: The metaconfig unit change for #10071. + Branch: metaconfig + ! U/modified/mallocsrc.U + ____________________________________________________________________________ + [ 10071] By: jhi on 2001/05/10 13:39:57 + Log: The #9525+#9526 didn't allow for overriding usemymalloc. + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10070] By: jhi on 2001/05/10 13:18:42 + Log: (Retracted by #10073) + + Subject: Re: [PATCH t/TEST] B::Deparse tester + From: Hugo + Date: Thu, 10 May 2001 05:48:09 +0100 + Message-Id: <200105100448.FAA13584@crypt.compulink.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10069] By: jhi on 2001/05/10 12:24:06 + Log: Add a for(func()) test. + Branch: perl + ! t/cmd/for.t + ____________________________________________________________________________ + [ 10068] By: jhi on 2001/05/10 12:16:00 + Log: Subject: [PATCH B::Deparse] our() lists and foreach loops + From: Robin Houston + Date: Thu, 10 May 2001 13:50:08 +0100 + Message-ID: <20010510135008.A2454@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10067] By: jhi on 2001/05/10 01:45:03 + Log: A thinko in #10065. + Branch: perl + ! hv.c + ____________________________________________________________________________ + [ 10066] By: jhi on 2001/05/10 01:33:12 + Log: Subject: [PATCH B::Deparse] Fix tr///ansliteration + From: Robin Houston + Date: Thu, 10 May 2001 02:10:34 +0100 + Message-ID: <20010510021034.A19421@penderel> + Branch: perl + ! ext/B/B.xs ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10065] By: jhi on 2001/05/10 01:30:43 + Log: Subject: [patch] make hv_fetch{_ent} SvGMAGICAL aware + From: Doug MacEachern + Date: Mon, 7 May 2001 09:50:58 -0700 (PDT) + Message-ID: + Branch: perl + ! hv.c + ____________________________________________________________________________ + [ 10064] By: jhi on 2001/05/09 23:13:29 + Log: One more workaround for the UTS compiler from Hal Morris. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 10063] By: jhi on 2001/05/09 23:09:53 + Log: Subject: [PATCH B::Debug] Show string for PVOP, and referent for RV + From: Robin Houston + Date: Thu, 10 May 2001 01:02:08 +0100 + Message-ID: <20010510010208.A18200@penderel> + Branch: perl + ! ext/B/B/Debug.pm + ____________________________________________________________________________ + [ 10062] By: jhi on 2001/05/09 23:06:25 + Log: Subject: [PATCH] Simplify deb_curcv() a bit + From: Benjamin Sugars + Date: Wed, 9 May 2001 18:14:34 -0400 (EDT) + Message-ID: + Branch: perl + ! run.c + ____________________________________________________________________________ + [ 10061] By: jhi on 2001/05/09 23:05:28 + Log: Subject: [PATCH] Additional test case for PerlIO::Scalar + From: Benjamin Sugars + Date: Wed, 9 May 2001 18:03:45 -0400 (EDT) + Message-ID: + Branch: perl + ! t/lib/io_scalar.t + ____________________________________________________________________________ + [ 10060] By: jhi on 2001/05/09 23:04:38 + Log: Subject: [PATCH: perl@10022] update md5sum for MD5.xs on IBM-1047 + From: Peter Prymmer + Date: Wed, 9 May 2001 12:08:02 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/md5-file.t + ____________________________________________________________________________ + [ 10059] By: jhi on 2001/05/09 23:03:52 + Log: Subject: [PATCH t/TEST] B::Deparse tester + From: Robin Houston + Date: Wed, 9 May 2001 19:17:50 +0100 + Message-ID: <20010509191750.A16940@penderel> + Branch: perl + ! ext/B/O.pm t/TEST + ____________________________________________________________________________ + [ 10058] By: jhi on 2001/05/09 23:02:56 + Log: Subject: [PATCH] Pod::Html -- fixes extra gaps in raw text + From: Jeff Pinyan + Date: Wed, 9 May 2001 14:36:25 -0400 (EDT) + Message-ID: + Branch: perl + ! lib/Pod/Html.pm + ____________________________________________________________________________ + [ 10057] By: nick on 2001/05/09 18:37:56 + Log: Integrate mainline. + Branch: perlio + !> Changes epoc/epocish.h ext/PerlIO/Scalar/Scalar.xs + !> hints/hpux.sh lib/Pod/Html.pm patchlevel.h perlio.c + ____________________________________________________________________________ + [ 10056] By: jhi on 2001/05/09 16:44:44 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10055] By: jhi on 2001/05/09 16:26:47 + Log: Integrate perlio. + Branch: perl + !> win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10054] By: jhi on 2001/05/09 16:25:42 + Log: Subject: Re: [PATCH] Test offset when reading from a PerlIO::Scalar + From: Benjamin Sugars + Date: Wed, 9 May 2001 12:42:30 -0400 (EDT) + Message-ID: + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 10053] By: jhi on 2001/05/09 16:24:37 + Log: Subject: [PATCH] Test offset when reading from a PerlIO::Scalar + From: Benjamin Sugars + Date: Tue, 8 May 2001 17:09:44 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/PerlIO/Scalar/Scalar.xs + ____________________________________________________________________________ + [ 10052] By: jhi on 2001/05/09 16:19:04 + Log: Subject: [PATCH] Pod::Html doesn't honor =begin ... =end properly + From: Jeff Pinyan + Date: Wed, 9 May 2001 12:35:24 -0400 (EDT) + Message-ID: + Branch: perl + ! lib/Pod/Html.pm + ____________________________________________________________________________ + [ 10051] By: jhi on 2001/05/09 15:30:17 + Log: EPOC tweak from Olaf Flebbe. + Branch: perl + ! epoc/epocish.h + ____________________________________________________________________________ + [ 10050] By: nick on 2001/05/09 14:37:57 + Log: win32, regen_config_h + Branch: perlio + ! win32/config_H.bc win32/config_H.gc win32/config_H.vc + ____________________________________________________________________________ + [ 10049] By: jhi on 2001/05/09 12:33:39 + Log: Integrate perlio. + Branch: perl + !> pp_sys.c + ____________________________________________________________________________ + [ 10048] By: nick on 2001/05/09 11:59:50 + Log: If wait() or waitpid() ends due to EINTR despatch perl interrupt handler + and re-try. Fixes "perl 5.7.x prefers suicide over killing more than one child." + Branch: perlio + ! pp_sys.c + ____________________________________________________________________________ + [ 10047] By: jhi on 2001/05/09 10:50:12 + Log: Integrate perlio. + Branch: perl + !> run.c + ____________________________________________________________________________ + [ 10046] By: jhi on 2001/05/09 10:49:34 + Log: Subject: Re: Less warnings during configure + From: "H.Merijn Brand" + Date: Wed, 09 May 2001 13:12:49 +0200 + Message-Id: <20010509125337.995D.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 10045] By: nick on 2001/05/09 09:56:59 + Log: MULTIPLICITY/DEBUGGING build fix. + Branch: perlio + ! run.c + ____________________________________________________________________________ + [ 10044] By: nick on 2001/05/09 09:46:37 + Log: Merge of mainline (does not build MULTIPLICITY/DEBUGGING issue). + Branch: perlio + +> hints/atheos.sh pod/perl572delta.pod t/pod/plainer.t + - ext/SDBM_File/sdbm/dbm.c ext/SDBM_File/sdbm/dbm.h + !> (integrate 65 files) + ____________________________________________________________________________ + [ 10043] By: jhi on 2001/05/08 22:41:49 + Log: Subject: [PATCH op.c] Deprecate %x->{'foo'}, @y->[23] etc + From: Robin Houston + Date: Tue, 8 May 2001 19:38:00 +0100 + Message-ID: <20010508193800.A4389@penderel> + + Subject: Re: [PATCH op.c] Deprecate %x->{'foo'}, @y->[23] etc + From: Robin Houston + Date: Tue, 8 May 2001 20:03:57 +0100 + Message-ID: <20010508200357.A4614@penderel> + + Subject: Re: [PATCH op.c] Deprecate %x->{'foo'}, @y->[23] etc + From: Robin Houston + Date: Wed, 9 May 2001 00:12:05 +0100 + Message-ID: <20010509001205.A18521@puffinry.freeserve.co.uk> + Branch: perl + ! op.c pod/perldiag.pod t/pragma/overload.t t/pragma/warn/op + ____________________________________________________________________________ + [ 10042] By: jhi on 2001/05/08 22:09:35 + Log: Retract #10031. + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10041] By: jhi on 2001/05/08 18:27:34 + Log: The metaconfig unit changes for #10040. + Branch: metaconfig/U/perl + ! Checkcc.U d_dlsymun.U dlsrc.U + ____________________________________________________________________________ + [ 10040] By: jhi on 2001/05/08 18:24:47 + Log: The Configure half of + + Subject: Less warnings during configure + From: "H.Merijn Brand" + Date: Tue, 08 May 2001 08:44:02 +0200 + Message-Id: <20010508084158.D793.H.M.BRAND@hccnet.nl> + Branch: perl + ! Configure + ____________________________________________________________________________ + [ 10039] By: jhi on 2001/05/08 16:48:31 + Log: Subject: Less warnings during configure + From: "H.Merijn Brand" + Date: Tue, 08 May 2001 08:44:02 +0200 + Message-Id: <20010508084158.D793.H.M.BRAND@hccnet.nl> + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 10038] By: jhi on 2001/05/08 16:32:07 + Log: Don't forget to whine about \d__\d. + Branch: perl + ! t/pragma/warn/toke toke.c + ____________________________________________________________________________ + [ 10037] By: jhi on 2001/05/08 16:07:05 + Log: Allow underscores also in the exponent part. + Branch: perl + ! t/pragma/warn/toke toke.c + ____________________________________________________________________________ + [ 10036] By: jhi on 2001/05/08 13:33:55 + Log: CodeMagicCD doesn't look like an *I*DE. + Branch: perl + ! pod/perlfaq3.pod + ____________________________________________________________________________ + [ 10035] By: jhi on 2001/05/08 13:27:48 + Log: Add Open Perl IDE, remove Perl Code Magic (the site seems + to be consistently down). + Branch: perl + ! pod/perlfaq3.pod + ____________________________________________________________________________ + [ 10034] By: jhi on 2001/05/08 13:21:07 + Log: Upgrade to Text::Balanced 1.84. + Branch: perl + ! lib/Text/Balanced.pm t/lib/tb-xbrak.t + ____________________________________________________________________________ + [ 10033] By: jhi on 2001/05/08 12:41:53 + Log: Subject: Re: [PATCH] Find the last of the missing pad variables + From: Benjamin Sugars + Date: Tue, 8 May 2001 09:14:30 -0400 (EDT) + Message-ID: + Branch: perl + ! run.c + ____________________________________________________________________________ + [ 10032] By: jhi on 2001/05/08 12:40:28 + Log: Subject: [PATCH: perl@10022] cleaner cleanup for t/pod/plainer.t + From: Peter Prymmer + Date: Mon, 7 May 2001 18:13:06 -0700 (PDT) + Message-ID: + Branch: perl + ! t/pod/plainer.t + ____________________________________________________________________________ + [ 10031] By: jhi on 2001/05/08 12:35:25 + Log: (Retracted by #10042) + + Subject: Re: [ID 20010506.040] Infinite loop in lib/selfstubber.t under Cygwin + From: "Philip Newton" + Date: Tue, 8 May 2001 09:18:10 +0200 + Message-ID: <3AF7B9D2.28861.603732@localhost> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10030] By: jhi on 2001/05/08 12:32:23 + Log: Subject: [PATCH B::Deparse] Document known bugs + From: Robin Houston + Date: Tue, 8 May 2001 01:53:34 +0100 + Message-ID: <20010508015334.A32394@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10029] By: jhi on 2001/05/08 12:28:28 + Log: Subject: Re: Perl book, magazine and website updates. + From: "Philip Newton" + Date: Mon, 7 May 2001 17:03:58 +0200 + Message-ID: <3AF6D57E.5387.1E29930@localhost> + Branch: perl + ! pod/perlfaq2.pod + ____________________________________________________________________________ + [ 10028] By: jhi on 2001/05/07 23:53:30 + Log: Subject: [PATCH: perl@10022] YA tweak to avoid open file conflict in io/fflush.t + From: Peter Prymmer + Date: Mon, 7 May 2001 17:50:48 -0700 (PDT) + Message-ID: + Branch: perl + ! t/io/fflush.t + ____________________________________________________________________________ + [ 10027] By: jhi on 2001/05/07 23:22:48 + Log: Subject: [PATCH B::Deparse] Give (?{...}) a taste of its own medicine + From: Robin Houston + Date: Tue, 8 May 2001 01:14:55 +0100 + Message-ID: <20010508011455.A32162@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10026] By: jhi on 2001/05/07 23:15:05 + Log: Typo in #10025. + Branch: perl + ! hints/uts.sh + ____________________________________________________________________________ + [ 10025] By: jhi on 2001/05/07 21:15:35 + Log: cc, cflags, and optimize tweaks for UTS from Hal Morris. + Branch: perl + ! hints/uts.sh + ____________________________________________________________________________ + [ 10024] By: jhi on 2001/05/07 20:58:40 + Log: Subject: Re: [ID 20010506.045] question about hash syntax + From: Peter Scott + Date: Sun, 06 May 2001 13:10:40 -0700 + Message-Id: <4.3.2.7.2.20010506113015.00b46100@psdt.com> + Branch: perl + ! pod/perl56delta.pod + ____________________________________________________________________________ + [ 10023] By: jhi on 2001/05/07 20:41:26 + Log: Configure should figure out the list of dynamic extensions + just fine in UTS-- and in fact it does, as reported by Hal Morris. + Branch: perl + ! hints/uts.sh + ____________________________________________________________________________ + [ 10022] By: jhi on 2001/05/07 20:24:11 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10021] By: jhi on 2001/05/07 20:11:31 + Log: Subject: [PATCH regcomp.c] Insecure regexes + From: Robin Houston + Date: Mon, 7 May 2001 21:56:12 +0100 + Message-ID: <20010507215612.A31114@penderel> + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 10020] By: jhi on 2001/05/07 20:02:30 + Log: Drop the foobar.perl.com references for now until Simon + gets them sorted out. + Branch: perl + ! pod/perlfaq2.pod + ____________________________________________________________________________ + [ 10019] By: jhi on 2001/05/07 19:54:33 + Log: Subject: Re: RFC: changing Devel::SelfStubber to relinquish its grasp + From: Prymmer/Kahn + Date: Mon, 7 May 2001 07:47:21 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/Devel/SelfStubber.pm + ____________________________________________________________________________ + [ 10018] By: jhi on 2001/05/07 19:53:10 + Log: Subject: Re: [ID 20010506.022] Win32/Makefile problems in 5.7.1 + From: Prymmer/Kahn + Date: Sun, 6 May 2001 21:34:56 -0700 (PDT) + Message-ID: + Branch: perl + ! win32/Makefile + ____________________________________________________________________________ + [ 10017] By: jhi on 2001/05/07 19:35:10 + Log: s/WebTechnique's/WebTechniques/ + Branch: perl + ! pod/perlfaq2.pod + ____________________________________________________________________________ + [ 10016] By: jhi on 2001/05/07 12:26:29 + Log: Llama 3 updates from Randal. + Branch: perl + ! pod/perlfaq2.pod + ____________________________________________________________________________ + [ 10015] By: jhi on 2001/05/07 01:34:38 + Log: Subject: [PATCH] Help -Dt show correct pad variables + From: Benjamin Sugars + Date: Sun, 6 May 2001 12:54:13 -0400 (EDT) + Message-ID: + Branch: perl + ! embed.h embed.pl proto.h run.c + ____________________________________________________________________________ + [ 10014] By: jhi on 2001/05/07 01:23:56 + Log: Subject: [PATCH] Document C + From: Benjamin Sugars + Date: Sun, 6 May 2001 19:00:55 -0400 (EDT) + Message-ID: + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 10013] By: jhi on 2001/05/07 01:22:22 + Log: Subject: [PATCH B::Deparse] undefined folded constants + From: Robin Houston + Date: Sun, 6 May 2001 17:19:09 +0100 + Message-ID: <20010506171909.A7046@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10012] By: jhi on 2001/05/07 00:57:38 + Log: Subject: [PATCH B::Deparse] use Foo (sub {...}); + From: Robin Houston + Message-ID: <20010506164654.A6848@penderel> + Date: Sun, 6 May 2001 16:46:54 +0100 + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 10011] By: jhi on 2001/05/07 00:52:18 + Log: Subject: [PATCH t/op/my_stash.t] Naughty? + From: Robin Houston + Date: Sun, 6 May 2001 14:47:02 +0100 + Message-ID: <20010506144702.A6308@penderel> + Branch: perl + ! t/op/my_stash.t + ____________________________________________________________________________ + [ 10010] By: jhi on 2001/05/06 15:07:51 + Log: Subject: Perl book, magazine and website updates. + From: Simon Cozens + Date: Sun, 6 May 2001 16:55:36 +0100 + Message-ID: <20010506165536.A1795@netthink.co.uk> + Branch: perl + ! pod/perlbook.pod pod/perlfaq2.pod + ____________________________________________________________________________ + [ 10009] By: jhi on 2001/05/06 14:11:40 + Log: Tweaks on the Tru64 prof options. + Branch: perl + ! pod/perlhack.pod + ____________________________________________________________________________ + [ 10008] By: jhi on 2001/05/06 13:51:49 + Log: Subject: [PATCH t/pod/testp2pt.pl] Give deparse tester a chance + From: Robin Houston + Date: Sun, 6 May 2001 14:40:51 +0100 + Message-ID: <20010506144051.A6279@penderel> + Branch: perl + ! t/pod/testp2pt.pl + ____________________________________________________________________________ + [ 10007] By: jhi on 2001/05/06 13:49:31 + Log: Subject: [PATCH B::Deparse] scoping + From: Robin Houston + Date: Sun, 6 May 2001 14:36:56 +0100 + Message-ID: <20010506143656.A4006@penderel> + Branch: perl + ! ext/B/B/Deparse.pm ext/B/defsubs_h.PL t/lib/b-deparse.t + ____________________________________________________________________________ + [ 10006] By: jhi on 2001/05/06 13:24:12 + Log: Document the undefinedness of bitshifting out of range. + Branch: perl + ! pod/perlop.pod + ____________________________________________________________________________ + [ 10005] By: jhi on 2001/05/06 13:03:17 + Log: Retract #10003 and update the IDE descriptions a bit. + Branch: perl + ! pod/perlfaq3.pod + ____________________________________________________________________________ + [ 10004] By: jhi on 2001/05/06 03:02:41 + Log: Subject: [PATCH: perl@10001] win32 update (VC,Borland,gcc), nmake update + From: Prymmer/Kahn + Date: Sat, 5 May 2001 20:30:49 -0700 (PDT) + Message-ID: + Branch: perl + ! win32/Makefile win32/buildext.pl win32/config.bc + ! win32/config.gc win32/config.vc + ____________________________________________________________________________ + [ 10003] By: jhi on 2001/05/05 20:24:44 + Log: (Retracted by #10005.) + Branch: perl + ! pod/perlfaq3.pod + ____________________________________________________________________________ + [ 10002] By: jhi on 2001/05/05 19:23:36 + Log: It's "psed", not "sed". + Branch: perl + ! x2p/s2p.PL + ____________________________________________________________________________ + [ 10001] By: jhi on 2001/05/05 18:35:38 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 10000] By: jhi on 2001/05/05 18:32:15 + Log: Subject: Re: bleadperl make install fails due to "psed" + From: andreas.koenig@anima.de (Andreas J. Koenig) + Date: 05 May 2001 18:23:28 +0200 + Message-ID: + Branch: perl + ! x2p/Makefile.SH x2p/s2p.PL + ____________________________________________________________________________ + [ 9999] By: jhi on 2001/05/05 18:28:09 + Log: AUTHORS updates. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 9998] By: jhi on 2001/05/05 18:16:00 + Log: Updates on the pods related to the modules included since 5.6. + + TODO: perltodo really could use major updating. + Branch: perl + ! pod/perlfaq3.pod pod/perlfaq4.pod pod/perlfaq7.pod + ! pod/perlfaq8.pod pod/perlfilter.pod pod/perlfunc.pod + ! pod/perlop.pod pod/perlport.pod pod/perlsec.pod + ! pod/perlsyn.pod pod/perltodo.pod + ____________________________________________________________________________ + [ 9997] By: jhi on 2001/05/05 17:35:17 + Log: Hints file for AtheOS ( http://www.atheos.cx/ ), + from Kurt Skauen. + Branch: perl + + hints/atheos.sh + ! MANIFEST + ____________________________________________________________________________ + [ 9996] By: jhi on 2001/05/05 17:25:00 + Log: Add preemptive #undefs for some of the shorter and more prone + to collision regcomp.h #defines. (Background: the MASK collided + with a system header #define in Rhapsody.) + Branch: perl + ! regcomp.h + ____________________________________________________________________________ + [ 9995] By: jhi on 2001/05/05 13:24:21 + Log: Subject: [PATCH] Re: h2xs [was Re: HEAR YE, HEAR YE!] + From: Nicholas Clark + Date: Sat, 5 May 2001 14:46:39 +0100 + Message-ID: <20010505144639.O53513@plum.flirble.org> + + Add a test for the constants (if any) being processed correctly. + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9994] By: jhi on 2001/05/05 02:11:03 + Log: Subject: [PATCH & retract: perl@9973] the real fix for t/lib/b-stash.t + From: Peter Prymmer + Date: Fri, 4 May 2001 17:44:13 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/b-stash.t + ____________________________________________________________________________ + [ 9993] By: jhi on 2001/05/05 02:03:49 + Log: Subject: [PATCH: perl@9973] fix const poisioning in PerlIO_openn->fdopen->openn + From: Peter Prymmer + Date: Fri, 4 May 2001 17:29:02 -0700 (PDT) + Message-ID: + Branch: perl + ! perlio.c vms/vmsish.h + ____________________________________________________________________________ + [ 9992] By: jhi on 2001/05/04 17:21:12 + Log: Subject: [PATHC perl@9944] missing library tests: Pod::Plainer + From: Robin Barker + Date: Fri, 4 May 2001 18:13:47 +0100 (BST) + Message-Id: <200105041713.SAA14842@tempest.npl.co.uk> + Branch: perl + + t/pod/plainer.t + ! MANIFEST + ____________________________________________________________________________ + [ 9991] By: jhi on 2001/05/04 16:47:45 + Log: Subject: [PATCH perl@9944] -Wformat error from ext/re/re_comp.c + From: Robin Barker + Date: Fri, 4 May 2001 18:09:13 +0100 (BST) + Message-Id: <200105041709.SAA14835@tempest.npl.co.uk> + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 9990] By: jhi on 2001/05/04 14:37:20 + Log: Subject: [PATCH: perl@9973] let win32 run t/lib/b-stash.t + From: Prymmer/Kahn + Date: Fri, 4 May 2001 07:31:01 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/b-stash.t + ____________________________________________________________________________ + [ 9989] By: jhi on 2001/05/04 14:03:58 + Log: Introduce perl572delta, update Todo, add the missing + mention about signal safety since 5.7.1 (though this + requires verification and more details.) + Branch: perl + + pod/perl572delta.pod + ! MANIFEST Todo pod/perl571delta.pod + ____________________________________________________________________________ + [ 9988] By: jhi on 2001/05/04 12:41:51 + Log: Subject: [PATCH perl@9944] long =item + From: Robin Barker + Date: Fri, 4 May 2001 14:15:20 +0100 (BST) + Message-Id: <200105041315.OAA00436@tempest.npl.co.uk> + Branch: perl + ! ext/Time/HiRes/HiRes.pm + ____________________________________________________________________________ + [ 9987] By: jhi on 2001/05/04 12:39:19 + Log: The #9901 had removed one line essential for EBCDIC. + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 9986] By: jhi on 2001/05/04 12:30:23 + Log: Subject: cygwin/Makefile.SHs INSTALL patch + From: Reini Urban + Date: Mon, 08 Jan 2001 04:59:21 +0200 + Message-ID: <3A592D09.FD6AD35D@sbox.tu-graz.ac.at> + Branch: perl + ! cygwin/Makefile.SHs + ____________________________________________________________________________ + [ 9985] By: jhi on 2001/05/04 03:51:39 + Log: Encode/IO doc tweaks. + Branch: perl + ! ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 9984] By: jhi on 2001/05/04 03:29:34 + Log: Remove GDBM_File from the dynamic extensions for UTS, + GDBM is not a standard feature. + Branch: perl + ! hints/uts.sh + ____________________________________________________________________________ + [ 9983] By: jhi on 2001/05/04 03:22:59 + Log: Document the \pX and \p{Yz} (and \p{BidiXYZ}) classes a bit more. + Branch: perl + ! pod/perlretut.pod + ____________________________________________________________________________ + [ 9982] By: jhi on 2001/05/03 23:21:03 + Log: Subject: [PATCH] Let sv_dump understand GvSHARED + From: Benjamin Sugars + Date: Thu, 3 May 2001 16:51:07 -0400 (EDT) + Message-ID: + Branch: perl + ! dump.c + ____________________________________________________________________________ + [ 9981] By: jhi on 2001/05/03 23:20:05 + Log: Subject: [PATCH] Allow clobbering of a PerlIO::Scalar and more tests + From: Benjamin Sugars + Date: Thu, 3 May 2001 15:28:21 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/PerlIO/Scalar/Scalar.xs t/lib/io_scalar.t + ____________________________________________________________________________ + [ 9980] By: jhi on 2001/05/03 23:15:29 + Log: Integrate perlio. + Branch: perl + !> ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 9979] By: jhi on 2001/05/03 16:54:59 + Log: Install psed man page. + Branch: perl + ! installman + ____________________________________________________________________________ + [ 9978] By: jhi on 2001/05/03 16:45:58 + Log: Remove unused files; noted by Sarathy. + Branch: perl + - ext/SDBM_File/sdbm/dbm.c ext/SDBM_File/sdbm/dbm.h + ! MANIFEST + ____________________________________________________________________________ + [ 9977] By: jhi on 2001/05/03 16:42:30 + Log: Subject: [PATCH bleadperl] INSTALL patch -- space requirements + From: Andy Dougherty + Date: Thu, 3 May 2001 11:16:10 -0400 (EDT) + Message-ID: + Branch: perl + ! INSTALL + ____________________________________________________________________________ + [ 9976] By: nick on 2001/05/03 16:40:42 + Log: Allow $answer = encode($object,$text); like it says in docs. + Branch: perlio + ! ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 9975] By: nick on 2001/05/03 16:22:30 + Log: Fix latin1 etc. alias code - (bit rot?) - the @latin2iso array now seems to need + to be in scope (fair enough), and also a package variable (our) for eval to see it. + Branch: perlio + ! ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 9974] By: nick on 2001/05/03 15:48:17 + Log: Integrate mainline. + Branch: perlio + +> lib/NEXT.pm t/io/fflush.t t/lib/MyFilter.pm + +> t/lib/filter-simple.t t/lib/next.t + !> (integrate 70 files) + ____________________________________________________________________________ + [ 9973] By: jhi on 2001/05/03 13:09:09 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9972] By: jhi on 2001/05/03 12:58:33 + Log: Subject: [PATCH: perl@9945] fix handling of $Config{variables} in io/fflush.t + From: Prymmer/Kahn + Date: Wed, 2 May 2001 23:56:13 -0700 (PDT) + Message-ID: + Branch: perl + ! t/io/fflush.t + ____________________________________________________________________________ + [ 9971] By: jhi on 2001/05/03 12:57:26 + Log: Subject: [PATCH: perl@9945] two fixes for win32/FindExt.pm + From: Prymmer/Kahn + Date: Wed, 2 May 2001 23:42:33 -0700 (PDT) + Message-ID: + Branch: perl + ! win32/FindExt.pm + ____________________________________________________________________________ + [ 9970] By: jhi on 2001/05/03 02:42:46 + Log: Can't croak sans thread context, from Doug MacEachern. + Branch: perl + ! toke.c + ____________________________________________________________________________ + [ 9969] By: jhi on 2001/05/03 01:23:48 + Log: Subject: Random input test and Perl + From: Ilya Zakharevich + Date: Wed, 2 May 2001 14:35:50 -0700 (PDT) + Message-Id: <200105022135.OAA26245@fac-813-1.math.Berkeley.EDU> + Branch: perl + ! toke.c + ____________________________________________________________________________ + [ 9968] By: jhi on 2001/05/02 22:17:21 + Log: Subject: [PATCH: perl@9945] fix some misinformation in perlfunc.pod + From: Peter Prymmer + Date: Wed, 2 May 2001 15:58:18 -0700 (PDT) + Message-ID: + Branch: perl + ! pod/perlfunc.pod pod/perlport.pod + ____________________________________________________________________________ + [ 9967] By: jhi on 2001/05/02 20:12:45 + Log: Workaround for UTS compiler casting bug from Hal Morris. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 9966] By: jhi on 2001/05/02 18:31:37 + Log: Subject: Re: [PATCH 5.6.1] Multiplicity and thread fixes for VMS + From: Dan Sugalski + Date: Wed, 02 May 2001 15:23:22 -0400 + Message-Id: <5.0.2.1.0.20010502152210.01f65550@24.8.96.48> + Branch: perl + ! perl.c vms/vms.c + ____________________________________________________________________________ + [ 9965] By: jhi on 2001/05/02 18:21:29 + Log: Minor doc tweaks on endianness, closes bug 20010327.004. + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 9964] By: jhi on 2001/05/02 18:15:01 + Log: Document large files in INSTALL, document also the %x + limitation if not use64bitint, closes bug 20010326.007. + Branch: perl + ! INSTALL + ____________________________________________________________________________ + [ 9963] By: jhi on 2001/05/02 17:24:47 + Log: perlmodlib tweaks; regen pods. + Branch: perl + ! pod/Makefile.SH pod/perlmodlib.PL pod/perlmodlib.pod + ! pod/perltoc.pod + ____________________________________________________________________________ + [ 9962] By: jhi on 2001/05/02 17:14:00 + Log: Fix for a segfault, from Marc Lehmann. + Branch: perl + ! ext/POSIX/POSIX.xs ext/Time/Piece/Piece.xs + ____________________________________________________________________________ + [ 9961] By: jhi on 2001/05/02 15:55:53 + Log: Subject: [DOC PATCH bleadperl] minor nits in perlop.pod + From: "Philip Newton" + Date: Wed, 2 May 2001 18:39:03 +0200 + Message-ID: <3AF05447.15525.173B588@localhost> + Branch: perl + ! pod/perlop.pod + ____________________________________________________________________________ + [ 9960] By: jhi on 2001/05/02 15:35:37 + Log: Subject: [PATCH 5.6.1] Multiplicity and thread fixes for VMS + From: Dan Sugalski + Date: Wed, 02 May 2001 11:37:27 -0400 + Message-Id: <5.0.2.1.0.20010502112909.01f24e28@24.8.96.48> + Branch: perl + ! doio.c ext/File/Glob/bsd_glob.c perl.c perl.h pp_sys.c + ! thread.h vms/vms.c vms/vmsish.h + ____________________________________________________________________________ + [ 9959] By: jhi on 2001/05/02 15:21:08 + Log: Subject: Re: [PATCH] Allow appending on a PerlIO::Scalar + From: Benjamin Sugars + Date: Wed, 2 May 2001 10:53:11 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/PerlIO/Scalar/Scalar.xs + ____________________________________________________________________________ + [ 9958] By: jhi on 2001/05/02 15:15:53 + Log: Bug in #9915, spotted by Mike Guy. + Branch: perl + ! installperl + ____________________________________________________________________________ + [ 9957] By: jhi on 2001/05/02 13:26:01 + Log: Add a test for not griping about references as array + indices if the reference has magic in it (overloaded + methods). + Branch: perl + ! pod/perldiag.pod t/pragma/warn/pp_hot + ____________________________________________________________________________ + [ 9956] By: jhi on 2001/05/02 13:07:01 + Log: Retracted a bit too much in #9952. + Branch: perl + ! t/pragma/sub_lval.t + ____________________________________________________________________________ + [ 9955] By: jhi on 2001/05/02 13:05:38 + Log: Test for #9952. + Branch: perl + ! t/op/tie.t + ____________________________________________________________________________ + [ 9954] By: jhi on 2001/05/02 11:48:18 + Log: Additional note on the encoding example: one cannot + convert string constants in-place. + Branch: perl + ! ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 9953] By: jhi on 2001/05/02 11:43:51 + Log: Note that if you have recent enough Perl you already + have Filter::Util::Call. + Branch: perl + ! lib/Filter/Simple.pm + ____________________________________________________________________________ + [ 9952] By: jhi on 2001/05/02 11:31:53 + Log: Retract changes #8254 and #8255, causes coredump in + 'tie FH, "main"', reported by Abigail, culprit found by + Benjamin Sugars. Mirrors maintperl change #9950. + Branch: perl + ! op.c t/pragma/sub_lval.t + ____________________________________________________________________________ + [ 9951] By: jhi on 2001/05/02 11:14:29 + Log: Forgot from #9942. (Needed by t/lib/filter-simple.t.) + Branch: perl + + t/lib/MyFilter.pm + ____________________________________________________________________________ + [ 9950] By: gsar on 2001/05/02 03:17:11 + Log: revert integration of changes#8254,8255 in change#8620 (causes + a coredump in C; the idea itself may need better + rationalization) + Branch: maint-5.6/perl + ! op.c t/pragma/sub_lval.t + ____________________________________________________________________________ + [ 9949] By: gsar on 2001/05/02 02:56:32 + Log: integrate changes#9774,9814 from mainline (Unixware fixes) + + Subject: [ID 20010421.010] Perl 5.6.1 on Unixware 7 + + Subject: Re: [ID 20010421.010] Perl 5.6.1 on Unixware 7 + Branch: maint-5.6/perl + !> hints/svr5.sh + ____________________________________________________________________________ + [ 9948] By: gsar on 2001/05/02 02:49:15 + Log: pod/find.t breaks on VMS (from Craig Berry) + Branch: maint-5.6/perl + ! t/pod/find.t + ____________________________________________________________________________ + [ 9947] By: jhi on 2001/05/02 02:43:09 + Log: Add an encoding conversion example. + Branch: perl + ! ext/Encode/Encode.pm + ____________________________________________________________________________ + [ 9946] By: jhi on 2001/05/02 01:34:22 + Log: Another coat of paint but still nowhere finished. + Need to decide on the semantics of strptime(): should + strptime() be a function instead of a method? To do + the week/monthname-strptiming the i18n/l10n bullet needs + to be bitten with gusto. + Branch: perl + ! ext/Time/Piece/Piece.pm t/lib/time-piece.t + ____________________________________________________________________________ + [ 9945] By: jhi on 2001/05/01 23:40:52 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9944] By: jhi on 2001/05/01 23:33:37 + Log: Add known-to-be-tested modules to the list-to-be-skipped. + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 9943] By: jhi on 2001/05/01 23:24:40 + Log: Subject: BorlandC++ fix + From: "Vadim Konovalov" + Date: Mon, 30 Apr 2001 20:12:26 -0700 + Message-ID: <006e01c0d1ec$8fb1b8d0$406bff87@vad> + Branch: perl + ! win32/makefile.mk + ____________________________________________________________________________ + [ 9942] By: jhi on 2001/05/01 23:18:02 + Log: Update to Filter::Simple 0.60, create a test for it. + Branch: perl + + t/lib/filter-simple.t + ! MANIFEST lib/Filter/Simple.pm + ____________________________________________________________________________ + [ 9941] By: jhi on 2001/05/01 19:47:24 + Log: Subject: Re: bleadperl: s/// failure with \b and /g + From: Hugo + Date: Tue, 01 May 2001 20:12:20 +0100 + Message-Id: <200105011912.UAA06826@crypt.compulink.co.uk> + Branch: perl + ! pp_hot.c t/op/re_tests + ____________________________________________________________________________ + [ 9940] By: jhi on 2001/05/01 19:42:16 + Log: Integrate perlio. + Branch: perl + !> lib/base.pm t/lib/fields.t + ____________________________________________________________________________ + [ 9939] By: jhi on 2001/05/01 19:39:51 + Log: Subject: [PATCH] Allow appending on a PerlIO::Scalar + From: Benjamin Sugars + Date: Tue, 1 May 2001 16:32:03 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/PerlIO/Scalar/Scalar.xs t/lib/io_scalar.t + ____________________________________________________________________________ + [ 9938] By: jhi on 2001/05/01 19:34:09 + Log: Add NEXT, a pseudo-class for method redispatching. + NEXT.pm probably offers more bang-for-buck + than anything else I've ever written. + Branch: perl + + lib/NEXT.pm t/lib/next.t + ! MANIFEST + ____________________________________________________________________________ + [ 9937] By: jhi on 2001/05/01 19:21:41 + Log: Update to Switch 2.02. + Branch: perl + ! lib/Switch.pm t/lib/switch.t + ____________________________________________________________________________ + [ 9936] By: nick on 2001/05/01 19:09:21 + Log: Fix for base.pm clobbering $VERSION + Branch: perlio + ! lib/base.pm + ____________________________________________________________________________ + [ 9935] By: nick on 2001/05/01 18:54:38 + Log: Test for base.pm clobbering $VERSION. + Branch: perlio + ! t/lib/fields.t + ____________________________________________________________________________ + [ 9934] By: jhi on 2001/05/01 18:39:10 + Log: Add information about Scalar::Util::blessed. + Branch: perl + ! pod/perlobj.pod + ____________________________________________________________________________ + [ 9933] By: jhi on 2001/05/01 18:33:51 + Log: Subject: Extra UNIVERSAL documentation + From: Mike Guy + Date: Tue, 01 May 2001 20:12:11 +0100 + Message-Id: + Branch: perl + ! pod/perlobj.pod + ____________________________________________________________________________ + [ 9932] By: jhi on 2001/05/01 18:26:54 + Log: Subject: Autoflush in tests as appropriate + From: Mike Guy + Date: Tue, 01 May 2001 20:05:31 +0100 + Message-Id: + Branch: perl + ! t/lib/syslfs.t t/op/die_exit.t t/op/lex_assign.t t/op/lfs.t + ! t/op/taint.t + ____________________________________________________________________________ + [ 9931] By: jhi on 2001/05/01 18:02:29 + Log: Subject: [PATCH] Multiple consecutive writes on PerlIO::Scalar + From: Benjamin Sugars + Date: Tue, 1 May 2001 14:58:24 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/PerlIO/Scalar/Scalar.xs t/lib/io_scalar.t + ____________________________________________________________________________ + [ 9930] By: jhi on 2001/05/01 15:12:26 + Log: Subject: Re: Finally got a round tuit + From: "H.Merijn Brand" + Date: Tue, 01 May 2001 14:14:10 +0200 + Message-Id: <20010501135740.19E4.H.M.BRAND@hccnet.nl> + + The -DP part, slightly modified. + Branch: perl + ! perl.c + ____________________________________________________________________________ + [ 9929] By: jhi on 2001/05/01 14:17:15 + Log: Subject: Re: Finally got a round tuit + From: "H.Merijn Brand" + Date: Tue, 01 May 2001 16:34:06 +0200 + Message-Id: <20010501163255.19F2.H.M.BRAND@hccnet.nl> + + cpp and optimization tweaks for HP-UX. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9928] By: jhi on 2001/05/01 13:24:20 + Log: Tune the scan_num() comments to reality. + Branch: perl + ! toke.c + ____________________________________________________________________________ + [ 9927] By: jhi on 2001/05/01 13:14:01 + Log: Subject: [PATCH B::Deparse] optimised sort + From: Robin Houston + Date: Tue, 1 May 2001 14:07:12 +0100 + Message-ID: <20010501140712.A4266@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9926] By: jhi on 2001/05/01 13:10:53 + Log: Subject: [PATCH t/lib/b-deparse.t] + From: Robin Houston + Date: Tue, 1 May 2001 13:37:42 +0100 + Message-ID: <20010501133742.A4082@penderel> + Branch: perl + ! t/lib/b-deparse.t + ____________________________________________________________________________ + [ 9925] By: jhi on 2001/05/01 13:10:13 + Log: Subject: [PATCH B::Deparse] for(;;), sort + From: Robin Houston + Date: Tue, 1 May 2001 13:35:00 +0100 + Message-ID: <20010501133500.A4061@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9924] By: jhi on 2001/05/01 13:09:22 + Log: Subject: [PATCH B::Deparse] do, warn, use + From: Robin Houston + Date: Tue, 1 May 2001 13:31:03 +0100 + Message-ID: <20010501133103.A4041@penderel> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9923] By: jhi on 2001/05/01 11:45:36 + Log: Subject: [PATCH] Test autoflush on fork (Was: Should I remove something?) + From: Benjamin Sugars + Date: Mon, 30 Apr 2001 22:21:54 -0400 (EDT) + Message-ID: + Branch: perl + + t/io/fflush.t + ! MANIFEST + ____________________________________________________________________________ + [ 9922] By: jhi on 2001/05/01 11:35:42 + Log: Subject: [PATCH: perl@9917] more VMS tweaks for addn'l selfstubber tests + From: Peter Prymmer + Date: Mon, 30 Apr 2001 16:26:30 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9921] By: jhi on 2001/04/30 16:34:33 + Log: Subject: [PATCH B::Concise] suppress warning + From: Robin Houston + Date: Mon, 30 Apr 2001 16:09:49 +0100 + Message-ID: <20010430160949.A25086@penderel> + Branch: perl + ! ext/B/B/Concise.pm + ____________________________________________________________________________ + [ 9920] By: jhi on 2001/04/30 13:56:04 + Log: Strip the *markers* from #9919. + Branch: perl + ! pod/perlfaq.pod pod/perlfaq5.pod + ____________________________________________________________________________ + [ 9919] By: jhi on 2001/04/30 13:54:04 + Log: Subject: [PATCH] (perlfaq/bleadperl) append mode and locking + From: Gwyn Judd + Date: Sun, 29 Apr 2001 01:47:49 +1200 + Message-ID: <20010429014749.A4418@thislove> + Branch: perl + ! pod/perlfaq.pod pod/perlfaq5.pod + ____________________________________________________________________________ + [ 9918] By: jhi on 2001/04/30 13:13:54 + Log: More_tweakage. + Branch: perl + ! pod/perldata.pod pod/perldiag.pod + ____________________________________________________________________________ + [ 9917] By: jhi on 2001/04/30 13:01:27 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9916] By: jhi on 2001/04/30 12:57:03 + Log: T_w_e_a_k_a_g_e. + Branch: perl + ! pod/perldata.pod pod/perldiag.pod + ____________________________________________________________________________ + [ 9915] By: jhi on 2001/04/30 12:39:29 + Log: Install s2p also as psed. + + TODO: psed documentation? + Branch: perl + ! installperl + ____________________________________________________________________________ + [ 9914] By: jhi on 2001/04/30 12:29:21 + Log: Subject: Re: [ID 20010303.009] SOCKS5 work around breaks other sockets + From: Jens Hamisch + Date: Fri, 27 Apr 2001 17:00:36 +0200 + Message-ID: <20010427170036.K1372@Strawberry.COM> + + SOCKS5_VERSION_NAME is the right symbol to detect + the presence of SOCKS5. (HAS_SOCKS5_INIT is telling whether + function called socks5_init() is available, and even that is + not universal, most SOCKS5 installations use SOCKSinit()). + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 9913] By: jhi on 2001/04/30 12:22:15 + Log: Allow a zero timeout on IO::Socket accept and connect-- + though one really shouldn't do that. Based on + + Subject: Not possible to set zero second timeout on accept() in IO::Socket and company.. + From: "John Holdsworth" + Date: Sun, 4 Feb 2001 12:48:18 +0100 + Message-ID: <005a01c08ea0$5e6039d0$03ac2ac0@planc> + Branch: perl + ! ext/IO/lib/IO/Socket.pm + ____________________________________________________________________________ + [ 9912] By: jhi on 2001/04/30 11:27:27 + Log: Save the spot of regprev (see #9911) for binary compatibility; + regen API. + Branch: perl + ! embedvar.h perlapi.h thrdvar.h + ____________________________________________________________________________ + [ 9911] By: jhi on 2001/04/30 11:22:03 + Log: Subject: Re: [PATCH bleadperl] [ID 20010426.002] Word boundry regex [...] + From: Hugo + Date: Sun, 29 Apr 2001 17:09:30 +0100 + Message-Id: <200104291609.RAA17790@crypt.compulink.co.uk> + Branch: perl + ! regcomp.c regexec.c sv.c t/op/re_tests t/op/subst.t thrdvar.h + ____________________________________________________________________________ + [ 9910] By: jhi on 2001/04/30 11:15:12 + Log: Change PL_numeric_radix to PL_numeric_radix_sv (and leave in + a dummy for PL_numeric_radix); no pressing reason to break + binary compatibility; regen API. + Branch: perl + ! embedvar.h global.sym intrpvar.h objXSUB.h perl.c perl.h + ! perlapi.c perlapi.h pod/perlapi.pod sv.c util.c + ____________________________________________________________________________ + [ 9909] By: jhi on 2001/04/30 10:56:08 + Log: Subject: [DOC PATCH bleadperl] Document generation of random integers + From: Walt Mankowski + Date: Sun, 29 Apr 2001 21:53:48 -0400 + Message-ID: <20010429215348.A3971@netaxs.com> + Branch: perl + ! pod/perlfunc.pod + ____________________________________________________________________________ + [ 9908] By: jhi on 2001/04/30 10:49:40 + Log: Reintroduce #9889 to unbuffer the stderr/stdout on stdio configs. + Branch: perl + ! t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9907] By: nick on 2001/04/30 09:26:50 + Log: Integrate mainline. + Branch: perlio + !> pod/perldata.pod pod/perldiag.pod t/pragma/warn/toke toke.c + ____________________________________________________________________________ + [ 9906] By: jhi on 2001/04/29 23:24:20 + Log: Abigail spotted a thinko in #9905. + Branch: perl + ! pod/perldiag.pod + ____________________________________________________________________________ + [ 9905] By: jhi on 2001/04/29 15:55:39 + Log: Changed the underscore/undebar syntax in numeric constants; + now any grouping will do, as long as the underscores are not + consecutive (so "zero-grouping" is out), and they do not begin + or end the integer or fractional parts. + Branch: perl + ! pod/perldata.pod pod/perldiag.pod t/pragma/warn/toke toke.c + ____________________________________________________________________________ + [ 9904] By: nick on 2001/04/29 15:43:22 + Log: Integrate mainline. + Branch: perlio + +> (branch 98 files) + - lib/unicode/Block.pl + - lib/unicode/In/AlphabeticPresentationForms.pl + - lib/unicode/In/Arabic.pl + - lib/unicode/In/ArabicPresentationForms-A.pl + - lib/unicode/In/ArabicPresentationForms-B.pl + - lib/unicode/In/Armenian.pl lib/unicode/In/Arrows.pl + - lib/unicode/In/BasicLatin.pl lib/unicode/In/Bengali.pl + - lib/unicode/In/BlockElements.pl lib/unicode/In/Bopomofo.pl + - lib/unicode/In/BopomofoExtended.pl + - lib/unicode/In/BoxDrawing.pl lib/unicode/In/BraillePatterns.pl + - lib/unicode/In/CJKCompatibility.pl + - lib/unicode/In/CJKCompatibilityForms.pl + - lib/unicode/In/CJKCompatibilityIdeographs.pl + - lib/unicode/In/CJKRadicalsSupplement.pl + - lib/unicode/In/CJKSymbolsandPunctuation.pl + - lib/unicode/In/CJKUnifiedIdeographs.pl + - lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl + - lib/unicode/In/Cherokee.pl + - lib/unicode/In/CombiningDiacriticalMarks.pl + - lib/unicode/In/CombiningHalfMarks.pl + - lib/unicode/In/CombiningMarksforSymbols.pl + - lib/unicode/In/ControlPictures.pl + - lib/unicode/In/CurrencySymbols.pl lib/unicode/In/Cyrillic.pl + - lib/unicode/In/Devanagari.pl lib/unicode/In/Dingbats.pl + - lib/unicode/In/EnclosedAlphanumerics.pl + - lib/unicode/In/EnclosedCJKLettersandMonths.pl + - lib/unicode/In/Ethiopic.pl + - lib/unicode/In/GeneralPunctuation.pl + - lib/unicode/In/GeometricShapes.pl lib/unicode/In/Georgian.pl + - lib/unicode/In/Greek.pl lib/unicode/In/GreekExtended.pl + - lib/unicode/In/Gujarati.pl lib/unicode/In/Gurmukhi.pl + - lib/unicode/In/HalfwidthandFullwidthForms.pl + - lib/unicode/In/HangulCompatibilityJamo.pl + - lib/unicode/In/HangulJamo.pl lib/unicode/In/HangulSyllables.pl + - lib/unicode/In/Hebrew.pl + - lib/unicode/In/HighPrivateUseSurrogates.pl + - lib/unicode/In/HighSurrogates.pl lib/unicode/In/Hiragana.pl + - lib/unicode/In/IPAExtensions.pl + - lib/unicode/In/IdeographicDescriptionCharacters.pl + - lib/unicode/In/Kanbun.pl lib/unicode/In/KangxiRadicals.pl + - lib/unicode/In/Kannada.pl lib/unicode/In/Katakana.pl + - lib/unicode/In/Khmer.pl lib/unicode/In/Lao.pl + - lib/unicode/In/Latin-1Supplement.pl + - lib/unicode/In/LatinExtended-A.pl + - lib/unicode/In/LatinExtended-B.pl + - lib/unicode/In/LatinExtendedAdditional.pl + - lib/unicode/In/LetterlikeSymbols.pl + - lib/unicode/In/LowSurrogates.pl lib/unicode/In/Malayalam.pl + - lib/unicode/In/MathematicalOperators.pl + - lib/unicode/In/MiscellaneousSymbols.pl + - lib/unicode/In/MiscellaneousTechnical.pl + - lib/unicode/In/Mongolian.pl lib/unicode/In/Myanmar.pl + - lib/unicode/In/NumberForms.pl lib/unicode/In/Ogham.pl + - lib/unicode/In/OpticalCharacterRecognition.pl + - lib/unicode/In/Oriya.pl lib/unicode/In/PrivateUse.pl + - lib/unicode/In/Runic.pl lib/unicode/In/Sinhala.pl + - lib/unicode/In/SmallFormVariants.pl + - lib/unicode/In/SpacingModifierLetters.pl + - lib/unicode/In/Specials.pl + - lib/unicode/In/SuperscriptsandSubscripts.pl + - lib/unicode/In/Syriac.pl lib/unicode/In/Tamil.pl + - lib/unicode/In/Telugu.pl lib/unicode/In/Thaana.pl + - lib/unicode/In/Thai.pl lib/unicode/In/Tibetan.pl + - lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl + - lib/unicode/In/YiRadicals.pl lib/unicode/In/YiSyllables.pl + !> INSTALL MANIFEST doop.c embed.h embed.pl ext/B/B/Deparse.pm + !> ext/IO/lib/IO/Seekable.pm hints/hpux.sh + !> lib/unicode/mktables.PL lib/utf8_heavy.pl objXSUB.h perl.h + !> pod/perldiag.pod pod/perlunicode.pod proto.h regcomp.c + !> regexec.c t/lib/b-deparse.t t/lib/selfstubber.t t/op/pat.t + !> utf8.c win32/Makefile + ____________________________________________________________________________ + [ 9903] By: jhi on 2001/04/29 14:30:53 + Log: Subject: [PATCH: perl@9885] win32/Makefile (nmake) update + From: Prymmer/Kahn + Date: Sat, 28 Apr 2001 21:56:51 -0700 (PDT) + Message-ID: + Branch: perl + ! win32/Makefile + ____________________________________________________________________________ + [ 9902] By: jhi on 2001/04/29 02:52:44 + Log: Subject: [PATCH ext/IO/lib/IO/Seekable.pm] Doc fixes. + From: "Abigail" + Date: Sun, 29 Apr 2001 03:14:25 +0200 + Message-ID: <20010429011425.24503.qmail@foad.org> + Branch: perl + ! ext/IO/lib/IO/Seekable.pm + ____________________________________________________________________________ + [ 9901] By: jhi on 2001/04/29 02:04:46 + Log: In character classes one couldn't have 0x80..0xff characters + at the left hand side if there were 0x100.. characters in the + character class. + Branch: perl + ! doop.c embed.h embed.pl objXSUB.h proto.h regcomp.c regexec.c + ! t/op/pat.t utf8.c + ____________________________________________________________________________ + [ 9900] By: jhi on 2001/04/28 22:55:04 + Log: Forgot the latest mktables.PL from #9899. + Branch: perl + ! lib/unicode/mktables.PL + ____________________________________________________________________________ + [ 9899] By: jhi on 2001/04/28 22:53:28 + Log: Explain the \p{} and \P{} error message better and + have prettier prettyprint in In.pl. + Branch: perl + ! lib/unicode/In.pl lib/unicode/mktables.PL lib/utf8_heavy.pl + ! pod/perldiag.pod + ____________________________________________________________________________ + [ 9898] By: jhi on 2001/04/28 21:03:34 + Log: Add one possible explanation for the "Invalid [] range" error. + Branch: perl + ! pod/perldiag.pod + ____________________________________________________________________________ + [ 9897] By: jhi on 2001/04/28 17:18:26 + Log: Add a level of indirection to the implementation of \p{InFoo} + so that we don't have to have long filenames. (Nothing changes + in the user interface.) The indirection is defined in + the file lib/unicode/In.pl and it is handled in lib/utf8_heavy.pl. + Also rename some the character classes by removing '-' from + the classnames, and finally renamed Block.pl as Blocks.pl. + Branch: perl + + lib/unicode/Blocks.pl lib/unicode/In.pl lib/unicode/In/0.pl + + lib/unicode/In/1.pl lib/unicode/In/10.pl lib/unicode/In/11.pl + + lib/unicode/In/12.pl lib/unicode/In/13.pl lib/unicode/In/14.pl + + lib/unicode/In/15.pl lib/unicode/In/16.pl lib/unicode/In/17.pl + + lib/unicode/In/18.pl lib/unicode/In/19.pl lib/unicode/In/2.pl + + lib/unicode/In/20.pl lib/unicode/In/21.pl lib/unicode/In/22.pl + + lib/unicode/In/23.pl lib/unicode/In/24.pl lib/unicode/In/25.pl + + lib/unicode/In/26.pl lib/unicode/In/27.pl lib/unicode/In/28.pl + + lib/unicode/In/29.pl lib/unicode/In/3.pl lib/unicode/In/30.pl + + lib/unicode/In/31.pl lib/unicode/In/32.pl lib/unicode/In/33.pl + + lib/unicode/In/34.pl lib/unicode/In/35.pl lib/unicode/In/36.pl + + lib/unicode/In/37.pl lib/unicode/In/38.pl lib/unicode/In/39.pl + + lib/unicode/In/4.pl lib/unicode/In/40.pl lib/unicode/In/41.pl + + lib/unicode/In/42.pl lib/unicode/In/43.pl lib/unicode/In/44.pl + + lib/unicode/In/45.pl lib/unicode/In/46.pl lib/unicode/In/47.pl + + lib/unicode/In/48.pl lib/unicode/In/49.pl lib/unicode/In/5.pl + + lib/unicode/In/50.pl lib/unicode/In/51.pl lib/unicode/In/52.pl + + lib/unicode/In/53.pl lib/unicode/In/54.pl lib/unicode/In/55.pl + + lib/unicode/In/56.pl lib/unicode/In/57.pl lib/unicode/In/58.pl + + lib/unicode/In/59.pl lib/unicode/In/6.pl lib/unicode/In/60.pl + + lib/unicode/In/61.pl lib/unicode/In/62.pl lib/unicode/In/63.pl + + lib/unicode/In/64.pl lib/unicode/In/65.pl lib/unicode/In/66.pl + + lib/unicode/In/67.pl lib/unicode/In/68.pl lib/unicode/In/69.pl + + lib/unicode/In/7.pl lib/unicode/In/70.pl lib/unicode/In/71.pl + + lib/unicode/In/72.pl lib/unicode/In/73.pl lib/unicode/In/74.pl + + lib/unicode/In/75.pl lib/unicode/In/76.pl lib/unicode/In/77.pl + + lib/unicode/In/78.pl lib/unicode/In/79.pl lib/unicode/In/8.pl + + lib/unicode/In/80.pl lib/unicode/In/81.pl lib/unicode/In/82.pl + + lib/unicode/In/83.pl lib/unicode/In/84.pl lib/unicode/In/85.pl + + lib/unicode/In/86.pl lib/unicode/In/87.pl lib/unicode/In/88.pl + + lib/unicode/In/89.pl lib/unicode/In/9.pl lib/unicode/In/90.pl + + lib/unicode/In/91.pl lib/unicode/In/92.pl lib/unicode/In/93.pl + + lib/unicode/In/94.pl lib/unicode/In/95.pl + - lib/unicode/Block.pl + - lib/unicode/In/AlphabeticPresentationForms.pl + - lib/unicode/In/Arabic.pl + - lib/unicode/In/ArabicPresentationForms-A.pl + - lib/unicode/In/ArabicPresentationForms-B.pl + - lib/unicode/In/Armenian.pl lib/unicode/In/Arrows.pl + - lib/unicode/In/BasicLatin.pl lib/unicode/In/Bengali.pl + - lib/unicode/In/BlockElements.pl lib/unicode/In/Bopomofo.pl + - lib/unicode/In/BopomofoExtended.pl + - lib/unicode/In/BoxDrawing.pl lib/unicode/In/BraillePatterns.pl + - lib/unicode/In/CJKCompatibility.pl + - lib/unicode/In/CJKCompatibilityForms.pl + - lib/unicode/In/CJKCompatibilityIdeographs.pl + - lib/unicode/In/CJKRadicalsSupplement.pl + - lib/unicode/In/CJKSymbolsandPunctuation.pl + - lib/unicode/In/CJKUnifiedIdeographs.pl + - lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl + - lib/unicode/In/Cherokee.pl + - lib/unicode/In/CombiningDiacriticalMarks.pl + - lib/unicode/In/CombiningHalfMarks.pl + - lib/unicode/In/CombiningMarksforSymbols.pl + - lib/unicode/In/ControlPictures.pl + - lib/unicode/In/CurrencySymbols.pl lib/unicode/In/Cyrillic.pl + - lib/unicode/In/Devanagari.pl lib/unicode/In/Dingbats.pl + - lib/unicode/In/EnclosedAlphanumerics.pl + - lib/unicode/In/EnclosedCJKLettersandMonths.pl + - lib/unicode/In/Ethiopic.pl + - lib/unicode/In/GeneralPunctuation.pl + - lib/unicode/In/GeometricShapes.pl lib/unicode/In/Georgian.pl + - lib/unicode/In/Greek.pl lib/unicode/In/GreekExtended.pl + - lib/unicode/In/Gujarati.pl lib/unicode/In/Gurmukhi.pl + - lib/unicode/In/HalfwidthandFullwidthForms.pl + - lib/unicode/In/HangulCompatibilityJamo.pl + - lib/unicode/In/HangulJamo.pl lib/unicode/In/HangulSyllables.pl + - lib/unicode/In/Hebrew.pl + - lib/unicode/In/HighPrivateUseSurrogates.pl + - lib/unicode/In/HighSurrogates.pl lib/unicode/In/Hiragana.pl + - lib/unicode/In/IPAExtensions.pl + - lib/unicode/In/IdeographicDescriptionCharacters.pl + - lib/unicode/In/Kanbun.pl lib/unicode/In/KangxiRadicals.pl + - lib/unicode/In/Kannada.pl lib/unicode/In/Katakana.pl + - lib/unicode/In/Khmer.pl lib/unicode/In/Lao.pl + - lib/unicode/In/Latin-1Supplement.pl + - lib/unicode/In/LatinExtended-A.pl + - lib/unicode/In/LatinExtended-B.pl + - lib/unicode/In/LatinExtendedAdditional.pl + - lib/unicode/In/LetterlikeSymbols.pl + - lib/unicode/In/LowSurrogates.pl lib/unicode/In/Malayalam.pl + - lib/unicode/In/MathematicalOperators.pl + - lib/unicode/In/MiscellaneousSymbols.pl + - lib/unicode/In/MiscellaneousTechnical.pl + - lib/unicode/In/Mongolian.pl lib/unicode/In/Myanmar.pl + - lib/unicode/In/NumberForms.pl lib/unicode/In/Ogham.pl + - lib/unicode/In/OpticalCharacterRecognition.pl + - lib/unicode/In/Oriya.pl lib/unicode/In/PrivateUse.pl + - lib/unicode/In/Runic.pl lib/unicode/In/Sinhala.pl + - lib/unicode/In/SmallFormVariants.pl + - lib/unicode/In/SpacingModifierLetters.pl + - lib/unicode/In/Specials.pl + - lib/unicode/In/SuperscriptsandSubscripts.pl + - lib/unicode/In/Syriac.pl lib/unicode/In/Tamil.pl + - lib/unicode/In/Telugu.pl lib/unicode/In/Thaana.pl + - lib/unicode/In/Thai.pl lib/unicode/In/Tibetan.pl + - lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl + - lib/unicode/In/YiRadicals.pl lib/unicode/In/YiSyllables.pl + ! MANIFEST lib/unicode/mktables.PL lib/utf8_heavy.pl + ! pod/perlunicode.pod + ____________________________________________________________________________ + [ 9896] By: jhi on 2001/04/28 14:33:17 + Log: Update the information on shared library path on HP-UX. + Branch: perl + ! INSTALL + ____________________________________________________________________________ + [ 9895] By: jhi on 2001/04/28 14:32:30 + Log: Because #9894 seems to do the trick, this workaround can be removed. + Branch: perl + ! t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9894] By: jhi on 2001/04/28 14:26:13 + Log: For PerlIO flush the children's file handles (on fork/exec/system). + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 9893] By: jhi on 2001/04/28 14:23:15 + Log: Test tweak for #9891. + Branch: perl + ! t/lib/b-deparse.t + ____________________________________________________________________________ + [ 9892] By: jhi on 2001/04/28 14:10:13 + Log: New HP-UX hints from Merijn. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9891] By: jhi on 2001/04/28 14:07:27 + Log: Subject: [PATCH B::Deparse] non-block scopes + From: Robin Houston + Date: Fri, 27 Apr 2001 19:15:14 +0100 + Message-ID: <20010427191514.A30951@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9890] By: nick on 2001/04/27 19:41:25 + Log: Integrate mainline + Branch: perlio + +> t/lib/selfstubber.t + !> (integrate 50 files) + ____________________________________________________________________________ + [ 9889] By: jhi on 2001/04/27 18:23:46 + Log: Subject: Re: selfstubber test fail on bleadperl + From: Mike Guy + Date: Fri, 27 Apr 2001 19:31:18 +0100 + Message-Id: + Branch: perl + ! t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9888] By: jhi on 2001/04/27 16:20:54 + Log: Test tweak for #9886. + Branch: perl + ! t/lib/b-deparse.t + ____________________________________________________________________________ + [ 9887] By: jhi on 2001/04/27 16:16:33 + Log: Buffering issue at least in Solaris (even with perlio). + Branch: perl + ! t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9886] By: jhi on 2001/04/27 14:59:23 + Log: Subject: [PATCH B::Deparse] Human-readable pragmas &c + From: Robin Houston + Date: Fri, 27 Apr 2001 16:53:20 +0100 + Message-ID: <20010427165320.A30479@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9885] By: jhi on 2001/04/27 14:23:51 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9884] By: jhi on 2001/04/27 14:14:12 + Log: Subject: [DOC PATCH bleadperl] Document underscores in numeric literals + From: "Philip Newton" + Date: Fri, 27 Apr 2001 16:40:13 +0200 + Message-ID: <3AE9A0ED.5248.CEA127@localhost> + Branch: perl + ! pod/perldata.pod + ____________________________________________________________________________ + [ 9883] By: jhi on 2001/04/27 13:28:19 + Log: Add LOG_PERROR; prettify the "removed". + Branch: perl + ! ext/Sys/Syslog/Syslog.xs + ____________________________________________________________________________ + [ 9882] By: jhi on 2001/04/27 13:13:18 + Log: h2xs tweaks: use NV instead of double, "quote" the removed + prefixes for clarity (especially when nothing is removed), + slight pod reformats. + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9881] By: jhi on 2001/04/27 12:58:48 + Log: Don't bother creating existing directories. + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9880] By: jhi on 2001/04/27 12:45:39 + Log: Subject: MakeMaker 'make test' weirdness -- fix for h2xs provided + From: Mike Schilli + Date: Wed, 25 Apr 2001 01:29:21 -0700 + Message-id: <3AE68AE1.6A981723@perlmeister.com> + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9879] By: jhi on 2001/04/27 12:40:55 + Log: break is not yet Perl. Added the template license also to README. + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9878] By: jhi on 2001/04/27 03:08:20 + Log: Subject: Re: [ID 20010426.003] Not OK: perl v5.7.1 +DEVEL9849 on i686-linux-thread-multi-64int-ld 2.2.13 + From: Tim Jenness + Date: Thu, 26 Apr 2001 15:30:17 -1000 (HST) + Message-ID: + Branch: perl + ! t/lib/xs-typemap.t + ____________________________________________________________________________ + [ 9877] By: jhi on 2001/04/26 23:54:40 + Log: Subject: [PATCH: utils/h2xs.PL (bleadperl)] Fill in details we're likely to know. + From: "Abigail" + Date: Fri, 27 Apr 2001 01:44:28 +0200 + Message-ID: <20010426234428.19786.qmail@foad.org> + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9876] By: jhi on 2001/04/26 23:52:06 + Log: Subject: [PATCH: perl@9865] vms specific tweak to new selfstubber.t + From: Peter Prymmer + Date: Thu, 26 Apr 2001 17:41:58 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9875] By: jhi on 2001/04/26 23:48:10 + Log: Deparse nits. + Branch: perl + ! ext/B/B/Deparse.pm t/lib/b-deparse.t + ____________________________________________________________________________ + [ 9874] By: jhi on 2001/04/26 22:46:05 + Log: Document ANYOF_CLASS. + Branch: perl + ! regcomp.h + ____________________________________________________________________________ + [ 9873] By: jhi on 2001/04/26 22:35:03 + Log: Subject: Re: [PATCH @9846] dumping ANYOF + From: Hugo + Date: Thu, 26 Apr 2001 23:33:38 +0100 + Message-Id: <200104262233.XAA22352@crypt.compulink.co.uk> + Branch: perl + ! regcomp.c regcomp.h + ____________________________________________________________________________ + [ 9872] By: jhi on 2001/04/26 22:34:31 + Log: Subject: [PATCH] more for Devel::SelfStubber + From: Nicholas Clark + Date: Fri, 27 Apr 2001 00:13:52 +0100 + Message-ID: <20010427001351.K88186@plum.flirble.org> + Branch: perl + ! lib/Devel/SelfStubber.pm lib/SelfLoader.pm t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9871] By: jhi on 2001/04/26 21:59:17 + Log: Subject: [PATCH B::Deparse] formats must be flush left + From: Robin Houston + Date: Thu, 26 Apr 2001 23:54:29 +0100 + Message-ID: <20010426235429.A28747@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9870] By: jhi on 2001/04/26 21:57:37 + Log: If some of the constants are prefixes of others, + the prefixes may never get recognized. (See 20010426.006.) + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9869] By: jhi on 2001/04/26 21:50:42 + Log: Subject: [ID 20010426.006] Sys::Syslog ignores LOG_AUTH constant + From: Chris Bongaarts + Date: Thu, 26 Apr 2001 17:10:31 -0500 + Message-Id: + Branch: perl + ! ext/Sys/Syslog/Syslog.xs + ____________________________________________________________________________ + [ 9868] By: jhi on 2001/04/26 21:35:12 + Log: Further cuts and more docs from Graham Barr. + Branch: perl + ! ext/List/Util/lib/List/Util.pm + ! ext/List/Util/lib/Scalar/Util.pm + ____________________________________________________________________________ + [ 9867] By: jhi on 2001/04/26 21:18:57 + Log: Subject: [PATCH 5.7.1] DB_File-1.77 + From: "Paul Marquess" + Date: Thu, 26 Apr 2001 22:37:53 +0100 + Message-ID: <000a01c0ce99$269cc3e0$99dcfea9@bfs.phone.com> + Branch: perl + ! ext/DB_File/Changes ext/DB_File/DB_File.pm + ! ext/DB_File/DB_File.xs ext/DB_File/version.c + ____________________________________________________________________________ + [ 9866] By: jhi on 2001/04/26 21:12:31 + Log: Subject: [PATCH B::Deparse] fix easy bugs + From: Robin Houston + Date: Thu, 26 Apr 2001 23:03:33 +0100 + Message-ID: <20010426230333.A28657@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9865] By: jhi on 2001/04/26 20:26:13 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9864] By: jhi on 2001/04/26 19:27:48 + Log: Dethinko from Robin Houston. + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9863] By: jhi on 2001/04/26 19:10:35 + Log: Subject: [PATCH B::Deparse] C<$x = /(.)/> ne C<($x) = /(.)/> + From: Robin Houston + Date: Thu, 26 Apr 2001 21:08:32 +0100 + Message-ID: <20010426210832.A28419@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9862] By: jhi on 2001/04/26 19:04:23 + Log: Subject: Re: [PATCH B::Deparse] fix string uninterpretation + From: Robin Houston + Date: Thu, 26 Apr 2001 20:52:50 +0100 + Message-ID: <20010426205249.A28328@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9861] By: jhi on 2001/04/26 18:56:14 + Log: Subject: Re: [PATCH] UNIVERSAL shouldn't require Exporter + From: Mike Guy + Date: Thu, 26 Apr 2001 14:22:40 +0100 + Message-Id: + Branch: perl + ! pod/perlobj.pod + ____________________________________________________________________________ + [ 9860] By: jhi on 2001/04/26 18:46:42 + Log: Subject: Re: [PATCH B::Deparse] fix string uninterpretation + From: Robin Houston + Date: Thu, 26 Apr 2001 20:34:29 +0100 + Message-ID: <20010426203429.A28261@puffinry.freeserve.co.uk> + + Hashes do not interpolate. + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9859] By: jhi on 2001/04/26 18:43:51 + Log: Subject: The Time::Piece conspiracy unmasked!!! + From: Mike Guy + Date: Thu, 26 Apr 2001 19:02:50 +0100 + Message-Id: + + Subject: [PATCH] that's enough UNIVERSAL stuff for one day ... + From: Mike Guy + Date: Thu, 26 Apr 2001 19:08:21 +0100 + Message-Id: + + Subject: Re: [PATCH] that's enough UNIVERSAL stuff for one day ... + From: Graham Barr + Date: Thu, 26 Apr 2001 19:12:03 +0100 + Message-ID: <20010426191203.A70835@pobox.com> + + Eradicate UNIVERSAL (Mike) and remove the fallback Perl code (Graham) + Branch: perl + ! ext/List/Util/lib/List/Util.pm + ! ext/List/Util/lib/Scalar/Util.pm ext/Time/Piece/Piece.pm gv.c + ____________________________________________________________________________ + [ 9858] By: jhi on 2001/04/26 18:17:42 + Log: Subject: [PATCH t/comp/proto.t] disable correct warning + From: Robin Houston + Date: Thu, 26 Apr 2001 16:09:35 +0100 + Message-ID: <20010426160934.A27140@puffinry.freeserve.co.uk> + Branch: perl + ! t/comp/proto.t + ____________________________________________________________________________ + [ 9857] By: jhi on 2001/04/26 18:04:59 + Log: Subject: Re: [PATCH perldiag.pod] Re: [PATCH] Re: Useless use of constants other than 0,1 in void context? + From: barries + Date: Thu, 26 Apr 2001 12:01:10 -0400 + Message-ID: <20010426120110.E29698@jester.slaysys.com> + Branch: perl + ! pod/perldiag.pod + ____________________________________________________________________________ + [ 9856] By: jhi on 2001/04/26 18:03:33 + Log: Subject: [PATCH B::Deparse] fix string uninterpretation + Date: Thu, 26 Apr 2001 17:13:41 +0100 + From: Robin Houston + Message-ID: <20010426171341.A27299@puffinry.freeserve.co.uk> + + Subject: Re: [PATCH B::Deparse] fix string uninterpretation + From: Robin Houston + Date: Thu, 26 Apr 2001 18:44:29 +0100 + Message-ID: <20010426184429.A27734@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9855] By: jhi on 2001/04/26 17:56:04 + Log: Subject: [PATCH B::Deparse] filetests, open(my $x,...), warnings, formats &c + From: Robin Houston + Date: Thu, 26 Apr 2001 17:04:08 +0100 + Message-ID: <20010426170408.A27257@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9854] By: jhi on 2001/04/26 17:47:26 + Log: Subject: Re: Short test case for undef %stash:: crash + From: Benjamin Sugars + Date: Mon, 23 Apr 2001 16:59:33 -0400 (EDT) + Message-ID: + Changed and moved the perldiag entry. + Branch: perl + ! gv.c pod/perldiag.pod + ____________________________________________________________________________ + [ 9853] By: jhi on 2001/04/26 14:35:16 + Log: Beginnings of strptime(). Do not touch the wet paint. + Branch: perl + ! ext/Time/Piece/Piece.pm t/lib/time-piece.t + ____________________________________________________________________________ + [ 9852] By: jhi on 2001/04/26 13:17:21 + Log: Retract #9851, core dumps from pod2man. + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 9851] By: jhi on 2001/04/26 11:54:41 + Log: (Retracted by #9852.) + + Subject: [PATCH @9846] dumping ANYOF + From: Hugo + Date: Thu, 26 Apr 2001 05:32:38 +0100 + Message-Id: <200104260432.FAA12669@crypt.compulink.co.uk> + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 9850] By: jhi on 2001/04/26 02:34:44 + Log: If ccflags was empty the _previous_ $* containing all the + environment variables and Configure variables was used, + which lead, among other bad things, into $ccflags being your + uname -a output, which lead into test compile with cc failing, + which lead into gcc being selected, which didn't work that well + since gcc (ancient 2.8.1 in that particular box) wasn't too happy + with large files, et cetera. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9849] By: jhi on 2001/04/26 01:44:57 + Log: Make selfstubber test more portable. + Branch: perl + ! t/lib/selfstubber.t + ____________________________________________________________________________ + [ 9848] By: jhi on 2001/04/26 00:50:26 + Log: Subject: Re: [PATCH: perl@9841] fix a typo for Cwd.xs + From: Benjamin Sugars + Date: Wed, 25 Apr 2001 21:47:37 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 9847] By: jhi on 2001/04/26 00:46:58 + Log: Subject: [PATCH: perl@9841] VMS updates + From: Peter Prymmer + Date: Wed, 25 Apr 2001 18:43:27 -0700 (PDT) + Message-ID: + Branch: perl + ! README.vms configure.com vms/descrip_mms.template + ! vms/ext/filespec.t + ____________________________________________________________________________ + [ 9846] By: jhi on 2001/04/26 00:11:56 + Log: re 'debug' was broken by #9084. + Branch: perl + ! ext/re/re.xs + ____________________________________________________________________________ + [ 9845] By: jhi on 2001/04/25 22:33:17 + Log: Subject: [PATCH] test for Devel::SelfStubber + From: Nicholas Clark + Date: Thu, 26 Apr 2001 00:00:54 +0100 + Message-ID: <20010426000054.D89026@plum.flirble.org> + Branch: perl + + t/lib/selfstubber.t + ! MANIFEST lib/Devel/SelfStubber.pm t/lib/1_compile.t + ____________________________________________________________________________ + [ 9844] By: jhi on 2001/04/25 22:29:32 + Log: Subject: Re: [PATCH 5.7.1] B::Concise and extra variables + From: Paul Johnson + Date: Thu, 26 Apr 2001 00:46:08 +0200 + Message-ID: <20010426004608.H2338@pjcj.net> + Branch: perl + ! ext/B/B/Concise.pm + ____________________________________________________________________________ + [ 9843] By: jhi on 2001/04/25 22:28:28 + Log: Subject: [PATCH: perl@9841] fix a typo for Cwd.xs + From: Peter Prymmer + Date: Wed, 25 Apr 2001 16:18:44 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 9842] By: jhi on 2001/04/25 20:58:12 + Log: Subject: Re: [ID 20010422.002] 5.7.1 Breaks "use Module(version)" + From: John Peacock + Date: Wed, 25 Apr 2001 17:30:26 -0400 + Message-ID: <3AE741F2.B3217464@rowman.com> + Branch: perl + ! lib/Math/BigInt.pm t/lib/bigintpm.t + ____________________________________________________________________________ + [ 9841] By: jhi on 2001/04/25 20:07:05 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9840] By: jhi on 2001/04/25 19:56:51 + Log: Yet another HP-UX hints version from Merijn. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9839] By: jhi on 2001/04/25 19:53:04 + Log: abs_path() didn't terminate the filename correctly, + in DIRNAMLENless systems like HP-UX this would fail. + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 9838] By: jhi on 2001/04/25 16:37:26 + Log: Subject: [PATCH] Re: Useless use of constants other than 0,1 in void context? + From: Mike Guy + Date: Wed, 25 Apr 2001 18:31:47 +0100 + Message-Id: + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 9837] By: jhi on 2001/04/25 16:21:53 + Log: Subject: Re: patch to perl5db.pl (formatting of h h screen) + From: Jon Eveland + Date: Wed, 25 Apr 2001 09:42:46 -0700 (PDT) + Message-ID: <20010425164246.21611.qmail@web10405.mail.yahoo.com> + Branch: perl + ! lib/perl5db.pl + ____________________________________________________________________________ + [ 9836] By: jhi on 2001/04/25 14:17:50 + Log: Subject: [PATCH bleadperl] Porting/patching.pod: update version number format + From: "Philip Newton" + Date: Wed, 25 Apr 2001 17:05:58 +0200 + Message-ID: <3AE703F6.3234.1833C45@localhost> + Branch: perl + ! Porting/patching.pod + ____________________________________________________________________________ + [ 9835] By: jhi on 2001/04/25 13:58:07 + Log: It would seem that both ar and full_ar need to be overridden + for HP-UX to avoid the GNU ar. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9834] By: jhi on 2001/04/25 13:50:40 + Log: Subject: Re: [PATCH] foreach defelem magic should only be applied to PL_sv_undef + From: "Philip Newton" + Date: Wed, 25 Apr 2001 16:09:23 +0200 + Message-ID: <3AE6F6B3.30503.14F6DEB@localhost> + + Detypo. + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 9833] By: jhi on 2001/04/25 12:36:11 + Log: In HP-UX set ar to /usr/bin/ar but only iff none set. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9832] By: jhi on 2001/04/25 12:33:36 + Log: New version of HP-UX hints from Merijn. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9831] By: jhi on 2001/04/25 03:39:45 + Log: Reintroduce the avoidance of mixing HP-UX cc and GNU ar. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9830] By: jhi on 2001/04/25 02:53:25 + Log: The tzname[] bit is not needed by util.c -- and causes + heartburn in VMS (and it missing was probably the cause of + the Mac OS X trouble). Ouch. + Branch: perl + ! ext/POSIX/POSIX.xs util.c + ____________________________________________________________________________ + [ 9829] By: jhi on 2001/04/25 00:10:06 + Log: Metaconfig unit change for #9828. + Branch: metaconfig + ! U/compline/ccflags.U + ____________________________________________________________________________ + [ 9828] By: jhi on 2001/04/25 00:04:18 + Log: Allow setting cppflags hints. This may affect Darwin (Mac OS X) + (which is actually the reason for the change, we need to pass + cppflags='-traditional-cpp' so that Errno builds right), Dynix/ptx, + EP/IX, OS/2, and TitanOS, based on the hints files. + Branch: perl + ! Configure config_h.SH + ____________________________________________________________________________ + [ 9827] By: jhi on 2001/04/24 23:49:20 + Log: makedepend.SH patch for AmigaOS from Jan-Erik Karlsson; + the $cat must have an absolute path. + Branch: perl + ! makedepend.SH + ____________________________________________________________________________ + [ 9826] By: jhi on 2001/04/24 23:40:53 + Log: 5.7.1-updated README.amiga from Jan-Erik Karlsson. + Branch: perl + ! README.amiga + ____________________________________________________________________________ + [ 9825] By: jhi on 2001/04/24 23:35:35 + Log: Subject: [ID 20010424.002] [PATCH bleadperl] find2perl: prototypes and doexec + From: "Philip Newton" + Date: Tue, 24 Apr 2001 18:52:49 +0200 + Message-Id: <3AE5CB81.12234.1FC246F@localhost> + Branch: perl + ! x2p/find2perl.PL + ____________________________________________________________________________ + [ 9824] By: jhi on 2001/04/24 23:33:07 + Log: New HP-UX hints from Jeff and Merijn, should work with IA-64. + Some gcc specifics dropped out due to extensive rewriting; + will be put back later as needed. + Branch: perl + ! hints/hpux.sh + ____________________________________________________________________________ + [ 9823] By: jhi on 2001/04/24 23:27:57 + Log: Mac OS X patch for missing tzname definition from Paul Schinder. + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 9822] By: jhi on 2001/04/24 23:25:21 + Log: Subject: Re: [ID 20010421.032] Not OK: perl v5.7.1 +DEVEL9717 on sun4-solaris-64int-ld-stdio 2.8 (UNINSTALLED) + From: Tim Jenness + Date: Tue, 24 Apr 2001 11:29:28 -1000 (HST) + Message-ID: + Branch: perl + ! ext/XS/Typemap/Typemap.xs + ____________________________________________________________________________ + [ 9821] By: jhi on 2001/04/24 23:24:10 + Log: Subject: [PATCH: pod/perlport.pod] Updated email addresses. + From: "Abigail" + Date: Tue, 24 Apr 2001 23:12:03 +0200 + Message-ID: <20010424211203.7901.qmail@foad.org> + Branch: perl + ! pod/perlport.pod + ____________________________________________________________________________ + [ 9820] By: jhi on 2001/04/24 23:23:15 + Log: Subject: [PATCH pod/perlfaq4.pod] Time::Piece additions + From: Matt Sergeant + Date: Tue, 24 Apr 2001 16:48:17 +0100 (BST) + Message-ID: + Branch: perl + ! pod/perlfaq4.pod + ____________________________________________________________________________ + [ 9819] By: nick on 2001/04/24 18:49:43 + Log: Integrate mainline. + Branch: perlio + +> t/lib/cpan-loadme.t t/lib/cpan-vcmp.t + !> (integrate 37 files) + ____________________________________________________________________________ + [ 9818] By: jhi on 2001/04/24 14:35:23 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9817] By: jhi on 2001/04/24 14:09:17 + Log: Subject: Re: [PATCH t/lib/1_compile.t] Skipping known tested libraries + From: "Philip Newton" + Date: Tue, 24 Apr 2001 12:58:12 +0200 + Message-ID: <3AE57864.8304.B77A0A@localhost> + + plus add CPAN to the list of modules that have their own tests. + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 9816] By: jhi on 2001/04/24 14:07:03 + Log: Subject: Re: [PATCH t/lib/1_compile.t] Skipping known tested libraries + From: Michael G Schwern + Date: Sat, 21 Apr 2001 22:35:00 +0100 + Message-ID: <20010421223500.N2946@blackrider.blackstar.co.uk> + Branch: perl + ! t/lib/1_compile.t + ____________________________________________________________________________ + [ 9815] By: jhi on 2001/04/24 13:54:32 + Log: Subject: Re: [ID 20010423.006] Test failed in perl@9794 + From: Robin Houston + Date: Tue, 24 Apr 2001 15:51:18 +0100 + Message-ID: <20010424155118.A22913@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9814] By: jhi on 2001/04/24 13:17:34 + Log: Subject: Re: [ID 20010421.010] Perl 5.6.1 on Unixware 7 + From: Bill Glicker + Date: Tue, 24 Apr 2001 09:22:40 -0400 (EDT) + Message-ID: + Branch: perl + ! hints/svr5.sh + ____________________________________________________________________________ + [ 9813] By: jhi on 2001/04/24 12:54:23 + Log: Prevent path disclosure (probing for existence of filenames) + using suidperl; bug id 20010322.218. + Branch: perl + ! perl.c pod/perldiag.pod + ____________________________________________________________________________ + [ 9812] By: jhi on 2001/04/24 12:08:36 + Log: Retract #9811. + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 9811] By: jhi on 2001/04/24 11:57:35 + Log: (Retracted by #9812.) + Branch: perl + ! ext/POSIX/POSIX.xs + ____________________________________________________________________________ + [ 9810] By: jhi on 2001/04/24 03:32:35 + Log: Fix for 20010219.013, "perlio perl -we tell goes SEGV". + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 9809] By: jhi on 2001/04/24 03:16:13 + Log: The Math::BigFloat::import() was broken. + (Fixes bug id 20010422.002.) + Branch: perl + ! lib/Math/BigFloat.pm + ____________________________________________________________________________ + [ 9808] By: jhi on 2001/04/24 01:11:40 + Log: Additional dependencies; should help for parallel makes + not to fail on missing lib/lib.pm or lib/re.pm. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 9807] By: jhi on 2001/04/24 00:57:01 + Log: Update the test failure disclaimer. + Branch: perl + ! t/pragma/warn/pp_hot + ____________________________________________________________________________ + [ 9806] By: jhi on 2001/04/24 00:54:04 + Log: Add make target "install-all" which is alias for "install" + to cater for case-preserving filesystems like HFS+. + Branch: perl + ! INSTALL Makefile.SH + ____________________________________________________________________________ + [ 9805] By: jhi on 2001/04/24 00:47:28 + Log: Subject: Re: 5.6.1 darwin Configure fails to extract Makefile + From: Peter Prymmer + Date: Wed, 11 Apr 2001 10:43:52 -0700 (PDT) + Message-ID: + + (Ken William's message forwarded from macosx@perl.org) + Branch: perl + ! hints/darwin.sh + ____________________________________________________________________________ + [ 9804] By: jhi on 2001/04/23 23:57:35 + Log: Cut-and-pasto. + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 9803] By: jhi on 2001/04/23 23:52:25 + Log: More PerlIO robustness. + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 9802] By: jhi on 2001/04/23 23:43:35 + Log: Make the "STD* opened only for ..." errors more consistent. + Branch: perl + ! doio.c + ____________________________________________________________________________ + [ 9801] By: jhi on 2001/04/23 23:34:26 + Log: Test case for #9800. + Branch: perl + ! t/op/misc.t + ____________________________________________________________________________ + [ 9800] By: jhi on 2001/04/23 23:14:43 + Log: Avoid coredump on 'close STDERR; die' by making + the PerlIO calls more robust. Also use SETERRNO() + instead of errno = to be more VMS-ready. + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 9799] By: jhi on 2001/04/23 21:41:10 + Log: Subject: test for ID 20010423.002 + From: Robin Houston + Date: Mon, 23 Apr 2001 16:52:21 +0100 + Message-ID: <20010423165221.A20739@puffinry.freeserve.co.uk> + Branch: perl + ! t/op/avhv.t + ____________________________________________________________________________ + [ 9798] By: jhi on 2001/04/23 21:40:07 + Log: Subject: patch to installperl (change warn to print STDERR in sub yn) + From: David Dyck + Date: Mon, 23 Apr 2001 10:19:46 -0700 (PDT) + Message-ID: + Branch: perl + ! installperl + ____________________________________________________________________________ + [ 9797] By: jhi on 2001/04/23 21:37:56 + Log: Subject: [PATCH] Implement Cwd::abs_path in XS + From: Benjamin Sugars + Date: Mon, 23 Apr 2001 11:59:48 -0400 (EDT) + Message-ID: + Branch: perl + ! ext/Cwd/Cwd.xs lib/Cwd.pm + ____________________________________________________________________________ + [ 9796] By: jhi on 2001/04/23 21:29:24 + Log: Synchronize h2xs and pod2man some more on the documentation + templates they propose. + Branch: perl + ! pod/pod2man.PL utils/h2xs.PL + ____________________________________________________________________________ + [ 9795] By: jhi on 2001/04/23 17:30:40 + Log: Add one more naughty test for base64; make encoding logic cleaner. + Branch: perl + ! t/lib/mimeb64.t + ____________________________________________________________________________ + [ 9794] By: jhi on 2001/04/23 13:51:32 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9793] By: jhi on 2001/04/23 13:44:18 + Log: Duplicate lines. + Branch: perl + ! MANIFEST + ____________________________________________________________________________ + [ 9792] By: jhi on 2001/04/23 13:39:13 + Log: Subject: Re: PATCH 5.7.1 + From: Mark-Jason Dominus + Date: Mon, 23 Apr 2001 10:30:21 -0400 + Message-ID: <20010423143021.17335.qmail@plover.com> + Branch: perl + ! perl.h sv.c + ____________________________________________________________________________ + [ 9791] By: jhi on 2001/04/23 13:32:40 + Log: Add the CPAN.pm 1.59_54 tests. + Branch: perl + + t/lib/cpan-loadme.t t/lib/cpan-vcmp.t + ! MANIFEST + ____________________________________________________________________________ + [ 9790] By: jhi on 2001/04/23 13:21:55 + Log: Subject: Deparse nit + From: Robin Houston + Date: Mon, 23 Apr 2001 12:38:20 +0100 + Message-ID: <20010423123820.A19945@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9789] By: jhi on 2001/04/23 13:19:07 + Log: Subject: [PATCH] bug 20010423.002 + From: Robin Houston + Date: Mon, 23 Apr 2001 13:12:30 +0100 + Message-ID: <20010423131230.A20074@puffinry.freeserve.co.uk> + Branch: perl + ! pp.c + ____________________________________________________________________________ + [ 9788] By: jhi on 2001/04/23 13:02:49 + Log: Subject: PATCH [5.7.1] hv.c unused #define + From: Mark-Jason Dominus + Date: Sun, 22 Apr 2001 14:17:49 -0400 + Message-ID: <20010422181749.26976.qmail@plover.com> + Branch: perl + ! hv.c + ____________________________________________________________________________ + [ 9787] By: jhi on 2001/04/23 13:02:02 + Log: Subject: PATCH 5.7.1 + From: Mark-Jason Dominus + Date: Sun, 22 Apr 2001 15:12:57 -0400 + Message-ID: <20010422191258.6539.qmail@plover.com> + + plus Sarathy's STMT_START + STMT_END suggestion. + Branch: perl + ! perl.h + ____________________________________________________________________________ + [ 9786] By: jhi on 2001/04/23 12:53:25 + Log: Fix for + + Subject: [ID 20010423.001] perlapi documentation inconsistency (SvGROW) + From: dLux + Date: Mon, 23 Apr 2001 01:25:26 +0200 + Message-Id: + + (SvGROW really does return a char *.) + Branch: perl + ! pod/perlapi.pod sv.h + ____________________________________________________________________________ + [ 9785] By: jhi on 2001/04/23 04:34:04 + Log: Time::Piece work continues. $t->day removed since + I think it's too confusing. Now has normal and + abbreviated length weekday names and month names, + the names change with _names(), not _list(). + Now has strftime() in Perl, _strftime() is + the libc version (to which strftime() falls back + if it doesn't know the format. To do: the reverse + of strftime, strptime(), and the localisation of both. + Branch: perl + ! ext/Time/Piece/Piece.pm ext/Time/Piece/Piece.xs + ! t/lib/time-piece.t + ____________________________________________________________________________ + [ 9784] By: jhi on 2001/04/23 02:41:46 + Log: Subject: Re: [PATCH] Re: [ID 20010422.003] Core dump in overloaded bool while using ' + From: andreas.koenig@anima.de (Andreas J. Koenig) + Date: 23 Apr 2001 05:20:55 +0200 + Message-ID: + Branch: perl + ! t/pragma/overload.t + ____________________________________________________________________________ + [ 9783] By: jhi on 2001/04/22 23:32:42 + Log: Subject: [PATCH B::Deparse] Distinguish package variables, if necessary + From: Robin Houston + Date: Mon, 23 Apr 2001 00:38:18 +0100 + Message-ID: <20010423003818.A19109@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9782] By: jhi on 2001/04/22 20:55:43 + Log: Subject: [PATCH] Re: [ID 20010422.003] Core dump in overloaded bool while using ' + From: Simon Cozens + Date: Sun, 22 Apr 2001 18:47:25 +0100 + Message-ID: <20010422184725.A14411@netthink.co.uk> + Branch: perl + ! sv.c t/pragma/overload.t + ____________________________________________________________________________ + [ 9781] By: jhi on 2001/04/22 20:52:13 + Log: Subject: [PATCH] Support BEGIN blocks in B::Deparse (& more) + From: Robin Houston + Date: Sun, 22 Apr 2001 22:14:50 +0100 + Message-ID: <20010422221450.A18921@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Concise.pm ext/B/B/Deparse.pm ext/B/O.pm + ____________________________________________________________________________ + [ 9780] By: nick on 2001/04/22 20:40:31 + Log: Integrate mainline. + Branch: perlio + +> t/lib/b-debug.t t/lib/b-deparse.t t/lib/b-showlex.t + +> t/lib/b-stash.t + !> (integrate 38 files) + ____________________________________________________________________________ + [ 9779] By: jhi on 2001/04/22 15:16:03 + Log: Subject: IO::Socket::INET patch + From: andrew deryabin + Date: Sat, 21 Apr 2001 17:46:52 +0400 + Message-ID: <20010421174652.B1426@technarchy> + Branch: perl + ! ext/IO/lib/IO/Socket/INET.pm + ____________________________________________________________________________ + [ 9778] By: jhi on 2001/04/22 15:14:33 + Log: Subject: Re: ANYOF_SIZE is wrong in 5.7.1 + From: Mark-Jason Dominus + Date: Sat, 21 Apr 2001 21:27:49 -0400 + Message-ID: <20010422012749.27024.qmail@plover.com> + Branch: perl + ! regcomp.c + ____________________________________________________________________________ + [ 9777] By: jhi on 2001/04/22 15:10:51 + Log: Subject: Re: Regex debugger patch + From: Mark-Jason Dominus + Date: Sat, 21 Apr 2001 21:48:51 -0400 + Message-ID: <20010422014851.27165.qmail@plover.com> + Branch: perl + ! pod/perldebguts.pod + ____________________________________________________________________________ + [ 9776] By: jhi on 2001/04/22 15:09:48 + Log: Subject: Re: Regex debugger patch + From: Mark-Jason Dominus + Date: Sat, 21 Apr 2001 14:24:39 -0400 + Message-ID: <20010421182439.16508.qmail@plover.com> + + Regex debugger backend. + Branch: perl + ! regcomp.c regexp.h + ____________________________________________________________________________ + [ 9775] By: jhi on 2001/04/21 16:45:40 + Log: Subject: [PATCH] Typo in utf8.h + From: Jesús Quiroga + Date: Sat, 21 Apr 2001 19:25:33 +0200 + Message-Id: <5.0.2.1.1.20010421192107.01ce5a50@ix.netcorps.com> + Branch: perl + ! utf8.h + ____________________________________________________________________________ + [ 9774] By: jhi on 2001/04/21 16:43:52 + Log: Subject: [ID 20010421.010] Perl 5.6.1 on Unixware 7 + From: Joe Orton + Date: Tue, 17 Apr 2001 15:50:43 +0100 + Message-Id: <20010417155043.D19132@eu.c2.net> + Branch: perl + ! hints/svr5.sh + ____________________________________________________________________________ + [ 9773] By: jhi on 2001/04/21 15:30:15 + Log: Subject: Patch utils/h2xs.PL + From: Elaine -HFB- Ashton + Date: Sat, 21 Apr 2001 10:32:16 -0500 + Message-ID: <20010421103216.C14521@chaos.wustl.edu> + + Add MAILING list and LICENSE templates. + Branch: perl + ! utils/h2xs.PL + ____________________________________________________________________________ + [ 9772] By: jhi on 2001/04/21 15:28:36 + Log: Subject: perlfaq2.patch for 5.7.1 + From: Elaine -HFB- Ashton + Message-ID: <20010420164219.J3194@chaos.wustl.edu> + Date: Fri, 20 Apr 2001 16:42:19 -0500 + + rm an extra tab, a blurb about the xx.cpan to clarify + which countries actually have that and dejanews is history + as well as most of that nonsensical entry. + Branch: perl + ! pod/perlfaq2.pod + ____________________________________________________________________________ + [ 9771] By: jhi on 2001/04/21 15:27:17 + Log: Subject: perlfaq1.patch for 5.7.1 + From: Elaine -HFB- Ashton + Date: Fri, 20 Apr 2001 16:57:36 -0500 + Message-ID: <20010420165736.K3194@chaos.wustl.edu> + + Evil URLs must die. Especially when they are broken. + Branch: perl + ! pod/perlfaq1.pod + ____________________________________________________________________________ + [ 9770] By: jhi on 2001/04/21 15:23:38 + Log: Subject: [PATCH ext/B/B.pm and tests] B::walksymtable improperly documented? + From: Michael G Schwern + Date: Sat, 21 Apr 2001 16:11:12 +0100 + Message-ID: <20010421161112.L19736@blackrider.blackstar.co.uk> + Branch: perl + + t/lib/b-debug.t t/lib/b-deparse.t t/lib/b-showlex.t + + t/lib/b-stash.t + ! MANIFEST ext/B/B.pm t/lib/b.t + ____________________________________________________________________________ + [ 9769] By: jhi on 2001/04/21 15:03:32 + Log: Subject: [PATCH utils/h2ph.PL] Confused by "#if &__GNUC_PREREQ (2,97)" + From: Michael G Schwern + Date: Sat, 21 Apr 2001 09:48:00 +0100 + Message-ID: <20010421094759.B19736@blackrider.blackstar.co.uk> + Branch: perl + ! utils/h2ph.PL + ____________________________________________________________________________ + [ 9768] By: jhi on 2001/04/21 14:33:49 + Log: PerlIO and Encode doc cleanup and tweaks. + Branch: perl + ! ext/Encode/Encode.pm ext/PerlIO/Scalar/Scalar.pm + ! ext/PerlIO/Via/Via.pm lib/PerlIO.pm + ____________________________________________________________________________ + [ 9767] By: jhi on 2001/04/21 12:40:16 + Log: Integrate perlio. + Branch: perl + !> doio.c + ____________________________________________________________________________ + [ 9766] By: nick on 2001/04/20 18:28:35 + Log: Avoid core dump on + open(STDOUT,">",\$foo); + Branch: perlio + ! doio.c + ____________________________________________________________________________ + [ 9765] By: jhi on 2001/04/20 13:23:43 + Log: Subject: Re: [abigail@foad.org: [ID 20000901.065] -MO=Deparse and $^W and $[ in same string.] + From: Robin Houston + Date: Fri, 20 Apr 2001 14:29:22 +0100 + Message-ID: <20010420142921.A14960@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B.pm ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9764] By: jhi on 2001/04/20 13:19:33 + Log: Subject: [PATCH: perl@9742] avoid t/u-*.t test on platforms where List/Util was not built + From: Peter Prymmer + Date: Thu, 19 Apr 2001 17:40:14 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/u-blessed.t t/lib/u-dualvar.t t/lib/u-first.t + ! t/lib/u-max.t t/lib/u-maxstr.t t/lib/u-min.t t/lib/u-minstr.t + ! t/lib/u-readonly.t t/lib/u-reduce.t t/lib/u-reftype.t + ! t/lib/u-sum.t t/lib/u-tainted.t t/lib/u-weak.t + ____________________________________________________________________________ + [ 9763] By: jhi on 2001/04/20 12:36:39 + Log: Subject: Re: A new PerlIO coredump + From: Nick Ing-Simmons + Date: Fri, 20 Apr 2001 14:29:41 +0100 (BST) + Message-Id: <200104201329.OAA16021@mikado.tiuk.ti.com> + Branch: perl + ! doio.c + ____________________________________________________________________________ + [ 9762] By: jhi on 2001/04/19 23:02:30 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9761] By: jhi on 2001/04/19 22:59:19 + Log: More cleanup cleanup. + Branch: perl + ! Makefile.SH win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 9760] By: jhi on 2001/04/19 22:50:31 + Log: lib/Time is non-empty, let's not rmdir it. + Branch: perl + ! Makefile.SH + ____________________________________________________________________________ + [ 9759] By: jhi on 2001/04/19 22:36:51 + Log: Subject: Re: [abigail@foad.org: [ID 20000901.065] -MO=Deparse and $^W and $[ in same string.] + From: Robin Houston + Date: Fri, 20 Apr 2001 00:18:53 +0100 + Message-ID: <20010420001853.A13350@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9758] By: jhi on 2001/04/19 22:36:00 + Log: Subject: [PATCH: perl@9742] void close_dir portability fix for Cwd.xs + From: Peter Prymmer + Date: Thu, 19 Apr 2001 12:02:40 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/Cwd/Cwd.xs + ____________________________________________________________________________ + [ 9757] By: nick on 2001/04/19 18:53:54 + Log: Blind (untested) integrate of mainline. + Branch: perlio + +> ext/Time/Piece/Makefile.PL ext/Time/Piece/Piece.pm + +> ext/Time/Piece/Piece.xs ext/Time/Piece/README + +> ext/Time/Piece/Seconds.pm t/lib/time-piece.t + !> (integrate 53 files) + ____________________________________________________________________________ + [ 9756] By: jhi on 2001/04/19 16:59:23 + Log: Document and test Time::Piece. + Branch: perl + ! ext/POSIX/POSIX.xs ext/Time/Piece/Piece.pm + ! ext/Time/Piece/Piece.xs t/lib/time-piece.t + ____________________________________________________________________________ + [ 9755] By: jhi on 2001/04/19 12:13:29 + Log: A better fix for the \x{12345678} trouble from NI-S. + Branch: perl + ! utf8.c + ____________________________________________________________________________ + [ 9754] By: jhi on 2001/04/19 11:56:07 + Log: Subject: PATCH: Propagate low byte of hints in cop.op_private + From: Robin Houston + Date: Wed, 18 Apr 2001 17:58:33 +0100 + Message-ID: <20010418175833.B8976@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm op.c + ____________________________________________________________________________ + [ 9753] By: jhi on 2001/04/19 04:21:52 + Log: Subject: [PATCH] h2ph test suite bugfix and refactoring + From: "Kurt D. Starsinic" + Date: Thu, 19 Apr 2001 01:11:41 -0400 + Message-ID: <20010419011141.A5798@cpan.org> + Branch: perl + ! t/lib/h2ph.h t/lib/h2ph.pht utils/h2ph.PL + ____________________________________________________________________________ + [ 9752] By: jhi on 2001/04/19 02:41:10 + Log: The new time utils need to be thread-aware, too. + Branch: perl + ! util.c + ____________________________________________________________________________ + [ 9751] By: jhi on 2001/04/19 02:26:47 + Log: Compilation nit noticed by AIX compiler. + Branch: perl + ! perlio.c + ____________________________________________________________________________ + [ 9750] By: jhi on 2001/04/19 02:20:06 + Log: The new time utils need to be public. + Branch: perl + ! embed.pl + ____________________________________________________________________________ + [ 9749] By: jhi on 2001/04/19 01:42:39 + Log: Regen toc. + Branch: perl + ! pod/perltoc.pod + ____________________________________________________________________________ + [ 9748] By: jhi on 2001/04/19 01:41:10 + Log: Add Time::Piece, a slight rewrite of Time::Object, + from Matt Sergeant. + Branch: perl + + ext/Time/Piece/Makefile.PL ext/Time/Piece/Piece.pm + + ext/Time/Piece/Piece.xs ext/Time/Piece/README + + ext/Time/Piece/Seconds.pm t/lib/time-piece.t + ! MANIFEST configure.com djgpp/config.over epoc/config.sh + ! hints/uts.sh hints/uwin.sh hints/vmesa.sh win32/Makefile + ! win32/makefile.mk + ____________________________________________________________________________ + [ 9747] By: jhi on 2001/04/19 00:55:35 + Log: The new metaconfig unit from strftime. + Branch: metaconfig/U/perl + + d_strftime.U + ____________________________________________________________________________ + [ 9746] By: jhi on 2001/04/19 00:54:54 + Log: Move the strftime() wrapper from POSIX.xs to util.c + as my_strftime(), requires HAS_STRFTIME. + Branch: perl + ! Configure Porting/Glossary Porting/config.sh Porting/config_H + ! config_h.SH configure.com embed.h embed.pl epoc/config.sh + ! ext/POSIX/POSIX.xs proto.h uconfig.h uconfig.sh util.c + ! vos/config.alpha.def vos/config.alpha.h vos/config.ga.def + ! vos/config.ga.h win32/config.bc win32/config.gc + ! win32/config.vc + ____________________________________________________________________________ + [ 9745] By: jhi on 2001/04/18 23:11:03 + Log: Move the init_tm() and mini_mktime() up from POSIX.xs to util.c + in preparation of Time::Piece. + Branch: perl + ! embed.h embed.pl ext/POSIX/POSIX.xs proto.h util.c + ____________________________________________________________________________ + [ 9744] By: jhi on 2001/04/18 22:33:12 + Log: Subject: [PATCH: perl@9718] fix new exporter test to work OK on VMS + From: Peter Prymmer + Date: Wed, 18 Apr 2001 15:38:28 -0700 (PDT) + Message-ID: + Branch: perl + ! t/lib/exporter.t + ____________________________________________________________________________ + [ 9743] By: jhi on 2001/04/18 22:32:23 + Log: Subject: Fwd: pod2html leaves cache files lying around? + From: Rajesh Vaidheeswarran + Date: Tue, 17 Apr 2001 09:35:00 -0400 (EDT) + Message-Id: + Branch: perl + ! lib/Pod/Html.pm + ____________________________________________________________________________ + [ 9742] By: jhi on 2001/04/18 20:31:49 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9741] By: jhi on 2001/04/18 20:23:02 + Log: Declare hints only if needed. + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9740] By: jhi on 2001/04/18 19:06:05 + Log: Workaround for the "\x{12345678}" plus s/(.)/$1/g plus ord/length + bug noticed by Robin Houston; basically the code of detecting + value wraparound was acting differently under different compilers + and platforms. The workaround is to remove the overflow check + for now, a real fix would be to do the overflow (portably) right. + Branch: perl + ! t/op/pat.t utf8.c + ____________________________________________________________________________ + [ 9739] By: jhi on 2001/04/18 19:01:23 + Log: Subject: [PATCH B::Deparse] some pragma support + From: Robin Houston + Date: Wed, 18 Apr 2001 19:32:12 +0100 + Message-ID: <20010418193212.A9184@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9738] By: jhi on 2001/04/18 15:16:37 + Log: Subject: [PATCH] Test case for C + From: Benjamin Sugars + Date: Wed, 18 Apr 2001 10:53:44 -0400 (EDT) + Message-ID: + Branch: perl + ! t/op/glob.t + ____________________________________________________________________________ + [ 9737] By: jhi on 2001/04/18 13:24:50 + Log: Subject: [PATCH] XS::Typemap - T_OPAQUE + From: Tim Jenness + Date: Tue, 17 Apr 2001 22:49:25 -1000 (HST) + Message-ID: + Branch: perl + ! ext/XS/Typemap/Typemap.pm ext/XS/Typemap/Typemap.xs + ! ext/XS/Typemap/typemap lib/ExtUtils/typemap t/lib/xs-typemap.t + ____________________________________________________________________________ + [ 9736] By: jhi on 2001/04/18 04:15:14 + Log: The #9735 also changes the subtest 12. + Branch: perl + ! t/lib/b.t + ____________________________________________________________________________ + [ 9735] By: jhi on 2001/04/18 03:55:17 + Log: Subject: Deparse.pm of split(" ") decodes as /\s+/ (with PATCH) + From: David Dyck + Date: Tue, 17 Apr 2001 17:12:58 -0700 (PDT) + Message-ID: + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9734] By: jhi on 2001/04/18 03:54:11 + Log: Subject: [PATCH] foreach defelem magic should only be applied to PL_sv_undef + From: Gisle Aas + Date: 17 Apr 2001 19:06:45 -0700 + Message-ID: + Branch: perl + ! pp_hot.c t/op/misc.t + ____________________________________________________________________________ + [ 9733] By: jhi on 2001/04/17 22:25:22 + Log: Subject: [PATCH: ext/Cwd/Cwd.xs & ext/PerlIO/Scalar/Scalar.xs] Missing prototype behaviour + From: "Abigail" + Date: Wed, 18 Apr 2001 01:17:46 +0200 + Message-ID: <20010417231746.21657.qmail@foad.org> + Branch: perl + ! ext/Cwd/Cwd.xs ext/PerlIO/Scalar/Scalar.xs + ____________________________________________________________________________ + [ 9732] By: jhi on 2001/04/17 20:47:56 + Log: Subject: Re: Deparse - parenthesise args to undeclared subs + From: Robin Houston + Date: Tue, 17 Apr 2001 22:37:42 +0100 + Message-ID: <20010417223742.A6681@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9731] By: nick on 2001/04/17 20:46:35 + Log: Re-sync for t/lib/b.t fix + Branch: perlio + !> ext/B/B/Deparse.pm t/lib/b.t t/lib/cwd.t + ____________________________________________________________________________ + [ 9730] By: jhi on 2001/04/17 20:45:29 + Log: Subject: [PATCH B::Deparse] utf8 literal strings (and possibly a unicode/regex bug) + From: Robin Houston + Date: Tue, 17 Apr 2001 22:29:36 +0100 + Message-ID: <20010417222936.A6644@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B.xs ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9729] By: jhi on 2001/04/17 20:43:11 + Log: Subject: Deparse - parenthesise args to undeclared subs + From: Robin Houston + Date: Tue, 17 Apr 2001 21:31:05 +0100 + Message-ID: <20010417213104.A6586@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm + ____________________________________________________________________________ + [ 9728] By: jhi on 2001/04/17 18:57:30 + Log: Subject: Re: [PATCH] Fix cwd.t when libpth contains symlinks + From: Benjamin Sugars + Date: Tue, 17 Apr 2001 15:27:28 -0400 (EDT) + Message-ID: + Branch: perl + ! t/lib/cwd.t + ____________________________________________________________________________ + [ 9727] By: jhi on 2001/04/17 18:20:20 + Log: Subject: [PATCH B::Deparse] ambient pragmas + From: Robin Houston + Date: Tue, 17 Apr 2001 20:01:59 +0100 + Message-ID: <20010417200159.A4882@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B/Deparse.pm t/lib/b.t + ____________________________________________________________________________ + [ 9726] By: nick on 2001/04/17 16:33:51 + Log: Integrate mainline (t/lib/b.t fails test 2...) + Branch: perlio + +> ext/List/Util/ChangeLog ext/List/Util/Makefile.PL + +> ext/List/Util/README ext/List/Util/Util.xs + +> ext/List/Util/lib/List/Util.pm + +> ext/List/Util/lib/Scalar/Util.pm t/lib/exporter.t + +> t/lib/u-blessed.t t/lib/u-dualvar.t t/lib/u-first.t + +> t/lib/u-max.t t/lib/u-maxstr.t t/lib/u-min.t t/lib/u-minstr.t + +> t/lib/u-readonly.t t/lib/u-reduce.t t/lib/u-reftype.t + +> t/lib/u-sum.t t/lib/u-tainted.t t/lib/u-weak.t + !> (integrate 31 files) + ____________________________________________________________________________ + [ 9725] By: jhi on 2001/04/17 12:14:24 + Log: Subject: multiple B::* changes + From: Robin Houston + Date: Thu, 12 Apr 2001 20:12:27 +0100 + Message-ID: <20010412201226.A30940@puffinry.freeserve.co.uk> + Branch: perl + ! ext/B/B.pm ext/B/B/Concise.pm ext/B/B/Deparse.pm ext/B/O.pm + ____________________________________________________________________________ + [ 9724] By: jhi on 2001/04/17 11:59:05 + Log: Thread-awareness from Doug MacEachern. + Branch: perl + ! ext/List/Util/Util.xs + ____________________________________________________________________________ + [ 9723] By: jhi on 2001/04/17 11:57:41 + Log: Make the test more portable. + Branch: perl + ! t/lib/cwd.t + ____________________________________________________________________________ + [ 9722] By: jhi on 2001/04/17 11:53:50 + Log: Subject: [PATCH] Fix cwd.t when libpth contains symlinks + From: Benjamin Sugars + Date: Mon, 16 Apr 2001 22:43:29 -0400 (EDT) + Message-ID: + Branch: perl + ! t/lib/cwd.t + ____________________________________________________________________________ + [ 9721] By: jhi on 2001/04/17 11:52:17 + Log: Subject: [PATCH] Fix core dump from undef %File::Glob:: + From: Benjamin Sugars + Date: Mon, 16 Apr 2001 13:23:59 -0400 (EDT) + Message-ID: + Branch: perl + ! op.c + ____________________________________________________________________________ + [ 9720] By: jhi on 2001/04/17 11:35:42 + Log: Subject: [MacPerl-Porters] [PATCH] bsd_glob.c, gv.c fixes for Mac OS + From: Chris Nandor + Date: Tue, 17 Apr 2001 00:30:49 -0400 + Message-Id: + Branch: perl + ! ext/File/Glob/bsd_glob.c gv.c + ____________________________________________________________________________ + [ 9719] By: jhi on 2001/04/17 11:32:13 + Log: Subject: [PATCH] Tweten->West + From: Casey West + Date: Mon, 16 Apr 2001 12:11:22 -0400 + Message-ID: <20010416121122.B14554@stupid.geeknest.com> + Branch: perl + ! AUTHORS lib/Class/Struct.pm lib/Shell.pm lib/constant.pm + ! pod/perltie.pod + ____________________________________________________________________________ + [ 9718] By: jhi on 2001/04/16 03:22:52 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9717] By: jhi on 2001/04/16 03:06:28 + Log: Regen toc. + Branch: perl + ! pod/perltoc.pod + ____________________________________________________________________________ + [ 9716] By: jhi on 2001/04/16 02:58:42 + Log: Subject: [PATCH: perl@9699] updates to apidoc in utf8.c + From: Prymmer/Kahn + Date: Sun, 15 Apr 2001 20:47:45 -0700 (PDT) + Message-ID: + Branch: perl + ! utf8.c + ____________________________________________________________________________ + [ 9715] By: jhi on 2001/04/15 23:40:35 + Log: Subject: Re: Net::Ping patch, adds stream protocol + From: bronson@rinspin.com (Scott Bronson) + Date: Tue, 10 Apr 2001 23:58:33 -0700 + Message-ID: <20010410235833.N29719@rinspin.com> + Branch: perl + ! lib/Net/Ping.pm + ____________________________________________________________________________ + [ 9714] By: jhi on 2001/04/15 23:31:46 + Log: Printing out the ok messages helps successful testing. + Branch: perl + ! t/lib/time-hires.t + ____________________________________________________________________________ + [ 9713] By: jhi on 2001/04/15 21:43:24 + Log: Update Douglas Wegscheid's email. + Branch: perl + ! AUTHORS + ____________________________________________________________________________ + [ 9712] By: jhi on 2001/04/15 21:40:41 + Log: Subject: [PATCH t/lib/exporter.t lib/Exporter/Heavy.pm] Testing Exporter + From: Michael G Schwern + Date: Sat, 14 Apr 2001 22:40:50 +0100 + Message-ID: <20010414224050.A1872@blackrider.blackstar.co.uk> + Branch: perl + + t/lib/exporter.t + ! MANIFEST lib/Exporter/Heavy.pm + ____________________________________________________________________________ + [ 9711] By: jhi on 2001/04/15 21:39:21 + Log: Subject: [PATCH t/op/loopctl.t] Exit via last, part 1 + From: Michael G Schwern + Date: Sat, 14 Apr 2001 22:13:59 +0100 + Message-ID: <20010414221359.A413@blackrider.blackstar.co.uk> + Branch: perl + ! t/op/loopctl.t + ____________________________________________________________________________ + [ 9710] By: jhi on 2001/04/15 21:30:19 + Log: Subject: [PATCH t/pragma/warnings.t] Doesn't skip RCS files + From: Michael G Schwern + Date: Sat, 14 Apr 2001 22:05:32 +0100 + Message-ID: <20010414220531.A30178@blackrider.blackstar.co.uk> + Branch: perl + ! t/pragma/warnings.t + ____________________________________________________________________________ + [ 9709] By: jhi on 2001/04/15 19:34:09 + Log: Integrate changes #9706,9707 from maintperl into mainline. + + change#7210 broke .packlist generation + + ExtUtils::Installed doesn't quote regex metacharacters in paths + before using them in match; also make it work for dosish platforms + Branch: perl + !> lib/ExtUtils/Install.pm lib/ExtUtils/Installed.pm + ____________________________________________________________________________ + [ 9708] By: jhi on 2001/04/15 19:31:01 + Log: Test also the scalar aspect of getitimer(). + Branch: perl + ! t/lib/time-hires.t + ____________________________________________________________________________ + [ 9707] By: gsar on 2001/04/15 17:24:20 + Log: ExtUtils::Installed doesn't quote regex metacharacters in paths + before using them in match; also make it work for dosish platforms + Branch: maint-5.6/perl + ! lib/ExtUtils/Installed.pm + ____________________________________________________________________________ + [ 9706] By: gsar on 2001/04/15 17:21:59 + Log: change#7210 broke .packlist generation (listed only filename + rather than fully qualified path name) + Branch: maint-5.6/perl + ! lib/ExtUtils/Install.pm + ____________________________________________________________________________ + [ 9705] By: jhi on 2001/04/15 12:36:33 + Log: Add interval timer (setitimer, getitimer) support to Time::HiRes. + Branch: perl + ! ext/Time/HiRes/HiRes.pm ext/Time/HiRes/HiRes.xs + ! t/lib/time-hires.t + ____________________________________________________________________________ + [ 9704] By: jhi on 2001/04/15 10:49:08 + Log: Subject: [PATCH: perl@9622]update perlebcdic.pod with UTF tbl; tweak utf8.pm + From: Prymmer/Kahn + Date: Sat, 14 Apr 2001 21:36:24 -0700 (PDT) + Message-ID: + Branch: perl + ! lib/utf8.pm pod/perlebcdic.pod + ____________________________________________________________________________ + [ 9703] By: jhi on 2001/04/15 02:26:26 + Log: I keep forgetting to sort MANIFEST. + Branch: perl + ! MANIFEST + ____________________________________________________________________________ + [ 9702] By: jhi on 2001/04/15 02:07:47 + Log: Add Scalar-List-Utils 1.02, from Graham Barr. + Now we have blessed, reftype, tainted, first, reduce, ... + Branch: perl + + ext/List/Util/ChangeLog ext/List/Util/Makefile.PL + + ext/List/Util/README ext/List/Util/Util.xs + + ext/List/Util/lib/List/Util.pm + + ext/List/Util/lib/Scalar/Util.pm t/lib/u-blessed.t + + t/lib/u-dualvar.t t/lib/u-first.t t/lib/u-max.t + + t/lib/u-maxstr.t t/lib/u-min.t t/lib/u-minstr.t + + t/lib/u-readonly.t t/lib/u-reduce.t t/lib/u-reftype.t + + t/lib/u-sum.t t/lib/u-tainted.t t/lib/u-weak.t + ! MANIFEST + ____________________________________________________________________________ + [ 9701] By: jhi on 2001/04/14 15:05:25 + Log: Subject: RE: dprofpp.pl updates + From: Carl Eklof + Date: Thu, 12 Apr 2001 18:45:46 -0400 + Message-ID: + Branch: perl + ! utils/dprofpp.PL + ____________________________________________________________________________ + [ 9700] By: jhi on 2001/04/14 14:44:55 + Log: Do not just blindly add CR. + Branch: perl + ! Porting/makerel + ____________________________________________________________________________ + [ 9699] By: jhi on 2001/04/13 13:17:01 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h + ____________________________________________________________________________ + [ 9698] By: jhi on 2001/04/13 12:44:48 + Log: Integrate perlio. + Branch: perl + !> ext/PerlIO/Scalar/Scalar.xs + ____________________________________________________________________________ + [ 9697] By: jhi on 2001/04/13 12:29:15 + Log: Add more debug output to the test. + Branch: perl + ! t/lib/cwd.t + ____________________________________________________________________________ + [ 9696] By: nick on 2001/04/13 10:14:29 + Log: Fix core dump on binmode($fh,'Scalar') + Branch: perlio + ! ext/PerlIO/Scalar/Scalar.xs + ____________________________________________________________________________ + [ 9695] By: nick on 2001/04/13 09:05:42 + Log: Integrate mainline + Branch: perlio + +> ext/Time/HiRes/Changes ext/Time/HiRes/HiRes.pm + +> ext/Time/HiRes/HiRes.xs ext/Time/HiRes/Makefile.PL + +> t/lib/time-hires.t + !> AUTHORS MANIFEST Makefile.SH Todo-5.6 configure.com + !> ext/Digest/MD5/MD5.xs ext/File/Glob/Glob.pm + !> ext/File/Glob/Glob.xs ext/File/Glob/bsd_glob.c + !> ext/File/Glob/bsd_glob.h ext/MIME/Base64/Base64.xs + !> hints/uts.sh hints/vmesa.sh lib/Devel/SelfStubber.pm opcode.pl + !> pod/perlfaq5.pod pp.c regexec.c t/comp/proto.t + !> t/lib/md5-file.t t/op/pat.t win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 9694] By: jhi on 2001/04/12 22:23:35 + Log: Integrate change #9693 from maintperl into mainline. + + $VERSION and Version() on the same line provokes a warning from + CPAN.pm (from Jonathan Leffler ) + Branch: perl + !> lib/Devel/SelfStubber.pm + ____________________________________________________________________________ + [ 9693] By: gsar on 2001/04/12 21:55:56 + Log: $VERSION and Version() on the same line provokes a warning from + CPAN.pm (from Jonathan Leffler ) + Branch: maint-5.6/perl + ! lib/Devel/SelfStubber.pm + ____________________________________________________________________________ + [ 9692] By: jhi on 2001/04/12 13:54:00 + Log: This is at least 5.005. + Branch: perl + ! ext/Time/HiRes/HiRes.xs + ____________________________________________________________________________ + [ 9691] By: jhi on 2001/04/12 13:37:20 + Log: Non-UNIX platforms extensions update. (Well, UTS is UNIX.) + Branch: perl + ! Makefile.SH configure.com hints/uts.sh hints/vmesa.sh + ! win32/Makefile win32/makefile.mk + ____________________________________________________________________________ + [ 9690] By: jhi on 2001/04/12 01:34:46 + Log: Integrate Time::Hires 1.20 from Douglas E. Wegscheid. + Branch: perl + + ext/Time/HiRes/Changes ext/Time/HiRes/HiRes.pm + + ext/Time/HiRes/HiRes.xs ext/Time/HiRes/Makefile.PL + + t/lib/time-hires.t + ! MANIFEST + ____________________________________________________________________________ + [ 9689] By: jhi on 2001/04/12 00:28:39 + Log: Subject: [PATCH] Digest::MD5 on UTF8 strings + From: Gisle Aas + Date: 11 Apr 2001 16:36:11 -0700 + Message-ID: + Branch: perl + ! ext/Digest/MD5/MD5.xs t/lib/md5-file.t + ____________________________________________________________________________ + [ 9688] By: jhi on 2001/04/12 00:27:39 + Log: Subject: Re: [PATCH] [ID 20010410.001] Not OK: perl v5.7.1 on i386-freebsd 4.3-rc (UNINSTALLED) + From: Gisle Aas + Date: 11 Apr 2001 11:13:24 -0700 + Message-ID: + Branch: perl + ! ext/MIME/Base64/Base64.xs + ____________________________________________________________________________ + [ 9687] By: jhi on 2001/04/11 19:51:47 + Log: Slight update on the Todo list. (Should integrate to Todo?) + Branch: perl + ! Todo-5.6 + ____________________________________________________________________________ + [ 9686] By: jhi on 2001/04/11 16:54:25 + Log: Subject: [PATCH opcode.pl] Documentation of table format + From: Simon Cozens + Date: Wed, 11 Apr 2001 12:59:31 +0100 + Message-ID: <20010411125931.A25681@netthink.co.uk> + Branch: perl + ! opcode.pl + ____________________________________________________________________________ + [ 9685] By: jhi on 2001/04/11 16:53:15 + Log: Subject: [PATCH] prototype("CORE::recv") + From: Simon Cozens + Date: Wed, 11 Apr 2001 13:24:35 +0100 + Message-ID: <20010411132435.A26169@netthink.co.uk> + Branch: perl + ! pp.c t/comp/proto.t + ____________________________________________________________________________ + [ 9684] By: jhi on 2001/04/11 16:47:13 + Log: FAQ (and AUTHORS) update from Dan Carson: the information + was several years obsolete, Term::Readkey has been updated + to have the functionality. + Branch: perl + ! AUTHORS pod/perlfaq5.pod + ____________________________________________________________________________ + [ 9683] By: jhi on 2001/04/11 12:15:46 + Log: Subject: Re: [PATCH] [ID 20010410.001] Not OK: perl v5.7.1 on i386-freebsd 4.3-rc (UNINSTALLED) + From: Calle Dybedahl + Date: 10 Apr 2001 16:44:16 +0200 + Message-ID: <86d7akbyrj.fsf@tezcatlipoca.algonet.se> + Branch: perl + ! ext/MIME/Base64/Base64.xs + ____________________________________________________________________________ + [ 9682] By: jhi on 2001/04/11 12:12:26 + Log: A more minimal fix for 20010410.006 from Hugo. + Branch: perl + ! regexec.c + ____________________________________________________________________________ + [ 9681] By: jhi on 2001/04/11 11:34:23 + Log: Integrate changes #9678,9679 from maintline into mainperl. + + addendum to change#9676 + + up $File::Glob::VERSION; add a note pointing out the version of + the OpenBSD glob bsd_glob.c resembles + Branch: perl + !> ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c + !> ext/File/Glob/bsd_glob.h + ____________________________________________________________________________ + [ 9680] By: jhi on 2001/04/11 11:30:38 + Log: Bad test numbering in integrate in #9677. + Fixes ID 20010411.001. + Branch: perl + ! t/op/pat.t + ____________________________________________________________________________ + [ 9679] By: gsar on 2001/04/11 03:38:40 + Log: up $File::Glob::VERSION; add a note pointing out the version of + the OpenBSD glob bsd_glob.c resembles + Branch: maint-5.6/perl + ! ext/File/Glob/Glob.pm ext/File/Glob/bsd_glob.c + ! ext/File/Glob/bsd_glob.h + ____________________________________________________________________________ + [ 9678] By: gsar on 2001/04/11 03:09:48 + Log: addendum to change#9676: some missing changes from OpenBSD glob.c + revision 1.8.10.1 found here: + + http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/gen/glob.c + Branch: maint-5.6/perl + ! ext/File/Glob/bsd_glob.c + ____________________________________________________________________________ + [ 9677] By: jhi on 2001/04/11 02:54:39 + Log: Integrate changes #9675,9676 from maintperl into mainline. + + fix for bug 20010410.006, undo change#7115 + + port the OpenBSD glob() security patch + Branch: perl + !> ext/File/Glob/Glob.pm ext/File/Glob/Glob.xs + !> ext/File/Glob/bsd_glob.c ext/File/Glob/bsd_glob.h regexec.c + !> t/op/pat.t + ____________________________________________________________________________ + [ 9676] By: gsar on 2001/04/11 02:19:02 + Log: port the glob() security patch found at: + + ftp://ftp.openbsd.org/pub/OpenBSD/patches/2.8/common/025_glob.patch + + CERT advisory for the issue is here: + + http://www.cert.org/advisories/CA-2001-07.html + + Note that the security scare is only relevant for those who are + foolish enough to build suidperl (which is now officially discouraged) + Branch: maint-5.6/perl + ! ext/File/Glob/Glob.pm ext/File/Glob/Glob.xs + ! ext/File/Glob/bsd_glob.c ext/File/Glob/bsd_glob.h + ____________________________________________________________________________ + [ 9675] By: gsar on 2001/04/10 23:52:11 + Log: fix for bug 20010410.006 + + undo change#7115 (came into maint-5.6 as change#8156) + + add tests to keep it from coming back + Branch: maint-5.6/perl + ! regexec.c t/op/pat.t + ____________________________________________________________________________ + [ 9674] By: nick on 2001/04/10 20:39:31 + Log: Integrate mainline + Branch: perlio + +> Porting/testall.atom + !> MANIFEST t/lib/lc-all.t t/lib/lc-constants.t + !> t/lib/lc-country.t t/lib/lc-currency.t t/lib/lc-language.t + !> t/lib/lc-uk.t t/pod/find.t + ____________________________________________________________________________ + [ 9673] By: nick on 2001/04/10 18:46:14 + Log: Integrate against change 9670 aka perl-5.7.1 + Branch: perlio + +> jpl/ChangeLog jpl/README.JUST-JNI jpl/docs/Tutorial.pod + !> (integrate 53 files) + ____________________________________________________________________________ + [ 9672] By: jhi on 2001/04/10 13:45:01 + Log: Add a script for doing cumulative profile of the test suite. + (Requires ATOM, that is, Tru64.) + Branch: perl + + Porting/testall.atom + ! MANIFEST + ____________________________________________________________________________ + [ 9671] By: jhi on 2001/04/10 12:38:53 + Log: Missing std block. + Branch: perl + ! t/lib/lc-all.t t/lib/lc-constants.t t/lib/lc-country.t + ! t/lib/lc-currency.t t/lib/lc-language.t t/lib/lc-uk.t + ! t/pod/find.t + ____________________________________________________________________________ + [ 9670] By: jhi on 2001/04/10 01:25:58 + Log: This is 5.7.1. + Branch: perl + ! patchlevel.h + ____________________________________________________________________________ + [ 9669] By: jhi on 2001/04/10 01:09:14 + Log: Update Changes. + Branch: perl + ! Changes patchlevel.h ____________________________________________________________________________ [ 9668] By: jhi on 2001/04/10 01:00:38 Log: Regen toc. diff -c 'perl-5.7.1/Configure' 'perl-5.7.2/Configure' Index: ./Configure Prereq: 3.0.1.9 *** ./Configure Sun Apr 8 02:04:56 2001 --- ./Configure Fri Jul 13 03:14:40 2001 *************** *** 20,26 **** # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $ # ! # Generated on Sun Apr 8 02:03:47 EET DST 2001 [metaconfig 3.0 PL70] # (with additional metaconfig patches by perlbug@perl.org) cat >c1$$ <c1$$ <try ! $eunicefix try ! chmod +x try ! ./try > today if test -s today; then sharpbang='#!' else ! echo "#! $xcat" > try ! $eunicefix try ! chmod +x try ! ./try > today if test -s today; then sharpbang='#! ' else --- 1131,1147 ---- spitshell=cat xcat=/bin/cat test -f $xcat || xcat=/usr/bin/cat ! echo "#!$xcat" >sharp ! $eunicefix sharp ! chmod +x sharp ! ./sharp > today if test -s today; then sharpbang='#!' else ! echo "#! $xcat" > sharp ! $eunicefix sharp ! chmod +x sharp ! ./sharp > today if test -s today; then sharpbang='#! ' else *************** *** 1135,1141 **** echo "I presume that if # doesn't work, #! won't work either!" sharpbang=': use ' fi ! rm -f try today : figure out how to guarantee sh startup case "$startsh" in --- 1161,1167 ---- echo "I presume that if # doesn't work, #! won't work either!" sharpbang=': use ' fi ! rm -f sharp today : figure out how to guarantee sh startup case "$startsh" in *************** *** 1142,1162 **** '') startsh=${sharpbang}${sh} ;; *) esac ! cat >try <sharp <>cmdline.opt < cmdl.opt + $arg + EOC + arg_exp=`cat cmdl.opt` + args_exp="$args_exp$args_sep'$arg_exp'" argn=`expr $argn + 1` + args_sep=' ' done + # args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@" + # used by ./hints/os2.sh + rm -f cmdl.opt : produce awk script to parse command line options cat >options.awk <<'EOF' *************** *** 1498,1507 **** : script used to extract .SH files with variable substitutions cat >extract <<'EOS' ! CONFIGDOTSH=true echo "Doing variable substitutions on .SH files..." ! if test -f $src/MANIFEST; then ! set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'` else echo "(Looking for .SH files under the source directory.)" set x `(cd $src; find . -name "*.SH" -print)` --- 1536,1545 ---- : script used to extract .SH files with variable substitutions cat >extract <<'EOS' ! PERL_CONFIG_SH=true echo "Doing variable substitutions on .SH files..." ! if test -f MANIFEST; then ! set x `awk '{print $1}' < MANIFEST | grep '\.SH$'` else echo "(Looking for .SH files under the source directory.)" set x `(cd $src; find . -name "*.SH" -print)` *************** *** 1584,1590 **** echo " " . UU/extract rm -rf UU ! echo "Done." exit 0 ;; esac --- 1622,1628 ---- echo " " . UU/extract rm -rf UU ! echo "Extraction done." exit 0 ;; esac *************** *** 1975,1980 **** --- 2013,2019 ---- loclist=" awk cat + chmod comm cp echo *************** *** 2141,2147 **** return 0; } EOM ! if $cc -o try $ccflags try.c; then : else echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4 --- 2180,2186 ---- return 0; } EOM ! if $cc -o try $ccflags $ldflags try.c; then : else echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4 *************** *** 2288,2293 **** --- 2327,2576 ---- ;; esac + + case "$usecrosscompile" in + $define|true|[yY]*) + $echo "Cross-compiling..." + croak='' + case "$cc" in + *-*-gcc) # A cross-compiling gcc, probably. + targetarch=`$echo $cc|$sed 's/-gcc$//'` + ar=$targetarch-ar + # leave out ld, choosing it is more complex + nm=$targetarch-nm + ranlib=$targetarch-ranlib + $echo 'extern int foo;' > try.c + set X `$cc -v -E try.c 2>&1 | $awk '/^#include &4 + for i in $*; do + j="`$echo $i|$sed 's,/include$,/lib,'`" + if $test -d $j; then + libpth="$libpth $j" + fi + done + libpth="`$echo $libpth|$sed 's/^ //'`" + echo "Guessing libpth '$libpth'." >&4 + fi + $rm -f try.c + ;; + esac + case "$targetarch" in + '') echo "Targetarch not defined." >&4; croak=y ;; + *) echo "Using targetarch $targetarch." >&4 ;; + esac + case "$incpth" in + '') echo "Incpth not defined." >&4; croak=y ;; + *) echo "Using incpth '$incpth'." >&4 ;; + esac + case "$libpth" in + '') echo "Libpth not defined." >&4; croak=y ;; + *) echo "Using libpth '$libpth'." >&4 ;; + esac + case "$usrinc" in + '') for i in $incpth; do + if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then + usrinc=$i + echo "Guessing usrinc $usrinc." >&4 + break + fi + done + case "$usrinc" in + '') echo "Usrinc not defined." >&4; croak=y ;; + esac + ;; + *) echo "Using usrinc $usrinc." >&4 ;; + esac + case "$targethost" in + '') echo "Targethost not defined." >&4; croak=y ;; + *) echo "Using targethost $targethost." >&4 + esac + locincpth=' ' + loclibpth=' ' + case "$croak" in + y) echo "Cannot continue, aborting." >&4; exit 1 ;; + esac + case "$src" in + /*) run=$src/Cross/run + targetmkdir=$src/Cross/mkdir + to=$src/Cross/to + from=$src/Cross/from + ;; + *) pwd=`$test -f ../Configure & cd ..; pwd` + run=$pwd/Cross/run + targetmkdir=$pwd/Cross/mkdir + to=$pwd/Cross/to + from=$pwd/Cross/from + ;; + esac + case "$targetrun" in + '') targetrun=ssh ;; + esac + case "$targetto" in + '') targetto=scp ;; + esac + case "$targetfrom" in + '') targetfrom=scp ;; + esac + run=$run-$targetrun + to=$to-$targetto + from=$from-$targetfrom + case "$targetdir" in + '') targetdir=/tmp + echo "Guessing targetdir $targetdir." >&4 + ;; + esac + case "$targetuser" in + '') targetuser=root + echo "Guessing targetuser $targetuser." >&4 + ;; + esac + case "$targetfrom" in + scp) q=-q ;; + *) q='' ;; + esac + case "$targetrun" in + ssh|rsh) + cat >$run <&4 + exit 1 + ;; + esac + case "$targetmkdir" in + */Cross/mkdir) + cat >$targetmkdir <&4 + exit 1 + ;; + esac + case "$targetto" in + scp|rcp) + cat >$to <$to <&4 + exit 1 + ;; + esac + case "$targetfrom" in + scp|rcp) + cat >$from <$from <&4 + exit 1 + ;; + esac + if $test ! -f $run; then + echo "Target 'run' script '$run' not found." >&4 + else + $chmod a+rx $run + fi + if $test ! -f $to; then + echo "Target 'to' script '$to' not found." >&4 + else + $chmod a+rx $to + fi + if $test ! -f $from; then + echo "Target 'from' script '$from' not found." >&4 + else + $chmod a+rx $from + fi + if $test ! -f $run -o ! -f $to -o ! -f $from; then + exit 1 + fi + cat >&4 </dev/null`" in *************** *** 2682,2687 **** --- 2965,2978 ---- fi fi + case "$targetarch" in + '') ;; + *) hostarch=$osname + osname=`echo $targetarch|sed 's,^[^-]*-,,'` + osvers='' + ;; + esac + : Now look for a hint file osname_osvers, unless one has been : specified already. case "$hintfile" in *************** *** 2756,2762 **** elif $test -f $src/hints/$file.sh; then . $src/hints/$file.sh $cat $src/hints/$file.sh >> UU/config.sh ! elif $test X$tans = X -o X$tans = Xnone ; then : nothing else : Give one chance to correct a possible typo. --- 3047,3053 ---- elif $test -f $src/hints/$file.sh; then . $src/hints/$file.sh $cat $src/hints/$file.sh >> UU/config.sh ! elif $test X"$tans" = X -o X"$tans" = Xnone ; then : nothing else : Give one chance to correct a possible typo. *************** *** 3033,3038 **** --- 3324,3340 ---- set usemultiplicity eval $setvar + + case "$usemorebits" in + "$define"|true|[yY]*) + use64bitint="$define" + uselongdouble="$define" + usemorebits="$define" + ;; + *) usemorebits="$undef" + ;; + esac + : make some quick guesses about what we are up against echo " " $echo $n "Hmm... $c" *************** *** 3145,3151 **** echo " " echo "Checking for GNU cc in disguise and/or its version number..." >&4 ! $cat >gccvers.c < int main() { #ifdef __GNUC__ --- 3447,3453 ---- echo " " echo "Checking for GNU cc in disguise and/or its version number..." >&4 ! $cat >try.c < int main() { #ifdef __GNUC__ *************** *** 3158,3165 **** exit(0); } EOM ! if $cc -o gccvers $ccflags $ldflags gccvers.c; then ! gccversion=`./gccvers` case "$gccversion" in '') echo "You are not using GNU cc." ;; *) echo "You are using GNU cc $gccversion." --- 3460,3467 ---- exit(0); } EOM ! if $cc -o try $ccflags $ldflags try.c; then ! gccversion=`$run ./try` case "$gccversion" in '') echo "You are not using GNU cc." ;; *) echo "You are using GNU cc $gccversion." *************** *** 3177,3183 **** ;; esac fi ! $rm -f gccvers* case "$gccversion" in 1*) cpp=`./loc gcc-cpp $cpp $pth` ;; esac --- 3479,3485 ---- ;; esac fi ! $rm -f try try.* case "$gccversion" in 1*) cpp=`./loc gcc-cpp $cpp $pth` ;; esac *************** *** 3216,3369 **** '') ccname="$cc" ;; esac ! : see how we invoke the C preprocessor ! echo " " ! echo "Now, how can we feed standard input to your C preprocessor..." >&4 ! cat <<'EOT' >testcpp.c ! #define ABC abc ! #define XYZ xyz ! ABC.XYZ ! EOT ! cd .. ! if test ! -f cppstdin; then ! if test "X$osname" = "Xaix" -a "X$gccversion" = X; then ! # AIX cc -E doesn't show the absolute headerfile ! # locations but we'll cheat by using the -M flag. ! echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin ! else ! echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin ! fi ! else ! echo "Keeping your $hint cppstdin wrapper." ! fi ! chmod 755 cppstdin ! wrapper=`pwd`/cppstdin ! ok='false' ! cd UU ! ! if $test "X$cppstdin" != "X" && \ ! $cppstdin $cppminus testcpp.out 2>&1 && \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ! then ! echo "You used to use $cppstdin $cppminus so we'll use that again." ! case "$cpprun" in ! '') echo "But let's see if we can live without a wrapper..." ;; ! *) ! if $cpprun $cpplast testcpp.out 2>&1 && \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ! then ! echo "(And we'll use $cpprun $cpplast to preprocess directly.)" ! ok='true' ! else ! echo "(However, $cpprun $cpplast does not work, let's see...)" ! fi ! ;; ! esac ! else ! case "$cppstdin" in ! '') ;; ! *) ! echo "Good old $cppstdin $cppminus does not seem to be of any help..." ! ;; ! esac ! fi ! ! if $ok; then ! : nothing ! elif echo 'Maybe "'"$cc"' -E" will work...'; \ ! $cc -E testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "Yup, it does." ! x_cpp="$cc -E" ! x_minus=''; ! elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \ ! $cc -E - testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "Yup, it does." ! x_cpp="$cc -E" ! x_minus='-'; ! elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \ ! $cc -P testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "Yipee, that works!" ! x_cpp="$cc -P" ! x_minus=''; ! elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \ ! $cc -P - testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "At long last!" ! x_cpp="$cc -P" ! x_minus='-'; ! elif echo 'No such luck, maybe "'$cpp'" will work...'; \ ! $cpp testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "It works!" ! x_cpp="$cpp" ! x_minus=''; ! elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \ ! $cpp - testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "Hooray, it works! I was beginning to wonder." ! x_cpp="$cpp" ! x_minus='-'; ! elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \ ! $wrapper testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! x_cpp="$wrapper" ! x_minus='' ! echo "Eureka!" ! else ! dflt='' ! rp="No dice. I can't find a C preprocessor. Name one:" ! . ./myread ! x_cpp="$ans" ! x_minus='' ! $x_cpp testcpp.out 2>&1 ! if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then ! echo "OK, that will do." >&4 ! else ! echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4 ! exit 1 ! fi ! fi ! ! case "$ok" in ! false) ! cppstdin="$x_cpp" ! cppminus="$x_minus" ! cpprun="$x_cpp" ! cpplast="$x_minus" ! set X $x_cpp ! shift ! case "$1" in ! "$cpp") ! echo "Perhaps can we force $cc -E using a wrapper..." ! if $wrapper testcpp.out 2>&1; \ ! $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ! then ! echo "Yup, we can." ! cppstdin="$wrapper" ! cppminus=''; ! else ! echo "Nope, we'll have to live without it..." ! fi ! ;; ! esac ! case "$cpprun" in ! "$wrapper") ! cpprun='' ! cpplast='' ! ;; ! esac ! ;; esac - case "$cppstdin" in - "$wrapper"|'cppstdin') ;; - *) $rm -f $wrapper;; - esac - $rm -f testcpp.c testcpp.out - : decide how portable to be. Allow command line overrides. case "$d_portable" in "$undef") ;; --- 3518,3532 ---- '') ccname="$cc" ;; esac ! case "$gccversion" in ! '') ;; ! *) case "$ccflags" in ! *-Wall*) ;; ! *) ccflags="$ccflags -Wall" ;; ! esac ! ;; esac : decide how portable to be. Allow command line overrides. case "$d_portable" in "$undef") ;; *************** *** 3690,3695 **** --- 3853,4006 ---- ;; esac + : see how we invoke the C preprocessor + echo " " + echo "Now, how can we feed standard input to your C preprocessor..." >&4 + cat <<'EOT' >testcpp.c + #define ABC abc + #define XYZ xyz + ABC.XYZ + EOT + cd .. + if test ! -f cppstdin; then + if test "X$osname" = "Xaix" -a "X$gccversion" = X; then + # AIX cc -E doesn't show the absolute headerfile + # locations but we'll cheat by using the -M flag. + echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; test -s .$$.u && awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' > cppstdin + else + echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin + fi + else + echo "Keeping your $hint cppstdin wrapper." + fi + chmod 755 cppstdin + wrapper=`pwd`/cppstdin + ok='false' + cd UU + + if $test "X$cppstdin" != "X" && \ + $cppstdin $cppminus testcpp.out 2>&1 && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 + then + echo "You used to use $cppstdin $cppminus so we'll use that again." + case "$cpprun" in + '') echo "But let's see if we can live without a wrapper..." ;; + *) + if $cpprun $cpplast testcpp.out 2>&1 && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 + then + echo "(And we'll use $cpprun $cpplast to preprocess directly.)" + ok='true' + else + echo "(However, $cpprun $cpplast does not work, let's see...)" + fi + ;; + esac + else + case "$cppstdin" in + '') ;; + *) + echo "Good old $cppstdin $cppminus does not seem to be of any help..." + ;; + esac + fi + + if $ok; then + : nothing + elif echo 'Maybe "'"$cc"' -E" will work...'; \ + $cc -E testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yup, it does." + x_cpp="$cc -E" + x_minus=''; + elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \ + $cc -E - testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yup, it does." + x_cpp="$cc -E" + x_minus='-'; + elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \ + $cc -P testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yipee, that works!" + x_cpp="$cc -P" + x_minus=''; + elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \ + $cc -P - testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "At long last!" + x_cpp="$cc -P" + x_minus='-'; + elif echo 'No such luck, maybe "'$cpp'" will work...'; \ + $cpp testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "It works!" + x_cpp="$cpp" + x_minus=''; + elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \ + $cpp - testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Hooray, it works! I was beginning to wonder." + x_cpp="$cpp" + x_minus='-'; + elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \ + $wrapper testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + x_cpp="$wrapper" + x_minus='' + echo "Eureka!" + else + dflt='' + rp="No dice. I can't find a C preprocessor. Name one:" + . ./myread + x_cpp="$ans" + x_minus='' + $x_cpp testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "OK, that will do." >&4 + else + echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4 + exit 1 + fi + fi + + case "$ok" in + false) + cppstdin="$x_cpp" + cppminus="$x_minus" + cpprun="$x_cpp" + cpplast="$x_minus" + set X $x_cpp + shift + case "$1" in + "$cpp") + echo "Perhaps can we force $cc -E using a wrapper..." + if $wrapper testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 + then + echo "Yup, we can." + cppstdin="$wrapper" + cppminus=''; + else + echo "Nope, we'll have to live without it..." + fi + ;; + esac + case "$cpprun" in + "$wrapper") + cpprun='' + cpplast='' + ;; + esac + ;; + esac + + case "$cppstdin" in + "$wrapper"|'cppstdin') ;; + *) $rm -f $wrapper;; + esac + $rm -f testcpp.c testcpp.out + : Set private lib path case "$plibpth" in '') if ./mips; then *************** *** 4061,4067 **** esac : the following weeds options from ccflags that are of no interest to cpp ! cppflags="$ccflags" case "$gccversion" in 1*) cppflags="$cppflags -D__GNUC__" esac --- 4372,4381 ---- esac : the following weeds options from ccflags that are of no interest to cpp ! case "$cppflags" in ! '') cppflags="$ccflags" ;; ! *) cppflags="$cppflags $ccflags" ;; ! esac case "$gccversion" in 1*) cppflags="$cppflags -D__GNUC__" esac *************** *** 4184,4190 **** I used the command: $* ! ./try and I got the following output: --- 4498,4504 ---- I used the command: $* ! $run ./try and I got the following output: *************** *** 4191,4198 **** EOM dflt=y if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then ! if $sh -c './try' >>try.msg 2>&1; then ! xxx=`./try` case "$xxx" in "Ok") dflt=n ;; *) echo 'The program compiled OK, but produced no output.' >> try.msg --- 4505,4512 ---- EOM dflt=y if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then ! if $sh -c "$run ./try" >>try.msg 2>&1; then ! xxx=`$run ./try` case "$xxx" in "Ok") dflt=n ;; *) echo 'The program compiled OK, but produced no output.' >> try.msg *************** *** 4242,4303 **** esac $rm -f try try.* core - : define an is-a-typedef? function - typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@; - case "$inclist" in - "") inclist="sys/types.h";; - esac; - eval "varval=\$$var"; - case "$varval" in - "") - $rm -f temp.c; - for inc in $inclist; do - echo "#include <$inc>" >>temp.c; - done; - echo "#ifdef $type" >> temp.c; - echo "printf(\"We have $type\");" >> temp.c; - echo "#endif" >> temp.c; - $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null; - if $contains $type temp.E >/dev/null 2>&1; then - eval "$var=\$type"; - else - eval "$var=\$def"; - fi; - $rm -f temp.?;; - *) eval "$var=\$varval";; - esac' - - : define an is-a-typedef? function that prompts if the type is not available. - typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@; - case "$inclist" in - "") inclist="sys/types.h";; - esac; - eval "varval=\$$var"; - case "$varval" in - "") - $rm -f temp.c; - for inc in $inclist; do - echo "#include <$inc>" >>temp.c; - done; - echo "#ifdef $type" >> temp.c; - echo "printf(\"We have $type\");" >> temp.c; - echo "#endif" >> temp.c; - $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null; - echo " " ; - echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./"; - if $contains $type temp.E >/dev/null 2>&1; then - echo "$type found." >&4; - eval "$var=\$type"; - else - echo "$type NOT found." >&4; - dflt="$def"; - . ./myread ; - eval "$var=\$ans"; - fi; - $rm -f temp.?;; - *) eval "$var=\$varval";; - esac' - : define a shorthand compile call compile=' mc_file=$1; --- 4556,4561 ---- *************** *** 4314,4320 **** case "$intsize" in '') echo "Checking to see how big your integers are..." >&4 ! $cat >intsize.c <<'EOCP' #include int main() { --- 4572,4578 ---- case "$intsize" in '') echo "Checking to see how big your integers are..." >&4 ! $cat >try.c <<'EOCP' #include int main() { *************** *** 4324,4332 **** exit(0); } EOCP ! set intsize ! if eval $compile_ok && ./intsize > /dev/null; then ! eval `./intsize` echo "Your integers are $intsize bytes long." echo "Your long integers are $longsize bytes long." echo "Your short integers are $shortsize bytes long." --- 4582,4590 ---- exit(0); } EOCP ! set try ! if eval $compile_ok && $run ./try > /dev/null; then ! eval `$run ./try` echo "Your integers are $intsize bytes long." echo "Your long integers are $longsize bytes long." echo "Your short integers are $shortsize bytes long." *************** *** 4353,4549 **** fi ;; esac ! $rm -f intsize intsize.* - : see what type lseek is declared as in the kernel - rp="What is the type used for lseek's offset on this system?" - set off_t lseektype long stdio.h sys/types.h - eval $typedef_ask - - echo " " - echo "Checking to see how big your file offsets are..." >&4 - $cat >try.c < - #include - int main() - { - printf("%d\n", (int)sizeof($lseektype)); - return(0); - } - EOCP - set try - if eval $compile_ok; then - lseeksize=`./try` - echo "Your file offsets are $lseeksize bytes long." - else - dflt=$longsize - echo " " - echo "(I can't seem to compile the test program. Guessing...)" - rp="What is the size of your file offsets (in bytes)?" - . ./myread - lseeksize="$ans" - fi - $rm -f try.c try - - : see what type file positions are declared as in the library - rp="What is the type for file position used by fsetpos()?" - set fpos_t fpostype long stdio.h sys/types.h - eval $typedef_ask - - echo " " - case "$fpostype" in - *_t) zzz="$fpostype" ;; - *) zzz="fpos_t" ;; - esac - echo "Checking the size of $zzz..." >&4 - cat > try.c < - #include - int main() { - printf("%d\n", (int)sizeof($fpostype)); - exit(0); - } - EOCP - set try - if eval $compile_ok; then - yyy=`./try` - case "$yyy" in - '') fpossize=4 - echo "(I can't execute the test program--guessing $fpossize.)" >&4 - ;; - *) fpossize=$yyy - echo "Your $zzz is $fpossize bytes long." - ;; - esac - else - dflt="$longsize" - echo " " >&4 - echo "(I can't compile the test program. Guessing...)" >&4 - rp="What is the size of your file positions (in bytes)?" - . ./myread - fpossize="$ans" - fi - - - - # Backward compatibility (uselfs is deprecated). - case "$uselfs" in - "$define"|true|[yY]*) - cat <&4 - - *** Configure -Duselfs is deprecated, using -Duselargefiles instead. - EOM - uselargefiles="$define" - ;; - esac - - case "$lseeksize:$fpossize" in - 8:8) cat <&4 - $cat >try.c < - #include - int main() - { - printf("%d\n", (int)sizeof($lseektype)); - return(0); - } - EOCP - set try - if eval $compile_ok; then - lseeksize=`./try` - $echo "Your file offsets are now $lseeksize bytes long." - else - dflt="$lseeksize" - echo " " - echo "(I can't seem to compile the test program. Guessing...)" - rp="What is the size of your file offsets (in bytes)?" - . ./myread - lseeksize="$ans" - fi - case "$fpostype" in - *_t) zzz="$fpostype" ;; - *) zzz="fpos_t" ;; - esac - $echo $n "Rechecking the size of $zzz...$c" >&4 - $cat > try.c < - #include - int main() { - printf("%d\n", (int)sizeof($fpostype)); - exit(0); - } - EOCP - set try - if eval $compile_ok; then - yyy=`./try` - dflt="$lseeksize" - case "$yyy" in - '') echo " " - echo "(I can't execute the test program--guessing $fpossize.)" >&4 - ;; - *) fpossize=$yyy - echo " $fpossize bytes." >&4 - ;; - esac - else - dflt="$fpossize" - echo " " - echo "(I can't compile the test program. Guessing...)" >&4 - rp="What is the size of your file positions (in bytes)?" - . ./myread - fpossize="$ans" - fi - $rm -f try.c try - fi - ;; - esac - - - case "$usemorebits" in - "$define"|true|[yY]*) - use64bitint="$define" - uselongdouble="$define" - usemorebits="$define" - ;; - *) usemorebits="$undef" - ;; - esac - : check for void type echo " " echo "Checking to see how well your C compiler groks the void type..." >&4 --- 4611,4618 ---- fi ;; esac ! $rm -f try try.* : check for void type echo " " echo "Checking to see how well your C compiler groks the void type..." >&4 *************** *** 4656,4662 **** EOCP set try if eval $compile_ok; then ! ptrsize=`./try` echo "Your pointers are $ptrsize bytes long." else dflt='4' --- 4725,4731 ---- EOCP set try if eval $compile_ok; then ! ptrsize=`$run ./try` echo "Your pointers are $ptrsize bytes long." else dflt='4' *************** *** 4700,4706 **** EOCP set try if eval $compile_ok; then ! longlongsize=`./try$exe_ext` echo "Your long longs are $longlongsize bytes long." else dflt='8' --- 4769,4775 ---- EOCP set try if eval $compile_ok; then ! longlongsize=`$run ./try` echo "Your long longs are $longlongsize bytes long." else dflt='8' *************** *** 5123,5129 **** echo " " echo "Checking for GNU C Library..." >&4 ! cat >gnulibc.c < int main() { --- 5192,5198 ---- echo " " echo "Checking for GNU C Library..." >&4 ! cat >try.c < int main() { *************** *** 5134,5141 **** #endif } EOM ! set gnulibc ! if eval $compile_ok && ./gnulibc; then val="$define" echo "You are using the GNU C Library" else --- 5203,5210 ---- #endif } EOM ! set try ! if eval $compile_ok && $run ./try; then val="$define" echo "You are using the GNU C Library" else *************** *** 5142,5148 **** val="$undef" echo "You are not using the GNU C Library" fi ! $rm -f gnulibc* set d_gnulibc eval $setvar --- 5211,5217 ---- val="$undef" echo "You are not using the GNU C Library" fi ! $rm -f try try.* set d_gnulibc eval $setvar *************** *** 5248,5254 **** esac ;; esac - libnames=''; case "$libs" in '') ;; *) for thislib in $libs; do --- 5317,5322 ---- *************** *** 5510,5516 **** if $test -f /lib/syscalls.exp; then echo " " echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4 ! $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list fi ;; esac --- 5578,5584 ---- if $test -f /lib/syscalls.exp; then echo " " echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4 ! $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' /lib/syscalls.exp >>libc.list fi ;; esac *************** *** 5655,5661 **** EOCP set try if eval $compile_ok; then ! doublesize=`./try` echo "Your double is $doublesize bytes long." else dflt='8' --- 5723,5729 ---- EOCP set try if eval $compile_ok; then ! doublesize=`$run ./try` echo "Your double is $doublesize bytes long." else dflt='8' *************** *** 5699,5705 **** set try set try if eval $compile; then ! longdblsize=`./try$exe_ext` echo "Your long doubles are $longdblsize bytes long." else dflt='8' --- 5767,5773 ---- set try set try if eval $compile; then ! longdblsize=`$run ./try` echo "Your long doubles are $longdblsize bytes long." else dflt='8' *************** *** 5783,5788 **** --- 5851,5860 ---- archname='' ;; esac + case "$targetarch" in + '') ;; + *) archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;; + esac myarchname="$tarch" case "$archname" in '') dflt="$tarch";; *************** *** 5909,5920 **** prefix="$ans" prefixexp="$ansexp" : is AFS running? echo " " case "$afs" in $define|true) afs=true ;; $undef|false) afs=false ;; ! *) if test -d /afs; then afs=true else afs=false --- 5981,5997 ---- prefix="$ans" prefixexp="$ansexp" + case "$afsroot" in + '') afsroot=/afs ;; + *) afsroot=$afsroot ;; + esac + : is AFS running? echo " " case "$afs" in $define|true) afs=true ;; $undef|false) afs=false ;; ! *) if test -d $afsroot; then afs=true else afs=false *************** *** 5986,5992 **** esac;; esac' - : get the patchlevel echo " " echo "Getting the current patchlevel..." >&4 --- 6063,6068 ---- *************** *** 5997,6002 **** --- 6073,6079 ---- api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h` api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h` api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` + perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'` else revision=0 patchlevel=0 *************** *** 6004,6011 **** api_revision=0 api_version=0 api_subversion=0 fi ! $echo "(You have $package version $patchlevel subversion $subversion.)" case "$osname" in dos|vms) : XXX Should be a Configure test for double-dots in filenames. --- 6081,6103 ---- api_revision=0 api_version=0 api_subversion=0 + perl_patchlevel=0 + $echo "(You do not have patchlevel.h. Eek.)" fi ! if $test -r $rsrc/.patch ; then ! if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then ! perl_patchlevel=`cat $rsrc/.patch` ! fi ! fi ! : Define a handy string here to avoid duplication in myconfig.SH and configpm. ! version_patchlevel_string="version $patchlevel subversion $subversion" ! case "$perl_patchlevel" in ! 0|'') ;; ! *) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;; ! esac ! ! $echo "(You have $package $version_patchlevel_string.)" ! case "$osname" in dos|vms) : XXX Should be a Configure test for double-dots in filenames. *************** *** 6276,6288 **** : determine which malloc to compile in echo " " case "$usemymalloc" in ! ''|[yY]*|true|$define) dflt='y' ;; ! *) dflt='n' ;; esac - case "$ptrsize" in - 4) ;; - *) dflt='n' ;; - esac rp="Do you wish to attempt to use the malloc that comes with $package?" . ./myread usemymalloc="$ans" --- 6368,6381 ---- : determine which malloc to compile in echo " " case "$usemymalloc" in ! [yY]*|true|$define) dflt='y' ;; ! [nN]*|false|$undef) dflt='n' ;; ! *) case "$ptrsize" in ! 4) dflt='y' ;; ! *) dflt='n' ;; ! esac ! ;; esac rp="Do you wish to attempt to use the malloc that comes with $package?" . ./myread usemymalloc="$ans" *************** *** 6674,6686 **** : Find perl5.005 or later. echo "Looking for a previously installed perl5.005 or later... " case "$perl5" in ! '') for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do : Check if this perl is recent and can load a simple module ! if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then perl5=$tdir/perl break; ! elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then ! perl5=$tdir/perl break; fi done --- 6767,6779 ---- : Find perl5.005 or later. echo "Looking for a previously installed perl5.005 or later... " case "$perl5" in ! '') for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do : Check if this perl is recent and can load a simple module ! if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then perl5=$tdir/perl break; ! elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then ! perl5=$tdir/perl5 break; fi done *************** *** 6745,6751 **** EOPL chmod +x getverlist case "$inc_version_list" in ! '') if test -x "$perl5"; then dflt=`$perl5 getverlist` else dflt='none' --- 6838,6844 ---- EOPL chmod +x getverlist case "$inc_version_list" in ! '') if test -x "$perl5$exe_ext"; then dflt=`$perl5 getverlist` else dflt='none' *************** *** 6752,6758 **** fi ;; $undef) dflt='none' ;; ! *) dflt="$inc_version_list" ;; esac case "$dflt" in ''|' ') dflt=none ;; --- 6845,6851 ---- fi ;; $undef) dflt='none' ;; ! *) eval dflt=\"$inc_version_list\" ;; esac case "$dflt" in ''|' ') dflt=none ;; *************** *** 6939,6945 **** exit(1); /* fail */ } EOM ! if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then cat </dev/null 2>&1 && $run ./a.out; then cat <&4 + $cat >try.c < + #include + int main() + { + printf("%d\n", (int)sizeof($lseektype)); + return(0); + } + EOCP + set try + if eval $compile_ok; then + lseeksize=`$run ./try` + echo "Your file offsets are $lseeksize bytes long." + else + dflt=$longsize + echo " " + echo "(I can't seem to compile the test program. Guessing...)" + rp="What is the size of your file offsets (in bytes)?" + . ./myread + lseeksize="$ans" + fi + $rm -f try.c try + + : see what type file positions are declared as in the library + rp="What is the type for file position used by fsetpos()?" + set fpos_t fpostype long stdio.h sys/types.h + eval $typedef_ask + + echo " " + case "$fpostype" in + *_t) zzz="$fpostype" ;; + *) zzz="fpos_t" ;; + esac + echo "Checking the size of $zzz..." >&4 + cat > try.c < + #include + int main() { + printf("%d\n", (int)sizeof($fpostype)); + exit(0); + } + EOCP + set try + if eval $compile_ok; then + yyy=`$run ./try` + case "$yyy" in + '') fpossize=4 + echo "(I can't execute the test program--guessing $fpossize.)" >&4 + ;; + *) fpossize=$yyy + echo "Your $zzz is $fpossize bytes long." + ;; + esac + else + dflt="$longsize" + echo " " >&4 + echo "(I can't compile the test program. Guessing...)" >&4 + rp="What is the size of your file positions (in bytes)?" + . ./myread + fpossize="$ans" + fi + + + + # Backward compatibility (uselfs is deprecated). + case "$uselfs" in + "$define"|true|[yY]*) + cat <&4 + + *** Configure -Duselfs is deprecated, using -Duselargefiles instead. + EOM + uselargefiles="$define" + ;; + esac + + case "$lseeksize:$fpossize" in + 8:8) cat <&4 + $cat >try.c < + #include + int main() + { + printf("%d\n", (int)sizeof($lseektype)); + return(0); + } + EOCP + set try + if eval $compile_ok; then + lseeksize=`$run ./try` + $echo "Your file offsets are now $lseeksize bytes long." + else + dflt="$lseeksize" + echo " " + echo "(I can't seem to compile the test program. Guessing...)" + rp="What is the size of your file offsets (in bytes)?" + . ./myread + lseeksize="$ans" + fi + case "$fpostype" in + *_t) zzz="$fpostype" ;; + *) zzz="fpos_t" ;; + esac + $echo $n "Rechecking the size of $zzz...$c" >&4 + $cat > try.c < + #include + int main() { + printf("%d\n", (int)sizeof($fpostype)); + exit(0); + } + EOCP + set try + if eval $compile_ok; then + yyy=`$run ./try` + dflt="$lseeksize" + case "$yyy" in + '') echo " " + echo "(I can't execute the test program--guessing $fpossize.)" >&4 + ;; + *) fpossize=$yyy + echo " $fpossize bytes." >&4 + ;; + esac + else + dflt="$fpossize" + echo " " + echo "(I can't compile the test program. Guessing...)" >&4 + rp="What is the size of your file positions (in bytes)?" + . ./myread + fpossize="$ans" + fi + $rm -f try.c try + fi + ;; + esac + case "$vendorprefix" in '') d_vendorbin="$undef" vendorbin='' *************** *** 7984,7990 **** EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 123.456) sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"'; --- 8311,8317 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 123.456) sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"'; *************** *** 8001,8017 **** #include int main() { long double d = 123.456; ! printf("%.3llf\n", d); } EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 123.456) ! sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"'; ! sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"'; ! echo "We will use %llf." ;; esac fi --- 8328,8344 ---- #include int main() { long double d = 123.456; ! printf("%.3Lf\n", d); } EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 123.456) ! sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"'; ! sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"'; ! echo "We will use %Lf." ;; esac fi *************** *** 8023,8039 **** #include int main() { long double d = 123.456; ! printf("%.3Lf\n", d); } EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 123.456) ! sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"'; ! sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"'; ! echo "We will use %Lf." ;; esac fi --- 8350,8366 ---- #include int main() { long double d = 123.456; ! printf("%.3llf\n", d); } EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 123.456) ! sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"'; ! sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"'; ! echo "We will use %llf." ;; esac fi *************** *** 8050,8056 **** EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 123.456) sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"'; --- 8377,8383 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 123.456) sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"'; *************** *** 8193,8198 **** --- 8520,8532 ---- Gconvert((DOUBLETYPE)123.456, 8, 0, buf); checkit("123.456", buf); + /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */ + Gconvert((DOUBLETYPE)1e30, 8, 0, buf); + if (strlen(buf) > 5) + checkit("1e+030", buf); /* for Microsoft */ + else + checkit("1e+30", buf); + exit(0); } EOP *************** *** 8220,8226 **** set try -DTRY_$xxx_convert if eval $compile; then echo "$xxx_convert() found." >&4 ! if ./try; then echo "I'll use $xxx_convert to convert floats into a string." >&4 break; else --- 8554,8560 ---- set try -DTRY_$xxx_convert if eval $compile; then echo "$xxx_convert() found." >&4 ! if $run ./try; then echo "I'll use $xxx_convert to convert floats into a string." >&4 break; else *************** *** 8354,8360 **** "$define") echo " " echo "Checking to see which flavor of getpgrp is in use..." ! $cat >set.c < #ifdef I_UNISTD --- 8688,8694 ---- "$define") echo " " echo "Checking to see which flavor of getpgrp is in use..." ! $cat >try.c < #ifdef I_UNISTD *************** *** 8376,8385 **** exit(1); } EOP ! if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then echo "You have to use getpgrp(pid) instead of getpgrp()." >&4 val="$define" ! elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then echo "You have to use getpgrp() instead of getpgrp(pid)." >&4 val="$undef" else --- 8710,8719 ---- exit(1); } EOP ! if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then echo "You have to use getpgrp(pid) instead of getpgrp()." >&4 val="$define" ! elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then echo "You have to use getpgrp() instead of getpgrp(pid)." >&4 val="$undef" else *************** *** 8406,8412 **** esac set d_bsdgetpgrp eval $setvar ! $rm -f set set.c : see if setpgrp exists set setpgrp d_setpgrp --- 8740,8746 ---- esac set d_bsdgetpgrp eval $setvar ! $rm -f try try.* : see if setpgrp exists set setpgrp d_setpgrp *************** *** 8416,8422 **** "$define") echo " " echo "Checking to see which flavor of setpgrp is in use..." ! $cat >set.c < #ifdef I_UNISTD --- 8750,8756 ---- "$define") echo " " echo "Checking to see which flavor of setpgrp is in use..." ! $cat >try.c < #ifdef I_UNISTD *************** *** 8438,8447 **** exit(1); } EOP ! if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4 val="$define" ! elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4 val="$undef" else --- 8772,8781 ---- exit(1); } EOP ! if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4 val="$define" ! elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4 val="$undef" else *************** *** 8468,8474 **** esac set d_bsdsetpgrp eval $setvar ! $rm -f set set.c : see if bzero exists set bzero d_bzero eval $inlibc --- 8802,8808 ---- esac set d_bsdsetpgrp eval $setvar ! $rm -f try try.* : see if bzero exists set bzero d_bzero eval $inlibc *************** *** 8558,8564 **** EOCP set try if eval $compile_ok; then ! ./try yyy=$? else echo "(I can't seem to compile the test program--assuming it can't)" --- 8892,8898 ---- EOCP set try if eval $compile_ok; then ! $run ./try yyy=$? else echo "(I can't seem to compile the test program--assuming it can't)" *************** *** 8654,8660 **** EOCP set try if eval $compile_ok; then ! ./try castflags=$? else echo "(I can't seem to compile the test program--assuming it can't)" --- 8988,8994 ---- EOCP set try if eval $compile_ok; then ! $run ./try castflags=$? else echo "(I can't seem to compile the test program--assuming it can't)" *************** *** 8677,8683 **** if set vprintf val -f d_vprintf; eval $csym; $val; then echo 'vprintf() found.' >&4 val="$define" ! $cat >vprintf.c <<'EOF' #include int main() { xxx("foo"); } --- 9011,9017 ---- if set vprintf val -f d_vprintf; eval $csym; $val; then echo 'vprintf() found.' >&4 val="$define" ! $cat >try.c <<'EOF' #include int main() { xxx("foo"); } *************** *** 8692,8699 **** exit((unsigned long)vsprintf(buf,"%s",args) > 10L); } EOF ! set vprintf ! if eval $compile && ./vprintf; then echo "Your vsprintf() returns (int)." >&4 val2="$undef" else --- 9026,9033 ---- exit((unsigned long)vsprintf(buf,"%s",args) > 10L); } EOF ! set try ! if eval $compile && $run ./try; then echo "Your vsprintf() returns (int)." >&4 val2="$undef" else *************** *** 8705,8710 **** --- 9039,9045 ---- val="$undef" val2="$undef" fi + $rm -f try try.* set d_vprintf eval $setvar val=$val2 *************** *** 8966,8971 **** --- 9301,9360 ---- set d_dbl_dig eval $setvar + hasproto='varname=$1; func=$2; shift; shift; + while $test $# -ge 2; do + case "$1" in + $define) echo "#include <$2>";; + esac ; + shift 2; + done > try.c; + $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null; + if $contains "$func.*(" tryout.c >/dev/null 2>&1; then + echo "$func() prototype found."; + val="$define"; + else + echo "$func() prototype NOT found."; + val="$undef"; + fi; + set $varname; + eval $setvar; + $rm -f try.c tryout.c' + + : see if dbm.h is available + : see if dbmclose exists + set dbmclose d_dbmclose + eval $inlibc + + case "$d_dbmclose" in + $define) + set dbm.h i_dbm + eval $inhdr + case "$i_dbm" in + $define) + val="$undef" + set i_rpcsvcdbm + eval $setvar + ;; + *) set rpcsvc/dbm.h i_rpcsvcdbm + eval $inhdr + ;; + esac + ;; + *) echo "We won't be including " + val="$undef" + set i_dbm + eval $setvar + val="$undef" + set i_rpcsvcdbm + eval $setvar + ;; + esac + + : see if prototype for dbminit is available + echo " " + set d_dbminitproto dbminit $i_dbm dbm.h + eval $hasproto + : see if difftime exists set difftime d_difftime eval $inlibc *************** *** 9087,9093 **** #include #$i_dlfcn I_DLFCN #ifdef I_DLFCN ! #include /* the dynamic linker include file for Sunos/Solaris */ #else #include #include --- 9476,9482 ---- #include #$i_dlfcn I_DLFCN #ifdef I_DLFCN ! #include /* the dynamic linker include file for SunOS/Solaris */ #else #include #include *************** *** 9131,9139 **** : Call the object file tmp-dyna.o in case dlext=o. if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && ! $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && ! $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then ! xxx=`./fred` case $xxx in 1) echo "Test program failed using dlopen." >&4 echo "Perhaps you should not use dynamic loading." >&4;; --- 9520,9528 ---- : Call the object file tmp-dyna.o in case dlext=o. if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && ! $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && ! $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then ! xxx=`$run ./fred` case $xxx in 1) echo "Test program failed using dlopen." >&4 echo "Perhaps you should not use dynamic loading." >&4;; *************** *** 9155,9179 **** set d_dlsymun eval $setvar - hasproto='varname=$1; func=$2; shift; shift; - while $test $# -ge 2; do - case "$1" in - $define) echo "#include <$2>";; - esac ; - shift 2; - done > try.c; - $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null; - if $contains "$func.*(" tryout.c >/dev/null 2>&1; then - echo "$func() prototype found."; - val="$define"; - else - echo "$func() prototype NOT found."; - val="$undef"; - fi; - set $varname; - eval $setvar; - $rm -f try.c tryout.c' - : see if prototype for drand48 is available echo " " set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h --- 9544,9549 ---- *************** *** 9213,9219 **** : Locate the flags for 'open()' echo " " ! $cat >open3.c <<'EOCP' #include #ifdef I_FCNTL #include --- 9583,9589 ---- : Locate the flags for 'open()' echo " " ! $cat >try.c <<'EOCP' #include #ifdef I_FCNTL #include *************** *** 9232,9241 **** EOCP : check sys/file.h first to get FREAD on Sun if $test `./findhdr sys/file.h` && \ ! set open3 -DI_SYS_FILE && eval $compile; then h_sysfile=true; echo " defines the O_* constants..." >&4 ! if ./open3; then echo "and you have the 3 argument form of open()." >&4 val="$define" else --- 9602,9611 ---- EOCP : check sys/file.h first to get FREAD on Sun if $test `./findhdr sys/file.h` && \ ! set try -DI_SYS_FILE && eval $compile; then h_sysfile=true; echo " defines the O_* constants..." >&4 ! if $run ./try; then echo "and you have the 3 argument form of open()." >&4 val="$define" else *************** *** 9243,9252 **** val="$undef" fi elif $test `./findhdr fcntl.h` && \ ! set open3 -DI_FCNTL && eval $compile; then h_fcntl=true; echo " defines the O_* constants..." >&4 ! if ./open3; then echo "and you have the 3 argument form of open()." >&4 val="$define" else --- 9613,9622 ---- val="$undef" fi elif $test `./findhdr fcntl.h` && \ ! set try -DI_FCNTL && eval $compile; then h_fcntl=true; echo " defines the O_* constants..." >&4 ! if $run ./try; then echo "and you have the 3 argument form of open()." >&4 val="$define" else *************** *** 9259,9265 **** fi set d_open3 eval $setvar ! $rm -f open3* : see which of string.h or strings.h is needed echo " " --- 9629,9635 ---- fi set d_open3 eval $setvar ! $rm -f try try.* : see which of string.h or strings.h is needed echo " " *************** *** 9318,9324 **** EOCP set try if eval $compile_ok; then ! o_nonblock=`./try` case "$o_nonblock" in '') echo "I can't figure it out, assuming O_NONBLOCK will do.";; *) echo "Seems like we can use $o_nonblock.";; --- 9688,9694 ---- EOCP set try if eval $compile_ok; then ! o_nonblock=`$run ./try` case "$o_nonblock" in '') echo "I can't figure it out, assuming O_NONBLOCK will do.";; *) echo "Seems like we can use $o_nonblock.";; *************** *** 9415,9421 **** set try if eval $compile_ok; then echo "$startsh" >mtry ! echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry chmod +x mtry ./mtry >/dev/null 2>&1 case $? in --- 9785,9791 ---- set try if eval $compile_ok; then echo "$startsh" >mtry ! echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry chmod +x mtry ./mtry >/dev/null 2>&1 case $? in *************** *** 9477,9482 **** --- 9847,9856 ---- esac $rm -f try try.* .out core head.c mtry + : see if fchdir exists + set fchdir d_fchdir + eval $inlibc + : see if fchmod exists set fchmod d_fchmod eval $inlibc *************** *** 9491,9500 **** echo " " : See if fcntl-based locking works. ! $cat >try.c <<'EOCP' #include #include #include int main() { #if defined(F_SETLK) && defined(F_SETLKW) struct flock flock; --- 9865,9876 ---- echo " " : See if fcntl-based locking works. ! $cat >try.c < #include #include + #include + $signal_t blech(x) int x; { exit(3); } int main() { #if defined(F_SETLK) && defined(F_SETLKW) struct flock flock; *************** *** 9503,9508 **** --- 9879,9886 ---- flock.l_type = F_RDLCK; flock.l_whence = SEEK_SET; flock.l_start = flock.l_len = 0; + signal(SIGALRM, blech); + alarm(10); retval = fcntl(fd, F_SETLK, &flock); close(fd); (retval < 0 ? exit(2) : exit(0)); *************** *** 9516,9527 **** "$define") set try if eval $compile_ok; then ! if ./try; then echo "Yes, it seems to work." val="$define" else echo "Nope, it didn't work." val="$undef" fi else echo "I'm unable to compile the test program, so I'll assume not." --- 9894,9917 ---- "$define") set try if eval $compile_ok; then ! if $run ./try; then echo "Yes, it seems to work." val="$define" else echo "Nope, it didn't work." val="$undef" + case "$?" in + 3) $cat >&4 <fd_set.c <try.c <&4 ! if ./fd_set; then echo "and you have the normal fd_set macros (just as I'd expect)." >&4 d_fd_macros="$define" else --- 10048,10059 ---- #endif } EOCP ! set try -DTRYBITS if eval $compile; then d_fds_bits="$define" d_fd_set="$define" echo "Well, your system knows about the normal fd_set typedef..." >&4 ! if $run ./try; then echo "and you have the normal fd_set macros (just as I'd expect)." >&4 d_fd_macros="$define" else *************** *** 9676,9687 **** $cat <<'EOM' Hmm, your compiler has some difficulty with fd_set. Checking further... EOM ! set fd_set if eval $compile; then d_fds_bits="$undef" d_fd_set="$define" echo "Well, your system has some sort of fd_set available..." >&4 ! if ./fd_set; then echo "and you have the normal fd_set macros." >&4 d_fd_macros="$define" else --- 10066,10077 ---- $cat <<'EOM' Hmm, your compiler has some difficulty with fd_set. Checking further... EOM ! set try if eval $compile; then d_fds_bits="$undef" d_fd_set="$define" echo "Well, your system has some sort of fd_set available..." >&4 ! if $run ./try; then echo "and you have the normal fd_set macros." >&4 d_fd_macros="$define" else *************** *** 9697,9703 **** d_fd_macros="$undef" fi fi ! $rm -f fd_set* : see if fgetpos exists set fgetpos d_fgetpos --- 10087,10093 ---- d_fd_macros="$undef" fi fi ! $rm -f try try.* : see if fgetpos exists set fgetpos d_fgetpos *************** *** 9707,9712 **** --- 10097,10131 ---- set flock d_flock eval $inlibc + : see if this is a sys/file.h system + val='' + set sys/file.h val + eval $inhdr + + : do we need to include sys/file.h ? + case "$val" in + "$define") + echo " " + if $h_sysfile; then + val="$define" + echo "We'll be including ." >&4 + else + val="$undef" + echo "We won't be including ." >&4 + fi + ;; + *) + h_sysfile=false + ;; + esac + set i_sysfile + eval $setvar + + : see if prototype for flock is available + echo " " + set d_flockproto flock $i_sysfile sys/file.h + eval $hasproto + : see if fork exists set fork d_fork eval $inlibc *************** *** 10368,10373 **** --- 10787,10847 ---- set modfl d_modfl eval $inlibc + d_modfl_pow32_bug="$undef" + + case "$d_longdbl$d_modfl" in + $define$define) + $cat <try.c < + #include + int main() { + long double nv = 4294967303.15; + long double v, w; + v = modfl(nv, &w); + #ifdef __GLIBC__ + printf("glibc"); + #endif + printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w); + return 0; + } + EOCP + case "$osname:$gccversion" in + aix:) saveccflags="$ccflags" + ccflags="$ccflags -qlongdouble" ;; # to avoid core dump + esac + set try + if eval $compile; then + foo=`$run ./try` + case "$foo" in + *" 4294967303.150000 1.150000 4294967302.000000") + echo >&4 "Your modfl() is broken for large values." + d_modfl_pow32_bug="$define" + case "$foo" in + glibc) echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()." + ;; + esac + ;; + *" 4294967303.150000 0.150000 4294967303.000000") + echo >&4 "Your modfl() seems okay for large values." + ;; + *) echo >&4 "I don't understand your modfl() at all." + d_modfl="$undef" + ;; + esac + $rm -f try.* try core core.try.* + else + echo "I cannot figure out whether your modfl() is okay, assuming it isn't." + d_modfl="$undef" + fi + case "$osname:$gccversion" in + aix:) ccflags="$saveccflags" ;; # restore + esac + ;; + esac + : see if mprotect exists set mprotect d_mprotect eval $inlibc *************** *** 10447,10452 **** --- 10921,10934 ---- set nice d_nice eval $inlibc + : see if this is a langinfo.h system + set langinfo.h i_langinfo + eval $inhdr + + : see if nl_langinfo exists + set nl_langinfo d_nl_langinfo + eval $inlibc + : check for length of character echo " " case "$charsize" in *************** *** 10462,10468 **** EOCP set try if eval $compile_ok; then ! dflt=`./try` else dflt='1' echo "(I can't seem to compile the test program. Guessing...)" --- 10944,10950 ---- EOCP set try if eval $compile_ok; then ! dflt=`$run ./try` else dflt='1' echo "(I can't seem to compile the test program. Guessing...)" *************** *** 10578,10584 **** case "$i8type" in '') set try -DINT8 if eval $compile; then ! case "`./try$exe_ext`" in int8_t) i8type=int8_t u8type=uint8_t i8size=1 --- 11060,11066 ---- case "$i8type" in '') set try -DINT8 if eval $compile; then ! case "`$run ./try`" in int8_t) i8type=int8_t u8type=uint8_t i8size=1 *************** *** 10611,10617 **** case "$i16type" in '') set try -DINT16 if eval $compile; then ! case "`./try$exe_ext`" in int16_t) i16type=int16_t u16type=uint16_t --- 11093,11099 ---- case "$i16type" in '') set try -DINT16 if eval $compile; then ! case "`$run ./try`" in int16_t) i16type=int16_t u16type=uint16_t *************** *** 10653,10659 **** case "$i32type" in '') set try -DINT32 if eval $compile; then ! case "`./try$exe_ext`" in int32_t) i32type=int32_t u32type=uint32_t --- 11135,11141 ---- case "$i32type" in '') set try -DINT32 if eval $compile; then ! case "`$run ./try`" in int32_t) i32type=int32_t u32type=uint32_t *************** *** 10732,10738 **** d_nv_preserves_uv="$undef" if eval $compile; then ! d_nv_preserves_uv_bits="`./try$exe_ext`" fi case "$d_nv_preserves_uv_bits" in \-[1-9]*) --- 11214,11220 ---- d_nv_preserves_uv="$undef" if eval $compile; then ! d_nv_preserves_uv_bits="`$run ./try`" fi case "$d_nv_preserves_uv_bits" in \-[1-9]*) *************** *** 10847,10853 **** --- 11329,11339 ---- set poll d_poll eval $inlibc + : see if pthread_atfork exists + set pthread_atfork d_pthread_atfork + eval $inlibc + : see whether the various POSIXish _yields exist $cat >try.c < *************** *** 11062,11073 **** eval $setvar : can bcopy handle overlapping blocks? val="$undef" ! case "$d_bcopy" in ! "$define") ! echo " " ! echo "Checking to see if your bcopy() can do overlapping copies..." >&4 ! $cat >try.c <&4 ! $cat >try.c <= 0; align--) { *************** *** 11114,11149 **** exit(0); } EOCP ! set try ! if eval $compile_ok; then ! if ./try 2>/dev/null; then ! echo "Yes, it can." ! val="$define" else ! echo "It can't, sorry." ! case "$d_memmove" in ! "$define") echo "But that's Ok since you have memmove()." ;; ! esac fi ! else ! echo "(I can't compile the test program, so we'll assume not...)" ! case "$d_memmove" in ! "$define") echo "But that's Ok since you have memmove()." ;; ! esac ! fi ;; esac - $rm -f try.* try core set d_safebcpy eval $setvar : can memcpy handle overlapping blocks? val="$undef" ! case "$d_memcpy" in ! "$define") ! echo " " ! echo "Checking to see if your memcpy() can do overlapping copies..." >&4 ! $cat >try.c </dev/null; then ! echo "Yes, it can." ! val="$define" ! else ! echo "It can't, sorry." ! fi else ! echo "(I can't compile the test program, so we'll assume not...)" fi ! ;; ! esac ! $rm -f try.* try core ;; esac set d_safebcpy eval $setvar : can memcpy handle overlapping blocks? + echo " " val="$undef" ! case "$d_memmove" in ! "$define") echo "I'll use memmove() instead of memcpy() for overlapping copies." ;; ! *) case "$d_memcpy" in ! "$define") ! echo "Checking to see if memcpy() can do overlapping copies..." >&4 ! $cat >try.c </dev/null; then ! echo "Yes, it can." ! val="$define" else ! echo "It can't, sorry." ! case "$d_memmove" in ! "$define") echo "But that's Ok since you have memmove()." ;; ! esac fi ! else ! echo "(I can't compile the test program, so we'll assume not...)" ! case "$d_memmove" in ! "$define") echo "But that's Ok since you have memmove()." ;; ! esac ! fi ;; esac - $rm -f try.* try core set d_safemcpy eval $setvar --- 11680,11701 ---- exit(0); } EOCP ! set try ! if eval $compile_ok; then ! if ./try 2>/dev/null; then ! echo "Yes, it can." ! val="$define" ! else ! echo "It can't, sorry." ! fi else ! echo "(I can't compile the test program, so we'll assume not...)" fi ! ;; ! esac ! $rm -f try.* try core ;; esac set d_safemcpy eval $setvar *************** *** 11254,11260 **** EOCP set try if eval $compile_ok; then ! if ./try 2>/dev/null; then echo "Yes, it can." val="$define" else --- 11738,11744 ---- EOCP set try if eval $compile_ok; then ! if $run ./try 2>/dev/null; then echo "Yes, it can." val="$define" else *************** *** 11423,11429 **** val="$undef" set try if eval $compile; then ! xxx=`./try` case "$xxx" in semun) val="$define" ;; esac --- 11907,11913 ---- val="$undef" set try if eval $compile; then ! xxx=`$run ./try` case "$xxx" in semun) val="$define" ;; esac *************** *** 11481,11487 **** val="$undef" set try if eval $compile; then ! xxx=`./try` case "$xxx" in semid_ds) val="$define" ;; esac --- 11965,11971 ---- val="$undef" set try if eval $compile; then ! xxx=`$run ./try` case "$xxx" in semid_ds) val="$define" ;; esac *************** *** 11663,11672 **** case "$d_sfio" in $define) ;; *) : Remove sfio from list of libraries to use ! set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'` ! shift ! libs="$*" ! echo "libs = $libs" >&4 ;; esac --- 12147,12161 ---- case "$d_sfio" in $define) ;; *) : Remove sfio from list of libraries to use ! case "$libs" in ! *-lsfio*) ! echo "Removing unneeded -lsfio from library list" >&4 ! set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'` ! shift ! libs="$*" ! echo "libs = $libs" >&4 ! ;; ! esac ;; esac *************** *** 11806,11812 **** EOP set try if eval $compile; then ! if ./try >/dev/null 2>&1; then echo "POSIX sigsetjmp found." >&4 val="$define" else --- 12295,12301 ---- EOP set try if eval $compile; then ! if $run ./try >/dev/null 2>&1; then echo "POSIX sigsetjmp found." >&4 val="$define" else *************** *** 11836,11845 **** --- 12325,12349 ---- set sockatmark d_sockatmark eval $inlibc + : see if prototype for sockatmark is available + echo " " + set d_sockatmarkproto sockatmark $d_socket sys/socket.h + eval $hasproto + : see if socks5_init exists set socks5_init d_socks5_init eval $inlibc + : see if prototype for setresgid is available + echo " " + set d_sresgproto setresgid $i_unistd unistd.h + eval $hasproto + + : see if prototype for setresuid is available + echo " " + set d_sresuproto setresuid $i_unistd unistd.h + eval $hasproto + : see if sys/stat.h is available set sys/stat.h i_sysstat eval $inhdr *************** *** 11974,11981 **** EOP val="$undef" set try ! if eval $compile; then ! if ./try; then echo "Your stdio acts pretty std." val="$define" else --- 12478,12485 ---- EOP val="$undef" set try ! if eval $compile && $to try.c; then ! if $run ./try; then echo "Your stdio acts pretty std." val="$define" else *************** *** 12071,12078 **** } EOP set try ! if eval $compile; then ! case `./try$exe_ext` in Pass_changed) echo "Increasing ptr in your stdio decreases cnt by the same amount. Good." >&4 d_stdio_ptr_lval_sets_cnt="$define" ;; --- 12575,12582 ---- } EOP set try ! if eval $compile && $to try.c; then ! case `$run ./try` in Pass_changed) echo "Increasing ptr in your stdio decreases cnt by the same amount. Good." >&4 d_stdio_ptr_lval_sets_cnt="$define" ;; *************** *** 12111,12118 **** } EOP set try ! if eval $compile; then ! if ./try; then echo "And its _base field acts std." val="$define" else --- 12615,12622 ---- } EOP set try ! if eval $compile && $to try.c; then ! if $run ./try; then echo "And its _base field acts std." val="$define" else *************** *** 12142,12148 **** do set try -DSTDIO_STREAM_ARRAY=$s if eval $compile; then ! case "`./try$exe_ext`" in yes) stdio_stream_array=$s; break ;; esac fi --- 12646,12652 ---- do set try -DSTDIO_STREAM_ARRAY=$s if eval $compile; then ! case "`$run ./try`" in yes) stdio_stream_array=$s; break ;; esac fi *************** *** 12229,12234 **** --- 12733,12742 ---- fi fi + : see if strftime exists + set strftime d_strftime + eval $inlibc + : see if strtod exists set strtod d_strtod eval $inlibc *************** *** 12284,12290 **** EOCP set try if eval $compile; then ! yyy=`./try` case "$yyy" in ok) echo "Your strtoll() seems to be working okay." ;; *) cat <&4 --- 12792,12798 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in ok) echo "Your strtoll() seems to be working okay." ;; *) cat <&4 *************** *** 12369,12375 **** EOCP set try if eval $compile; then ! case "`./try`" in ok) echo "Your strtoul() seems to be working okay." ;; *) cat <&4 Your strtoul() doesn't seem to be working okay. --- 12877,12883 ---- EOCP set try if eval $compile; then ! case "`$run ./try`" in ok) echo "Your strtoul() seems to be working okay." ;; *) cat <&4 Your strtoul() doesn't seem to be working okay. *************** *** 12423,12429 **** EOCP set try if eval $compile; then ! case "`./try`" in ok) echo "Your strtoull() seems to be working okay." ;; *) cat <&4 Your strtoull() doesn't seem to be working okay. --- 12931,12937 ---- EOCP set try if eval $compile; then ! case "`$run ./try`" in ok) echo "Your strtoull() seems to be working okay." ;; *) cat <&4 Your strtoull() doesn't seem to be working okay. *************** *** 12475,12481 **** EOCP set try if eval $compile; then ! case "`./try`" in ok) echo "Your strtouq() seems to be working okay." ;; *) cat <&4 Your strtouq() doesn't seem to be working okay. --- 12983,12989 ---- EOCP set try if eval $compile; then ! case "`$run ./try`" in ok) echo "Your strtouq() seems to be working okay." ;; *) cat <&4 Your strtouq() doesn't seem to be working okay. *************** *** 12499,12504 **** --- 13007,13017 ---- set syscall d_syscall eval $inlibc + : see if prototype for syscall is available + echo " " + set d_syscallproto syscall $i_unistd unistd.h + eval $hasproto + : see if sysconf exists set sysconf d_sysconf eval $inlibc *************** *** 12558,12567 **** set d_tzname eval $setvar - case "$crosscompile" in - ''|[nN]*) crosscompile="$undef" ;; - esac - case "$osname" in next|rhapsody|darwin) multiarch="$define" ;; esac --- 13071,13076 ---- *************** *** 12571,12577 **** : check for ordering of bytes in a long echo " " ! case "$crosscompile$multiarch" in *$define*) $cat < /dev/null; then ! dflt=`./try` case "$dflt" in [1-4][1-4][1-4][1-4]|12345678|87654321) echo "(The test program ran ok.)" --- 13124,13130 ---- xxx_prompt=y set try if eval $compile && ./try > /dev/null; then ! dflt=`$run ./try` case "$dflt" in [1-4][1-4][1-4][1-4]|12345678|87654321) echo "(The test program ran ok.)" *************** *** 12700,12707 **** EOCP set try if eval $compile_ok; then ! echo "(This test may dump core.)" >&4 ! ./try >&2 >/dev/null case "$?" in 0) cat >&4 <&4 ! $run ./try 2>&1 >/dev/null case "$?" in 0) cat >&4 <&4 ! cat > closedir.c <&4 ! cat > try.c < /dev/null 2>&1 ; then echo "Yes, it does." val="$undef" else --- 13346,13354 ---- #endif int main() { return closedir(opendir(".")); } EOM ! set try if eval $compile_ok; then ! if $run ./try > /dev/null 2>&1 ; then echo "Yes, it does." val="$undef" else *************** *** 12852,12858 **** esac set d_void_closedir eval $setvar ! $rm -f closedir* : see if there is a wait4 set wait4 d_wait4 eval $inlibc --- 13366,13372 ---- esac set d_void_closedir eval $setvar ! $rm -f try try.* : see if there is a wait4 set wait4 d_wait4 eval $inlibc *************** *** 12882,12888 **** : check for alignment requirements echo " " ! case "$crosscompile$multiarch" in *$define*) $cat < #include #include ! int main() { #ifdef DB_VERSION_MAJOR /* DB version >= 2 */ int Major, Minor, Patch ; unsigned long Version ; (void)db_version(&Major, &Minor, &Patch) ; ! printf("You have Berkeley DB Version 2 or greater\n"); printf("db.h is from Berkeley DB Version %d.%d.%d\n", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH); --- 13498,13516 ---- #include #include #include ! int main(int argc, char *argv[]) { #ifdef DB_VERSION_MAJOR /* DB version >= 2 */ int Major, Minor, Patch ; unsigned long Version ; (void)db_version(&Major, &Minor, &Patch) ; ! if (argc == 2) { ! printf("%d %d %d %d %d %d\n", ! DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH, ! Major, Minor, Patch); ! exit(0); ! } ! printf("You have Berkeley DB Version 2 or greater.\n"); printf("db.h is from Berkeley DB Version %d.%d.%d\n", DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH); *************** *** 12999,13009 **** /* check that db.h & libdb are compatible */ if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) { ! printf("db.h and libdb are incompatible\n") ; exit(3); } ! printf("db.h and libdb are compatible\n") ; Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000 + DB_VERSION_PATCH ; --- 13519,13529 ---- /* check that db.h & libdb are compatible */ if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) { ! printf("db.h and libdb are incompatible.\n") ; exit(3); } ! printf("db.h and libdb are compatible.\n") ; Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000 + DB_VERSION_PATCH ; *************** *** 13011,13017 **** /* needs to be >= 2.3.4 */ if (Version < 2003004) { /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */ ! printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ; exit(2); } --- 13531,13537 ---- /* needs to be >= 2.3.4 */ if (Version < 2003004) { /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */ ! printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ; exit(2); } *************** *** 13018,13024 **** exit(0); #else #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC) ! printf("You have Berkeley DB Version 1\n"); exit(0); /* DB version < 2: the coast is clear. */ #else exit(1); /* not Berkeley DB? */ --- 13538,13548 ---- exit(0); #else #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC) ! if (argc == 2) { ! printf("1 0 0\n"); ! exit(0); ! } ! printf("You have Berkeley DB Version 1.\n"); exit(0); /* DB version < 2: the coast is clear. */ #else exit(1); /* not Berkeley DB? */ *************** *** 13027,13034 **** } EOCP set try ! if eval $compile_ok && ./try; then echo 'Looks OK.' >&4 else echo "I can't use Berkeley DB with your . I'll disable Berkeley DB." >&4 i_db=$undef --- 13551,13562 ---- } EOCP set try ! if eval $compile_ok && $run ./try; then echo 'Looks OK.' >&4 + set `$run ./try 1` + db_version_major=$1 + db_version_minor=$2 + db_version_patch=$3 else echo "I can't use Berkeley DB with your . I'll disable Berkeley DB." >&4 i_db=$undef *************** *** 13271,13277 **** echo " " echo "Determining whether or not we are on an EBCDIC system..." >&4 ! $cat >tebcdic.c <<'EOM' int main() { if ('M'==0xd4) return 0; --- 13799,13805 ---- echo " " echo "Determining whether or not we are on an EBCDIC system..." >&4 ! $cat >try.c <<'EOM' int main() { if ('M'==0xd4) return 0; *************** *** 13280,13298 **** EOM val=$undef ! set tebcdic if eval $compile_ok; then ! if ./tebcdic; then echo "You seem to speak EBCDIC." >&4 val="$define" else ! echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4 fi else echo "I'm unable to compile the test program." >&4 echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4 fi ! $rm -f tebcdic.c tebcdic set ebcdic eval $setvar --- 13808,13826 ---- EOM val=$undef ! set try if eval $compile_ok; then ! if $run ./try; then echo "You seem to speak EBCDIC." >&4 val="$define" else ! echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4 fi else echo "I'm unable to compile the test program." >&4 echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4 fi ! $rm -f try try.* set ebcdic eval $setvar *************** *** 13317,13323 **** # define STDIO_STREAM_ARRAY $stdio_stream_array #endif int main() { ! FILE* p = fopen("try.out", "w"); #ifdef TRY_FPUTC fputc('x', p); #else --- 13845,13853 ---- # define STDIO_STREAM_ARRAY $stdio_stream_array #endif int main() { ! FILE* p; ! unlink("try.out"); ! p = fopen("try.out", "w"); #ifdef TRY_FPUTC fputc('x', p); #else *************** *** 13366,13378 **** } EOCP : first we have to find out how _not_ to flush if $test "X$fflushNULL" = X -o "X$fflushall" = X; then output='' set try -DTRY_FPUTC if eval $compile; then ! $rm -f try.out ! ./try$exe_ext 2>/dev/null ! if $test ! -s try.out -a "X$?" = X42; then output=-DTRY_FPUTC fi fi --- 13896,13910 ---- } EOCP : first we have to find out how _not_ to flush + $to try.c if $test "X$fflushNULL" = X -o "X$fflushall" = X; then output='' set try -DTRY_FPUTC if eval $compile; then ! $run ./try 2>/dev/null ! code="$?" ! $from try.out ! if $test ! -s try.out -a "X$code" = X42; then output=-DTRY_FPUTC fi fi *************** *** 13379,13389 **** case "$output" in '') set try -DTRY_FPRINTF - $rm -f try.out if eval $compile; then ! $rm -f try.out ! ./try$exe_ext 2>/dev/null ! if $test ! -s try.out -a "X$?" = X42; then output=-DTRY_FPRINTF fi fi --- 13911,13921 ---- case "$output" in '') set try -DTRY_FPRINTF if eval $compile; then ! $run ./try 2>/dev/null ! code="$?" ! $from try.out ! if $test ! -s try.out -a "X$code" = X42; then output=-DTRY_FPRINTF fi fi *************** *** 13394,13402 **** case "$fflushNULL" in '') set try -DTRY_FFLUSH_NULL $output if eval $compile; then ! $rm -f try.out ! ./try$exe_ext 2>/dev/null code="$?" if $test -s try.out -a "X$code" = X42; then fflushNULL="`$cat try.out`" else --- 13926,13934 ---- case "$fflushNULL" in '') set try -DTRY_FFLUSH_NULL $output if eval $compile; then ! $run ./try 2>/dev/null code="$?" + $from try.out if $test -s try.out -a "X$code" = X42; then fflushNULL="`$cat try.out`" else *************** *** 13442,13448 **** set tryp if eval $compile; then $rm -f tryp.out ! $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out if cmp tryp.c tryp.out >/dev/null 2>&1; then $cat >&4 </dev/null > tryp.out if cmp tryp.c tryp.out >/dev/null 2>&1; then $cat >&4 </dev/null > tryp.out if cmp tryp.c tryp.out >/dev/null 2>&1; then $cat >&4 </dev/null > tryp.out if cmp tryp.c tryp.out >/dev/null 2>&1; then $cat >&4 <&4 </dev/null ! if $test -s try.out -a "X$?" = X42; then fflushall="`$cat try.out`" fi fi --- 14050,14059 ---- $cat >&4 </dev/null ! code=$? ! $from try.out ! if $test -s try.out -a "X$code" = X42; then fflushall="`$cat try.out`" fi fi *************** *** 13625,13631 **** EOCP set try if eval $compile_ok; then ! yyy=`./try` case "$yyy" in '') gidsize=4 echo "(I can't execute the test program--guessing $gidsize.)" >&4 --- 14158,14164 ---- EOCP set try if eval $compile_ok; then ! yyy=`$run ./try` case "$yyy" in '') gidsize=4 echo "(I can't execute the test program--guessing $gidsize.)" >&4 *************** *** 13659,13665 **** EOCP set try if eval $compile; then ! yyy=`./try` case "$yyy" in '') gidsign=1 echo "(I can't execute the test program--guessing unsigned.)" >&4 --- 14192,14198 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in '') gidsign=1 echo "(I can't execute the test program--guessing unsigned.)" >&4 *************** *** 13694,13700 **** EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 12345678901) sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"'; --- 14227,14233 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 12345678901) sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"'; *************** *** 13716,13722 **** EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 12345678901) sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"'; --- 14249,14255 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 12345678901) sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"'; *************** *** 13739,13745 **** EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 12345678901) sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64; --- 14272,14278 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 12345678901) sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64; *************** *** 13750,13794 **** fi fi ! if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then ! $cat >try.c <<'EOCP' #include #include int main() { ! long long q = 12345678901LL; /* AIX cc requires the LL suffix. */ ! printf("%lld\n", q); } EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 12345678901) ! sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"'; ! sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"'; ! echo "We will use the %lld style." ;; esac fi fi ! if $test X"$sPRId64" = X -a X"$quadtype" != X; then ! $cat >try.c < #include int main() { ! $quadtype q = 12345678901; ! printf("%Ld\n", q); } EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 12345678901) ! sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"'; ! sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"'; ! echo "We will use %Ld." ;; esac fi --- 14283,14327 ---- fi fi ! if $test X"$sPRId64" = X -a X"$quadtype" != X; then ! $cat >try.c < #include int main() { ! $quadtype q = 12345678901; ! printf("%Ld\n", q); } EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 12345678901) ! sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"'; ! sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"'; ! echo "We will use %Ld." ;; esac fi fi ! if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then ! $cat >try.c <<'EOCP' #include #include int main() { ! long long q = 12345678901LL; /* AIX cc requires the LL suffix. */ ! printf("%lld\n", q); } EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 12345678901) ! sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"'; ! sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"'; ! echo "We will use the %lld style." ;; esac fi *************** *** 13805,13811 **** EOCP set try if eval $compile; then ! yyy=`./try$exe_ext` case "$yyy" in 12345678901) sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"'; --- 14338,14344 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in 12345678901) sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"'; *************** *** 14126,14133 **** } EOCP set try ! if eval $compile && ./try 2>&1 >/dev/null; then ! case "`./try`" in "that's all right, then") okay=yes ;; --- 14659,14666 ---- } EOCP set try ! if eval $compile && $run ./try 2>&1 >/dev/null; then ! case "`$run ./try`" in "that's all right, then") okay=yes ;; *************** *** 14375,14387 **** $cc $ccflags -c foo.c >/dev/null 2>&1 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && ! ./foobar >/dev/null 2>&1; then echo "$ar appears to generate random libraries itself." orderlib=false ranlib=":" elif $ar ts bar$_a >/dev/null 2>&1 && $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && ! ./foobar >/dev/null 2>&1; then echo "a table of contents needs to be added with '$ar ts'." orderlib=false ranlib="$ar ts" --- 14908,14920 ---- $cc $ccflags -c foo.c >/dev/null 2>&1 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && ! $run ./foobar >/dev/null 2>&1; then echo "$ar appears to generate random libraries itself." orderlib=false ranlib=":" elif $ar ts bar$_a >/dev/null 2>&1 && $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && ! $run ./foobar >/dev/null 2>&1; then echo "a table of contents needs to be added with '$ar ts'." orderlib=false ranlib="$ar ts" *************** *** 14521,14527 **** EOCP set try if eval $compile_ok; then ! selectminbits=`./try` case "$selectminbits" in '') cat >&4 <&4 <' | $cppstdin $cppminus $cppflags 2>/dev/null | $grep '^[ ]*#.*include' | ! $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq` fi : Check this list of files to be sure we have parsed the cpp output ok. : This will also avoid potentially non-existent files, such --- 15099,15105 ---- xxx=`echo '#include ' | $cppstdin $cppminus $cppflags 2>/dev/null | $grep '^[ ]*#.*include' | ! $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq` fi : Check this list of files to be sure we have parsed the cpp output ok. : This will also avoid potentially non-existent files, such *************** *** 14713,14725 **** set signal if eval $compile_ok; then ! ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst else echo "(I can't seem be able to compile the whole test program)" >&4 echo "(I'll try it in little pieces.)" >&4 set signal -DJUST_NSIG if eval $compile_ok; then ! ./signal$_exe > signal.nsg $cat signal.nsg else echo "I can't seem to figure out how many signals you have." >&4 --- 15246,15258 ---- set signal if eval $compile_ok; then ! $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst else echo "(I can't seem be able to compile the whole test program)" >&4 echo "(I'll try it in little pieces.)" >&4 set signal -DJUST_NSIG if eval $compile_ok; then ! $run ./signal$_exe > signal.nsg $cat signal.nsg else echo "I can't seem to figure out how many signals you have." >&4 *************** *** 14740,14746 **** set signal if eval $compile; then echo "SIG${xx} found." ! ./signal$_exe >> signal.ls1 else echo "SIG${xx} NOT found." fi --- 15273,15279 ---- set signal if eval $compile; then echo "SIG${xx} found." ! $run ./signal$_exe >> signal.ls1 else echo "SIG${xx} NOT found." fi *************** *** 14831,14837 **** EOCP set try if eval $compile_ok; then ! yyy=`./try` case "$yyy" in '') sizesize=4 echo "(I can't execute the test program--guessing $sizesize.)" >&4 --- 15364,15370 ---- EOCP set try if eval $compile_ok; then ! yyy=`$run ./try` case "$yyy" in '') sizesize=4 echo "(I can't execute the test program--guessing $sizesize.)" >&4 *************** *** 14925,14931 **** set ssize_t ssizetype int stdio.h sys/types.h eval $typedef dflt="$ssizetype" ! $cat > ssize.c < #include #define Size_t $sizetype --- 15458,15464 ---- set ssize_t ssizetype int stdio.h sys/types.h eval $typedef dflt="$ssizetype" ! $cat > try.c < #include #define Size_t $sizetype *************** *** 14942,14950 **** } EOM echo " " ! set ssize ! if eval $compile_ok && ./ssize > /dev/null; then ! ssizetype=`./ssize` echo "I'll be using $ssizetype for functions returning a byte count." >&4 else $cat >&4 < /dev/null; then ! ssizetype=`$run ./try` echo "I'll be using $ssizetype for functions returning a byte count." >&4 else $cat >&4 <&4 --- 15567,15573 ---- EOCP set try if eval $compile_ok; then ! yyy=`$run ./try` case "$yyy" in '') uidsize=4 echo "(I can't execute the test program--guessing $uidsize.)" >&4 *************** *** 15067,15073 **** EOCP set try if eval $compile; then ! yyy=`./try` case "$yyy" in '') uidsign=1 echo "(I can't execute the test program--guessing unsigned.)" >&4 --- 15600,15606 ---- EOCP set try if eval $compile; then ! yyy=`$run ./try` case "$yyy" in '') uidsign=1 echo "(I can't execute the test program--guessing unsigned.)" >&4 *************** *** 15155,15214 **** ;; esac - : see if dbm.h is available - : see if dbmclose exists - set dbmclose d_dbmclose - eval $inlibc - - case "$d_dbmclose" in - $define) - set dbm.h i_dbm - eval $inhdr - case "$i_dbm" in - $define) - val="$undef" - set i_rpcsvcdbm - eval $setvar - ;; - *) set rpcsvc/dbm.h i_rpcsvcdbm - eval $inhdr - ;; - esac - ;; - *) echo "We won't be including " - val="$undef" - set i_dbm - eval $setvar - val="$undef" - set i_rpcsvcdbm - eval $setvar - ;; - esac - - : see if this is a sys/file.h system - val='' - set sys/file.h val - eval $inhdr - - : do we need to include sys/file.h ? - case "$val" in - "$define") - echo " " - if $h_sysfile; then - val="$define" - echo "We'll be including ." >&4 - else - val="$undef" - echo "We won't be including ." >&4 - fi - ;; - *) - h_sysfile=false - ;; - esac - set i_sysfile - eval $setvar - : see if fcntl.h is there val='' set fcntl.h val --- 15688,15693 ---- *************** *** 15432,15443 **** EOSH cat <<'EOSH' >> Cppsym.try 'length($1) > 0 { ! printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 ! printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 ! printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 ! printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 }' >> try.c ! echo '}' >> try.c EOSH cat <> Cppsym.try ccflags="$ccflags" --- 15911,15922 ---- EOSH cat <<'EOSH' >> Cppsym.try 'length($1) > 0 { ! printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 ! printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 ! printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 ! printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 }' >> try.c ! echo 'return 0;}' >> try.c EOSH cat <> Cppsym.try ccflags="$ccflags" *************** *** 15445,15451 **** irix-) ccflags="\$ccflags -woff 1178" ;; os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;; esac ! $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext EOSH chmod +x Cppsym.try $eunicefix Cppsym.try --- 15924,15930 ---- irix-) ccflags="\$ccflags -woff 1178" ;; os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;; esac ! $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try EOSH chmod +x Cppsym.try $eunicefix Cppsym.try *************** *** 15525,15531 **** $test "$silent" || sleep 1 fi fi - $rm -f ccsym* Cppsym.* : see if this is a termio system val="$undef" --- 16004,16009 ---- *************** *** 15778,15788 **** $define) avail_ext="$avail_ext $xxx" ;; esac ;; NDBM_File|ndbm_fil) case "$i_ndbm" in $define) case "$osname-$use64bitint" in ! hpux-define) case "$libs" in *-lndbm*) avail_ext="$avail_ext $xxx" ;; esac --- 16256,16271 ---- $define) avail_ext="$avail_ext $xxx" ;; esac ;; + I18N/Langinfo|i18n_lan) + case "$i_langinfo$d_nl_langinfo" in + $define$define) avail_ext="$avail_ext $xxx" ;; + esac + ;; NDBM_File|ndbm_fil) case "$i_ndbm" in $define) case "$osname-$use64bitint" in ! cygwin-*|hpux-define) case "$libs" in *-lndbm*) avail_ext="$avail_ext $xxx" ;; esac *************** *** 15796,15802 **** case "${i_dbm}${i_rpcsvcdbm}" in *"${define}"*) case "$osname-$use64bitint" in ! hpux-define) case "$libs" in *-ldbm*) avail_ext="$avail_ext $xxx" ;; esac --- 16279,16285 ---- case "${i_dbm}${i_rpcsvcdbm}" in *"${define}"*) case "$osname-$use64bitint" in ! cygwin-*|hpux-define) case "$libs" in *-ldbm*) avail_ext="$avail_ext $xxx" ;; esac *************** *** 15828,15835 **** esac ;; Thread|thread) ! case "$usethreads" in ! true|$define|y) avail_ext="$avail_ext $xxx" ;; esac ;; IPC/SysV|ipc/sysv) --- 16311,16321 ---- esac ;; Thread|thread) ! case "$usethreads" in ! true|$define|y) ! case "$useithreads" in ! $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;; ! esac esac ;; IPC/SysV|ipc/sysv) *************** *** 16074,16079 **** --- 16560,16566 ---- _exe='$_exe' _o='$_o' afs='$afs' + afsroot='$afsroot' alignbytes='$alignbytes' ansi2knr='$ansi2knr' aphostname='$aphostname' *************** *** 16129,16135 **** cpprun='$cpprun' cppstdin='$cppstdin' cppsymbols='$cppsymbols' - crosscompile='$crosscompile' cryptlib='$cryptlib' csh='$csh' d_Gconvert='$d_Gconvert' --- 16616,16621 ---- *************** *** 16174,16179 **** --- 16660,16666 ---- d_csh='$d_csh' d_cuserid='$d_cuserid' d_dbl_dig='$d_dbl_dig' + d_dbminitproto='$d_dbminitproto' d_difftime='$d_difftime' d_dirnamlen='$d_dirnamlen' d_dlerror='$d_dlerror' *************** *** 16191,16196 **** --- 16678,16684 ---- d_endsent='$d_endsent' d_eofnblk='$d_eofnblk' d_eunice='$d_eunice' + d_fchdir='$d_fchdir' d_fchmod='$d_fchmod' d_fchown='$d_fchown' d_fcntl='$d_fcntl' *************** *** 16201,16206 **** --- 16689,16695 ---- d_fgetpos='$d_fgetpos' d_flexfnam='$d_flexfnam' d_flock='$d_flock' + d_flockproto='$d_flockproto' d_fork='$d_fork' d_fpathconf='$d_fpathconf' d_fpos64_t='$d_fpos64_t' *************** *** 16287,16292 **** --- 16776,16782 ---- d_mktime='$d_mktime' d_mmap='$d_mmap' d_modfl='$d_modfl' + d_modfl_pow32_bug='$d_modfl_pow32_bug' d_mprotect='$d_mprotect' d_msg='$d_msg' d_msg_ctrunc='$d_msg_ctrunc' *************** *** 16303,16308 **** --- 16793,16799 ---- d_munmap='$d_munmap' d_mymalloc='$d_mymalloc' d_nice='$d_nice' + d_nl_langinfo='$d_nl_langinfo' d_nv_preserves_uv='$d_nv_preserves_uv' d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits' d_off64_t='$d_off64_t' *************** *** 16317,16322 **** --- 16808,16814 ---- d_pipe='$d_pipe' d_poll='$d_poll' d_portable='$d_portable' + d_pthread_atfork='$d_pthread_atfork' d_pthread_yield='$d_pthread_yield' d_pwage='$d_pwage' d_pwchange='$d_pwchange' *************** *** 16386,16396 **** --- 16878,16891 ---- d_sigprocmask='$d_sigprocmask' d_sigsetjmp='$d_sigsetjmp' d_sockatmark='$d_sockatmark' + d_sockatmarkproto='$d_sockatmarkproto' d_socket='$d_socket' d_socklen_t='$d_socklen_t' d_sockpair='$d_sockpair' d_socks5_init='$d_socks5_init' d_sqrtl='$d_sqrtl' + d_sresgproto='$d_sresgproto' + d_sresuproto='$d_sresuproto' d_statblks='$d_statblks' d_statfs_f_flags='$d_statfs_f_flags' d_statfs_s='$d_statfs_s' *************** *** 16407,16412 **** --- 16902,16908 ---- d_strctcpy='$d_strctcpy' d_strerrm='$d_strerrm' d_strerror='$d_strerror' + d_strftime='$d_strftime' d_strtod='$d_strtod' d_strtol='$d_strtol' d_strtold='$d_strtold' *************** *** 16419,16424 **** --- 16915,16921 ---- d_suidsafe='$d_suidsafe' d_symlink='$d_symlink' d_syscall='$d_syscall' + d_syscallproto='$d_syscallproto' d_sysconf='$d_sysconf' d_sysernlst='$d_sysernlst' d_syserrlst='$d_syserrlst' *************** *** 16437,16442 **** --- 16934,16940 ---- d_uname='$d_uname' d_union_semun='$d_union_semun' d_usleep='$d_usleep' + d_usleepproto='$d_usleepproto' d_ustat='$d_ustat' d_vendorarch='$d_vendorarch' d_vendorbin='$d_vendorbin' *************** *** 16456,16461 **** --- 16954,16962 ---- date='$date' db_hashtype='$db_hashtype' db_prefixtype='$db_prefixtype' + db_version_major='$db_version_major' + db_version_minor='$db_version_minor' + db_version_patch='$db_version_patch' defvoidused='$defvoidused' direntrytype='$direntrytype' dlext='$dlext' *************** *** 16480,16485 **** --- 16981,16987 ---- fpossize='$fpossize' fpostype='$fpostype' freetype='$freetype' + from='$from' full_ar='$full_ar' full_csh='$full_csh' full_sed='$full_sed' *************** *** 16520,16525 **** --- 17022,17028 ---- i_iconv='$i_iconv' i_ieeefp='$i_ieeefp' i_inttypes='$i_inttypes' + i_langinfo='$i_langinfo' i_libutil='$i_libutil' i_limits='$i_limits' i_locale='$i_locale' *************** *** 16703,16708 **** --- 17206,17212 ---- path_sep='$path_sep' perl5='$perl5' perl='$perl' + perl_patchlevel='$perl_patchlevel' perladmin='$perladmin' perllibs='$perllibs' perlpath='$perlpath' *************** *** 16729,16734 **** --- 17233,17239 ---- revision='$revision' rm='$rm' rmail='$rmail' + run='$run' runnm='$runnm' sPRIEUldbl='$sPRIEUldbl' sPRIFUldbl='$sPRIFUldbl' *************** *** 16803,16813 **** --- 17308,17320 ---- sysman='$sysman' tail='$tail' tar='$tar' + targetarch='$targetarch' tbl='$tbl' tee='$tee' test='$test' timeincl='$timeincl' timetype='$timetype' + to='$to' touch='$touch' tr='$tr' trnl='$trnl' *************** *** 16830,16835 **** --- 17337,17343 ---- use5005threads='$use5005threads' use64bitall='$use64bitall' use64bitint='$use64bitint' + usecrosscompile='$usecrosscompile' usedl='$usedl' useithreads='$useithreads' uselargefiles='$uselargefiles' *************** *** 16841,16846 **** --- 17349,17355 ---- useopcode='$useopcode' useperlio='$useperlio' useposix='$useposix' + usereentrant='$usereentrant' usesfio='$usesfio' useshrplib='$useshrplib' usesocks='$usesocks' *************** *** 16865,16870 **** --- 17374,17380 ---- vendorprefix='$vendorprefix' vendorprefixexp='$vendorprefixexp' version='$version' + version_patchlevel_string='$version_patchlevel_string' versiononly='$versiononly' vi='$vi' voidflags='$voidflags' *************** *** 16882,16888 **** : add special variables $test -f $src/patchlevel.h && \ awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh ! echo "CONFIGDOTSH=true" >>config.sh : propagate old symbols if $test -f UU/config.sh; then --- 17392,17399 ---- : add special variables $test -f $src/patchlevel.h && \ awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh ! echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh ! echo "PERL_CONFIG_SH=true" >>config.sh : propagate old symbols if $test -f UU/config.sh; then *************** *** 16912,16918 **** case "$alldone" in exit) $rm -rf UU ! echo "Done." exit 0 ;; cont) --- 17423,17429 ---- case "$alldone" in exit) $rm -rf UU ! echo "Extraction done." exit 0 ;; cont) *************** *** 16942,16948 **** --- 17453,17461 ---- echo " " exec 1>&4 + pwd=`pwd` . ./UU/extract + cd $pwd if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then dflt=y *************** *** 16972,16978 **** echo " " echo "Now you must run a $make." else ! echo "Done." fi if $test -f Policy.sh; then --- 17485,17491 ---- echo " " echo "Now you must run a $make." else ! echo "Configure done." fi if $test -f Policy.sh; then diff -c /dev/null 'perl-5.7.2/Cross/README' Index: ./Cross/README *** ./Cross/README Thu Jan 1 02:00:00 1970 --- ./Cross/README Mon Jul 9 17:09:38 2001 *************** *** 0 **** --- 1,4 ---- + If Perl is built using a cross-compilation environment the Cross + directory will contain temporary helper scripts for the duration + of the build, see INSTALL/Cross-compilation for more information. + diff -c 'perl-5.7.1/INSTALL' 'perl-5.7.2/INSTALL' Index: ./INSTALL Prereq: 1.58 *** ./INSTALL Mon Mar 19 04:00:56 2001 --- ./INSTALL Mon Jul 9 17:09:38 2001 *************** *** 42,50 **** make test make install ! For information on non-Unix systems, see the section on ! L<"Porting information"> below. If you have problems, corrections, or questions, please see L<"Reporting Problems"> below. --- 42,55 ---- make test make install ! For information on non-Unix systems, see the section on L<"Porting ! information"> below. + If "make install" just says "`install' is up to date" or something + similar, you may be on case-preserving filesystems such as Mac's HFS+ + and you should say "make install-all". (This confusion brought to you + by the Perl distribution having a file called INSTALL.) + If you have problems, corrections, or questions, please see L<"Reporting Problems"> below. *************** *** 178,187 **** =head1 Space Requirements ! The complete perl5 source tree takes up about 20 MB of disk space. ! After completing make, it takes up roughly 30 MB, though the actual total is likely to be quite system-dependent. The installation ! directories need something on the order of 20 MB, though again that value is system-dependent. =head1 Start with a Fresh Distribution --- 183,192 ---- =head1 Space Requirements ! The complete perl5 source tree takes up about 35 MB of disk space. ! After completing make, it takes up roughly 50 MB, though the actual total is likely to be quite system-dependent. The installation ! directories need something on the order of 30 MB, though again that value is system-dependent. =head1 Start with a Fresh Distribution *************** *** 725,735 **** Eventually (by perl v5.6.0) this internal confusion ought to disappear, and these options may disappear as well. =head2 64 bit support. ! If your platform does not have 64 bits natively, but can simulate them with ! compiler flags and/or C or C, you can build a perl that ! uses 64 bits. There are actually two modes of 64-bitness: the first one is achieved using Configure -Duse64bitint and the second one using Configure --- 730,759 ---- Eventually (by perl v5.6.0) this internal confusion ought to disappear, and these options may disappear as well. + =head2 Large file support. + + Since Perl 5.6.0 Perl has supported large files (files larger than + 2 gigabytes), and in many common platforms like Linux or Solaris this + support is on by default. + + This is both good and bad. It is good in that you can use large files, + seek(), stat(), and -s them. It is bad if you are interfacing Perl + using some extension, also the components you are connecting to must + be large file aware: if Perl thinks files can be large but the other + parts of the software puzzle do not understand the concept, bad things + will happen. One popular extension suffering from this ailment is the + Apache extension mod_perl. + + There's also one known limitation with the current large files + implementation: unless you also have 64-bit integers (see the next + section), you cannot use the printf/sprintf non-decimal integer + formats like C<%x> to print filesizes. You can use C<%d>, though. + =head2 64 bit support. ! If your platform does not have 64 bits natively, but can simulate them ! with compiler flags and/or C or C, you can build a ! perl that uses 64 bits. There are actually two modes of 64-bitness: the first one is achieved using Configure -Duse64bitint and the second one using Configure *************** *** 891,898 **** To build a shared libperl, the environment variable controlling shared library search (LD_LIBRARY_PATH in most systems, DYLD_LIBRARY_PATH for ! NeXTSTEP/OPENSTEP/Darwin, LIBRARY_PATH for BeOS, SHLIB_PATH for ! HP-UX, LIBPATH for AIX, PATH for Cygwin) must be set up to include the Perl build directory because that's where the shared libperl will be created. Configure arranges makefile to have the correct shared library search settings. --- 915,922 ---- To build a shared libperl, the environment variable controlling shared library search (LD_LIBRARY_PATH in most systems, DYLD_LIBRARY_PATH for ! NeXTSTEP/OPENSTEP/Darwin, LIBRARY_PATH for BeOS, LD_LIBRARY_PATH/SHLIB_PATH ! for HP-UX, LIBPATH for AIX, PATH for Cygwin) must be set up to include the Perl build directory because that's where the shared libperl will be created. Configure arranges makefile to have the correct shared library search settings. *************** *** 1390,1395 **** --- 1414,1439 ---- =back + =head1 suidperl + + suidperl is an optional component, which is built or installed by default. + From perlfaq1: + + On some systems, setuid and setgid scripts (scripts written + in the C shell, Bourne shell, or Perl, for example, with the + set user or group ID permissions enabled) are insecure due to + a race condition in the kernel. For those systems, Perl versions + 5 and 4 attempt to work around this vulnerability with an optional + component, a special program named suidperl, also known as sperl. + This program attempts to emulate the set-user-ID and set-group-ID + features of the kernel. + + Because of the buggy history of suidperl, and the difficulty + of properly security auditing as large and complex piece of + software as Perl, we cannot recommend using suidperl and the feature + should be considered deprecated. + Instead use for example 'sudo': http://www.courtesan.com/sudo/ + =head1 make depend This will look for all the includes. The output is stored in makefile. *************** *** 1693,1698 **** --- 1737,1846 ---- =back + =head2 Cross-compilation + + Starting from Perl 5.8 Perl has the beginnings of cross-compilation + support. What is known to work is running Configure in a + cross-compilation environment and building the miniperl executable. + What is known not work work is building the perl executable because + that would require building extensions: Dynaloader statically and + File::Glob dynamically, for extensions one needs MakeMaker and + MakeMaker is not yet cross-compilation aware, and neither is + the main Makefile. + + Since the functionality is so lacking, it must be considered + highly experimental. It is so experimental that it is not even + mentioned during an interactive Configure session, a direct command + line invocation (detailed shortly) is required to access the + functionality. + + NOTE: Perl is routinely built using cross-compilation + in the EPOC environment but the solutions from there + can't directly be used elsewhere. + + The one environment where cross-compilation has successfully been used + as of this writing is the Compaq iPAQ running ARM Linux. The build + host was Intel Linux, the networking setup was PPP + SSH. The exact + setup details are beyond the scope of this document, see + http://www.handhelds.org/ for more information. + + To run Configure in cross-compilation mode the basic switch is + C<-Dusecrosscompile>. + + sh ./Configure -des -Dusecrosscompile -D... + + This will make the cpp symbol USE_CROSS_COMPILE and the %Config + symbol C available. + + During the Configure and build, certain helper scripts will be created + into the Cross/ subdirectory. The scripts are used to execute a + cross-compiled executable, and to transfer files to and from the + target host. The execution scripts are named F and the + transfer scripts F and F. The part after the dash is + the method to use for remote execution and transfer: by default the + methods are B and B, thus making the scripts F, + F, and F. + + To configure the scripts for a target host and a directory (in which + the execution will happen and which is to and from where the transfer + happens), supply Configure with + + -Dtargethost=so.me.ho.st -Dtargetdir=/tar/get/dir + + The targethost is what e.g. ssh will use as the hostname, the targetdir + must exist (the scripts won't create it), the targetdir defaults to /tmp. + You can also specify a username to use for ssh/rsh logins + + -Dtargetuser=luser + + but in case you don't, "root" will be used. + + Because this is a cross-compilation effort, you will also need to specify + which target environment and which compilation environment to use. + This includes the compiler, the header files, and the libraries. + In the below we use the usual settings for the iPAQ cross-compilation + environment: + + -Dtargetarch=arm-linux + -Dcc=arm-linux-gcc + -Dusrinc=/skiff/local/arm-linux/include + -Dincpth=/skiff/local/arm-linux/include + -Dlibpth=/skiff/local/arm-linux/lib + + If the name of the C has the usual GNU C semantics for cross + compilers, that is, CPU-OS-gcc, the names of the C, C, and + C will also be automatically chosen to be CPU-OS-ar and so on. + (The C requires more thought and will be chosen later by Configure + as appropriate.) Also, in this case the incpth, libpth, and usrinc + will be guessed by Configure (unless explicitly set to something else, + in which case Configure's guesses with be appended). + + In addition to the default execution/transfer methods you can also + choose B for execution, and B or B for transfer, + for example: + + -Dtargetrun=rsh -Dtargetto=rcp -Dtargetfrom=cp + + Putting it all together: + + sh ./Configure -des -Dusecrosscompile \ + -Dtargethost=so.me.ho.st \ + -Dtargetdir=/tar/get/dir \ + -Dtargetuser=root \ + -Dtargetarch=arm-linux \ + -Dcc=arm-linux-gcc \ + -Dusrinc=/skiff/local/arm-linux/include \ + -Dincpth=/skiff/local/arm-linux/include \ + -Dlibpth=/skiff/local/arm-linux/lib \ + -D... + + or if you are happy with the defaults + + sh ./Configure -des -Dusecrosscompile \ + -Dtargethost=so.me.ho.st \ + -Dcc=arm-linux-gcc \ + -D... + =head1 make test This will run the regression tests on the perl you just made. If *************** *** 2162,2167 **** a larger package) please B modify these installation instructions and the contact information to match your distribution. - =head1 LAST MODIFIED - - $Id: INSTALL,v 1.58 1999/07/23 14:43:00 doughera Exp $ --- 2310,2312 ---- diff -c 'perl-5.7.1/MANIFEST' 'perl-5.7.2/MANIFEST' Index: ./MANIFEST *** ./MANIFEST Mon Apr 9 16:55:03 2001 --- ./MANIFEST Fri Jul 13 04:13:28 2001 *************** *** 1,5 **** ! AUTHORS Contact info for contributors Artistic The "Artistic License" Changes Differences from previous version Changes5.000 Differences between 4.x and 5.000 Changes5.001 Differences between 5.000 and 5.001 --- 1,12 ---- ! apollo/netinet/in.h Apollo DomainOS port: C header file frontend Artistic The "Artistic License" + AUTHORS Contact info for contributors + av.c Array value code + av.h Array value header + beos/nm.c BeOS port + bytecode.pl Produces ext/ByteLoader/byterun.h, ext/ByteLoader/byterun.c and ext/B/Asmdata.pm + cc_runtime.h Macros need by runtime of compiler-generated code + cflags.SH A script that emits C compilation flags per file Changes Differences from previous version Changes5.000 Differences between 4.x and 5.000 Changes5.001 Differences between 5.000 and 5.001 *************** *** 8,88 **** Changes5.004 Differences between 5.003 and 5.004 Changes5.005 Differences between 5.004 and 5.005 Changes5.6 Differences between 5.005 and 5.6 - Configure Portability tool - Copying The GNU General Public License - EXTERN.h Included before foreign .h files - INSTALL Detailed installation instructions - INTERN.h Included before domestic .h files - MANIFEST This list of files - Makefile.SH A script that generates Makefile - Makefile.micro microperl Makefile - Policy_sh.SH Hold site-wide preferences between Configure runs. - Porting/Contract Social contract for contributed modules in Perl core - Porting/Glossary Glossary of config.sh variables - Porting/config.sh Sample config.sh - Porting/config_H Sample config.h - Porting/findvars Find occurrences of words - Porting/fixCORE Find and fix modules that generate warnings - Porting/fixvars Find undeclared variables with C compiler and fix em - Porting/genlog Generate formatted changelogs by querying p4d - Porting/makerel Release making utility - Porting/p4d2p Generate standard patches from p4 diffs - Porting/p4desc Smarter 'p4 describe', outputs diffs for new files - Porting/patching.pod How to report changes made to Perl - Porting/patchls Flexible patch file listing utility - Porting/pumpkin.pod Guidelines and hints for Perl maintainers - Porting/repository.pod How to use the Perl repository - README The Instructions - README.Y2K Notes about Year 2000 concerns - README.aix Notes about AIX port - README.amiga Notes about AmigaOS port - README.apollo Notes about Apollo DomainOS port - README.beos Notes about BeOS port - README.bs2000 Notes about BS2000 POSIX port - README.cygwin Notes about Cygwin port - README.dos Notes about dos/djgpp port - README.epoc Notes about EPOC port - README.hpux Notes about HP-UX port - README.hurd Notes about GNU/Hurd port - README.machten Notes about Power MachTen port - README.macos Notes about Mac OS (Classic) - README.micro Notes about microperl - README.mint Notes about Atari MiNT port - README.mpeix Notes about MPE/iX port - README.os2 Notes about OS/2 port - README.os390 Notes about OS/390 (nee MVS) port - README.plan9 Notes about Plan9 port - README.qnx Notes about QNX port - README.solaris Notes about Solaris port - README.threads Notes about multithreading - README.vmesa Notes about VM/ESA port - README.vms Notes about installing the VMS port - README.vos Notes about Stratus VOS port - README.win32 Notes about Win32 port - Todo The Wishlist - Todo-5.6 What needs doing before/during the 5.6.x release cycle - Todo.micro The Wishlist for microperl - XSUB.h Include file for extension subroutines - apollo/netinet/in.h Apollo DomainOS port: C header file frontend - av.c Array value code - av.h Array value header - beos/nm.c BeOS port - bytecode.pl Produces ext/ByteLoader/byterun.h, ext/ByteLoader/byterun.c and ext/B/Asmdata.pm - cc_runtime.h Macros need by runtime of compiler-generated code - cflags.SH A script that emits C compilation flags per file config_h.SH Produces config.h configpm Produces lib/Config.pm configure.com Configure-equivalent for VMS configure.gnu Crude emulation of GNU configure cop.h Control operator header cv.h Code value header - cygwin/Makefile.SHs Shared library generation for Cygwin port cygwin/cygwin.c Additional code for Cygwin port cygwin/ld2.in ld wrapper template for Cygwin port cygwin/perlld.in dll generator template for Cygwin port deb.c Debugging routines ! djgpp/config.over DOS/DJGPP port ! djgpp/configure.bat DOS/DJGPP port djgpp/djgpp.c DOS/DJGPP port djgpp/djgppsed.sh DOS/DJGPP port djgpp/fixpmain DOS/DJGPP port --- 15,36 ---- Changes5.004 Differences between 5.003 and 5.004 Changes5.005 Differences between 5.004 and 5.005 Changes5.6 Differences between 5.005 and 5.6 config_h.SH Produces config.h configpm Produces lib/Config.pm + Configure Portability tool configure.com Configure-equivalent for VMS configure.gnu Crude emulation of GNU configure cop.h Control operator header + Copying The GNU General Public License + Cross/README Cross-compilation cv.h Code value header cygwin/cygwin.c Additional code for Cygwin port cygwin/ld2.in ld wrapper template for Cygwin port + cygwin/Makefile.SHs Shared library generation for Cygwin port cygwin/perlld.in dll generator template for Cygwin port deb.c Debugging routines ! djgpp/config.over DOS/DJGPP port ! djgpp/configure.bat DOS/DJGPP port djgpp/djgpp.c DOS/DJGPP port djgpp/djgppsed.sh DOS/DJGPP port djgpp/fixpmain DOS/DJGPP port *************** *** 102,137 **** epoc/epoc_stubs.c EPOC port epoc/epocish.c EPOC port epoc/epocish.h EPOC port ! epoc/link.pl EPOC port link a exe ext/B/B.pm Compiler backend support functions and methods ext/B/B.xs Compiler backend external subroutines ext/B/B/Asmdata.pm Compiler backend data for assembler ext/B/B/Assembler.pm Compiler backend assembler support functions ext/B/B/Bblock.pm Compiler basic block analysis support ext/B/B/Bytecode.pm Compiler Bytecode backend ext/B/B/C.pm Compiler C backend ext/B/B/CC.pm Compiler CC backend ext/B/B/Concise.pm Compiler Concise backend ext/B/B/Debug.pm Compiler Debug backend ext/B/B/Deparse.pm Compiler Deparse backend ext/B/B/Disassembler.pm Compiler Disassembler backend ext/B/B/Lint.pm Compiler Lint backend ext/B/B/Showlex.pm Compiler Showlex backend ext/B/B/Stackobj.pm Compiler stack objects support functions ext/B/B/Stash.pm Compiler module to identify stashes ext/B/B/Terse.pm Compiler Terse backend ext/B/B/Xref.pm Compiler Xref backend ! ext/B/B/assemble Assemble compiler bytecode ! ext/B/B/cc_harness Simplistic wrapper for using -MO=CC compiler ! ext/B/B/disassemble Disassemble compiler bytecode output ! ext/B/B/makeliblinks Make a simplistic XSUB .so symlink tree for compiler ext/B/Makefile.PL Compiler backend makefile writer ext/B/NOTES Compiler backend notes ext/B/O.pm Compiler front-end module (-MO=...) - ext/B/README Compiler backend README - ext/B/TESTS Compiler backend test data - ext/B/Todo Compiler backend Todo list - ext/B/defsubs_h.PL Generator for constant subroutines ext/B/ramblings/cc.notes Compiler ramblings: notes on CC backend ext/B/ramblings/curcop.runtime Compiler ramblings: notes on curcop use ext/B/ramblings/flip-flop Compiler ramblings: notes on flip-flop --- 50,89 ---- epoc/epoc_stubs.c EPOC port epoc/epocish.c EPOC port epoc/epocish.h EPOC port ! epoc/link.pl EPOC port link a exe ! ext/attrs.t See if attrs works with C ! ext/attrs/attrs.pm attrs extension Perl module ! ext/attrs/attrs.xs attrs extension external subroutines ! ext/attrs/Makefile.PL attrs extension makefile writer ext/B/B.pm Compiler backend support functions and methods + ext/B/B.t See if B works ext/B/B.xs Compiler backend external subroutines ext/B/B/Asmdata.pm Compiler backend data for assembler + ext/B/B/assemble Assemble compiler bytecode ext/B/B/Assembler.pm Compiler backend assembler support functions ext/B/B/Bblock.pm Compiler basic block analysis support ext/B/B/Bytecode.pm Compiler Bytecode backend ext/B/B/C.pm Compiler C backend ext/B/B/CC.pm Compiler CC backend + ext/B/B/cc_harness Simplistic wrapper for using -MO=CC compiler ext/B/B/Concise.pm Compiler Concise backend ext/B/B/Debug.pm Compiler Debug backend ext/B/B/Deparse.pm Compiler Deparse backend + ext/B/B/disassemble Disassemble compiler bytecode output ext/B/B/Disassembler.pm Compiler Disassembler backend ext/B/B/Lint.pm Compiler Lint backend + ext/B/B/makeliblinks Make a simplistic XSUB .so symlink tree for compiler ext/B/B/Showlex.pm Compiler Showlex backend ext/B/B/Stackobj.pm Compiler stack objects support functions ext/B/B/Stash.pm Compiler module to identify stashes ext/B/B/Terse.pm Compiler Terse backend ext/B/B/Xref.pm Compiler Xref backend ! ext/B/Debug.t See if B::Debug works ! ext/B/defsubs_h.PL Generator for constant subroutines ! ext/B/Deparse.t See if B::Deparse works ext/B/Makefile.PL Compiler backend makefile writer ext/B/NOTES Compiler backend notes ext/B/O.pm Compiler front-end module (-MO=...) ext/B/ramblings/cc.notes Compiler ramblings: notes on CC backend ext/B/ramblings/curcop.runtime Compiler ramblings: notes on curcop use ext/B/ramblings/flip-flop Compiler ramblings: notes on flip-flop *************** *** 138,168 **** ext/B/ramblings/magic Compiler ramblings: notes on magic ext/B/ramblings/reg.alloc Compiler ramblings: register allocation ext/B/ramblings/runtime.porting Compiler ramblings: porting PP enging ! ext/B/typemap Compiler backend interface types ext/ByteLoader/ByteLoader.pm Bytecode loader Perl module ext/ByteLoader/ByteLoader.xs Bytecode loader external subroutines - ext/ByteLoader/Makefile.PL Bytecode loader makefile writer - ext/ByteLoader/bytecode.h Bytecode header for bytecode loader ext/ByteLoader/byterun.c Runtime support for bytecode loader ext/ByteLoader/byterun.h Header for byterun.c ext/ByteLoader/hints/sunos.pl Hints for named architecture ! ext/Cwd/Cwd.xs Cwd extension external subroutines ! ext/Cwd/Makefile.PL Cwd extension makefile maker ! ext/DB_File/Changes Berkeley DB extension change log ! ext/DB_File/DB_File.pm Berkeley DB extension Perl module ! ext/DB_File/DB_File.xs Berkeley DB extension external subroutines ! ext/DB_File/DB_File_BS Berkeley DB extension mkbootstrap fodder ! ext/DB_File/Makefile.PL Berkeley DB extension makefile writer ! ext/DB_File/dbinfo Berkeley DB database version checker ! ext/DB_File/hints/dynixptx.pl Hint for DB_File for named architecture ! ext/DB_File/hints/sco.pl Hint for DB_File for named architecture ! ext/DB_File/typemap Berkeley DB extension interface types ! ext/DB_File/version.c Berkeley DB extension interface version check ext/Data/Dumper/Changes Data pretty printer, changelog ext/Data/Dumper/Dumper.pm Data pretty printer, module ext/Data/Dumper/Dumper.xs Data pretty printer, externals ext/Data/Dumper/Makefile.PL Data pretty printer, makefile writer ext/Data/Dumper/Todo Data pretty printer, futures ext/Devel/DProf/Changes Perl code profiler changelog ext/Devel/DProf/DProf.pm Perl code profiler ext/Devel/DProf/DProf.xs Perl code profiler --- 90,131 ---- ext/B/ramblings/magic Compiler ramblings: notes on magic ext/B/ramblings/reg.alloc Compiler ramblings: register allocation ext/B/ramblings/runtime.porting Compiler ramblings: porting PP enging ! ext/B/README Compiler backend README ! ext/B/Showlex.t See if B::ShowLex works ! ext/B/Stash.t See if B::Stash works ! ext/B/TESTS Compiler backend test data ! ext/B/Todo Compiler backend Todo list ! ext/B/typemap Compiler backend interface types ! ext/ByteLoader/bytecode.h Bytecode header for bytecode loader ext/ByteLoader/ByteLoader.pm Bytecode loader Perl module ext/ByteLoader/ByteLoader.xs Bytecode loader external subroutines ext/ByteLoader/byterun.c Runtime support for bytecode loader ext/ByteLoader/byterun.h Header for byterun.c ext/ByteLoader/hints/sunos.pl Hints for named architecture ! ext/ByteLoader/Makefile.PL Bytecode loader makefile writer ! ext/Cwd/Cwd.t See if Cwd works ! ext/Cwd/Cwd.xs Cwd extension external subroutines ! ext/Cwd/Makefile.PL Cwd extension makefile maker ext/Data/Dumper/Changes Data pretty printer, changelog ext/Data/Dumper/Dumper.pm Data pretty printer, module ext/Data/Dumper/Dumper.xs Data pretty printer, externals ext/Data/Dumper/Makefile.PL Data pretty printer, makefile writer + ext/Data/Dumper/t/dumper.t See if Data::Dumper works + ext/Data/Dumper/t/overload.t See if Data::Dumper works for overloaded data ext/Data/Dumper/Todo Data pretty printer, futures + ext/DB_File/Changes Berkeley DB extension change log + ext/DB_File/DB_File.pm Berkeley DB extension Perl module + ext/DB_File/DB_File.xs Berkeley DB extension external subroutines + ext/DB_File/DB_File_BS Berkeley DB extension mkbootstrap fodder + ext/DB_File/dbinfo Berkeley DB database version checker + ext/DB_File/hints/dynixptx.pl Hint for DB_File for named architecture + ext/DB_File/hints/sco.pl Hint for DB_File for named architecture + ext/DB_File/Makefile.PL Berkeley DB extension makefile writer + ext/DB_File/t/db-btree.t See if DB_File works + ext/DB_File/t/db-hash.t See if DB_File works + ext/DB_File/t/db-recno.t See if DB_File works + ext/DB_File/typemap Berkeley DB extension interface types + ext/DB_File/version.c Berkeley DB extension interface version check ext/Devel/DProf/Changes Perl code profiler changelog ext/Devel/DProf/DProf.pm Perl code profiler ext/Devel/DProf/DProf.xs Perl code profiler *************** *** 171,187 **** ext/Devel/Peek/Changes Data debugging tool, changelog ext/Devel/Peek/Makefile.PL Data debugging tool, makefile writer ext/Devel/Peek/Peek.pm Data debugging tool, module and pod ext/Devel/Peek/Peek.xs Data debugging tool, externals ! ext/Digest/MD5/Changes Digest::MD5 extension changes ! ext/Digest/MD5/MD5.pm Digest::MD5 extension ! ext/Digest/MD5/MD5.xs Digest::MD5 extension ! ext/Digest/MD5/Makefile.PL Digest::MD5 extension makefile writer ext/Digest/MD5/hints/irix_6.pl Hints for named architecture ! ext/Digest/MD5/typemap Digest::MD5 extension ! ext/DynaLoader/DynaLoader_pm.PL Dynamic Loader perl module ! ext/DynaLoader/Makefile.PL Dynamic Loader makefile writer ! ext/DynaLoader/README Dynamic Loader notes and intro ! ext/DynaLoader/XSLoader_pm.PL Simple XS Loader perl module ext/DynaLoader/dl_aix.xs AIX implementation ext/DynaLoader/dl_beos.xs BeOS implementation ext/DynaLoader/dl_dld.xs GNU dld style implementation --- 134,151 ---- ext/Devel/Peek/Changes Data debugging tool, changelog ext/Devel/Peek/Makefile.PL Data debugging tool, makefile writer ext/Devel/Peek/Peek.pm Data debugging tool, module and pod + ext/Devel/Peek/Peek.t See if Devel::Peek works ext/Devel/Peek/Peek.xs Data debugging tool, externals ! ext/Digest/MD5/Changes Digest::MD5 extension changes ext/Digest/MD5/hints/irix_6.pl Hints for named architecture ! ext/Digest/MD5/Makefile.PL Digest::MD5 extension makefile writer ! ext/Digest/MD5/MD5.pm Digest::MD5 extension ! ext/Digest/MD5/MD5.xs Digest::MD5 extension ! ext/Digest/MD5/t/aaa.t See if Digest::MD5 extension works ! ext/Digest/MD5/t/align.t See if Digest::MD5 extension works ! ext/Digest/MD5/t/badfile.t See if Digest::MD5 extension works ! ext/Digest/MD5/t/files.t See if Digest::MD5 extension works ! ext/Digest/MD5/typemap Digest::MD5 extension ext/DynaLoader/dl_aix.xs AIX implementation ext/DynaLoader/dl_beos.xs BeOS implementation ext/DynaLoader/dl_dld.xs GNU dld style implementation *************** *** 196,209 **** ext/DynaLoader/dl_vmesa.xs VM/ESA implementation ext/DynaLoader/dl_vms.xs VMS implementation ext/DynaLoader/dlutils.c Dynamic loader utilities for dl_*.xs files ext/DynaLoader/hints/aix.pl Hint for DynaLoader for named architecture ext/DynaLoader/hints/linux.pl Hint for DynaLoader for named architecture ext/DynaLoader/hints/netbsd.pl Hint for DynaLoader for named architecture ext/DynaLoader/hints/openbsd.pl Hint for DynaLoader for named architecture ext/Encode/Encode.pm Encode extension ext/Encode/Encode.xs Encode extension ! ext/Encode/Encode/EncodeFormat.pod Encoding table format ! ext/Encode/Encode/Tcl.pm Handler for .enc encodings ext/Encode/Encode/ascii.enc Encoding tables ext/Encode/Encode/ascii.ucm Encoding tables ext/Encode/Encode/big5.enc Encoding tables --- 160,182 ---- ext/DynaLoader/dl_vmesa.xs VM/ESA implementation ext/DynaLoader/dl_vms.xs VMS implementation ext/DynaLoader/dlutils.c Dynamic loader utilities for dl_*.xs files + ext/DynaLoader/DynaLoader_pm.PL Dynamic Loader perl module ext/DynaLoader/hints/aix.pl Hint for DynaLoader for named architecture ext/DynaLoader/hints/linux.pl Hint for DynaLoader for named architecture ext/DynaLoader/hints/netbsd.pl Hint for DynaLoader for named architecture ext/DynaLoader/hints/openbsd.pl Hint for DynaLoader for named architecture + ext/DynaLoader/Makefile.PL Dynamic Loader makefile writer + ext/DynaLoader/README Dynamic Loader notes and intro + ext/DynaLoader/XSLoader_pm.PL Simple XS Loader perl module + ext/Encode.t See if Encode works + ext/Encode/compile Encode extension + ext/Encode/encengine.c Encode extension + ext/Encode/encode.h Encode extension ext/Encode/Encode.pm Encode extension ext/Encode/Encode.xs Encode extension ! ext/Encode/Encode/7bit-jis.enc Encoding tables ! ext/Encode/Encode/7bit-kana.enc Encoding tables ! ext/Encode/Encode/7bit-kr.enc Encoding tables ext/Encode/Encode/ascii.enc Encoding tables ext/Encode/Encode/ascii.ucm Encoding tables ext/Encode/Encode/big5.enc Encoding tables *************** *** 246,251 **** --- 219,225 ---- ext/Encode/Encode/cp950.enc Encoding tables ext/Encode/Encode/dingbats.enc Encoding tables ext/Encode/Encode/dingbats.ucm Encoding tables + ext/Encode/Encode/EncodeFormat.pod Encoding table format ext/Encode/Encode/euc-cn.enc Encoding tables ext/Encode/Encode/euc-jp.enc Encoding tables ext/Encode/Encode/euc-kr.enc Encoding tables *************** *** 252,263 **** ext/Encode/Encode/gb12345.enc Encoding tables ext/Encode/Encode/gb1988.enc Encoding tables ext/Encode/Encode/gb2312.enc Encoding tables ! ext/Encode/Encode/gsm0338.enc Encoding tables ext/Encode/Encode/iso2022-jp.enc Encoding tables ext/Encode/Encode/iso2022-kr.enc Encoding tables ! ext/Encode/Encode/iso2022.enc Encoding tables ! ext/Encode/Encode/iso8859-1.enc Encoding tables ! ext/Encode/Encode/iso8859-1.ucm Encoding tables ext/Encode/Encode/iso8859-10.enc Encoding tables ext/Encode/Encode/iso8859-10.ucm Encoding tables ext/Encode/Encode/iso8859-13.enc Encoding tables --- 226,238 ---- ext/Encode/Encode/gb12345.enc Encoding tables ext/Encode/Encode/gb1988.enc Encoding tables ext/Encode/Encode/gb2312.enc Encoding tables ! ext/Encode/Encode/gsm0338.enc Encoding tables ! ext/Encode/Encode/HZ.enc Encoding tables ext/Encode/Encode/iso2022-jp.enc Encoding tables ext/Encode/Encode/iso2022-kr.enc Encoding tables ! ext/Encode/Encode/iso2022.enc Encoding tables ! ext/Encode/Encode/iso8859-1.enc Encoding tables ! ext/Encode/Encode/iso8859-1.ucm Encoding tables ext/Encode/Encode/iso8859-10.enc Encoding tables ext/Encode/Encode/iso8859-10.ucm Encoding tables ext/Encode/Encode/iso8859-13.enc Encoding tables *************** *** 268,343 **** ext/Encode/Encode/iso8859-15.ucm Encoding tables ext/Encode/Encode/iso8859-16.enc Encoding tables ext/Encode/Encode/iso8859-16.ucm Encoding tables ! ext/Encode/Encode/iso8859-2.enc Encoding tables ! ext/Encode/Encode/iso8859-2.ucm Encoding tables ! ext/Encode/Encode/iso8859-3.enc Encoding tables ! ext/Encode/Encode/iso8859-3.ucm Encoding tables ! ext/Encode/Encode/iso8859-4.enc Encoding tables ! ext/Encode/Encode/iso8859-4.ucm Encoding tables ! ext/Encode/Encode/iso8859-5.enc Encoding tables ! ext/Encode/Encode/iso8859-5.ucm Encoding tables ! ext/Encode/Encode/iso8859-6.enc Encoding tables ! ext/Encode/Encode/iso8859-6.ucm Encoding tables ! ext/Encode/Encode/iso8859-7.enc Encoding tables ! ext/Encode/Encode/iso8859-7.ucm Encoding tables ! ext/Encode/Encode/iso8859-8.enc Encoding tables ! ext/Encode/Encode/iso8859-8.ucm Encoding tables ! ext/Encode/Encode/iso8859-9.enc Encoding tables ! ext/Encode/Encode/iso8859-9.ucm Encoding tables ! ext/Encode/Encode/jis0201.enc Encoding tables ! ext/Encode/Encode/jis0208.enc Encoding tables ! ext/Encode/Encode/jis0212.enc Encoding tables ! ext/Encode/Encode/koi8-r.enc Encoding tables ! ext/Encode/Encode/koi8-r.ucm Encoding tables ! ext/Encode/Encode/ksc5601.enc Encoding tables ext/Encode/Encode/macCentEuro.enc Encoding tables ext/Encode/Encode/macCroatian.enc Encoding tables ext/Encode/Encode/macCyrillic.enc Encoding tables ext/Encode/Encode/macDingbats.enc Encoding tables ! ext/Encode/Encode/macGreek.enc Encoding tables ext/Encode/Encode/macIceland.enc Encoding tables ! ext/Encode/Encode/macJapan.enc Encoding tables ! ext/Encode/Encode/macRoman.enc Encoding tables ext/Encode/Encode/macRomania.enc Encoding tables ! ext/Encode/Encode/macThai.enc Encoding tables ext/Encode/Encode/macTurkish.enc Encoding tables ext/Encode/Encode/macUkraine.enc Encoding tables ! ext/Encode/Encode/posix-bc.enc Encoding tables ! ext/Encode/Encode/posix-bc.ucm Encoding tables ! ext/Encode/Encode/shiftjis.enc Encoding tables ! ext/Encode/Encode/symbol.enc Encoding tables ext/Encode/Encode/symbol.ucm Encoding tables ! ext/Encode/Makefile.PL Encode extension ! ext/Encode/Todo Encode extension ! ext/Encode/compile Encode extension ! ext/Encode/encengine.c Encode extension ! ext/Encode/encode.h Encode extension ! ext/Errno/ChangeLog Errno perl module change log ! ext/Errno/Errno_pm.PL Errno perl module create script ! ext/Errno/Makefile.PL Errno extension makefile writer ! ext/Fcntl/Fcntl.pm Fcntl extension Perl module ! ext/Fcntl/Fcntl.xs Fcntl extension external subroutines ! ext/Fcntl/Makefile.PL Fcntl extension makefile writer ext/File/Glob/Changes File::Glob extension changelog ext/File/Glob/Glob.pm File::Glob extension module ext/File/Glob/Glob.xs File::Glob extension external subroutines ext/File/Glob/Makefile.PL File::Glob extension makefile writer ext/File/Glob/TODO File::Glob extension todo list ! ext/File/Glob/bsd_glob.c File::Glob extension run time code ! ext/File/Glob/bsd_glob.h File::Glob extension header file ext/Filter/Util/Call/Call.pm Filter::Util::Call extension module ext/Filter/Util/Call/Call.xs Filter::Util::Call extension external subroutines ext/Filter/Util/Call/Makefile.PL Filter::Util::Call extension makefile writer ext/GDBM_File/GDBM_File.pm GDBM extension Perl module ext/GDBM_File/GDBM_File.xs GDBM extension external subroutines - ext/GDBM_File/Makefile.PL GDBM extension makefile writer ext/GDBM_File/hints/sco.pl Hint for GDBM_File for named architecture ext/GDBM_File/typemap GDBM extension interface types ext/IO/ChangeLog IO perl module change log ext/IO/IO.pm Top-level interface to IO::* classes ext/IO/IO.xs IO extension external subroutines - ext/IO/Makefile.PL IO extension makefile writer - ext/IO/README IO extension maintenance notice ext/IO/lib/IO/Dir.pm IO directory reading package ext/IO/lib/IO/File.pm IO file handle package ext/IO/lib/IO/Handle.pm IO base handle package --- 243,328 ---- ext/Encode/Encode/iso8859-15.ucm Encoding tables ext/Encode/Encode/iso8859-16.enc Encoding tables ext/Encode/Encode/iso8859-16.ucm Encoding tables ! ext/Encode/Encode/iso8859-2.enc Encoding tables ! ext/Encode/Encode/iso8859-2.ucm Encoding tables ! ext/Encode/Encode/iso8859-3.enc Encoding tables ! ext/Encode/Encode/iso8859-3.ucm Encoding tables ! ext/Encode/Encode/iso8859-4.enc Encoding tables ! ext/Encode/Encode/iso8859-4.ucm Encoding tables ! ext/Encode/Encode/iso8859-5.enc Encoding tables ! ext/Encode/Encode/iso8859-5.ucm Encoding tables ! ext/Encode/Encode/iso8859-6.enc Encoding tables ! ext/Encode/Encode/iso8859-6.ucm Encoding tables ! ext/Encode/Encode/iso8859-7.enc Encoding tables ! ext/Encode/Encode/iso8859-7.ucm Encoding tables ! ext/Encode/Encode/iso8859-8.enc Encoding tables ! ext/Encode/Encode/iso8859-8.ucm Encoding tables ! ext/Encode/Encode/iso8859-9.enc Encoding tables ! ext/Encode/Encode/iso8859-9.ucm Encoding tables ! ext/Encode/Encode/jis0201.enc Encoding tables ! ext/Encode/Encode/jis0208.enc Encoding tables ! ext/Encode/Encode/jis0212.enc Encoding tables ! ext/Encode/Encode/koi8-r.enc Encoding tables ! ext/Encode/Encode/koi8-r.ucm Encoding tables ! ext/Encode/Encode/ksc5601.enc Encoding tables ext/Encode/Encode/macCentEuro.enc Encoding tables ext/Encode/Encode/macCroatian.enc Encoding tables ext/Encode/Encode/macCyrillic.enc Encoding tables ext/Encode/Encode/macDingbats.enc Encoding tables ! ext/Encode/Encode/macGreek.enc Encoding tables ext/Encode/Encode/macIceland.enc Encoding tables ! ext/Encode/Encode/macJapan.enc Encoding tables ! ext/Encode/Encode/macRoman.enc Encoding tables ext/Encode/Encode/macRomania.enc Encoding tables ! ext/Encode/Encode/macThai.enc Encoding tables ext/Encode/Encode/macTurkish.enc Encoding tables ext/Encode/Encode/macUkraine.enc Encoding tables ! ext/Encode/Encode/posix-bc.enc Encoding tables ! ext/Encode/Encode/posix-bc.ucm Encoding tables ! ext/Encode/Encode/shiftjis.enc Encoding tables ! ext/Encode/Encode/symbol.enc Encoding tables ext/Encode/Encode/symbol.ucm Encoding tables ! ext/Encode/Encode/Tcl.pm Handler for .enc encodings ! ext/Encode/Encode/Tcl.t See if Encode::Tcl works ! ext/Encode/Makefile.PL Encode extension ! ext/Encode/Todo Encode extension ! ext/Errno/ChangeLog Errno perl module change log ! ext/Errno/Errno.t See if Errno works ! ext/Errno/Errno_pm.PL Errno perl module create script ! ext/Errno/Makefile.PL Errno extension makefile writer ! ext/Fcntl/Fcntl.pm Fcntl extension Perl module ! ext/Fcntl/Fcntl.t See if Fcntl works ! ext/Fcntl/Fcntl.xs Fcntl extension external subroutines ! ext/Fcntl/Makefile.PL Fcntl extension makefile writer ! ext/Fcntl/syslfs.t See if large files work for sysio ! ext/File/Glob/bsd_glob.c File::Glob extension run time code ! ext/File/Glob/bsd_glob.h File::Glob extension header file ext/File/Glob/Changes File::Glob extension changelog ext/File/Glob/Glob.pm File::Glob extension module ext/File/Glob/Glob.xs File::Glob extension external subroutines ext/File/Glob/Makefile.PL File::Glob extension makefile writer + ext/File/Glob/t/basic.t See if File::Glob works + ext/File/Glob/t/case.t See if File::Glob works + ext/File/Glob/t/global.t See if File::Glob works + ext/File/Glob/t/taint.t See if File::Glob works ext/File/Glob/TODO File::Glob extension todo list ! ext/Filter/t/call.t See if Filter::Util::Call works ext/Filter/Util/Call/Call.pm Filter::Util::Call extension module ext/Filter/Util/Call/Call.xs Filter::Util::Call extension external subroutines ext/Filter/Util/Call/Makefile.PL Filter::Util::Call extension makefile writer + ext/GDBM_File/gdbm.t See if GDBM_File works ext/GDBM_File/GDBM_File.pm GDBM extension Perl module ext/GDBM_File/GDBM_File.xs GDBM extension external subroutines ext/GDBM_File/hints/sco.pl Hint for GDBM_File for named architecture + ext/GDBM_File/Makefile.PL GDBM extension makefile writer ext/GDBM_File/typemap GDBM extension interface types + ext/I18N/Langinfo/Langinfo.pm I18N::Langinfo + ext/I18N/Langinfo/Langinfo.t I18N::Langinfo + ext/I18N/Langinfo/Langinfo.xs I18N::Langinfo + ext/I18N/Langinfo/Makefile.PL I18N::Langinfo ext/IO/ChangeLog IO perl module change log ext/IO/IO.pm Top-level interface to IO::* classes ext/IO/IO.xs IO extension external subroutines ext/IO/lib/IO/Dir.pm IO directory reading package ext/IO/lib/IO/File.pm IO file handle package ext/IO/lib/IO/Handle.pm IO base handle package *************** *** 348,385 **** ext/IO/lib/IO/Socket.pm IO socket handle package ext/IO/lib/IO/Socket/INET.pm IO INET specific socket methods ext/IO/lib/IO/Socket/UNIX.pm IO UNIX specific socket methods ext/IO/poll.c IO poll() emulation using select() ext/IO/poll.h IO poll() emulation using select() ext/IPC/SysV/ChangeLog IPC::SysV extension Perl module ! ext/IPC/SysV/MANIFEST IPC::SysV extension Perl module ext/IPC/SysV/Makefile.PL IPC::SysV extension Perl module ext/IPC/SysV/Msg.pm IPC::SysV extension Perl module ext/IPC/SysV/README IPC::SysV extension Perl module ext/IPC/SysV/Semaphore.pm IPC::SysV extension Perl module ext/IPC/SysV/SysV.pm IPC::SysV extension Perl module ext/IPC/SysV/SysV.xs IPC::SysV extension Perl module - ext/IPC/SysV/hints/cygwin.pl Hint for IPC::SysV for named architecture - ext/IPC/SysV/hints/next_3.pl Hint for IPC::SysV for named architecture ext/IPC/SysV/t/msg.t IPC::SysV extension Perl module ext/IPC/SysV/t/sem.t IPC::SysV extension Perl module ext/MIME/Base64/Base64.pm MIME::Base64 extension ext/MIME/Base64/Base64.xs MIME::Base64 extension ext/MIME/Base64/Changes MIME::Base64 extension ext/MIME/Base64/Makefile.PL MIME::Base64 extension ext/MIME/Base64/QuotedPrint.pm MIME::Base64 extension ! ext/NDBM_File/Makefile.PL NDBM extension makefile writer ! ext/NDBM_File/NDBM_File.pm NDBM extension Perl module ! ext/NDBM_File/NDBM_File.xs NDBM extension external subroutines ext/NDBM_File/hints/cygwin.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/dec_osf.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/dynixptx.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/sco.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/solaris.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/svr4.pl Hint for NDBM_File for named architecture ext/NDBM_File/typemap NDBM extension interface types - ext/ODBM_File/Makefile.PL ODBM extension makefile writer - ext/ODBM_File/ODBM_File.pm ODBM extension Perl module - ext/ODBM_File/ODBM_File.xs ODBM extension external subroutines ext/ODBM_File/hints/cygwin.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/dec_osf.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/hpux.pl Hint for ODBM_File for named architecture --- 333,408 ---- ext/IO/lib/IO/Socket.pm IO socket handle package ext/IO/lib/IO/Socket/INET.pm IO INET specific socket methods ext/IO/lib/IO/Socket/UNIX.pm IO UNIX specific socket methods + ext/IO/lib/IO/t/io_const.t See if constants from IO work + ext/IO/lib/IO/t/io_dir.t See if directory-related methods from IO work + ext/IO/lib/IO/t/io_dup.t See if dup()-related methods from IO work + ext/IO/lib/IO/t/io_linenum.t See if I/O line numbers are tracked correctly + ext/IO/lib/IO/t/io_multihomed.t See if INET sockets work with multi-homed hosts + ext/IO/lib/IO/t/io_pipe.t See if pipe()-related methods from IO work + ext/IO/lib/IO/t/io_poll.t See if poll()-related methods from IO work + ext/IO/lib/IO/t/io_sel.t See if select()-related methods from IO work + ext/IO/lib/IO/t/io_sock.t See if INET socket-related methods from IO work + ext/IO/lib/IO/t/io_taint.t See if the untaint method from IO works + ext/IO/lib/IO/t/io_tell.t See if seek()/tell()-related methods from IO work + ext/IO/lib/IO/t/io_udp.t See if UDP socket-related methods from IO work + ext/IO/lib/IO/t/io_unix.t See if UNIX socket-related methods from IO work + ext/IO/lib/IO/t/io_xs.t See if XSUB methods from IO work + ext/IO/Makefile.PL IO extension makefile writer ext/IO/poll.c IO poll() emulation using select() ext/IO/poll.h IO poll() emulation using select() + ext/IO/README IO extension maintenance notice ext/IPC/SysV/ChangeLog IPC::SysV extension Perl module ! ext/IPC/SysV/hints/cygwin.pl Hint for IPC::SysV for named architecture ! ext/IPC/SysV/hints/next_3.pl Hint for IPC::SysV for named architecture ! ext/IPC/SysV/ipcsysv.t See if IPC::SysV works ext/IPC/SysV/Makefile.PL IPC::SysV extension Perl module + ext/IPC/SysV/MANIFEST IPC::SysV extension Perl module ext/IPC/SysV/Msg.pm IPC::SysV extension Perl module ext/IPC/SysV/README IPC::SysV extension Perl module ext/IPC/SysV/Semaphore.pm IPC::SysV extension Perl module ext/IPC/SysV/SysV.pm IPC::SysV extension Perl module ext/IPC/SysV/SysV.xs IPC::SysV extension Perl module ext/IPC/SysV/t/msg.t IPC::SysV extension Perl module ext/IPC/SysV/t/sem.t IPC::SysV extension Perl module + ext/List/Util/ChangeLog Util extension + ext/List/Util/lib/List/Util.pm List::Util + ext/List/Util/lib/Scalar/Util.pm Scalar::Util + ext/List/Util/Makefile.PL Util extension + ext/List/Util/README Util extension + ext/List/Util/t/blessed.t Scalar::Util + ext/List/Util/t/dualvar.t Scalar::Util + ext/List/Util/t/first.t List::Util + ext/List/Util/t/max.t List::Util + ext/List/Util/t/maxstr.t List::Util + ext/List/Util/t/min.t List::Util + ext/List/Util/t/minstr.t List::Util + ext/List/Util/t/readonly.t Scalar::Util + ext/List/Util/t/reduce.t List::Util + ext/List/Util/t/reftype.t Scalar::Util + ext/List/Util/t/sum.t List::Util + ext/List/Util/t/tainted.t Scalar::Util + ext/List/Util/t/weak.t Scalar::Util + ext/List/Util/Util.xs Util extension ext/MIME/Base64/Base64.pm MIME::Base64 extension ext/MIME/Base64/Base64.xs MIME::Base64 extension ext/MIME/Base64/Changes MIME::Base64 extension ext/MIME/Base64/Makefile.PL MIME::Base64 extension ext/MIME/Base64/QuotedPrint.pm MIME::Base64 extension ! ext/MIME/Base64/t/base64.t See whether MIME::Base64 works ! ext/MIME/Base64/t/qp.t See whether MIME::QuotedPrint works ! ext/MIME/Base64/t/unicode.t See whether MIME::Base64 works ext/NDBM_File/hints/cygwin.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/dec_osf.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/dynixptx.pl Hint for NDBM_File for named architecture + ext/NDBM_File/hints/linux.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/sco.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/solaris.pl Hint for NDBM_File for named architecture ext/NDBM_File/hints/svr4.pl Hint for NDBM_File for named architecture + ext/NDBM_File/Makefile.PL NDBM extension makefile writer + ext/NDBM_File/ndbm.t See if NDBM_File works + ext/NDBM_File/NDBM_File.pm NDBM extension Perl module + ext/NDBM_File/NDBM_File.xs NDBM extension external subroutines ext/NDBM_File/typemap NDBM extension interface types ext/ODBM_File/hints/cygwin.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/dec_osf.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/hpux.pl Hint for ODBM_File for named architecture *************** *** 387,671 **** ext/ODBM_File/hints/solaris.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/svr4.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/ultrix.pl Hint for ODBM_File for named architecture ext/ODBM_File/typemap ODBM extension interface types ext/Opcode/Makefile.PL Opcode extension makefile writer ext/Opcode/Opcode.pm Opcode extension Perl module ext/Opcode/Opcode.xs Opcode extension external subroutines - ext/Opcode/Safe.pm Safe extension Perl module ext/Opcode/ops.pm "Pragma" form of Opcode extension Perl module ! ext/POSIX/Makefile.PL POSIX extension makefile writer ! ext/POSIX/POSIX.pm POSIX extension Perl module ! ext/POSIX/POSIX.pod POSIX extension documentation ! ext/POSIX/POSIX.xs POSIX extension external subroutines ! ext/POSIX/hints/bsdos.pl Hint for POSIX for named architecture ! ext/POSIX/hints/dynixptx.pl Hint for POSIX for named architecture ! ext/POSIX/hints/freebsd.pl Hint for POSIX for named architecture ! ext/POSIX/hints/linux.pl Hint for POSIX for named architecture ! ext/POSIX/hints/mint.pl Hint for POSIX for named architecture ! ext/POSIX/hints/netbsd.pl Hint for POSIX for named architecture ! ext/POSIX/hints/next_3.pl Hint for POSIX for named architecture ! ext/POSIX/hints/openbsd.pl Hint for POSIX for named architecture ! ext/POSIX/hints/sunos_4.pl Hint for POSIX for named architecture ! ext/POSIX/hints/svr4.pl Hint for POSIX for named architecture ! ext/POSIX/typemap POSIX extension interface types ext/PerlIO/Scalar/Makefile.PL PerlIO layer for scalars ext/PerlIO/Scalar/Scalar.pm PerlIO layer for scalars ext/PerlIO/Scalar/Scalar.xs PerlIO layer for scalars ext/PerlIO/Via/Makefile.PL PerlIO layer for layers in perl ext/PerlIO/Via/Via.pm PerlIO layer for layers in perl ext/PerlIO/Via/Via.xs PerlIO layer for layers in perl ext/SDBM_File/Makefile.PL SDBM extension makefile writer ! ext/SDBM_File/SDBM_File.pm SDBM extension Perl module ! ext/SDBM_File/SDBM_File.xs SDBM extension external subroutines ! ext/SDBM_File/sdbm/CHANGES SDBM kit ! ext/SDBM_File/sdbm/COMPARE SDBM kit ! ext/SDBM_File/sdbm/Makefile.PL SDBM kit ! ext/SDBM_File/sdbm/README SDBM kit ! ext/SDBM_File/sdbm/README.too SDBM kit ! ext/SDBM_File/sdbm/biblio SDBM kit ! ext/SDBM_File/sdbm/dba.c SDBM kit ! ext/SDBM_File/sdbm/dbd.c SDBM kit ! ext/SDBM_File/sdbm/dbe.1 SDBM kit ! ext/SDBM_File/sdbm/dbe.c SDBM kit ! ext/SDBM_File/sdbm/dbm.c SDBM kit ! ext/SDBM_File/sdbm/dbm.h SDBM kit ! ext/SDBM_File/sdbm/dbu.c SDBM kit ! ext/SDBM_File/sdbm/grind SDBM kit ! ext/SDBM_File/sdbm/hash.c SDBM kit ext/SDBM_File/sdbm/linux.patches SDBM kit ext/SDBM_File/sdbm/makefile.sdbm SDBM kit ! ext/SDBM_File/sdbm/pair.c SDBM kit ! ext/SDBM_File/sdbm/pair.h SDBM kit ! ext/SDBM_File/sdbm/readme.ms SDBM kit ! ext/SDBM_File/sdbm/sdbm.3 SDBM kit ! ext/SDBM_File/sdbm/sdbm.c SDBM kit ! ext/SDBM_File/sdbm/sdbm.h SDBM kit ! ext/SDBM_File/sdbm/tune.h SDBM kit ! ext/SDBM_File/sdbm/util.c SDBM kit ext/SDBM_File/typemap SDBM extension interface types ! ext/Socket/Makefile.PL Socket extension makefile writer ! ext/Socket/Socket.pm Socket extension Perl module ! ext/Socket/Socket.xs Socket extension external subroutines ext/Storable/ChangeLog Storable extension - ext/Storable/MANIFEST Storable extension ext/Storable/Makefile.PL Storable extension ext/Storable/README Storable extension ext/Storable/Storable.pm Storable extension ext/Storable/Storable.xs Storable extension ext/Sys/Hostname/Hostname.pm Sys::Hostname extension Perl module ext/Sys/Hostname/Hostname.xs Sys::Hostname extension external subroutines ext/Sys/Hostname/Makefile.PL Sys::Hostname extension makefile writer ext/Sys/Syslog/Makefile.PL Sys::Syslog extension makefile writer ext/Sys/Syslog/Syslog.pm Sys::Syslog extension Perl module ext/Sys/Syslog/Syslog.xs Sys::Syslog extension external subroutines ! ext/Thread/Makefile.PL Thread extension makefile writer ! ext/Thread/Notes Thread notes ! ext/Thread/README Thread README ! ext/Thread/Thread.pm Thread extension Perl module ! ext/Thread/Thread.xs Thread extension external subroutines ext/Thread/Thread/Queue.pm Thread synchronised queue objects ext/Thread/Thread/Semaphore.pm Thread semaphore objects ext/Thread/Thread/Signal.pm Start a thread to run signal handlers ext/Thread/Thread/Specific.pm Thread specific data access ! ext/Thread/create.t Test thread creation ! ext/Thread/die.t Test thread die() ! ext/Thread/die2.t Test thread die() differently ! ext/Thread/io.t Test threads doing simple I/O ! ext/Thread/join.t Test thread joining ! ext/Thread/join2.t Test thread joining differently ! ext/Thread/list.t Test getting list of all threads ! ext/Thread/lock.t Test lock primitive ! ext/Thread/queue.t Test Thread::Queue module ! ext/Thread/specific.t Test thread-specific user data ! ext/Thread/sync.t Test thread synchronisation ! ext/Thread/sync2.t Test thread synchronisation ! ext/Thread/typemap Thread extension interface types ! ext/Thread/unsync.t Test thread implicit synchronisation ! ext/Thread/unsync2.t Test thread implicit synchronisation ! ext/Thread/unsync3.t Test thread implicit synchronisation ! ext/Thread/unsync4.t Test thread implicit synchronisation ext/XS/Typemap/Makefile.PL XS::Typemap extension ext/XS/Typemap/README XS::Typemap extension - ext/XS/Typemap/Typemap.pm XS::Typemap extension - ext/XS/Typemap/Typemap.xs XS::Typemap extension ext/XS/Typemap/stdio.c XS::Typemap extension ext/XS/Typemap/typemap XS::Typemap extension ! ext/attrs/Makefile.PL attrs extension makefile writer ! ext/attrs/attrs.pm attrs extension Perl module ! ext/attrs/attrs.xs attrs extension external subroutines ! ext/re/Makefile.PL re extension makefile writer ! ext/re/hints/mpeix.pl Hints for re for named architecture ! ext/re/re.pm re extension Perl module ! ext/re/re.xs re extension external subroutines ! ext/util/make_ext Used by Makefile to execute extension Makefiles ! ext/util/mkbootstrap Turns ext/*/*_BS into bootstrap info ! fakesdio.h stdio in terms of PerlIO ! fakethr.h Fake threads header ! form.h Public declarations for the above ! global.sym Symbols that need hiding when embedded ! globals.c File to declare global symbols (for shared library) ! globvar.sym Global variables that need hiding when embedded ! gv.c Glob value code ! gv.h Glob value header ! h2pl/README How to turn .ph files into .pl files ! h2pl/cbreak.pl cbreak routines using .ph ! h2pl/cbreak2.pl cbreak routines using .pl ! h2pl/eg/sizeof.ph Sample sizeof array initialization ! h2pl/eg/sys/errno.pl Sample translated errno.pl ! h2pl/eg/sys/ioctl.pl Sample translated ioctl.pl ! h2pl/eg/sysexits.pl Sample translated sysexits.pl ! h2pl/getioctlsizes Program to extract types from ioctl.h ! h2pl/mksizes Program to make %sizeof array ! h2pl/mkvars Program to make .pl from .ph files ! h2pl/tcbreak cbreak test routine using .ph ! h2pl/tcbreak2 cbreak test routine using .pl ! handy.h Handy definitions ! hints/3b1.sh Hints for named architecture ! hints/3b1cc Hints for named architecture ! hints/README.hints Notes about hints ! hints/aix.sh Hints for named architecture ! hints/altos486.sh Hints for named architecture ! hints/amigaos.sh Hints for named architecture ! hints/apollo.sh Hints for named architecture ! hints/aux_3.sh Hints for named architecture ! hints/beos.sh Hints for named architecture ! hints/broken-db.msg Warning message for systems with broken DB library ! hints/bsdos.sh Hints for named architecture ! hints/convexos.sh Hints for named architecture ! hints/cxux.sh Hints for named architecture ! hints/cygwin.sh Hints for named architecture ! hints/darwin.sh Hints for named architecture ! hints/dcosx.sh Hints for named architecture ! hints/dec_osf.sh Hints for named architecture ! hints/dgux.sh Hints for named architecture ! hints/dos_djgpp.sh Hints for named architecture ! hints/dynix.sh Hints for named architecture ! hints/dynixptx.sh Hints for named architecture ! hints/epix.sh Hints for named architecture ! hints/esix4.sh Hints for named architecture ! hints/fps.sh Hints for named architecture ! hints/freebsd.sh Hints for named architecture ! hints/genix.sh Hints for named architecture ! hints/gnu.sh Hints for named architecture ! hints/greenhills.sh Hints for named architecture ! hints/hpux.sh Hints for named architecture ! hints/i386.sh Hints for named architecture ! hints/irix_4.sh Hints for named architecture ! hints/irix_5.sh Hints for named architecture ! hints/irix_6.sh Hints for named architecture ! hints/irix_6_0.sh Hints for named architecture ! hints/irix_6_1.sh Hints for named architecture ! hints/isc.sh Hints for named architecture ! hints/isc_2.sh Hints for named architecture ! hints/linux.sh Hints for named architecture ! hints/lynxos.sh Hints for named architecture ! hints/machten.sh Hints for named architecture ! hints/machten_2.sh Hints for named architecture ! hints/mint.sh Hints for named architecture ! hints/mips.sh Hints for named architecture ! hints/mpc.sh Hints for named architecture ! hints/mpeix.sh Hints for named architecture ! hints/ncr_tower.sh Hints for named architecture ! hints/netbsd.sh Hints for named architecture ! hints/newsos4.sh Hints for named architecture ! hints/next_3.sh Hints for named architecture ! hints/next_3_0.sh Hints for named architecture ! hints/next_4.sh Hints for named architecture ! hints/nonstopux.sh Hints for named architecture ! hints/openbsd.sh Hints for named architecture ! hints/opus.sh Hints for named architecture ! hints/os2.sh Hints for named architecture ! hints/os390.sh Hints for named architecture ! hints/posix-bc.sh Hints for named architecture ! hints/powerux.sh Hints for named architecture ! hints/qnx.sh Hints for named architecture ! hints/rhapsody.sh Hints for named architecture ! hints/sco.sh Hints for named architecture ! hints/sco_2_3_0.sh Hints for named architecture ! hints/sco_2_3_1.sh Hints for named architecture ! hints/sco_2_3_2.sh Hints for named architecture ! hints/sco_2_3_3.sh Hints for named architecture ! hints/sco_2_3_4.sh Hints for named architecture ! hints/solaris_2.sh Hints for named architecture ! hints/stellar.sh Hints for named architecture ! hints/sunos_4_0.sh Hints for named architecture ! hints/sunos_4_1.sh Hints for named architecture ! hints/svr4.sh Hints for named architecture ! hints/svr5.sh Hints for named architecture ! hints/ti1500.sh Hints for named architecture ! hints/titanos.sh Hints for named architecture ! hints/ultrix_4.sh Hints for named architecture ! hints/umips.sh Hints for named architecture ! hints/unicos.sh Hints for named architecture ! hints/unicosmk.sh Hints for named architecture ! hints/unisysdynix.sh Hints for named architecture ! hints/utekv.sh Hints for named architecture ! hints/uts.sh Hints for named architecture ! hints/uwin.sh Hints for named architecture ! hints/vmesa.sh Hints for named architecture ! hv.c Hash value code ! hv.h Hash value header ! installhtml Perl script to install html files for pods ! installman Perl script to install man pages for pods ! installperl Perl script to do "make install" dirty work ! intrpvar.h Variables held in each interpreter instance ! iperlsys.h Perl's interface to the system ! jpl/ChangeLog Java/Perl Lingo change log ! jpl/JNI/Changes Java Native Interface changes ! jpl/JNI/Closer.java Java Native Interface example ! jpl/JNI/JNI.pm Java Native Interface module ! jpl/JNI/JNI.xs Java Native Interface module ! jpl/JNI/JNIConfig Java Native Interface config ! jpl/JNI/JNIConfig.Win32 Java Native Interface config ! jpl/JNI/JNIConfig.kaffe Java Native Interface config jpl/JNI/JNIConfig.noembed Java Native Interface config jpl/JNI/JNIConfig.standard Java Native Interface config ! jpl/JNI/Makefile.PL Java Native Interface makefile generator ! jpl/JNI/test.pl Java Native Interface tests ! jpl/JNI/typemap Java/Perl interface typemap ! jpl/JNI/typemap.gcc Java/Perl interface typemap ! jpl/JNI/typemap.win32 Java/Perl interface typemap ! jpl/JPL/AutoLoader.pm Java/Perl compiler module ! jpl/JPL/Class.pm Java/Perl compiler module ! jpl/JPL/Compile.pm Java/Perl compiler module ! jpl/JPL/Makefile.PL Java/Perl makefile generator ! jpl/JPL_Rolo/JPL_Rolo.jpl Rolodex sample application ! jpl/JPL_Rolo/Makefile.PL Makefile generator ! jpl/JPL_Rolo/README Instructions ! jpl/JPL_Rolo/cardfile Rolodex sample application ! jpl/PerlInterpreter/Makefile.PL Makefile generator ! jpl/PerlInterpreter/PerlInterpreter.c Perl interpreter abstraction ! jpl/PerlInterpreter/PerlInterpreter.h Perl interpreter abstraction jpl/PerlInterpreter/PerlInterpreter.java Perl interpreter abstraction ! jpl/README JPL instructions ! jpl/README.JUST-JNI JPL instructions ! jpl/SETVARS.PL JPL setup ! jpl/Sample/Makefile.PL JPL sample makefile generator ! jpl/Sample/Sample.jpl JPL sample ! jpl/Test/Makefile.PL JPL tests makefile generator ! jpl/Test/Test.jpl JPL tests ! jpl/bin/jpl JPL compiler ! jpl/docs/Tutorial.pod Perl and Java Tutorial ! jpl/get_jdk/README Instructions for using get_jdk.pl ! jpl/get_jdk/get_jdk.pl JDK download tool ! jpl/get_jdk/jdk_hosts JDK availability list ! jpl/install-jpl JPL install utility ! keywords.h The keyword numbers ! keywords.pl Program to write keywords.h ! lib/AnyDBM_File.pm Perl module to emulate dbmopen ! lib/AutoLoader.pm Autoloader base class ! lib/AutoSplit.pm Split up autoload functions ! lib/Benchmark.pm Measure execution time ! lib/CGI.pm Web server interface ("Common Gateway Interface") ! lib/CGI/Apache.pm Support for Apache's Perl module ! lib/CGI/Carp.pm Log server errors with helpful context ! lib/CGI/Cookie.pm Interface to Netscape Cookies ! lib/CGI/Fast.pm Support for FastCGI (persistent server process) ! lib/CGI/Pretty.pm Output nicely formatted HTML ! lib/CGI/Push.pm Support for server push ! lib/CGI/Switch.pm Simple interface for multiple server types ! lib/CGI/Util.pm Utility functions ! lib/CGI/eg/RunMeFirst Setup script for CGI examples lib/CGI/eg/caution.xbm CGI example lib/CGI/eg/clickable_image.cgi CGI example lib/CGI/eg/cookie.cgi CGI example --- 410,773 ---- ext/ODBM_File/hints/solaris.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/svr4.pl Hint for ODBM_File for named architecture ext/ODBM_File/hints/ultrix.pl Hint for ODBM_File for named architecture + ext/ODBM_File/Makefile.PL ODBM extension makefile writer + ext/ODBM_File/odbm.t See if ODBM_File works + ext/ODBM_File/ODBM_File.pm ODBM extension Perl module + ext/ODBM_File/ODBM_File.xs ODBM extension external subroutines ext/ODBM_File/typemap ODBM extension interface types ext/Opcode/Makefile.PL Opcode extension makefile writer ext/Opcode/Opcode.pm Opcode extension Perl module + ext/Opcode/Opcode.t See if Opcode works ext/Opcode/Opcode.xs Opcode extension external subroutines ext/Opcode/ops.pm "Pragma" form of Opcode extension Perl module ! ext/Opcode/ops.t See if Opcode works ! ext/Opcode/Safe.pm Safe extension Perl module ! ext/PerlIO/PerlIO.t See if PerlIO works ext/PerlIO/Scalar/Makefile.PL PerlIO layer for scalars ext/PerlIO/Scalar/Scalar.pm PerlIO layer for scalars ext/PerlIO/Scalar/Scalar.xs PerlIO layer for scalars + ext/PerlIO/t/encoding.t See if PerlIo encoding conversion works + ext/PerlIO/t/scalar.t Test of PerlIO::Scalar ext/PerlIO/Via/Makefile.PL PerlIO layer for layers in perl ext/PerlIO/Via/Via.pm PerlIO layer for layers in perl ext/PerlIO/Via/Via.xs PerlIO layer for layers in perl + ext/POSIX/hints/bsdos.pl Hint for POSIX for named architecture + ext/POSIX/hints/dynixptx.pl Hint for POSIX for named architecture + ext/POSIX/hints/freebsd.pl Hint for POSIX for named architecture + ext/POSIX/hints/linux.pl Hint for POSIX for named architecture + ext/POSIX/hints/mint.pl Hint for POSIX for named architecture + ext/POSIX/hints/netbsd.pl Hint for POSIX for named architecture + ext/POSIX/hints/next_3.pl Hint for POSIX for named architecture + ext/POSIX/hints/openbsd.pl Hint for POSIX for named architecture + ext/POSIX/hints/sunos_4.pl Hint for POSIX for named architecture + ext/POSIX/hints/svr4.pl Hint for POSIX for named architecture + ext/POSIX/hints/uts.pl Hint for POSIX for named architecture + ext/POSIX/Makefile.PL POSIX extension makefile writer + ext/POSIX/POSIX.pm POSIX extension Perl module + ext/POSIX/POSIX.pod POSIX extension documentation + ext/POSIX/POSIX.t See if POSIX works + ext/POSIX/POSIX.xs POSIX extension external subroutines + ext/POSIX/sigaction.t See if POSIX::sigaction works + ext/POSIX/typemap POSIX extension interface types + ext/re/hints/mpeix.pl Hints for re for named architecture + ext/re/Makefile.PL re extension makefile writer + ext/re/re.pm re extension Perl module + ext/re/re.xs re extension external subroutines + ext/Safe/safe1.t See if Safe works + ext/Safe/safe2.t See if Safe works ext/SDBM_File/Makefile.PL SDBM extension makefile writer ! ext/SDBM_File/sdbm.t See if SDBM_File works ! ext/SDBM_File/sdbm/biblio SDBM kit ! ext/SDBM_File/sdbm/CHANGES SDBM kit ! ext/SDBM_File/sdbm/COMPARE SDBM kit ! ext/SDBM_File/sdbm/dba.c SDBM kit ! ext/SDBM_File/sdbm/dbd.c SDBM kit ! ext/SDBM_File/sdbm/dbe.1 SDBM kit ! ext/SDBM_File/sdbm/dbe.c SDBM kit ! ext/SDBM_File/sdbm/dbu.c SDBM kit ! ext/SDBM_File/sdbm/grind SDBM kit ! ext/SDBM_File/sdbm/hash.c SDBM kit ext/SDBM_File/sdbm/linux.patches SDBM kit + ext/SDBM_File/sdbm/Makefile.PL SDBM kit ext/SDBM_File/sdbm/makefile.sdbm SDBM kit ! ext/SDBM_File/sdbm/pair.c SDBM kit ! ext/SDBM_File/sdbm/pair.h SDBM kit ! ext/SDBM_File/sdbm/README SDBM kit ! ext/SDBM_File/sdbm/readme.ms SDBM kit ! ext/SDBM_File/sdbm/README.too SDBM kit ! ext/SDBM_File/sdbm/sdbm.3 SDBM kit ! ext/SDBM_File/sdbm/sdbm.c SDBM kit ! ext/SDBM_File/sdbm/sdbm.h SDBM kit ! ext/SDBM_File/sdbm/tune.h SDBM kit ! ext/SDBM_File/sdbm/util.c SDBM kit ! ext/SDBM_File/SDBM_File.pm SDBM extension Perl module ! ext/SDBM_File/SDBM_File.xs SDBM extension external subroutines ext/SDBM_File/typemap SDBM extension interface types ! ext/Socket/Makefile.PL Socket extension makefile writer ! ext/Socket/Socket.pm Socket extension Perl module ! ext/Socket/Socket.t See if Socket works ! ext/Socket/Socket.xs Socket extension external subroutines ext/Storable/ChangeLog Storable extension ext/Storable/Makefile.PL Storable extension + ext/Storable/MANIFEST Storable extension ext/Storable/README Storable extension ext/Storable/Storable.pm Storable extension ext/Storable/Storable.xs Storable extension + ext/Storable/t/blessed.t See if Storable works + ext/Storable/t/canonical.t See if Storable works + ext/Storable/t/compat06.t See if Storable works + ext/Storable/t/dclone.t See if Storable works + ext/Storable/t/forgive.t See if Storable works + ext/Storable/t/freeze.t See if Storable works + ext/Storable/t/lock.t See if Storable works + ext/Storable/t/overload.t See if Storable works + ext/Storable/t/recurse.t See if Storable works + ext/Storable/t/retrieve.t See if Storable works + ext/Storable/t/store.t See if Storable works + ext/Storable/t/tied.t See if Storable works + ext/Storable/t/tied_hook.t See if Storable works + ext/Storable/t/tied_items.t See if Storable works + ext/Storable/t/utf8.t See if Storable works ext/Sys/Hostname/Hostname.pm Sys::Hostname extension Perl module + ext/Sys/Hostname/Hostname.t See if Sys::Hostname works ext/Sys/Hostname/Hostname.xs Sys::Hostname extension external subroutines ext/Sys/Hostname/Makefile.PL Sys::Hostname extension makefile writer ext/Sys/Syslog/Makefile.PL Sys::Syslog extension makefile writer ext/Sys/Syslog/Syslog.pm Sys::Syslog extension Perl module + ext/Sys/Syslog/syslog.t See if Sys::Syslog works ext/Sys/Syslog/Syslog.xs Sys::Syslog extension external subroutines ! ext/Thread/create.tx Test thread creation ! ext/Thread/die.tx Test thread die() ! ext/Thread/die2.tx Test thread die() differently ! ext/Thread/io.tx Test threads doing simple I/O ! ext/Thread/join.tx Test thread joining ! ext/Thread/join2.tx Test thread joining differently ! ext/Thread/list.tx Test getting list of all threads ! ext/Thread/lock.tx Test lock primitive ! ext/Thread/Makefile.PL Thread extension makefile writer ! ext/Thread/Notes Thread notes ! ext/Thread/queue.tx Test Thread::Queue module ! ext/Thread/README Thread README ! ext/Thread/specific.tx Test thread-specific user data ! ext/Thread/sync.tx Test thread synchronisation ! ext/Thread/sync2.tx Test thread synchronisation ! ext/Thread/thr5005.t Test 5.005-style threading (skipped if no use5005threads) ! ext/Thread/Thread.pm Thread extension Perl module ! ext/Thread/Thread.xs Thread extension external subroutines ext/Thread/Thread/Queue.pm Thread synchronised queue objects ext/Thread/Thread/Semaphore.pm Thread semaphore objects ext/Thread/Thread/Signal.pm Start a thread to run signal handlers ext/Thread/Thread/Specific.pm Thread specific data access ! ext/Thread/typemap Thread extension interface types ! ext/Thread/unsync.tx Test thread implicit synchronisation ! ext/Thread/unsync2.tx Test thread implicit synchronisation ! ext/Thread/unsync3.tx Test thread implicit synchronisation ! ext/Thread/unsync4.tx Test thread implicit synchronisation ! ext/Time/HiRes/Changes Time::HiRes extension ! ext/Time/HiRes/hints/dynixptx.pl Hint for Time::HiRes for named architecture ! ext/Time/HiRes/hints/sco.pl Hints for Time::HiRes for named architecture ! ext/Time/HiRes/HiRes.pm Time::HiRes extension ! ext/Time/HiRes/HiRes.t Test for Time::HiRes ! ext/Time/HiRes/HiRes.xs Time::HiRes extension ! ext/Time/HiRes/Makefile.PL Time::HiRes extension ! ext/Time/Piece/Makefile.PL Time::Piece extension ! ext/Time/Piece/Piece.pm Time::Piece extension ! ext/Time/Piece/Piece.t Test for Time::Piece ! ext/Time/Piece/Piece.xs Time::Piece extension ! ext/Time/Piece/README Time::Piece extension ! ext/Time/Piece/Seconds.pm Time::Piece extension ! ext/util/make_ext Used by Makefile to execute extension Makefiles ext/XS/Typemap/Makefile.PL XS::Typemap extension ext/XS/Typemap/README XS::Typemap extension ext/XS/Typemap/stdio.c XS::Typemap extension ext/XS/Typemap/typemap XS::Typemap extension ! ext/XS/Typemap/Typemap.pm XS::Typemap extension ! ext/XS/Typemap/Typemap.t test that typemaps work ! ext/XS/Typemap/Typemap.xs XS::Typemap extension ! EXTERN.h Included before foreign .h files ! fakesdio.h stdio in terms of PerlIO ! fakethr.h Fake threads header ! form.h Public declarations for formats ! global.sym Symbols that need hiding when embedded ! globals.c File to declare global symbols (for shared library) ! globvar.sym Global variables that need hiding when embedded ! gv.c Glob value code ! gv.h Glob value header ! h2pl/cbreak.pl cbreak routines using .ph ! h2pl/cbreak2.pl cbreak routines using .pl ! h2pl/eg/sizeof.ph Sample sizeof array initialization ! h2pl/eg/sys/errno.pl Sample translated errno.pl ! h2pl/eg/sys/ioctl.pl Sample translated ioctl.pl ! h2pl/eg/sysexits.pl Sample translated sysexits.pl ! h2pl/getioctlsizes Program to extract types from ioctl.h ! h2pl/mksizes Program to make %sizeof array ! h2pl/mkvars Program to make .pl from .ph files ! h2pl/README How to turn .ph files into .pl files ! h2pl/tcbreak cbreak test routine using .ph ! h2pl/tcbreak2 cbreak test routine using .pl ! handy.h Handy definitions ! hints/3b1.sh Hints for named architecture ! hints/3b1cc Hints for named architecture ! hints/aix.sh Hints for named architecture ! hints/altos486.sh Hints for named architecture ! hints/amigaos.sh Hints for named architecture ! hints/apollo.sh Hints for named architecture ! hints/atheos.sh Hints for named architecture ! hints/aux_3.sh Hints for named architecture ! hints/beos.sh Hints for named architecture ! hints/broken-db.msg Warning message for systems with broken DB library ! hints/bsdos.sh Hints for named architecture ! hints/convexos.sh Hints for named architecture ! hints/cxux.sh Hints for named architecture ! hints/cygwin.sh Hints for named architecture ! hints/darwin.sh Hints for named architecture ! hints/dcosx.sh Hints for named architecture ! hints/dec_osf.sh Hints for named architecture ! hints/dgux.sh Hints for named architecture ! hints/dos_djgpp.sh Hints for named architecture ! hints/dynix.sh Hints for named architecture ! hints/dynixptx.sh Hints for named architecture ! hints/epix.sh Hints for named architecture ! hints/esix4.sh Hints for named architecture ! hints/fps.sh Hints for named architecture ! hints/freebsd.sh Hints for named architecture ! hints/genix.sh Hints for named architecture ! hints/gnu.sh Hints for named architecture ! hints/greenhills.sh Hints for named architecture ! hints/hpux.sh Hints for named architecture ! hints/i386.sh Hints for named architecture ! hints/irix_4.sh Hints for named architecture ! hints/irix_5.sh Hints for named architecture ! hints/irix_6.sh Hints for named architecture ! hints/irix_6_0.sh Hints for named architecture ! hints/irix_6_1.sh Hints for named architecture ! hints/isc.sh Hints for named architecture ! hints/isc_2.sh Hints for named architecture ! hints/linux.sh Hints for named architecture ! hints/lynxos.sh Hints for named architecture ! hints/machten.sh Hints for named architecture ! hints/machten_2.sh Hints for named architecture ! hints/mint.sh Hints for named architecture ! hints/mips.sh Hints for named architecture ! hints/mpc.sh Hints for named architecture ! hints/mpeix.sh Hints for named architecture ! hints/ncr_tower.sh Hints for named architecture ! hints/netbsd.sh Hints for named architecture ! hints/newsos4.sh Hints for named architecture ! hints/next_3.sh Hints for named architecture ! hints/next_3_0.sh Hints for named architecture ! hints/next_4.sh Hints for named architecture ! hints/nonstopux.sh Hints for named architecture ! hints/openbsd.sh Hints for named architecture ! hints/opus.sh Hints for named architecture ! hints/os2.sh Hints for named architecture ! hints/os390.sh Hints for named architecture ! hints/posix-bc.sh Hints for named architecture ! hints/powerux.sh Hints for named architecture ! hints/qnx.sh Hints for named architecture ! hints/README.hints Notes about hints ! hints/rhapsody.sh Hints for named architecture ! hints/sco.sh Hints for named architecture ! hints/sco_2_3_0.sh Hints for named architecture ! hints/sco_2_3_1.sh Hints for named architecture ! hints/sco_2_3_2.sh Hints for named architecture ! hints/sco_2_3_3.sh Hints for named architecture ! hints/sco_2_3_4.sh Hints for named architecture ! hints/solaris_2.sh Hints for named architecture ! hints/stellar.sh Hints for named architecture ! hints/sunos_4_0.sh Hints for named architecture ! hints/sunos_4_1.sh Hints for named architecture ! hints/svr4.sh Hints for named architecture ! hints/svr5.sh Hints for named architecture ! hints/ti1500.sh Hints for named architecture ! hints/titanos.sh Hints for named architecture ! hints/ultrix_4.sh Hints for named architecture ! hints/umips.sh Hints for named architecture ! hints/unicos.sh Hints for named architecture ! hints/unicosmk.sh Hints for named architecture ! hints/unisysdynix.sh Hints for named architecture ! hints/utekv.sh Hints for named architecture ! hints/uts.sh Hints for named architecture ! hints/uwin.sh Hints for named architecture ! hints/vmesa.sh Hints for named architecture ! hv.c Hash value code ! hv.h Hash value header ! INSTALL Detailed installation instructions ! installhtml Perl script to install html files for pods ! installman Perl script to install man pages for pods ! installperl Perl script to do "make install" dirty work ! INTERN.h Included before domestic .h files ! intrpvar.h Variables held in each interpreter instance ! iperlsys.h Perl's interface to the system ! jpl/bin/jpl JPL compiler ! jpl/ChangeLog Java/Perl Lingo change log ! jpl/docs/Tutorial.pod Perl and Java Tutorial ! jpl/get_jdk/get_jdk.pl JDK download tool ! jpl/get_jdk/jdk_hosts JDK availability list ! jpl/get_jdk/README Instructions for using get_jdk.pl ! jpl/install-jpl JPL install utility ! jpl/JNI/Changes Java Native Interface changes ! jpl/JNI/Closer.java Java Native Interface example ! jpl/JNI/JNI.pm Java Native Interface module ! jpl/JNI/JNI.xs Java Native Interface module ! jpl/JNI/JNIConfig Java Native Interface config ! jpl/JNI/JNIConfig.kaffe Java Native Interface config jpl/JNI/JNIConfig.noembed Java Native Interface config jpl/JNI/JNIConfig.standard Java Native Interface config ! jpl/JNI/JNIConfig.Win32 Java Native Interface config ! jpl/JNI/Makefile.PL Java Native Interface makefile generator ! jpl/JNI/test.pl Java Native Interface tests ! jpl/JNI/typemap Java/Perl interface typemap ! jpl/JNI/typemap.gcc Java/Perl interface typemap ! jpl/JNI/typemap.win32 Java/Perl interface typemap ! jpl/JPL/AutoLoader.pm Java/Perl compiler module ! jpl/JPL/Class.pm Java/Perl compiler module ! jpl/JPL/Compile.pm Java/Perl compiler module ! jpl/JPL/Makefile.PL Java/Perl makefile generator ! jpl/JPL_Rolo/cardfile Rolodex sample application ! jpl/JPL_Rolo/JPL_Rolo.jpl Rolodex sample application ! jpl/JPL_Rolo/Makefile.PL Makefile generator ! jpl/JPL_Rolo/README Instructions ! jpl/PerlInterpreter/Makefile.PL Makefile generator ! jpl/PerlInterpreter/PerlInterpreter.c Perl interpreter abstraction ! jpl/PerlInterpreter/PerlInterpreter.h Perl interpreter abstraction jpl/PerlInterpreter/PerlInterpreter.java Perl interpreter abstraction ! jpl/README JPL instructions ! jpl/README.JUST-JNI JPL instructions ! jpl/Sample/Makefile.PL JPL sample makefile generator ! jpl/Sample/Sample.jpl JPL sample ! jpl/SETVARS.PL JPL setup ! jpl/Test/Makefile.PL JPL tests makefile generator ! jpl/Test/Test.jpl JPL tests ! keywords.h The keyword numbers ! keywords.pl Program to write keywords.h ! lib/abbrev.pl An abbreviation table builder ! lib/AnyDBM_File.pm Perl module to emulate dbmopen ! lib/AnyDBM_File.t See if AnyDBM_File works ! lib/assert.pl assertion and panic with stack trace ! lib/Attribute/Handlers.pm Attribute::Handlers ! lib/Attribute/Handlers/Changes Attribute::Handlers ! lib/Attribute/Handlers/demo/demo.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/Demo.pm Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo2.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo3.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo4.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo_call.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo_chain.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo_cycle.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo_hashdir.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo_phases.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo_range.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/demo_rawdata.pl Attribute::Handlers demo ! lib/Attribute/Handlers/demo/Descriptions.pm Attribute::Handlers demo ! lib/Attribute/Handlers/demo/MyClass.pm Attribute::Handlers demo ! lib/Attribute/Handlers/README Attribute::Handlers ! lib/Attribute/Handlers/test.pl See if Attribute::Handlers works ! lib/attributes.pm For "sub foo : attrlist" ! lib/AutoLoader.pm Autoloader base class ! lib/AutoLoader.t See if AutoLoader works ! lib/AutoSplit.pm Split up autoload functions ! lib/autouse.pm Load and call a function only when it's used ! lib/autouse.t See if autouse works ! lib/base.pm Establish IS-A relationship at compile time ! lib/Benchmark.pm Measure execution time ! lib/Benchmark.t Perl code profiler testsuite driver ! lib/bigfloat.pl An arbitrary precision floating point package ! lib/bigfloat.t See if bigfloat.pl works ! lib/bigint.pl An arbitrary precision integer arithmetic package ! lib/bigint.t See if bigint.pl works ! lib/bigrat.pl An arbitrary precision rational arithmetic package ! lib/blib.pm For "use blib" ! lib/bytes.pm Pragma to enable byte operations ! lib/bytes_heavy.pl Support routines for byte pragma ! lib/cacheout.pl Manages output filehandles when you need too many ! lib/Carp.pm Error message base class ! lib/Carp.t See if Carp works ! lib/Carp/Heavy.pm Error message workhorse ! lib/CGI.pm Web server interface ("Common Gateway Interface") ! lib/CGI/Apache.pm Support for Apache's Perl module ! lib/CGI/Carp.pm Log server errors with helpful context ! lib/CGI/Cookie.pm Interface to Netscape Cookies lib/CGI/eg/caution.xbm CGI example lib/CGI/eg/clickable_image.cgi CGI example lib/CGI/eg/cookie.cgi CGI example *************** *** 684,1207 **** lib/CGI/eg/nph-clock.cgi CGI example lib/CGI/eg/nph-multipart.cgi CGI example lib/CGI/eg/popup.cgi CGI example lib/CGI/eg/save_state.cgi CGI example lib/CGI/eg/tryit.cgi CGI example lib/CGI/eg/wilogo_gif.uu CGI example ! lib/CPAN.pm Interface to Comprehensive Perl Archive Network ! lib/CPAN/FirstTime.pm Utility for creating CPAN config files ! lib/CPAN/Nox.pm Runs CPAN while avoiding compiled extensions ! lib/Carp.pm Error message base class ! lib/Carp/Heavy.pm Error message workhorse ! lib/Class/ISA.pm Class::ISA ! lib/Class/Struct.pm Declare struct-like datatypes as Perl classes ! lib/Cwd.pm Various cwd routines (getcwd, fastcwd, chdir) ! lib/DB.pm Debugger API (draft) ! lib/Devel/SelfStubber.pm Generate stubs for SelfLoader.pm ! lib/Digest.pm Digest extensions ! lib/DirHandle.pm like FileHandle only for directories ! lib/Dumpvalue.pm Screen dump of perl values ! lib/English.pm Readable aliases for short variables ! lib/Env.pm Map environment into ordinary variables ! lib/Exporter.pm Exporter base class ! lib/Exporter/Heavy.pm Complicated routines for Exporter ! lib/ExtUtils/Command.pm Utilities for Make on non-UNIX platforms ! lib/ExtUtils/Embed.pm Utilities for embedding Perl in C programs ! lib/ExtUtils/Install.pm Handles 'make install' on extensions lib/ExtUtils/Installed.pm Information on installed extensions ! lib/ExtUtils/Liblist.pm Locates libraries lib/ExtUtils/MANIFEST.SKIP The default MANIFEST.SKIP lib/ExtUtils/MM_Cygwin.pm MakeMaker methods for Cygwin lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2 lib/ExtUtils/MM_Unix.pm MakeMaker base class for Unix lib/ExtUtils/MM_VMS.pm MakeMaker methods for VMS lib/ExtUtils/MM_Win32.pm MakeMaker methods for Win32 - lib/ExtUtils/MakeMaker.pm Write Makefiles for extensions - lib/ExtUtils/Manifest.pm Utilities to write MANIFEST files - lib/ExtUtils/Mkbootstrap.pm Writes a bootstrap file (see MakeMaker) - lib/ExtUtils/Mksymlists.pm Writes a linker options file for extensions lib/ExtUtils/Packlist.pm Manipulates .packlist files - lib/ExtUtils/inst Give information about installed extensions lib/ExtUtils/testlib.pm Fixes up @INC to use just-built extension lib/ExtUtils/typemap Extension interface types lib/ExtUtils/xsubpp External subroutine preprocessor ! lib/Fatal.pm Make errors in functions/builtins fatal ! lib/File/Basename.pm Emulate the basename program ! lib/File/CheckTree.pm Perl module supporting wholesale file mode validation ! lib/File/Compare.pm Emulation of cmp command ! lib/File/Copy.pm Emulation of cp command ! lib/File/DosGlob.pm Win32 DOS-globbing module ! lib/File/Find.pm Routines to do a find ! lib/File/Path.pm Do things like `mkdir -p' and `rm -r' ! lib/File/Spec.pm portable operations on file names ! lib/File/Spec/Epoc.pm portable operations on EPOC file names lib/File/Spec/Functions.pm Function interface to File::Spec object methods ! lib/File/Spec/Mac.pm portable operations on Mac file names ! lib/File/Spec/OS2.pm portable operations on OS2 file names ! lib/File/Spec/Unix.pm portable operations on Unix file names ! lib/File/Spec/VMS.pm portable operations on VMS file names ! lib/File/Spec/Win32.pm portable operations on Win32 file names ! lib/File/Temp.pm create safe temporary files and file handles ! lib/File/stat.pm By-name interface to Perl's builtin stat ! lib/FileCache.pm Keep more files open than the system permits ! lib/FileHandle.pm Backward-compatible front end to IO extension ! lib/Filter/Simple.pm Simple frontend to Filter::Util::Call ! lib/FindBin.pm Find name of currently executing program ! lib/Getopt/Long.pm Fetch command options (GetOptions) ! lib/Getopt/Std.pm Fetch command options (getopt, getopts) ! lib/I18N/Collate.pm Routines to do strxfrm-based collation ! lib/IPC/Open2.pm Open a two-ended pipe ! lib/IPC/Open3.pm Open a three-ended pipe! ! lib/Locale/Constants.pm Locale::Codes ! lib/Locale/Country.pm Locale::Codes ! lib/Locale/Currency.pm Locale::Codes ! lib/Locale/Language.pm Locale::Codes ! lib/Math/BigFloat.pm An arbitrary precision floating-point arithmetic package ! lib/Math/BigInt.pm An arbitrary precision integer arithmetic package ! lib/Math/Complex.pm A Complex package ! lib/Math/Trig.pm A simple interface to complex trigonometry ! lib/Net/Ping.pm Hello, anybody home? ! lib/Net/hostent.pm By-name interface to Perl's builtin gethost* ! lib/Net/netent.pm By-name interface to Perl's builtin getnet* ! lib/Net/protoent.pm By-name interface to Perl's builtin getproto* ! lib/Net/servent.pm By-name interface to Perl's builtin getserv* ! lib/PerlIO.pm PerlIO support module ! lib/Pod/Checker.pm Pod-Parser - check POD documents for syntax errors ! lib/Pod/Find.pm used by pod/splitpod ! lib/Pod/Functions.pm used by pod/splitpod ! lib/Pod/Html.pm Convert POD data to HTML ! lib/Pod/InputObjects.pm Pod-Parser - define objects for input streams ! lib/Pod/LaTeX.pm Convert POD data to LaTeX ! lib/Pod/Man.pm Convert POD data to *roff ! lib/Pod/ParseUtils.pm Pod-Parser - pod utility functions ! lib/Pod/Parser.pm Pod-Parser - define base class for parsing POD ! lib/Pod/Plainer.pm Pod migration utility module ! lib/Pod/Select.pm Pod-Parser - select portions of POD docs ! lib/Pod/Text.pm Pod-Parser - convert POD data to formatted ASCII text ! lib/Pod/Text/Color.pm Convert POD data to color ASCII text lib/Pod/Text/Overstrike.pm Convert POD data to formatted overstrike text ! lib/Pod/Text/Termcap.pm Convert POD data to ASCII text with format escapes ! lib/Pod/Usage.pm Pod-Parser - print usage messages ! lib/Search/Dict.pm Perform binary search on dictionaries ! lib/SelectSaver.pm Enforce proper select scoping ! lib/SelfLoader.pm Load functions only on demand ! lib/Shell.pm Make AUTOLOADed system() calls ! lib/Switch.pm Switch for Perl ! lib/Symbol.pm Symbol table manipulation routines ! lib/Term/ANSIColor.pm Perl module supporting termcap usage ! lib/Term/Cap.pm Perl module supporting termcap usage ! lib/Term/Complete.pm A command completion subroutine ! lib/Term/ReadLine.pm Stub readline library ! lib/Test.pm A simple framework for writing test scripts ! lib/Test/Harness.pm A test harness ! lib/Text/Abbrev.pm An abbreviation table builder ! lib/Text/Balanced.pm Text::Balanced ! lib/Text/Balanced.pod Text::Balanced ! lib/Text/ParseWords.pm Perl module to split words on arbitrary delimiter ! lib/Text/Soundex.pm Perl module to implement Soundex ! lib/Text/Tabs.pm Do expand and unexpand ! lib/Text/Wrap.pm Paragraph formatter ! lib/Tie/Array.pm Base class for tied arrays ! lib/Tie/Handle.pm Base class for tied handles ! lib/Tie/Hash.pm Base class for tied hashes ! lib/Tie/RefHash.pm Base class for tied hashes with references as keys ! lib/Tie/Scalar.pm Base class for tied scalars ! lib/Tie/SubstrHash.pm Compact hash for known key, value and table size ! lib/Time/Local.pm Reverse translation of localtime, gmtime ! lib/Time/gmtime.pm By-name interface to Perl's builtin gmtime ! lib/Time/localtime.pm By-name interface to Perl's builtin localtime ! lib/Time/tm.pm Internal object for Time::{gm,local}time ! lib/UNIVERSAL.pm Base class for ALL classes ! lib/User/grent.pm By-name interface to Perl's builtin getgr* ! lib/User/pwent.pm By-name interface to Perl's builtin getpw* ! lib/Win32.pod Documentation for Win32 extras ! lib/abbrev.pl An abbreviation table builder ! lib/assert.pl assertion and panic with stack trace ! lib/attributes.pm For "sub foo : attrlist" ! lib/autouse.pm Load and call a function only when it's used ! lib/base.pm Establish IS-A relationship at compile time ! lib/bigfloat.pl An arbitrary precision floating point package ! lib/bigint.pl An arbitrary precision integer arithmetic package ! lib/bigrat.pl An arbitrary precision rational arithmetic package ! lib/blib.pm For "use blib" ! lib/bytes.pm Pragma to enable byte operations ! lib/bytes_heavy.pl Support routines for byte pragma ! lib/cacheout.pl Manages output filehandles when you need too many ! lib/charnames.pm Character names ! lib/complete.pl A command completion subroutine ! lib/constant.pm For "use constant" ! lib/ctime.pl A ctime workalike ! lib/diagnostics.pm Print verbose diagnostics ! lib/dotsh.pl Code to "dot" in a shell script ! lib/dumpvar.pl A variable dumper ! lib/exceptions.pl catch and throw routines ! lib/fastcwd.pl a faster but more dangerous getcwd ! lib/fields.pm Set up object field names for pseudo-hash-using classes ! lib/filetest.pm For "use filetest" ! lib/find.pl A find emulator--used by find2perl ! lib/finddepth.pl A depth-first find emulator--used by find2perl ! lib/flush.pl Routines to do single flush ! lib/ftp.pl FTP code (obsolete, use Net::FTP instead) ! lib/getcwd.pl A getcwd() emulator ! lib/getopt.pl Perl library supporting option parsing ! lib/getopts.pl Perl library supporting option parsing ! lib/hostname.pl Old hostname code ! lib/importenv.pl Perl routine to get environment into variables ! lib/integer.pm For "use integer" ! lib/less.pm For "use less" ! lib/lib_pm.PL For "use lib", produces lib/lib.pm ! lib/locale.pm For "use locale" ! lib/look.pl A "look" equivalent ! lib/newgetopt.pl A perl library supporting long option parsing ! lib/open.pm Pragma to specify default I/O disciplines ! lib/open2.pl Open a two-ended pipe (uses IPC::Open2) ! lib/open3.pl Open a three-ended pipe (uses IPC::Open3) ! lib/overload.pm Module for overloading perl operators ! lib/perl5db.pl Perl debugging routines ! lib/pwd.pl Routines to keep track of PWD environment variable ! lib/shellwords.pl Perl library to split into words with shell quoting ! lib/sigtrap.pm For trapping an abort and giving traceback ! lib/stat.pl Perl library supporting stat function ! lib/strict.pm For "use strict" ! lib/subs.pm Declare overriding subs ! lib/syslog.pl Perl library supporting syslogging ! lib/tainted.pl Old code for tainting ! lib/termcap.pl Perl library supporting termcap usage ! lib/timelocal.pl Perl library supporting inverse of localtime, gmtime ! lib/unicode/ArabLink.pl Unicode character database ! lib/unicode/ArabLnkGrp.pl Unicode character database ! lib/unicode/ArabShap.txt Unicode character database ! lib/unicode/BidiMirr.txt Unicode character database ! lib/unicode/Bidirectional.pl Unicode character database ! lib/unicode/Block.pl Unicode character database ! lib/unicode/Blocks.txt Unicode character database ! lib/unicode/CaseFold.txt Unicode character database ! lib/unicode/Category.pl Unicode character database ! lib/unicode/CombiningClass.pl Unicode character database ! lib/unicode/CompExcl.txt Unicode character database ! lib/unicode/Decomposition.pl Unicode character database ! lib/unicode/EAWidth.txt Unicode character database ! lib/unicode/In/AlphabeticPresentationForms.pl Unicode character database ! lib/unicode/In/Arabic.pl Unicode character database ! lib/unicode/In/ArabicPresentationForms-A.pl Unicode character database ! lib/unicode/In/ArabicPresentationForms-B.pl Unicode character database ! lib/unicode/In/Armenian.pl Unicode character database ! lib/unicode/In/Arrows.pl Unicode character database ! lib/unicode/In/BasicLatin.pl Unicode character database ! lib/unicode/In/Bengali.pl Unicode character database ! lib/unicode/In/BlockElements.pl Unicode character database ! lib/unicode/In/Bopomofo.pl Unicode character database ! lib/unicode/In/BopomofoExtended.pl Unicode character database ! lib/unicode/In/BoxDrawing.pl Unicode character database ! lib/unicode/In/BraillePatterns.pl Unicode character database ! lib/unicode/In/CJKCompatibility.pl Unicode character database ! lib/unicode/In/CJKCompatibilityForms.pl Unicode character database ! lib/unicode/In/CJKCompatibilityIdeographs.pl Unicode character database ! lib/unicode/In/CJKRadicalsSupplement.pl Unicode character database ! lib/unicode/In/CJKSymbolsandPunctuation.pl Unicode character database ! lib/unicode/In/CJKUnifiedIdeographs.pl Unicode character database ! lib/unicode/In/CJKUnifiedIdeographsExtensionA.pl Unicode character database ! lib/unicode/In/Cherokee.pl Unicode character database ! lib/unicode/In/CombiningDiacriticalMarks.pl Unicode character database ! lib/unicode/In/CombiningHalfMarks.pl Unicode character database ! lib/unicode/In/CombiningMarksforSymbols.pl Unicode character database ! lib/unicode/In/ControlPictures.pl Unicode character database ! lib/unicode/In/CurrencySymbols.pl Unicode character database ! lib/unicode/In/Cyrillic.pl Unicode character database ! lib/unicode/In/Devanagari.pl Unicode character database ! lib/unicode/In/Dingbats.pl Unicode character database ! lib/unicode/In/EnclosedAlphanumerics.pl Unicode character database ! lib/unicode/In/EnclosedCJKLettersandMonths.pl Unicode character database ! lib/unicode/In/Ethiopic.pl Unicode character database ! lib/unicode/In/GeneralPunctuation.pl Unicode character database ! lib/unicode/In/GeometricShapes.pl Unicode character database ! lib/unicode/In/Georgian.pl Unicode character database ! lib/unicode/In/Greek.pl Unicode character database ! lib/unicode/In/GreekExtended.pl Unicode character database ! lib/unicode/In/Gujarati.pl Unicode character database ! lib/unicode/In/Gurmukhi.pl Unicode character database ! lib/unicode/In/HalfwidthandFullwidthForms.pl Unicode character database ! lib/unicode/In/HangulCompatibilityJamo.pl Unicode character database ! lib/unicode/In/HangulJamo.pl Unicode character database ! lib/unicode/In/HangulSyllables.pl Unicode character database ! lib/unicode/In/Hebrew.pl Unicode character database ! lib/unicode/In/HighPrivateUseSurrogates.pl Unicode character database ! lib/unicode/In/HighSurrogates.pl Unicode character database ! lib/unicode/In/Hiragana.pl Unicode character database ! lib/unicode/In/IPAExtensions.pl Unicode character database ! lib/unicode/In/IdeographicDescriptionCharacters.pl Unicode character database ! lib/unicode/In/Kanbun.pl Unicode character database ! lib/unicode/In/KangxiRadicals.pl Unicode character database ! lib/unicode/In/Kannada.pl Unicode character database ! lib/unicode/In/Katakana.pl Unicode character database ! lib/unicode/In/Khmer.pl Unicode character database ! lib/unicode/In/Lao.pl Unicode character database ! lib/unicode/In/Latin-1Supplement.pl Unicode character database ! lib/unicode/In/LatinExtended-A.pl Unicode character database ! lib/unicode/In/LatinExtended-B.pl Unicode character database ! lib/unicode/In/LatinExtendedAdditional.pl Unicode character database ! lib/unicode/In/LetterlikeSymbols.pl Unicode character database ! lib/unicode/In/LowSurrogates.pl Unicode character database ! lib/unicode/In/Malayalam.pl Unicode character database ! lib/unicode/In/MathematicalOperators.pl Unicode character database ! lib/unicode/In/MiscellaneousSymbols.pl Unicode character database ! lib/unicode/In/MiscellaneousTechnical.pl Unicode character database ! lib/unicode/In/Mongolian.pl Unicode character database ! lib/unicode/In/Myanmar.pl Unicode character database ! lib/unicode/In/NumberForms.pl Unicode character database ! lib/unicode/In/Ogham.pl Unicode character database ! lib/unicode/In/OpticalCharacterRecognition.pl Unicode character database ! lib/unicode/In/Oriya.pl Unicode character database ! lib/unicode/In/PrivateUse.pl Unicode character database ! lib/unicode/In/Runic.pl Unicode character database ! lib/unicode/In/Sinhala.pl Unicode character database ! lib/unicode/In/SmallFormVariants.pl Unicode character database ! lib/unicode/In/SpacingModifierLetters.pl Unicode character database ! lib/unicode/In/Specials.pl Unicode character database ! lib/unicode/In/SuperscriptsandSubscripts.pl Unicode character database ! lib/unicode/In/Syriac.pl Unicode character database ! lib/unicode/In/Tamil.pl Unicode character database ! lib/unicode/In/Telugu.pl Unicode character database ! lib/unicode/In/Thaana.pl Unicode character database ! lib/unicode/In/Thai.pl Unicode character database ! lib/unicode/In/Tibetan.pl Unicode character database ! lib/unicode/In/UnifiedCanadianAboriginalSyllabics.pl Unicode character database ! lib/unicode/In/YiRadicals.pl Unicode character database ! lib/unicode/In/YiSyllables.pl Unicode character database ! lib/unicode/Index.txt Unicode character database ! lib/unicode/Is/ASCII.pl Unicode character database ! lib/unicode/Is/Alnum.pl Unicode character database ! lib/unicode/Is/Alpha.pl Unicode character database ! lib/unicode/Is/BidiAL.pl Unicode character database ! lib/unicode/Is/BidiAN.pl Unicode character database ! lib/unicode/Is/BidiB.pl Unicode character database ! lib/unicode/Is/BidiBN.pl Unicode character database ! lib/unicode/Is/BidiCS.pl Unicode character database ! lib/unicode/Is/BidiEN.pl Unicode character database ! lib/unicode/Is/BidiES.pl Unicode character database ! lib/unicode/Is/BidiET.pl Unicode character database ! lib/unicode/Is/BidiL.pl Unicode character database ! lib/unicode/Is/BidiLRE.pl Unicode character database ! lib/unicode/Is/BidiLRO.pl Unicode character database ! lib/unicode/Is/BidiNSM.pl Unicode character database ! lib/unicode/Is/BidiON.pl Unicode character database ! lib/unicode/Is/BidiPDF.pl Unicode character database ! lib/unicode/Is/BidiR.pl Unicode character database ! lib/unicode/Is/BidiRLE.pl Unicode character database ! lib/unicode/Is/BidiRLO.pl Unicode character database ! lib/unicode/Is/BidiS.pl Unicode character database ! lib/unicode/Is/BidiWS.pl Unicode character database ! lib/unicode/Is/Blank.pl Unicode character database ! lib/unicode/Is/C.pl Unicode character database ! lib/unicode/Is/Cc.pl Unicode character database ! lib/unicode/Is/Cf.pl Unicode character database ! lib/unicode/Is/Cn.pl Unicode character database ! lib/unicode/Is/Cntrl.pl Unicode character database ! lib/unicode/Is/Co.pl Unicode character database ! lib/unicode/Is/Cs.pl Unicode character database ! lib/unicode/Is/DCcircle.pl Unicode character database ! lib/unicode/Is/DCcompat.pl Unicode character database ! lib/unicode/Is/DCfinal.pl Unicode character database ! lib/unicode/Is/DCfont.pl Unicode character database ! lib/unicode/Is/DCfraction.pl Unicode character database ! lib/unicode/Is/DCinitial.pl Unicode character database ! lib/unicode/Is/DCisolated.pl Unicode character database ! lib/unicode/Is/DCmedial.pl Unicode character database ! lib/unicode/Is/DCnarrow.pl Unicode character database ! lib/unicode/Is/DCnoBreak.pl Unicode character database ! lib/unicode/Is/DCsmall.pl Unicode character database ! lib/unicode/Is/DCsquare.pl Unicode character database ! lib/unicode/Is/DCsub.pl Unicode character database ! lib/unicode/Is/DCsuper.pl Unicode character database ! lib/unicode/Is/DCvertical.pl Unicode character database ! lib/unicode/Is/DCwide.pl Unicode character database ! lib/unicode/Is/DecoCanon.pl Unicode character database ! lib/unicode/Is/DecoCompat.pl Unicode character database ! lib/unicode/Is/Digit.pl Unicode character database ! lib/unicode/Is/Graph.pl Unicode character database ! lib/unicode/Is/L.pl Unicode character database ! lib/unicode/Is/LbrkAI.pl Unicode character database ! lib/unicode/Is/LbrkAL.pl Unicode character database ! lib/unicode/Is/LbrkB2.pl Unicode character database ! lib/unicode/Is/LbrkBA.pl Unicode character database ! lib/unicode/Is/LbrkBB.pl Unicode character database ! lib/unicode/Is/LbrkBK.pl Unicode character database ! lib/unicode/Is/LbrkCB.pl Unicode character database ! lib/unicode/Is/LbrkCL.pl Unicode character database ! lib/unicode/Is/LbrkCM.pl Unicode character database ! lib/unicode/Is/LbrkCR.pl Unicode character database ! lib/unicode/Is/LbrkEX.pl Unicode character database ! lib/unicode/Is/LbrkGL.pl Unicode character database ! lib/unicode/Is/LbrkHY.pl Unicode character database ! lib/unicode/Is/LbrkID.pl Unicode character database ! lib/unicode/Is/LbrkIN.pl Unicode character database ! lib/unicode/Is/LbrkIS.pl Unicode character database ! lib/unicode/Is/LbrkLF.pl Unicode character database ! lib/unicode/Is/LbrkNS.pl Unicode character database ! lib/unicode/Is/LbrkNU.pl Unicode character database ! lib/unicode/Is/LbrkOP.pl Unicode character database ! lib/unicode/Is/LbrkPO.pl Unicode character database ! lib/unicode/Is/LbrkPR.pl Unicode character database ! lib/unicode/Is/LbrkQU.pl Unicode character database ! lib/unicode/Is/LbrkSA.pl Unicode character database ! lib/unicode/Is/LbrkSG.pl Unicode character database ! lib/unicode/Is/LbrkSP.pl Unicode character database ! lib/unicode/Is/LbrkSY.pl Unicode character database ! lib/unicode/Is/LbrkXX.pl Unicode character database ! lib/unicode/Is/LbrkZW.pl Unicode character database ! lib/unicode/Is/Ll.pl Unicode character database ! lib/unicode/Is/Lm.pl Unicode character database ! lib/unicode/Is/Lo.pl Unicode character database ! lib/unicode/Is/Lower.pl Unicode character database ! lib/unicode/Is/Lt.pl Unicode character database ! lib/unicode/Is/Lu.pl Unicode character database ! lib/unicode/Is/M.pl Unicode character database ! lib/unicode/Is/Mc.pl Unicode character database ! lib/unicode/Is/Me.pl Unicode character database ! lib/unicode/Is/Mirrored.pl Unicode character database ! lib/unicode/Is/Mn.pl Unicode character database ! lib/unicode/Is/N.pl Unicode character database ! lib/unicode/Is/Nd.pl Unicode character database ! lib/unicode/Is/Nl.pl Unicode character database ! lib/unicode/Is/No.pl Unicode character database ! lib/unicode/Is/P.pl Unicode character database ! lib/unicode/Is/Pc.pl Unicode character database ! lib/unicode/Is/Pd.pl Unicode character database ! lib/unicode/Is/Pe.pl Unicode character database ! lib/unicode/Is/Pf.pl Unicode character database ! lib/unicode/Is/Pi.pl Unicode character database ! lib/unicode/Is/Po.pl Unicode character database ! lib/unicode/Is/Print.pl Unicode character database ! lib/unicode/Is/Ps.pl Unicode character database ! lib/unicode/Is/Punct.pl Unicode character database ! lib/unicode/Is/S.pl Unicode character database ! lib/unicode/Is/Sc.pl Unicode character database ! lib/unicode/Is/Sk.pl Unicode character database ! lib/unicode/Is/Sm.pl Unicode character database ! lib/unicode/Is/So.pl Unicode character database ! lib/unicode/Is/Space.pl Unicode character database ! lib/unicode/Is/SpacePerl.pl Unicode character database ! lib/unicode/Is/SylA.pl Unicode character database ! lib/unicode/Is/SylAA.pl Unicode character database ! lib/unicode/Is/SylAAI.pl Unicode character database ! lib/unicode/Is/SylAI.pl Unicode character database ! lib/unicode/Is/SylC.pl Unicode character database ! lib/unicode/Is/SylE.pl Unicode character database ! lib/unicode/Is/SylEE.pl Unicode character database ! lib/unicode/Is/SylI.pl Unicode character database ! lib/unicode/Is/SylII.pl Unicode character database ! lib/unicode/Is/SylN.pl Unicode character database ! lib/unicode/Is/SylO.pl Unicode character database ! lib/unicode/Is/SylOO.pl Unicode character database ! lib/unicode/Is/SylU.pl Unicode character database ! lib/unicode/Is/SylV.pl Unicode character database ! lib/unicode/Is/SylWA.pl Unicode character database ! lib/unicode/Is/SylWAA.pl Unicode character database ! lib/unicode/Is/SylWC.pl Unicode character database ! lib/unicode/Is/SylWE.pl Unicode character database ! lib/unicode/Is/SylWEE.pl Unicode character database ! lib/unicode/Is/SylWI.pl Unicode character database ! lib/unicode/Is/SylWII.pl Unicode character database ! lib/unicode/Is/SylWO.pl Unicode character database ! lib/unicode/Is/SylWOO.pl Unicode character database ! lib/unicode/Is/SylWU.pl Unicode character database ! lib/unicode/Is/SylWV.pl Unicode character database ! lib/unicode/Is/Syllable.pl Unicode character database ! lib/unicode/Is/Upper.pl Unicode character database ! lib/unicode/Is/Word.pl Unicode character database ! lib/unicode/Is/XDigit.pl Unicode character database ! lib/unicode/Is/Z.pl Unicode character database ! lib/unicode/Is/Zl.pl Unicode character database ! lib/unicode/Is/Zp.pl Unicode character database ! lib/unicode/Is/Zs.pl Unicode character database ! lib/unicode/Jamo.txt Unicode character database ! lib/unicode/JamoShort.pl Unicode character database ! lib/unicode/LineBrk.txt Unicode character database ! lib/unicode/Makefile Unicode character database ! lib/unicode/Name.pl Unicode character database ! lib/unicode/NamesList.html Unicode character database ! lib/unicode/NamesList.txt Unicode character database ! lib/unicode/Number.pl Unicode character database ! lib/unicode/PropList.html Unicode character database ! lib/unicode/PropList.txt Unicode character database ! lib/unicode/README.perl Unicode character database ! lib/unicode/ReadMe.txt Unicode character database info ! lib/unicode/Scripts.txt Unicode character database ! lib/unicode/SpecCase.txt Unicode character database ! lib/unicode/To/Digit.pl Unicode character database ! lib/unicode/To/Lower.pl Unicode character database ! lib/unicode/To/Title.pl Unicode character database ! lib/unicode/To/Upper.pl Unicode character database ! lib/unicode/UCD.html Unicode character database ! lib/unicode/Unicode.html Unicode character database ! lib/unicode/Unicode.txt Unicode character database ! lib/unicode/distinct.pm Perl pragma to strictly distinguish UTF8 data and non-UTF data ! lib/unicode/mktables.PL Unicode character database generator ! lib/unicode/rename Filename mappings used ! lib/unicode/syllables.txt Unicode character database ! lib/unicode/version The version of the Unicode ! lib/utf8.pm Pragma to control Unicode support ! lib/utf8_heavy.pl Support routines for utf8 pragma ! lib/validate.pl Perl library supporting wholesale file mode validation ! lib/vars.pm Declare pseudo-imported global variables ! lib/warnings.pm For "use warnings" lib/warnings/register.pm For "use warnings::register" ! makeaperl.SH perl script that produces a new perl binary ! makedef.pl Create symbol export lists for linking ! makedepend.SH Precursor to makedepend ! makedir.SH Precursor to makedir ! malloc.c A version of malloc you might not want ! mg.c Magic code ! mg.h Magic header ! minimod.pl Writes lib/ExtUtils/Miniperl.pm ! miniperlmain.c Basic perl w/o dynamic loading or extensions ! mint/Makefile MiNT port ! mint/README MiNT port ! mint/errno.h MiNT port ! mint/pwd.c MiNT port ! mint/stdio.h MiNT port ! mint/sys/time.h MiNT port ! mint/time.h MiNT port ! mpeix/mpeixish.h MPE/iX port ! mpeix/nm MPE/iX port ! mpeix/relink MPE/iX port ! mv-if-diff Script to mv a file if it changed ! myconfig.SH Prints summary of the current configuration ! nostdio.h Cause compile error on stdio calls ! objXSUB.h Scoping macros for Perl Object in extensions ! op.c Opcode syntax tree code ! op.h Opcode syntax tree header ! opcode.h Automatically generated opcode header ! opcode.pl Opcode header generatore ! opnames.h Automatically generated opcode header ! os2/Changes Changelog for OS/2 port ! os2/Makefile.SHs Shared library generation for OS/2 os2/OS2/ExtAttr/Changes EA access module os2/OS2/ExtAttr/ExtAttr.pm EA access module os2/OS2/ExtAttr/ExtAttr.xs EA access module - os2/OS2/ExtAttr/MANIFEST EA access module os2/OS2/ExtAttr/Makefile.PL EA access module os2/OS2/ExtAttr/myea.h EA access module os2/OS2/ExtAttr/t/os2_ea.t EA access module os2/OS2/ExtAttr/typemap EA access module os2/OS2/PrfDB/Changes System database access module - os2/OS2/PrfDB/MANIFEST System database access module os2/OS2/PrfDB/Makefile.PL System database access module os2/OS2/PrfDB/PrfDB.pm System database access module os2/OS2/PrfDB/PrfDB.xs System database access module os2/OS2/PrfDB/t/os2_prfdb.t System database access module os2/OS2/PrfDB/typemap System database access module - os2/OS2/Process/MANIFEST system() constants in a module os2/OS2/Process/Makefile.PL system() constants in a module os2/OS2/Process/Process.pm system() constants in a module os2/OS2/Process/Process.xs system() constants in a module os2/OS2/REXX/Changes DLL access module ! os2/OS2/REXX/DLL/Changes DLL access module os2/OS2/REXX/DLL/DLL.pm DLL access module os2/OS2/REXX/DLL/DLL.xs DLL access module - os2/OS2/REXX/DLL/MANIFEST DLL access module os2/OS2/REXX/DLL/Makefile.PL DLL access module ! os2/OS2/REXX/MANIFEST DLL access module os2/OS2/REXX/Makefile.PL DLL access module os2/OS2/REXX/REXX.pm DLL access module os2/OS2/REXX/REXX.xs DLL access module os2/OS2/REXX/t/rx_cmprt.t DLL access module --- 786,1628 ---- lib/CGI/eg/nph-clock.cgi CGI example lib/CGI/eg/nph-multipart.cgi CGI example lib/CGI/eg/popup.cgi CGI example + lib/CGI/eg/RunMeFirst Setup script for CGI examples lib/CGI/eg/save_state.cgi CGI example lib/CGI/eg/tryit.cgi CGI example lib/CGI/eg/wilogo_gif.uu CGI example ! lib/CGI/Fast.pm Support for FastCGI (persistent server process) ! lib/CGI/Pretty.pm Output nicely formatted HTML ! lib/CGI/Push.pm Support for server push ! lib/CGI/Switch.pm Simple interface for multiple server types ! lib/CGI/t/form.t See if CGI.pm works ! lib/CGI/t/function.t See if CGI.pm works ! lib/CGI/t/html.t See if CGI.pm works ! lib/CGI/t/pretty.t See if CGI.pm works ! lib/CGI/t/request.t See if CGI.pm works ! lib/CGI/t/util.t See if CGI.pm works ! lib/CGI/Util.pm Utility functions ! lib/charnames.pm Character names ! lib/charnames.t See if character names work ! lib/Class/ISA.pm Class::ISA ! lib/Class/ISA/test.pl See if Class::ISA works ! lib/Class/Struct.pm Declare struct-like datatypes as Perl classes ! lib/Class/Struct.t See if Class::Struct works ! lib/complete.pl A command completion subroutine ! lib/constant.pm For "use constant" ! lib/constant.t See if compile-time constants work ! lib/CPAN.pm Interface to Comprehensive Perl Archive Network ! lib/CPAN/FirstTime.pm Utility for creating CPAN config files ! lib/CPAN/Nox.pm Runs CPAN while avoiding compiled extensions ! lib/CPAN/t/loadme.t See if CPAN the module works ! lib/CPAN/t/vcmp.t See if CPAN the module works ! lib/ctime.pl A ctime workalike ! lib/Cwd.pm Various cwd routines (getcwd, fastcwd, chdir) ! lib/DB.pm Debugger API (draft) ! lib/Devel/SelfStubber.pm Generate stubs for SelfLoader.pm ! lib/Devel/SelfStubber.t See if Devel::SelfStubber works ! lib/diagnostics.pm Print verbose diagnostics ! lib/diagnostics.t See if diagnostics.pm works ! lib/Digest.pm Digest extensions ! lib/Digest.t See if Digest extensions work ! lib/DirHandle.pm like FileHandle only for directories ! lib/DirHandle.t See if DirHandle works ! lib/dotsh.pl Code to "dot" in a shell script ! lib/Dumpvalue.pm Screen dump of perl values ! lib/dumpvar.pl A variable dumper ! lib/English.pm Readable aliases for short variables ! lib/English.t See if English works ! lib/Env.pm Map environment into ordinary variables ! lib/Env/array.t See if Env works ! lib/Env/env.t See if Env works for arrays ! lib/exceptions.pl catch and throw routines ! lib/Exporter.pm Exporter base class ! lib/Exporter.t See if Exporter works ! lib/Exporter/Heavy.pm Complicated routines for Exporter ! lib/ExtUtils.t See if extutils work ! lib/ExtUtils/Command.pm Utilities for Make on non-UNIX platforms ! lib/ExtUtils/Constant.pm generate XS code to import C header constants ! lib/ExtUtils/Embed.pm Utilities for embedding Perl in C programs ! lib/ExtUtils/inst Give information about installed extensions ! lib/ExtUtils/Install.pm Handles 'make install' on extensions lib/ExtUtils/Installed.pm Information on installed extensions ! lib/ExtUtils/Liblist.pm Locates libraries ! lib/ExtUtils/MakeMaker.pm Write Makefiles for extensions ! lib/ExtUtils/Manifest.pm Utilities to write MANIFEST files lib/ExtUtils/MANIFEST.SKIP The default MANIFEST.SKIP + lib/ExtUtils/Mkbootstrap.pm Writes a bootstrap file (see MakeMaker) + lib/ExtUtils/Mksymlists.pm Writes a linker options file for extensions lib/ExtUtils/MM_Cygwin.pm MakeMaker methods for Cygwin + lib/ExtUtils/MM_NW5.pm MakeMaker methods for NetWare lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2 lib/ExtUtils/MM_Unix.pm MakeMaker base class for Unix lib/ExtUtils/MM_VMS.pm MakeMaker methods for VMS lib/ExtUtils/MM_Win32.pm MakeMaker methods for Win32 lib/ExtUtils/Packlist.pm Manipulates .packlist files lib/ExtUtils/testlib.pm Fixes up @INC to use just-built extension lib/ExtUtils/typemap Extension interface types lib/ExtUtils/xsubpp External subroutine preprocessor ! lib/fastcwd.pl a faster but more dangerous getcwd ! lib/Fatal.pm Make errors in functions/builtins fatal ! lib/Fatal.t See if Fatal works ! lib/fields.pm Set up object field names for pseudo-hash-using classes ! lib/fields.t See if base/fields works ! lib/File/Basename.pm Emulate the basename program ! lib/File/Basename.t See if File::Basename works ! lib/File/CheckTree.pm Perl module supporting wholesale file mode validation ! lib/File/CheckTree.t See if File::CheckTree works ! lib/File/Compare.pm Emulation of cmp command ! lib/File/Compare.t See if File::Compare works ! lib/File/Copy.pm Emulation of cp command ! lib/File/Copy.t See if File::Copy works ! lib/File/DosGlob.pm Win32 DOS-globbing module ! lib/File/DosGlob.t See if File::DosGlob works ! lib/File/Find.pm Routines to do a find ! lib/File/Find/find.t See if File::Find works ! lib/File/Find/taint.t See if File::Find works with taint ! lib/File/Path.pm Do things like `mkdir -p' and `rm -r' ! lib/File/Path.t See if File::Path works ! lib/File/Spec.pm portable operations on file names ! lib/File/Spec.t See if File::Spec works ! lib/File/Spec/Epoc.pm portable operations on EPOC file names lib/File/Spec/Functions.pm Function interface to File::Spec object methods ! lib/File/Spec/Functions.t See if File::Spec::Functions works ! lib/File/Spec/Mac.pm portable operations on Mac file names ! lib/File/Spec/OS2.pm portable operations on OS2 file names ! lib/File/Spec/Unix.pm portable operations on Unix file names ! lib/File/Spec/VMS.pm portable operations on VMS file names ! lib/File/Spec/Win32.pm portable operations on Win32 file names ! lib/File/stat.pm By-name interface to Perl's builtin stat ! lib/File/stat.t See if File::stat works ! lib/File/Temp.pm create safe temporary files and file handles ! lib/File/Temp/t/mktemp.t See if File::Temp works ! lib/File/Temp/t/posix.t See if File::Temp works ! lib/File/Temp/t/security.t See if File::Temp works ! lib/File/Temp/t/tempfile.t See if File::Temp works ! lib/FileCache.pm Keep more files open than the system permits ! lib/FileCache.t See if FileCache works ! lib/FileHandle.pm Backward-compatible front end to IO extension ! lib/FileHandle.t See if FileHandle works ! lib/filetest.pm For "use filetest" ! lib/Filter/Simple.pm Simple frontend to Filter::Util::Call ! lib/Filter/Simple/test.pl See if Filter::Simple works ! lib/find.pl A find emulator--used by find2perl ! lib/FindBin.pm Find name of currently executing program ! lib/FindBin.t See if FindBin works ! lib/finddepth.pl A depth-first find emulator--used by find2perl ! lib/flush.pl Routines to do single flush ! lib/ftp.pl FTP code (obsolete, use Net::FTP instead) ! lib/getcwd.pl A getcwd() emulator ! lib/getopt.pl Perl library supporting option parsing ! lib/Getopt/Long.pm Fetch command options (GetOptions) ! lib/Getopt/Long/t/basic.t See if Getopt::Long works ! lib/Getopt/Long/t/compat.t See if Getopt::Long works ! lib/Getopt/Long/t/linkage.t See if Getopt::Long works ! lib/Getopt/Long/t/oo.t See if Getopt::Long works ! lib/Getopt/Std.pm Fetch command options (getopt, getopts) ! lib/Getopt/Std.t See if Getopt::Std and Getopt::Long work ! lib/getopts.pl Perl library supporting option parsing ! lib/h2ph.t See if h2ph works like it should ! lib/h2xs.t See if h2xs produces expected lists of files ! lib/hostname.pl Old hostname code ! lib/I18N/Collate.pm Routines to do strxfrm-based collation ! lib/I18N/Collate.t See if I18N::Collate works ! lib/I18N/LangTags.pm I18N::LangTags ! lib/I18N/LangTags/ChangeLog I18N::LangTags ! lib/I18N/LangTags/List.pm List of tags for human languages ! lib/I18N/LangTags/README I18N::LangTags ! lib/I18N/LangTags/test.pl See if I18N::LangTags works ! lib/importenv.pl Perl routine to get environment into variables ! lib/integer.pm For "use integer" ! lib/IPC/Open2.pm Open a two-ended pipe ! lib/IPC/Open2.t See if IPC::Open2 works ! lib/IPC/Open3.pm Open a three-ended pipe! ! lib/IPC/Open3.t See if IPC::Open3 works ! lib/IPC/SysV.t See if IPC::SysV works ! lib/less.pm For "use less" ! lib/lib_pm.PL For "use lib", produces lib/lib.pm ! lib/locale.pm For "use locale" ! lib/locale.t See if locale support works ! lib/Locale/Codes/t/all.t See if Locale::Codes work ! lib/Locale/Codes/t/constants.t See if Locale::Codes work ! lib/Locale/Codes/t/country.t See if Locale::Codes work ! lib/Locale/Codes/t/currency.t See if Locale::Codes work ! lib/Locale/Codes/t/languages.t See if Locale::Codes work ! lib/Locale/Codes/t/uk.t See if Locale::Codes work ! lib/Locale/Constants.pm Locale::Codes ! lib/Locale/Country.pm Locale::Codes ! lib/Locale/Currency.pm Locale::Codes ! lib/Locale/Language.pm Locale::Codes ! lib/Locale/Maketext.pm Locale::Maketext ! lib/Locale/Maketext.pod Locale::Maketext documentation ! lib/Locale/Maketext/ChangeLog Locale::Maketext ! lib/Locale/Maketext/README Locale::Maketext ! lib/Locale/Maketext/test.pl See if Locale::Maketext works ! lib/Locale/Maketext/TPJ13.pod Locale::Maketext documentation article ! lib/look.pl A "look" equivalent ! lib/Math/BigFloat.pm An arbitrary precision floating-point arithmetic package ! lib/Math/BigInt.pm An arbitrary precision integer arithmetic package ! lib/Math/BigInt/Calc.pm Pure Perl module to support Math::BigInt ! lib/Math/BigInt/t/bigfltpm.t See if BigFloat.pm works ! lib/Math/BigInt/t/bigintc.t See if BigInt/Calc.pm works ! lib/Math/BigInt/t/bigintpm.t See if BigInt.pm works ! lib/Math/BigInt/t/mbimbf.t BigInt/BigFloat accuracy, precicion and fallback, round_mode ! lib/Math/Complex.pm A Complex package ! lib/Math/Complex.t See if Math::Complex works ! lib/Math/Trig.pm A simple interface to complex trigonometry ! lib/Math/Trig.t See if Math::Trig works ! lib/Memoize.pm Memoize ! lib/Memoize/AnyDBM_File.pm Memoize ! lib/Memoize/Expire.pm Memoize ! lib/Memoize/ExpireFile.pm Memoize ! lib/Memoize/ExpireTest.pm Memoize ! lib/Memoize/NDBM_File.pm Memoize ! lib/Memoize/README Memoize ! lib/Memoize/Saves.pm Memoize ! lib/Memoize/SDBM_File.pm Memoize ! lib/Memoize/Storable.pm Memoize ! lib/Memoize/t/array.t Memoize ! lib/Memoize/t/array_confusion.t Memoize ! lib/Memoize/t/correctness.t Memoize ! lib/Memoize/t/errors.t Memoize ! lib/Memoize/t/expire.t Memoize ! lib/Memoize/t/expire_file.t Memoize ! lib/Memoize/t/expire_module_n.t Memoize ! lib/Memoize/t/expire_module_t.t Memoize ! lib/Memoize/t/flush.t Memoize ! lib/Memoize/t/normalize.t Memoize ! lib/Memoize/t/prototype.t Memoize ! lib/Memoize/t/speed.t Memoize ! lib/Memoize/t/tie.t Memoize ! lib/Memoize/t/tie_gdbm.t Memoize ! lib/Memoize/t/tie_ndbm.t Memoize ! lib/Memoize/t/tie_sdbm.t Memoize ! lib/Memoize/t/tie_storable.t Memoize ! lib/Memoize/t/tiefeatures.t Memoize ! lib/Memoize/t/unmemoize.t Memoize ! lib/Memoize/TODO Memoize ! lib/Net/ChangeLog.libnet libnet ! lib/Net/Cmd.pm libnet ! lib/Net/Config.eg libnet ! lib/Net/Config.pm libnet ! lib/Net/demos/ftp libnet ! lib/Net/demos/inetd libnet ! lib/Net/demos/nntp libnet ! lib/Net/demos/nntp.mirror libnet ! lib/Net/demos/pop3 libnet ! lib/Net/demos/smtp.self libnet ! lib/Net/demos/snpp libnet ! lib/Net/demos/time libnet ! lib/Net/Domain.pm libnet ! lib/Net/FTP.pm libnet ! lib/Net/FTP/A.pm libnet ! lib/Net/FTP/dataconn.pm libnet ! lib/Net/FTP/E.pm libnet ! lib/Net/FTP/I.pm libnet ! lib/Net/FTP/L.pm libnet ! lib/Net/hostent.pm By-name interface to Perl's builtin gethost* ! lib/Net/hostent.t See if Net::hostent works ! lib/Net/Hostname.eg libnet ! lib/Net/libnet.ppd libnet ! lib/Net/libnetFAQ.pod libnet ! lib/Net/netent.pm By-name interface to Perl's builtin getnet* ! lib/Net/netent.t See if Net::netent works ! lib/Net/Netrc.pm libnet ! lib/Net/NNTP.pm libnet ! lib/Net/Ping.pm Hello, anybody home? ! lib/Net/POP3.pm libnet ! lib/Net/protoent.pm By-name interface to Perl's builtin getproto* ! lib/Net/protoent.t See if Net::protoent works ! lib/Net/README.config libnet ! lib/Net/README.libnet libnet ! lib/Net/servent.pm By-name interface to Perl's builtin getserv* ! lib/Net/servent.t See if Net::servtent works ! lib/Net/SMTP.pm libnet ! lib/Net/t/ftp.t libnet ! lib/Net/t/hostname.t libnet ! lib/Net/t/nntp.t libnet ! lib/Net/t/require.t libnet ! lib/Net/t/smtp.t libnet ! lib/Net/Time.pm libnet ! lib/newgetopt.pl A perl library supporting long option parsing ! lib/NEXT.pm Pseudo-class NEXT for method redispatch ! lib/NEXT/test.pl See if NEXT works ! lib/open.pm Pragma to specify default I/O disciplines ! lib/open2.pl Open a two-ended pipe (uses IPC::Open2) ! lib/open3.pl Open a three-ended pipe (uses IPC::Open3) ! lib/overload.pm Module for overloading perl operators ! lib/overload.t See if operator overloading works ! lib/perl5db.pl Perl debugging routines ! lib/PerlIO.pm PerlIO support module ! lib/ph.t See if h2ph works ! lib/Pod/Checker.pm Pod-Parser - check POD documents for syntax errors ! lib/Pod/Find.pm used by pod/splitpod ! lib/Pod/Functions.pm used by pod/splitpod ! lib/Pod/Html.pm Convert POD data to HTML ! lib/Pod/InputObjects.pm Pod-Parser - define objects for input streams ! lib/Pod/LaTeX.pm Convert POD data to LaTeX ! lib/Pod/Man.pm Convert POD data to *roff ! lib/Pod/Parser.pm Pod-Parser - define base class for parsing POD ! lib/Pod/ParseUtils.pm Pod-Parser - pod utility functions ! lib/Pod/Plainer.pm Pod migration utility module ! lib/Pod/Select.pm Pod-Parser - select portions of POD docs ! lib/Pod/Text.pm Pod-Parser - convert POD data to formatted ASCII text ! lib/Pod/Text/Color.pm Convert POD data to color ASCII text lib/Pod/Text/Overstrike.pm Convert POD data to formatted overstrike text ! lib/Pod/Text/Termcap.pm Convert POD data to ASCII text with format escapes ! lib/Pod/Usage.pm Pod-Parser - print usage messages ! lib/pwd.pl Routines to keep track of PWD environment variable ! lib/Search/Dict.pm Perform binary search on dictionaries ! lib/Search/Dict.t See if Search::Dict works ! lib/SelectSaver.pm Enforce proper select scoping ! lib/SelectSaver.t See if SelectSaver works ! lib/SelfLoader.pm Load functions only on demand ! lib/SelfLoader.t See if SelfLoader works ! lib/Shell.pm Make AUTOLOADed system() calls ! lib/shellwords.pl Perl library to split into words with shell quoting ! lib/sigtrap.pm For trapping an abort and giving traceback ! lib/stat.pl Perl library supporting stat function ! lib/strict.pm For "use strict" ! lib/strict.t See if strictures work ! lib/subs.pm Declare overriding subs ! lib/subs.t See if subroutine pseudo-importation works ! lib/Switch.pm Switch for Perl ! lib/Switch/test.pl Test whether switch works ! lib/Symbol.pm Symbol table manipulation routines ! lib/Symbol.t See if Symbol works ! lib/syslog.pl Perl library supporting syslogging ! lib/tainted.pl Old code for tainting ! lib/Term/ANSIColor.pm Perl module supporting termcap usage ! lib/Term/ANSIColor/ChangeLog Term::ANSIColor ! lib/Term/ANSIColor/README Term::ANSIColor ! lib/Term/ANSIColor/test.pl See if Term::ANSIColor works ! lib/Term/Cap.pm Perl module supporting termcap usage ! lib/Term/Complete.pm A command completion subroutine ! lib/Term/ReadLine.pm Stub readline library ! lib/termcap.pl Perl library supporting termcap usage ! lib/Test.pm A simple framework for writing test scripts ! lib/Test/Harness.pm A test harness ! lib/Test/Harness.t See if Test::Harness works ! lib/Test/More.pm More utilities for writing tests ! lib/Test/More/Changes Test::More changes ! lib/Test/More/t/fail-like.t Test::More test, like() and qr// bug ! lib/Test/More/t/fail.t Test::More test, failing tests ! lib/Test/More/t/More.t Test::More test, basic operation ! lib/Test/More/t/plan_is_noplan.t Test::More test, noplan ! lib/Test/More/t/skipall.t Test::More test, skipping all tests ! lib/Test/Simple.pm Basic utility for writing tests ! lib/Test/Simple/Changes Test::Simple changes ! lib/Test/Simple/t/exit.t Test::Simple test, exit codes ! lib/Test/Simple/t/extra.t Test::Simple test ! lib/Test/Simple/t/fail.t Test::Simple test, test failures ! lib/Test/Simple/t/missing.t Test::Simple test, missing tests ! lib/Test/Simple/t/no_plan.t Test::Simple test, forgot the plan ! lib/Test/Simple/t/plan_is_noplan.t Test::Simple test, no_plan ! lib/Test/Simple/t/simple.t for exit.t ! lib/Test/t/fail.t See if Test works ! lib/Test/t/mix.t See if Test works ! lib/Test/t/onfail.t See if Test works ! lib/Test/t/qr.t See if Test works ! lib/Test/t/skip.t See if Test works ! lib/Test/t/success.t See if Test works ! lib/Test/t/todo.t See if Test works ! lib/Text/Abbrev.pm An abbreviation table builder ! lib/Text/Abbrev.t Test Text::Abbrev ! lib/Text/Balanced.pm Text::Balanced ! lib/Text/Balanced.pod Text::Balanced ! lib/Text/Balanced/t/genxt.t See if Text::Balanced works ! lib/Text/Balanced/t/xbrak.t See if Text::Balanced works ! lib/Text/Balanced/t/xcode.t See if Text::Balanced works ! lib/Text/Balanced/t/xdeli.t See if Text::Balanced works ! lib/Text/Balanced/t/xmult.t See if Text::Balanced works ! lib/Text/Balanced/t/xquot.t See if Text::Balanced works ! lib/Text/Balanced/t/xtagg.t See if Text::Balanced works ! lib/Text/Balanced/t/xvari.t See if Text::Balanced works ! lib/Text/ParseWords.pm Perl module to split words on arbitrary delimiter ! lib/Text/ParseWords.t See if Text::ParseWords works ! lib/Text/Soundex.pm Perl module to implement Soundex ! lib/Text/Soundex.t See if Soundex works ! lib/Text/Tabs.pm Do expand and unexpand ! lib/Text/TabsWrap/t/fill.t See if Text::Wrap::fill works ! lib/Text/TabsWrap/t/tabs.t See if Text::Tabs works ! lib/Text/TabsWrap/t/wrap.t See if Text::Wrap::wrap works ! lib/Text/Wrap.pm Paragraph formatter ! lib/Tie/Array.pm Base class for tied arrays ! lib/Tie/Array/push.t Test for Tie::Array ! lib/Tie/Array/splice.t Test for Tie::Array::SPLICE ! lib/Tie/Array/std.t Test for Tie::StdArray ! lib/Tie/Array/stdpush.t Test for Tie::StdArray ! lib/Tie/Handle.pm Base class for tied handles ! lib/Tie/Handle/stdhandle.t Test for Tie::StdHandle ! lib/Tie/Hash.pm Base class for tied hashes ! lib/Tie/RefHash.pm Base class for tied hashes with references as keys ! lib/Tie/RefHash.t Test for Tie::RefHash and Tie::RefHash::Nestable ! lib/Tie/Scalar.pm Base class for tied scalars ! lib/Tie/SubstrHash.pm Compact hash for known key, value and table size ! lib/Tie/SubstrHash.t Test for Tie::SubstrHash ! lib/Time/gmtime.pm By-name interface to Perl's builtin gmtime ! lib/Time/gmtime.t Test for Time::gmtime ! lib/Time/Local.pm Reverse translation of localtime, gmtime ! lib/Time/Local.t See if Time::Local works ! lib/Time/localtime.pm By-name interface to Perl's builtin localtime ! lib/Time/localtime.t Test for Time::localtime ! lib/Time/tm.pm Internal object for Time::{gm,local}time ! lib/timelocal.pl Perl library supporting inverse of localtime, gmtime ! lib/unicode/ArabLink.pl Unicode character database ! lib/unicode/ArabLnkGrp.pl Unicode character database ! lib/unicode/ArabShap.txt Unicode character database ! lib/unicode/BidiMirr.txt Unicode character database ! lib/unicode/Bidirectional.pl Unicode character database ! lib/unicode/Blocks.pl Unicode character database ! lib/unicode/Blocks.txt Unicode character database ! lib/unicode/CaseFold.txt Unicode character database ! lib/unicode/Category.pl Unicode character database ! lib/unicode/CombiningClass.pl Unicode character database ! lib/unicode/CompExcl.txt Unicode character database ! lib/unicode/Decomposition.pl Unicode character database ! lib/unicode/EAWidth.txt Unicode character database ! lib/unicode/In.pl Unicode character database ! lib/unicode/In/0.pl Unicode character database ! lib/unicode/In/1.pl Unicode character database ! lib/unicode/In/10.pl Unicode character database ! lib/unicode/In/100.pl Unicode character database ! lib/unicode/In/101.pl Unicode character database ! lib/unicode/In/102.pl Unicode character database ! lib/unicode/In/103.pl Unicode character database ! lib/unicode/In/104.pl Unicode character database ! lib/unicode/In/105.pl Unicode character database ! lib/unicode/In/106.pl Unicode character database ! lib/unicode/In/107.pl Unicode character database ! lib/unicode/In/108.pl Unicode character database ! lib/unicode/In/109.pl Unicode character database ! lib/unicode/In/11.pl Unicode character database ! lib/unicode/In/110.pl Unicode character database ! lib/unicode/In/111.pl Unicode character database ! lib/unicode/In/112.pl Unicode character database ! lib/unicode/In/113.pl Unicode character database ! lib/unicode/In/114.pl Unicode character database ! lib/unicode/In/115.pl Unicode character database ! lib/unicode/In/116.pl Unicode character database ! lib/unicode/In/117.pl Unicode character database ! lib/unicode/In/118.pl Unicode character database ! lib/unicode/In/119.pl Unicode character database ! lib/unicode/In/12.pl Unicode character database ! lib/unicode/In/120.pl Unicode character database ! lib/unicode/In/121.pl Unicode character database ! lib/unicode/In/122.pl Unicode character database ! lib/unicode/In/123.pl Unicode character database ! lib/unicode/In/124.pl Unicode character database ! lib/unicode/In/125.pl Unicode character database ! lib/unicode/In/126.pl Unicode character database ! lib/unicode/In/127.pl Unicode character database ! lib/unicode/In/128.pl Unicode character database ! lib/unicode/In/129.pl Unicode character database ! lib/unicode/In/13.pl Unicode character database ! lib/unicode/In/130.pl Unicode character database ! lib/unicode/In/131.pl Unicode character database ! lib/unicode/In/132.pl Unicode character database ! lib/unicode/In/133.pl Unicode character database ! lib/unicode/In/134.pl Unicode character database ! lib/unicode/In/135.pl Unicode character database ! lib/unicode/In/14.pl Unicode character database ! lib/unicode/In/15.pl Unicode character database ! lib/unicode/In/16.pl Unicode character database ! lib/unicode/In/17.pl Unicode character database ! lib/unicode/In/18.pl Unicode character database ! lib/unicode/In/19.pl Unicode character database ! lib/unicode/In/2.pl Unicode character database ! lib/unicode/In/20.pl Unicode character database ! lib/unicode/In/21.pl Unicode character database ! lib/unicode/In/22.pl Unicode character database ! lib/unicode/In/23.pl Unicode character database ! lib/unicode/In/24.pl Unicode character database ! lib/unicode/In/25.pl Unicode character database ! lib/unicode/In/26.pl Unicode character database ! lib/unicode/In/27.pl Unicode character database ! lib/unicode/In/28.pl Unicode character database ! lib/unicode/In/29.pl Unicode character database ! lib/unicode/In/3.pl Unicode character database ! lib/unicode/In/30.pl Unicode character database ! lib/unicode/In/31.pl Unicode character database ! lib/unicode/In/32.pl Unicode character database ! lib/unicode/In/33.pl Unicode character database ! lib/unicode/In/34.pl Unicode character database ! lib/unicode/In/35.pl Unicode character database ! lib/unicode/In/36.pl Unicode character database ! lib/unicode/In/37.pl Unicode character database ! lib/unicode/In/38.pl Unicode character database ! lib/unicode/In/39.pl Unicode character database ! lib/unicode/In/4.pl Unicode character database ! lib/unicode/In/40.pl Unicode character database ! lib/unicode/In/41.pl Unicode character database ! lib/unicode/In/42.pl Unicode character database ! lib/unicode/In/43.pl Unicode character database ! lib/unicode/In/44.pl Unicode character database ! lib/unicode/In/45.pl Unicode character database ! lib/unicode/In/46.pl Unicode character database ! lib/unicode/In/47.pl Unicode character database ! lib/unicode/In/48.pl Unicode character database ! lib/unicode/In/49.pl Unicode character database ! lib/unicode/In/5.pl Unicode character database ! lib/unicode/In/50.pl Unicode character database ! lib/unicode/In/51.pl Unicode character database ! lib/unicode/In/52.pl Unicode character database ! lib/unicode/In/53.pl Unicode character database ! lib/unicode/In/54.pl Unicode character database ! lib/unicode/In/55.pl Unicode character database ! lib/unicode/In/56.pl Unicode character database ! lib/unicode/In/57.pl Unicode character database ! lib/unicode/In/58.pl Unicode character database ! lib/unicode/In/59.pl Unicode character database ! lib/unicode/In/6.pl Unicode character database ! lib/unicode/In/60.pl Unicode character database ! lib/unicode/In/61.pl Unicode character database ! lib/unicode/In/62.pl Unicode character database ! lib/unicode/In/63.pl Unicode character database ! lib/unicode/In/64.pl Unicode character database ! lib/unicode/In/65.pl Unicode character database ! lib/unicode/In/66.pl Unicode character database ! lib/unicode/In/67.pl Unicode character database ! lib/unicode/In/68.pl Unicode character database ! lib/unicode/In/69.pl Unicode character database ! lib/unicode/In/7.pl Unicode character database ! lib/unicode/In/70.pl Unicode character database ! lib/unicode/In/71.pl Unicode character database ! lib/unicode/In/72.pl Unicode character database ! lib/unicode/In/73.pl Unicode character database ! lib/unicode/In/74.pl Unicode character database ! lib/unicode/In/75.pl Unicode character database ! lib/unicode/In/76.pl Unicode character database ! lib/unicode/In/77.pl Unicode character database ! lib/unicode/In/78.pl Unicode character database ! lib/unicode/In/79.pl Unicode character database ! lib/unicode/In/8.pl Unicode character database ! lib/unicode/In/80.pl Unicode character database ! lib/unicode/In/81.pl Unicode character database ! lib/unicode/In/82.pl Unicode character database ! lib/unicode/In/83.pl Unicode character database ! lib/unicode/In/84.pl Unicode character database ! lib/unicode/In/85.pl Unicode character database ! lib/unicode/In/86.pl Unicode character database ! lib/unicode/In/87.pl Unicode character database ! lib/unicode/In/88.pl Unicode character database ! lib/unicode/In/89.pl Unicode character database ! lib/unicode/In/9.pl Unicode character database ! lib/unicode/In/90.pl Unicode character database ! lib/unicode/In/91.pl Unicode character database ! lib/unicode/In/92.pl Unicode character database ! lib/unicode/In/93.pl Unicode character database ! lib/unicode/In/94.pl Unicode character database ! lib/unicode/In/95.pl Unicode character database ! lib/unicode/In/96.pl Unicode character database ! lib/unicode/In/97.pl Unicode character database ! lib/unicode/In/98.pl Unicode character database ! lib/unicode/In/99.pl Unicode character database ! lib/unicode/Index.txt Unicode character database ! lib/unicode/Is/Alnum.pl Unicode character database ! lib/unicode/Is/Alpha.pl Unicode character database ! lib/unicode/Is/ASCII.pl Unicode character database ! lib/unicode/Is/BidiAL.pl Unicode character database ! lib/unicode/Is/BidiAN.pl Unicode character database ! lib/unicode/Is/BidiB.pl Unicode character database ! lib/unicode/Is/BidiBN.pl Unicode character database ! lib/unicode/Is/BidiCS.pl Unicode character database ! lib/unicode/Is/BidiEN.pl Unicode character database ! lib/unicode/Is/BidiES.pl Unicode character database ! lib/unicode/Is/BidiET.pl Unicode character database ! lib/unicode/Is/BidiL.pl Unicode character database ! lib/unicode/Is/BidiLRE.pl Unicode character database ! lib/unicode/Is/BidiLRO.pl Unicode character database ! lib/unicode/Is/BidiNSM.pl Unicode character database ! lib/unicode/Is/BidiON.pl Unicode character database ! lib/unicode/Is/BidiPDF.pl Unicode character database ! lib/unicode/Is/BidiR.pl Unicode character database ! lib/unicode/Is/BidiRLE.pl Unicode character database ! lib/unicode/Is/BidiRLO.pl Unicode character database ! lib/unicode/Is/BidiS.pl Unicode character database ! lib/unicode/Is/BidiWS.pl Unicode character database ! lib/unicode/Is/Blank.pl Unicode character database ! lib/unicode/Is/C.pl Unicode character database ! lib/unicode/Is/Cc.pl Unicode character database ! lib/unicode/Is/Cf.pl Unicode character database ! lib/unicode/Is/Cn.pl Unicode character database ! lib/unicode/Is/Cntrl.pl Unicode character database ! lib/unicode/Is/Co.pl Unicode character database ! lib/unicode/Is/Cs.pl Unicode character database ! lib/unicode/Is/DCcircle.pl Unicode character database ! lib/unicode/Is/DCcompat.pl Unicode character database ! lib/unicode/Is/DCfinal.pl Unicode character database ! lib/unicode/Is/DCfont.pl Unicode character database ! lib/unicode/Is/DCfraction.pl Unicode character database ! lib/unicode/Is/DCinitial.pl Unicode character database ! lib/unicode/Is/DCisolated.pl Unicode character database ! lib/unicode/Is/DCmedial.pl Unicode character database ! lib/unicode/Is/DCnarrow.pl Unicode character database ! lib/unicode/Is/DCnoBreak.pl Unicode character database ! lib/unicode/Is/DCsmall.pl Unicode character database ! lib/unicode/Is/DCsquare.pl Unicode character database ! lib/unicode/Is/DCsub.pl Unicode character database ! lib/unicode/Is/DCsuper.pl Unicode character database ! lib/unicode/Is/DCvertical.pl Unicode character database ! lib/unicode/Is/DCwide.pl Unicode character database ! lib/unicode/Is/DecoCanon.pl Unicode character database ! lib/unicode/Is/DecoCompat.pl Unicode character database ! lib/unicode/Is/Digit.pl Unicode character database ! lib/unicode/Is/Graph.pl Unicode character database ! lib/unicode/Is/L.pl Unicode character database ! lib/unicode/Is/LbrkAI.pl Unicode character database ! lib/unicode/Is/LbrkAL.pl Unicode character database ! lib/unicode/Is/LbrkB2.pl Unicode character database ! lib/unicode/Is/LbrkBA.pl Unicode character database ! lib/unicode/Is/LbrkBB.pl Unicode character database ! lib/unicode/Is/LbrkBK.pl Unicode character database ! lib/unicode/Is/LbrkCB.pl Unicode character database ! lib/unicode/Is/LbrkCL.pl Unicode character database ! lib/unicode/Is/LbrkCM.pl Unicode character database ! lib/unicode/Is/LbrkCR.pl Unicode character database ! lib/unicode/Is/LbrkEX.pl Unicode character database ! lib/unicode/Is/LbrkGL.pl Unicode character database ! lib/unicode/Is/LbrkHY.pl Unicode character database ! lib/unicode/Is/LbrkID.pl Unicode character database ! lib/unicode/Is/LbrkIN.pl Unicode character database ! lib/unicode/Is/LbrkIS.pl Unicode character database ! lib/unicode/Is/LbrkLF.pl Unicode character database ! lib/unicode/Is/LbrkNS.pl Unicode character database ! lib/unicode/Is/LbrkNU.pl Unicode character database ! lib/unicode/Is/LbrkOP.pl Unicode character database ! lib/unicode/Is/LbrkPO.pl Unicode character database ! lib/unicode/Is/LbrkPR.pl Unicode character database ! lib/unicode/Is/LbrkQU.pl Unicode character database ! lib/unicode/Is/LbrkSA.pl Unicode character database ! lib/unicode/Is/LbrkSG.pl Unicode character database ! lib/unicode/Is/LbrkSP.pl Unicode character database ! lib/unicode/Is/LbrkSY.pl Unicode character database ! lib/unicode/Is/LbrkXX.pl Unicode character database ! lib/unicode/Is/LbrkZW.pl Unicode character database ! lib/unicode/Is/Ll.pl Unicode character database ! lib/unicode/Is/Lm.pl Unicode character database ! lib/unicode/Is/Lo.pl Unicode character database ! lib/unicode/Is/Lower.pl Unicode character database ! lib/unicode/Is/Lt.pl Unicode character database ! lib/unicode/Is/Lu.pl Unicode character database ! lib/unicode/Is/M.pl Unicode character database ! lib/unicode/Is/Mc.pl Unicode character database ! lib/unicode/Is/Me.pl Unicode character database ! lib/unicode/Is/Mirrored.pl Unicode character database ! lib/unicode/Is/Mn.pl Unicode character database ! lib/unicode/Is/N.pl Unicode character database ! lib/unicode/Is/Nd.pl Unicode character database ! lib/unicode/Is/Nl.pl Unicode character database ! lib/unicode/Is/No.pl Unicode character database ! lib/unicode/Is/P.pl Unicode character database ! lib/unicode/Is/Pc.pl Unicode character database ! lib/unicode/Is/Pd.pl Unicode character database ! lib/unicode/Is/Pe.pl Unicode character database ! lib/unicode/Is/Pf.pl Unicode character database ! lib/unicode/Is/Pi.pl Unicode character database ! lib/unicode/Is/Po.pl Unicode character database ! lib/unicode/Is/Print.pl Unicode character database ! lib/unicode/Is/Ps.pl Unicode character database ! lib/unicode/Is/Punct.pl Unicode character database ! lib/unicode/Is/S.pl Unicode character database ! lib/unicode/Is/Sc.pl Unicode character database ! lib/unicode/Is/Sk.pl Unicode character database ! lib/unicode/Is/Sm.pl Unicode character database ! lib/unicode/Is/So.pl Unicode character database ! lib/unicode/Is/Space.pl Unicode character database ! lib/unicode/Is/SpacePerl.pl Unicode character database ! lib/unicode/Is/SylA.pl Unicode character database ! lib/unicode/Is/SylAA.pl Unicode character database ! lib/unicode/Is/SylAAI.pl Unicode character database ! lib/unicode/Is/SylAI.pl Unicode character database ! lib/unicode/Is/SylC.pl Unicode character database ! lib/unicode/Is/SylE.pl Unicode character database ! lib/unicode/Is/SylEE.pl Unicode character database ! lib/unicode/Is/SylI.pl Unicode character database ! lib/unicode/Is/SylII.pl Unicode character database ! lib/unicode/Is/Syllable.pl Unicode character database ! lib/unicode/Is/SylN.pl Unicode character database ! lib/unicode/Is/SylO.pl Unicode character database ! lib/unicode/Is/SylOO.pl Unicode character database ! lib/unicode/Is/SylU.pl Unicode character database ! lib/unicode/Is/SylV.pl Unicode character database ! lib/unicode/Is/SylWA.pl Unicode character database ! lib/unicode/Is/SylWAA.pl Unicode character database ! lib/unicode/Is/SylWC.pl Unicode character database ! lib/unicode/Is/SylWE.pl Unicode character database ! lib/unicode/Is/SylWEE.pl Unicode character database ! lib/unicode/Is/SylWI.pl Unicode character database ! lib/unicode/Is/SylWII.pl Unicode character database ! lib/unicode/Is/SylWO.pl Unicode character database ! lib/unicode/Is/SylWOO.pl Unicode character database ! lib/unicode/Is/SylWU.pl Unicode character database ! lib/unicode/Is/SylWV.pl Unicode character database ! lib/unicode/Is/Upper.pl Unicode character database ! lib/unicode/Is/Word.pl Unicode character database ! lib/unicode/Is/XDigit.pl Unicode character database ! lib/unicode/Is/Z.pl Unicode character database ! lib/unicode/Is/Zl.pl Unicode character database ! lib/unicode/Is/Zp.pl Unicode character database ! lib/unicode/Is/Zs.pl Unicode character database ! lib/unicode/Jamo.txt Unicode character database ! lib/unicode/JamoShort.pl Unicode character database ! lib/unicode/LineBrk.txt Unicode character database ! lib/unicode/Makefile Unicode character database ! lib/unicode/mktables.PL Unicode character database generator ! lib/unicode/Name.pl Unicode character database ! lib/unicode/NamesList.html Unicode character database ! lib/unicode/NamesList.txt Unicode character database ! lib/unicode/Number.pl Unicode character database ! lib/unicode/PropList.html Unicode character database ! lib/unicode/PropList.txt Unicode character database ! lib/unicode/README.perl Unicode character database ! lib/unicode/ReadMe.txt Unicode character database info ! lib/unicode/rename Filename mappings used ! lib/unicode/Scripts.pl Unicode character database ! lib/unicode/Scripts.txt Unicode character database ! lib/unicode/SpecCase.txt Unicode character database ! lib/unicode/syllables.txt Unicode character database ! lib/unicode/To/Digit.pl Unicode character database ! lib/unicode/To/Lower.pl Unicode character database ! lib/unicode/To/Title.pl Unicode character database ! lib/unicode/To/Upper.pl Unicode character database ! lib/unicode/UCD.html Unicode character database ! lib/UnicodeCD.pm Unicode character database ! lib/UnicodeCD.t See if Unicode character database works ! lib/unicode/Unicode.html Unicode character database ! lib/unicode/Unicode.txt Unicode character database ! lib/unicode/version The version of the Unicode ! lib/UNIVERSAL.pm Base class for ALL classes ! lib/User/grent.pm By-name interface to Perl's builtin getgr* ! lib/User/grent.t See if User::grwent works ! lib/User/pwent.pm By-name interface to Perl's builtin getpw* ! lib/User/pwent.t See if User::pwent works ! lib/utf8.pm Pragma to control Unicode support ! lib/utf8.t See if utf8 operations work ! lib/utf8_heavy.pl Support routines for utf8 pragma ! lib/validate.pl Perl library supporting wholesale file mode validation ! lib/vars.pm Declare pseudo-imported global variables ! lib/vars.t See if "use vars" work ! lib/warnings.pm For "use warnings" ! lib/warnings.t See if warning controls work lib/warnings/register.pm For "use warnings::register" ! lib/Win32.pod Documentation for Win32 extras ! locale.c locale-specific utility functions ! makeaperl.SH perl script that produces a new perl binary ! makedef.pl Create symbol export lists for linking ! makedepend.SH Precursor to makedepend ! makedir.SH Precursor to makedir ! Makefile.micro microperl Makefile ! Makefile.SH A script that generates Makefile ! malloc.c A version of malloc you might not want ! MANIFEST This list of files ! mg.c Magic code ! mg.h Magic header ! minimod.pl Writes lib/ExtUtils/Miniperl.pm ! miniperlmain.c Basic perl w/o dynamic loading or extensions ! mint/errno.h MiNT port ! mint/Makefile MiNT port ! mint/pwd.c MiNT port ! mint/README MiNT port ! mint/stdio.h MiNT port ! mint/sys/time.h MiNT port ! mint/time.h MiNT port ! mpeix/mpeixish.h MPE/iX port ! mpeix/nm MPE/iX port ! mpeix/relink MPE/iX port ! mv-if-diff Script to mv a file if it changed ! myconfig.SH Prints summary of the current configuration ! NetWare/bat/BldNWExt.bat Netware port ! NetWare/bat/Buildtype.bat Netware port ! NetWare/bat/MPKBuild.bat Netware port ! NetWare/bat/Setmpksdk.bat Netware port ! NetWare/bat/Setnlmsdk.bat Netware port ! NetWare/bat/SetNWBld.bat Netware port ! NetWare/bat/Setwatcom.bat Netware port ! NetWare/bat/ToggleD2.bat Netware port ! NetWare/bat/ToggleXDC.bat Netware port ! NetWare/CLIBsdio.h Netware port ! NetWare/CLIBstr.h Netware port ! NetWare/CLIBstuf.c Netware port ! NetWare/CLIBstuf.h Netware port ! NetWare/config.wc Netware port ! NetWare/config_h.PL Netware port ! NetWare/config_H.wc Netware port ! NetWare/config_sh.PL Netware port ! NetWare/deb.h Netware port ! NetWare/dl_netware.xs Netware port ! NetWare/intdef.h Netware port ! NetWare/interface.c Netware port ! NetWare/interface.h Netware port ! NetWare/iperlhost.h Netware port ! NetWare/Main.c Netware port ! NetWare/Makefile Netware port ! NetWare/netware.h Netware port ! NetWare/nw5.c Netware port ! NetWare/nw5iop.h Netware port ! NetWare/nw5sck.c Netware port ! NetWare/nw5sck.h Netware port ! NetWare/nw5thread.c Netware port ! NetWare/nw5thread.h Netware port ! NetWare/Nwmain.c Netware port ! NetWare/nwperlsys.c Netware port ! NetWare/nwperlsys.h Netware port ! NetWare/Nwpipe.c Netware port ! NetWare/nwpipe.h Netware port ! NetWare/nwplglob.c Netware port ! NetWare/nwplglob.h Netware port ! NetWare/nwstdio.h Netware port ! NetWare/NWTInfo.c Netware port ! NetWare/nwtinfo.h Netware port ! NetWare/NWUtil.c Netware port ! NetWare/nwutil.h Netware port ! NetWare/t/NWModify.pl Netware port ! NetWare/t/NWScripts.pl Netware port ! NetWare/t/Readme.txt Netware port ! NetWare/testnlm/echo/echo.c Netware port ! NetWare/testnlm/type/type.c Netware port ! NetWare/win32ish.h Netware port ! nostdio.h Cause compile error on stdio calls ! numeric.c Miscellaneous numeric conversion routines ! objXSUB.h Scoping macros for Perl Object in extensions ! op.c Opcode syntax tree code ! op.h Opcode syntax tree header ! opcode.h Automatically generated opcode header ! opcode.pl Opcode header generatore ! opnames.h Automatically generated opcode header ! os2/Changes Changelog for OS/2 port ! os2/diff.configure Patches to Configure ! os2/dl_os2.c Addon for dl_open ! os2/dlfcn.h Addon for dl_open ! os2/Makefile.SHs Shared library generation for OS/2 ! os2/os2.c Additional code for OS/2 ! os2/os2.sym Additional symbols to export os2/OS2/ExtAttr/Changes EA access module os2/OS2/ExtAttr/ExtAttr.pm EA access module os2/OS2/ExtAttr/ExtAttr.xs EA access module os2/OS2/ExtAttr/Makefile.PL EA access module + os2/OS2/ExtAttr/MANIFEST EA access module os2/OS2/ExtAttr/myea.h EA access module os2/OS2/ExtAttr/t/os2_ea.t EA access module os2/OS2/ExtAttr/typemap EA access module os2/OS2/PrfDB/Changes System database access module os2/OS2/PrfDB/Makefile.PL System database access module + os2/OS2/PrfDB/MANIFEST System database access module os2/OS2/PrfDB/PrfDB.pm System database access module os2/OS2/PrfDB/PrfDB.xs System database access module os2/OS2/PrfDB/t/os2_prfdb.t System database access module os2/OS2/PrfDB/typemap System database access module os2/OS2/Process/Makefile.PL system() constants in a module + os2/OS2/Process/MANIFEST system() constants in a module os2/OS2/Process/Process.pm system() constants in a module os2/OS2/Process/Process.xs system() constants in a module os2/OS2/REXX/Changes DLL access module ! os2/OS2/REXX/DLL/Changes DLL access module os2/OS2/REXX/DLL/DLL.pm DLL access module os2/OS2/REXX/DLL/DLL.xs DLL access module os2/OS2/REXX/DLL/Makefile.PL DLL access module ! os2/OS2/REXX/DLL/MANIFEST DLL access module os2/OS2/REXX/Makefile.PL DLL access module + os2/OS2/REXX/MANIFEST DLL access module os2/OS2/REXX/REXX.pm DLL access module os2/OS2/REXX/REXX.xs DLL access module os2/OS2/REXX/t/rx_cmprt.t DLL access module *************** *** 1214,1931 **** os2/OS2/REXX/t/rx_tieydb.t DLL access module os2/OS2/REXX/t/rx_varset.t DLL access module os2/OS2/REXX/t/rx_vrexx.t DLL access module ! os2/diff.configure Patches to Configure ! os2/dl_os2.c Addon for dl_open ! os2/dlfcn.h Addon for dl_open ! os2/os2.c Additional code for OS/2 ! os2/os2.sym Additional symbols to export ! os2/os2add.sym Overriding symbols to export ! os2/os2ish.h Header for OS/2 ! os2/os2thread.h pthread-like typedefs ! os2/perl2cmd.pl Corrects installed binaries under OS/2 ! patchlevel.h The current patch level of perl ! perl.c main() ! perl.h Global declarations ! perlapi.c Perl API functions ! perlapi.h Perl API function declarations ! perlio.c C code for PerlIO abstraction ! perlio.h PerlIO abstraction ! perlio.sym Symbols for PerlIO abstraction ! perliol.h PerlIO Layer definition ! perlsdio.h Fake stdio using perlio ! perlsfio.h Prototype sfio mapping for PerlIO ! perlsh A poor man's perl shell ! perlvars.h Global variables ! perly.c A byacc'ed perly.y ! perly.fixer A program to remove yacc stack limitations ! perly.h The header file for perly.c ! perly.y Yacc grammar for perl ! perly_c.diff Fixup perly.c to allow recursion ! plan9/aperl Shell to make Perl error messages Acme-friendly ! plan9/arpa/inet.h Plan9 port: replacement C header file ! plan9/buildinfo Plan9 port: configuration information ! plan9/config.plan9 Plan9 port: config.h template ! plan9/exclude Plan9 port: tests to skip ! plan9/fndvers Plan9 port: update Perl version in config.plan9 ! plan9/genconfig.pl Plan9 port: generate config.sh ! plan9/mkfile Plan9 port: Mk driver for build ! plan9/myconfig.plan9 Plan9 port: script to print config summary ! plan9/perlplan9.doc Plan9 port: Plan9-specific formatted documentation ! plan9/perlplan9.pod Plan9 port: Plan9-specific pod documentation ! plan9/plan9.c Plan9 port: Plan9-specific C routines ! plan9/plan9ish.h Plan9 port: Plan9-specific C header file ! plan9/setup.rc Plan9 port: script for easy build+install ! plan9/versnum Plan9 port: script to print version number ! pod/Makefile.SH generate Makefile whichs makes pods into something else ! pod/buildtoc.PL generate buildtoc which generates perltoc.pod ! pod/checkpods.PL Tool to check for common errors in pods ! pod/perl.pod Top level perl documentation ! pod/perl5004delta.pod Changes from 5.003 to 5.004 ! pod/perl5005delta.pod Changes from 5.004 to 5.005 ! pod/perl56delta.pod Changes from 5.005 to 5.6 ! pod/perl570delta.pod Changes from 5.6 to 5.7.0 ! pod/perl571delta.pod Changes from 5.7.0 to 5.7.1 ! pod/perlapi.pod Perl API documentation (autogenerated) ! pod/perlapio.pod PerlIO IO API info ! pod/perlbook.pod Perl book information ! pod/perlboot.pod Beginner's Object-oriented Tutorial ! pod/perlbot.pod Object-oriented Bag o' Tricks ! pod/perlcall.pod Callback info ! pod/perlclib.pod Internal replacements for standard C library functions ! pod/perlcompile.pod Info on using the Compiler suite ! pod/perldata.pod Data structure info ! pod/perldbmfilter.pod Info about DBM Filters ! pod/perldebguts.pod Debugger guts info ! pod/perldebtut.pod Perl debugging tutorial ! pod/perldebug.pod Debugger info ! pod/perldelta.pod Changes since last version ! pod/perldiag.pod Diagnostic info ! pod/perldsc.pod Data Structures Cookbook ! pod/perlebcdic.pod Considerations for running Perl on EBCDIC platforms ! pod/perlembed.pod Embedding info ! pod/perlfaq.pod Frequently Asked Questions, Top Level ! pod/perlfaq1.pod Frequently Asked Questions, Part 1 ! pod/perlfaq2.pod Frequently Asked Questions, Part 2 ! pod/perlfaq3.pod Frequently Asked Questions, Part 3 ! pod/perlfaq4.pod Frequently Asked Questions, Part 4 ! pod/perlfaq5.pod Frequently Asked Questions, Part 5 ! pod/perlfaq6.pod Frequently Asked Questions, Part 6 ! pod/perlfaq7.pod Frequently Asked Questions, Part 7 ! pod/perlfaq8.pod Frequently Asked Questions, Part 8 ! pod/perlfaq9.pod Frequently Asked Questions, Part 9 ! pod/perlfilter.pod Source filters info ! pod/perlfork.pod Info about fork() ! pod/perlform.pod Format info ! pod/perlfunc.pod Function info ! pod/perlguts.pod Internals info ! pod/perlhack.pod Perl hackers guide ! pod/perlhist.pod Perl history info ! pod/perlintern.pod Perl internal function docs (autogenrated) ! pod/perliol.pod Internals of PerlIO with layers. ! pod/perlipc.pod IPC info ! pod/perllexwarn.pod Lexical Warnings info ! pod/perllocale.pod Locale support info ! pod/perllol.pod How to use lists of lists ! pod/perlmod.pod Module mechanism info ! pod/perlmodinstall.pod Installing CPAN Modules ! pod/perlmodlib.PL Generate pod/perlmodlib.pod ! pod/perlmodlib.pod Module policy info ! pod/perlnewmod.pod Preparing a new module for distribution ! pod/perlnumber.pod Semantics of numbers and numeric operations ! pod/perlobj.pod Object info ! pod/perlop.pod Operator info ! pod/perlopentut.pod open() tutorial ! pod/perlpod.pod Pod info ! pod/perlport.pod Portability guide ! pod/perlre.pod Regular expression info ! pod/perlref.pod References info ! pod/perlreftut.pod Mark's references tutorial ! pod/perlrequick.pod Quick start guide for Perl regular expressions ! pod/perlretut.pod Tutorial for Perl regular expressions ! pod/perlrun.pod Execution info ! pod/perlsec.pod Security info ! pod/perlstyle.pod Style info ! pod/perlsub.pod Subroutine info ! pod/perlsyn.pod Syntax info ! pod/perlthrtut.pod Threads tutorial ! pod/perltie.pod Tieing an object class into a simple variable ! pod/perltoc.pod Table of Contents info ! pod/perltodo.pod Todo list explained ! pod/perltoot.pod Tom's object-oriented tutorial ! pod/perltootc.pod Tom's object-oriented tutorial (more on class data) ! pod/perltrap.pod Trap info ! pod/perlunicode.pod Unicode support info ! pod/perlutil.pod Accompanying utilities explained ! pod/perlvar.pod Variable info ! pod/perlxs.pod XS api info ! pod/perlxstut.pod XS tutorial ! pod/pod2html.PL Precursor for translator to turn pod into HTML ! pod/pod2latex.PL Precursor for translator to turn pod into LaTeX ! pod/pod2man.PL Precursor for translator to turn pod into manpage ! pod/pod2text.PL Precursor for translator to turn pod into text ! pod/pod2usage.PL Pod-Parser - print usage messages from POD docs ! pod/podchecker.PL Pod-Parser - Pod::Checker::podchecker() CLI ! pod/podselect.PL Pod-Parser - Pod::Select::podselect() CLI ! pod/roffitall troff the whole man page set ! pod/rofftoc Generate a table of contents in troff format ! pod/splitman Splits perlfunc into multiple man pages ! pod/splitpod Splits perlfunc into multiple pod pages ! pp.c Push/Pop code ! pp.h Push/Pop code defs ! pp.sym Push/Pop code symbols ! pp_ctl.c Push/Pop code for control flow ! pp_hot.c Push/Pop code for heavily used opcodes ! pp_proto.h C++ definitions for Push/Pop code ! pp_sys.c Push/Pop code for system interaction ! proto.h Prototypes ! qnx/ar QNX implementation of "ar" utility ! qnx/cpp QNX implementation of preprocessor filter ! regcomp.c Regular expression compiler ! regcomp.h Private declarations for above ! regcomp.pl Builder of regnodes.h ! regcomp.sym Data for regnodes.h ! regexec.c Regular expression evaluator ! regexp.h Public declarations for the above ! regnodes.h Description of nodes of RE engine ! run.c The interpreter loop ! scope.c Scope entry and exit code ! scope.h Scope entry and exit header ! sv.c Scalar value code ! sv.h Scalar value header ! t/README Instructions for regression tests ! t/TEST The regression tester ! t/TestInit.pm Preamble library for core tests ! t/base/commonsense.t See if configuration meets basic needs ! t/base/cond.t See if conditionals work ! t/base/if.t See if if works ! t/base/lex.t See if lexical items work ! t/base/pat.t See if pattern matching works ! t/base/rs.t See if record-read works ! t/base/term.t See if various terms work ! t/camel-III/vstring.t See if Camel 3rd edition is lying. ! t/cmd/elsif.t See if else-if works ! t/cmd/for.t See if for loops work ! t/cmd/mod.t See if statement modifiers work ! t/cmd/subval.t See if subroutine values work ! t/cmd/switch.t See if switch optimizations work ! t/cmd/while.t See if while loops work ! t/comp/bproto.t See if builtins conform to their prototypes ! t/comp/cmdopt.t See if command optimization works ! t/comp/colon.t See if colons are parsed correctly ! t/comp/cpp.aux main file for cpp.t ! t/comp/cpp.t See if C preprocessor works ! t/comp/decl.t See if declarations work ! t/comp/multiline.t See if multiline strings work ! t/comp/package.t See if packages work ! t/comp/proto.t See if function prototypes work ! t/comp/redef.t See if we get correct warnings on redefined subs ! t/comp/require.t See if require works ! t/comp/script.t See if script invokation works ! t/comp/term.t See if more terms work ! t/comp/use.t See if pragmas work ! t/harness Finer diagnostics from test suite ! t/io/argv.t See if ARGV stuff works ! t/io/dup.t See if >& works right ! t/io/fs.t See if directory manipulations work ! t/io/inplace.t See if inplace editing works ! t/io/iprefix.t See if inplace editing works with prefixes ! t/io/nargv.t See if nested ARGV stuff works ! t/io/open.t See if open works ! t/io/openpid.t See if open works for subprocesses ! t/io/pipe.t See if secure pipes work ! t/io/print.t See if print commands work ! t/io/read.t See if read works ! t/io/tell.t See if file seeking works ! t/io/utf8.t See if file seeking works ! t/lib/1_compile.t See if the various libraries and extensions compile ! t/lib/abbrev.t See if Text::Abbrev works ! t/lib/ansicolor.t See if Term::ANSIColor works ! t/lib/anydbm.t See if AnyDBM_File works ! t/lib/attrs.t See if attrs works with C ! t/lib/autoloader.t See if AutoLoader works ! t/lib/b.t See if B backends work ! t/lib/basename.t See if File::Basename works ! t/lib/bigfloat.t See if bigfloat.pl works ! t/lib/bigfltpm.t See if BigFloat.pm works ! t/lib/bigint.t See if bigint.pl works ! t/lib/bigintpm.t See if BigInt.pm works ! t/lib/cgi-esc.t See if CGI.pm works ! t/lib/cgi-form.t See if CGI.pm works ! t/lib/cgi-function.t See if CGI.pm works ! t/lib/cgi-html.t See if CGI.pm works ! t/lib/cgi-pretty.t See if CGI.pm works ! t/lib/cgi-request.t See if CGI.pm works ! t/lib/charnames.t See if character names work ! t/lib/checktree.t See if File::CheckTree works ! t/lib/class-isa.t See if Class::ISA works ! t/lib/class-struct.t See if Class::Struct works ! t/lib/complex.t See if Math::Complex works ! t/lib/compmod.pl Helper for 1_compile.t ! t/lib/cwd.t See if Cwd works ! t/lib/db-btree.t See if DB_File works ! t/lib/db-hash.t See if DB_File works ! t/lib/db-recno.t See if DB_File works ! t/lib/digest.t See if Digest extensions work ! t/lib/dirhand.t See if DirHandle works ! t/lib/dosglob.t See if File::DosGlob works ! t/lib/dprof.t Perl code profiler testsuite driver ! t/lib/dprof/V.pm Perl code profiler tests ! t/lib/dprof/test1_t Perl code profiler tests ! t/lib/dprof/test1_v Perl code profiler tests ! t/lib/dprof/test2_t Perl code profiler tests ! t/lib/dprof/test2_v Perl code profiler tests ! t/lib/dprof/test3_t Perl code profiler tests ! t/lib/dprof/test3_v Perl code profiler tests ! t/lib/dprof/test4_t Perl code profiler tests ! t/lib/dprof/test4_v Perl code profiler tests ! t/lib/dprof/test5_t Perl code profiler tests ! t/lib/dprof/test5_v Perl code profiler tests ! t/lib/dprof/test6_t Perl code profiler tests ! t/lib/dprof/test6_v Perl code profiler tests ! t/lib/dumper-ovl.t See if Data::Dumper works for overloaded data ! t/lib/dumper.t See if Data::Dumper works ! t/lib/encode.t See if Encode works ! t/lib/english.t See if English works ! t/lib/env-array.t See if Env works for arrays ! t/lib/env.t See if Env works ! t/lib/errno.t See if Errno works ! t/lib/fatal.t See if Fatal works ! t/lib/fields.t See if base/fields works ! t/lib/filecache.t See if FileCache works ! t/lib/filecopy.t See if File::Copy works ! t/lib/filefind.t See if File::Find works ! t/lib/filefunc.t See if File::Spec::Functions works ! t/lib/filehand.t See if FileHandle works ! t/lib/filepath.t See if File::Path works ! t/lib/filespec.t See if File::Spec works ! t/lib/filter-util.pl See if Filter::Util::Call works ! t/lib/filter-util.t See if Filter::Util::Call works ! t/lib/findbin.t See if FindBin works ! t/lib/ftmp-mktemp.t See if File::Temp works ! t/lib/ftmp-posix.t See if File::Temp works ! t/lib/ftmp-security.t See if File::Temp works ! t/lib/ftmp-tempfile.t See if File::Temp works ! t/lib/gdbm.t See if GDBM_File works ! t/lib/getopt.t See if Getopt::Std and Getopt::Long work ! t/lib/glob-basic.t See if File::Glob works ! t/lib/glob-case.t See if File::Glob works ! t/lib/glob-global.t See if File::Glob works ! t/lib/glob-taint.t See if File::Glob works ! t/lib/gol-basic.t See if Getopt::Long works ! t/lib/gol-compat.t See if Getopt::Long works ! t/lib/gol-linkage.t See if Getopt::Long works ! t/lib/gol-oo.t See if Getopt::Long works ! t/lib/h2ph.h Test header file for h2ph ! t/lib/h2ph.pht Generated output from h2ph.h by h2ph, for comparison ! t/lib/h2ph.t See if h2ph works like it should ! t/lib/hostname.t See if Sys::Hostname works ! t/lib/io_const.t See if constants from IO work ! t/lib/io_dir.t See if directory-related methods from IO work ! t/lib/io_dup.t See if dup()-related methods from IO work ! t/lib/io_linenum.t See if I/O line numbers are tracked correctly ! t/lib/io_multihomed.t See if INET sockets work with multi-homed hosts ! t/lib/io_pipe.t See if pipe()-related methods from IO work ! t/lib/io_poll.t See if poll()-related methods from IO work ! t/lib/io_scalar.t Test of PerlIO::Scalar ! t/lib/io_sel.t See if select()-related methods from IO work ! t/lib/io_sock.t See if INET socket-related methods from IO work ! t/lib/io_taint.t See if the untaint method from IO works ! t/lib/io_tell.t See if seek()/tell()-related methods from IO work ! t/lib/io_udp.t See if UDP socket-related methods from IO work ! t/lib/io_unix.t See if UNIX socket-related methods from IO work ! t/lib/io_xs.t See if XSUB methods from IO work ! t/lib/ipc_sysv.t See if IPC::SysV works ! t/lib/lc-all.t See if Locale::Codes work ! t/lib/lc-constants.t See if Locale::Codes work ! t/lib/lc-country.t See if Locale::Codes work ! t/lib/lc-currency.t See if Locale::Codes work ! t/lib/lc-language.t See if Locale::Codes work ! t/lib/lc-uk.t See if Locale::Codes work ! t/lib/md5-aaa.t See if Digest::MD5 extension works ! t/lib/md5-align.t See if Digest::MD5 extension works ! t/lib/md5-badf.t See if Digest::MD5 extension works ! t/lib/md5-file.t See if Digest::MD5 extension works ! t/lib/mimeb64.t see whether MIME::Base64 works ! t/lib/mimeb64u.t see whether MIME::Base64 works ! t/lib/mimeqp.t see whether MIME::QuotedPrint works ! t/lib/ndbm.t See if NDBM_File works ! t/lib/net-hostent.t See if Net::hostent works ! t/lib/odbm.t See if ODBM_File works ! t/lib/opcode.t See if Opcode works ! t/lib/open2.t See if IPC::Open2 works ! t/lib/open3.t See if IPC::Open3 works ! t/lib/ops.t See if Opcode works ! t/lib/parsewords.t See if Text::ParseWords works ! t/lib/peek.t See if Devel::Peek works ! t/lib/ph.t See if h2ph works ! t/lib/posix.t See if POSIX works ! t/lib/safe1.t See if Safe works ! t/lib/safe2.t See if Safe works ! t/lib/sample-tests/bailout Test data for Test::Harness ! t/lib/sample-tests/combined Test data for Test::Harness ! t/lib/sample-tests/descriptive Test data for Test::Harness ! t/lib/sample-tests/duplicates Test data for Test::Harness ! t/lib/sample-tests/header_at_end Test data for Test::Harness ! t/lib/sample-tests/no_nums Test data for Test::Harness ! t/lib/sample-tests/simple Test data for Test::Harness ! t/lib/sample-tests/simple_fail Test data for Test::Harness ! t/lib/sample-tests/skip Test data for Test::Harness ! t/lib/sample-tests/skip_all Test data for Test::Harness ! t/lib/sample-tests/todo Test data for Test::Harness ! t/lib/sample-tests/with_comments Test data for Test::Harness ! t/lib/sdbm.t See if SDBM_File works ! t/lib/searchdict.t See if Search::Dict works ! t/lib/selectsaver.t See if SelectSaver works ! t/lib/selfloader.t See if SelfLoader works ! t/lib/sigaction.t See if POSIX::sigaction works ! t/lib/socket.t See if Socket works ! t/lib/soundex.t See if Soundex works ! t/lib/st-06compat.t See if Storable works ! t/lib/st-blessed.t See if Storable works ! t/lib/st-canonical.t See if Storable works ! t/lib/st-dclone.t See if Storable works ! t/lib/st-dump.pl See if Storable works ! t/lib/st-forgive.t See if Storable works ! t/lib/st-freeze.t See if Storable works ! t/lib/st-lock.t See if Storable works ! t/lib/st-overload.t See if Storable works ! t/lib/st-recurse.t See if Storable works ! t/lib/st-retrieve.t See if Storable works ! t/lib/st-store.t See if Storable works ! t/lib/st-tied.t See if Storable works ! t/lib/st-tiedhook.t See if Storable works ! t/lib/st-tieditems.t See if Storable works ! t/lib/st-utf8.t See if Storable works ! t/lib/switch.t Test whether switch works ! t/lib/symbol.t See if Symbol works ! t/lib/syslfs.t See if large files work for sysio ! t/lib/syslog.t See if Sys::Syslog works ! t/lib/tb-genxt.t See if Text::Balanced works ! t/lib/tb-xbrak.t See if Text::Balanced works ! t/lib/tb-xcode.t See if Text::Balanced works ! t/lib/tb-xdeli.t See if Text::Balanced works ! t/lib/tb-xmult.t See if Text::Balanced works ! t/lib/tb-xquot.t See if Text::Balanced works ! t/lib/tb-xtagg.t See if Text::Balanced works ! t/lib/tb-xvari.t See if Text::Balanced works ! t/lib/test-harness.t See if Test::Harness works ! t/lib/textfill.t See if Text::Wrap::fill works ! t/lib/texttabs.t See if Text::Tabs works ! t/lib/textwrap.t See if Text::Wrap::wrap works ! t/lib/thr5005.t Test 5.005-style threading (skipped if no use5005threads) ! t/lib/tie-push.t Test for Tie::Array ! t/lib/tie-refhash.t Test for Tie::RefHash and Tie::RefHash::Nestable ! t/lib/tie-splice.t Test for Tie::Array::SPLICE ! t/lib/tie-stdarray.t Test for Tie::StdArray ! t/lib/tie-stdhandle.t Test for Tie::StdHandle ! t/lib/tie-stdpush.t Test for Tie::StdArray ! t/lib/tie-substrhash.t Test for Tie::SubstrHash ! t/lib/timelocal.t See if Time::Local works ! t/lib/trig.t See if Math::Trig works ! t/lib/xs-typemap.t test that typemaps work ! t/op/64bitint.t See if 64 bit integers work ! t/op/anonsub.t See if anonymous subroutines work ! t/op/append.t See if . works ! t/op/args.t See if operations on @_ work ! t/op/arith.t See if arithmetic works ! t/op/array.t See if array operations work ! t/op/assignwarn.t See if OP= operators warn correctly for undef targets ! t/op/attrs.t See if attributes on declarations work ! t/op/auto.t See if autoincrement et all work ! t/op/avhv.t See if pseudo-hashes work ! t/op/bless.t See if bless works ! t/op/bop.t See if bitops work ! t/op/chars.t See if character escapes work ! t/op/chop.t See if chop works ! t/op/closure.t See if closures work ! t/op/cmp.t See if the various string and numeric compare work ! t/op/concat.t See if string concatenation works ! t/op/cond.t See if conditional expressions work ! t/op/context.t See if context propagation works ! t/op/defins.t See if auto-insert of defined() works ! t/op/delete.t See if delete works ! t/op/die.t See if die works ! t/op/die_exit.t See if die and exit status interaction works ! t/op/do.t See if subroutines work ! t/op/each.t See if hash iterators work ! t/op/eval.t See if eval operator works ! t/op/exec.t See if exec and system work ! t/op/exists_sub.t See if exists(&sub) works ! t/op/exp.t See if math functions work ! t/op/fh.t See if filehandles work ! t/op/filetest.t See if file tests work ! t/op/flip.t See if range operator works ! t/op/fork.t See if fork works ! t/op/glob.t See if <*> works ! t/op/goto.t See if goto works ! t/op/goto_xs.t See if "goto &sub" works on XSUBs ! t/op/grent.t See if getgr*() functions work ! t/op/grep.t See if grep() and map() work ! t/op/groups.t See if $( works ! t/op/gv.t See if typeglobs work ! t/op/hashwarn.t See if warnings for bad hash assignments work ! t/op/inc.t See if inc/dec of integers near 32 bit limit work ! t/op/index.t See if index works ! t/op/int.t See if int works ! t/op/join.t See if join works ! t/op/length.t See if length works ! t/op/lex_assign.t See if ops involving lexicals or pad temps work ! t/op/lfs.t See if large files work for perlio ! t/op/list.t See if array lists work ! t/op/local.t See if local works ! t/op/loopctl.t See if next/last/redo work ! t/op/lop.t See if logical operators work ! t/op/magic.t See if magic variables work ! t/op/method.t See if method calls work ! t/op/misc.t See if miscellaneous bugs have been fixed ! t/op/mkdir.t See if mkdir works ! t/op/my.t See if lexical scoping works ! t/op/my_stash.t See if my Package works ! t/op/nothr5005.t local @_ test which does not work under use5005threads ! t/op/numconvert.t See if accessing fields does not change numeric values ! t/op/oct.t See if oct and hex work ! t/op/ord.t See if ord works ! t/op/pack.t See if pack and unpack work ! t/op/pat.t See if esoteric patterns work ! t/op/pos.t See if pos works ! t/op/push.t See if push and pop work ! t/op/pwent.t See if getpw*() functions work ! t/op/quotemeta.t See if quotemeta works ! t/op/rand.t See if rand works ! t/op/range.t See if .. works ! t/op/re_tests Regular expressions for regexp.t ! t/op/read.t See if read() works ! t/op/readdir.t See if readdir() works ! t/op/recurse.t See if deep recursion works ! t/op/ref.t See if refs and objects work ! t/op/regexp.t See if regular expressions work ! t/op/regexp_noamp.t See if regular expressions work with optimizations ! t/op/regmesg.t See if one can get regular expression errors ! t/op/repeat.t See if x operator works ! t/op/reverse.t See if reverse operator works ! t/op/runlevel.t See if die() works from perl_call_*() ! t/op/sleep.t See if sleep works ! t/op/sort.t See if sort works ! t/op/splice.t See if splice works ! t/op/split.t See if split works ! t/op/sprintf.t See if sprintf works ! t/op/stat.t See if stat works ! t/op/study.t See if study works ! t/op/subst.t See if substitution works ! t/op/subst_amp.t See if $&-related substitution works ! t/op/subst_wamp.t See if substitution works with $& present ! t/op/substr.t See if substr works ! t/op/sysio.t See if sysread and syswrite work ! t/op/taint.t See if tainting works ! t/op/tie.t See if tie/untie functions work ! t/op/tiearray.t See if tie for arrays works ! t/op/tiehandle.t See if tie for handles works ! t/op/time.t See if time functions work ! t/op/tr.t See if tr works ! t/op/undef.t See if undef works ! t/op/universal.t See if UNIVERSAL class works ! t/op/unshift.t See if unshift works ! t/op/utf8decode.t See if UTF-8 decoding works ! t/op/vec.t See if vectors work ! t/op/ver.t See if v-strings and the %v format flag work ! t/op/wantarray.t See if wantarray works ! t/op/write.t See if write works ! t/pod/emptycmd.t Test empty pod directives ! t/pod/emptycmd.xr Expected results for emptycmd.t ! t/pod/find.t See if Pod::Find works ! t/pod/for.t Test =for directive ! t/pod/for.xr Expected results for for.t ! t/pod/headings.t Test =head directives ! t/pod/headings.xr Expected results for headings.t ! t/pod/include.t Test =include directive ! t/pod/include.xr Expected results for include.t ! t/pod/included.t Test =include directive ! t/pod/included.xr Expected results for included.t ! t/pod/lref.t Test L<...> sequences ! t/pod/lref.xr Expected results for lref.t ! t/pod/multiline_items.t Test multiline =items t/pod/multiline_items.xr Test multiline =items ! t/pod/nested_items.t Test nested =items ! t/pod/nested_items.xr Expected results for nested_items.t ! t/pod/nested_seqs.t Test nested interior sequences ! t/pod/nested_seqs.xr Expected results for nested_seqs.t ! t/pod/oneline_cmds.t Test single paragraph ==cmds ! t/pod/oneline_cmds.xr Expected results for oneline_cmds.t ! t/pod/pod2usage.t Test Pod::Usage ! t/pod/pod2usage.xr Expected results for pod2usage.t ! t/pod/poderrs.t Test POD errors ! t/pod/poderrs.xr Expected results for emptycmd.t ! t/pod/podselect.t Test Pod::Select ! t/pod/podselect.xr Expected results for podselect.t ! t/pod/special_seqs.t Test "special" interior sequences ! t/pod/special_seqs.xr Expected results for emptycmd.t ! t/pod/testcmp.pl Module to compare output against expected results ! t/pod/testp2pt.pl Module to test Pod::PlainText for a given file ! t/pod/testpchk.pl Module to test Pod::Checker for a given file ! t/pod/testpods/lib/Pod/Stuff.pm Sample data for find.t ! t/pragma/constant.t See if compile-time constants work ! t/pragma/diagnostics.t See if diagnostics.pm works ! t/pragma/locale.t See if locale support works ! t/pragma/locale/latin1 Part of locale.t in Latin 1 ! t/pragma/locale/utf8 Part of locale.t in UTF8 ! t/pragma/overload.t See if operator overloading works ! t/pragma/strict-refs Tests of "use strict 'refs'" for strict.t ! t/pragma/strict-subs Tests of "use strict 'subs'" for strict.t ! t/pragma/strict-vars Tests of "use strict 'vars'" for strict.t ! t/pragma/strict.t See if strictures work ! t/pragma/sub_lval.t See if lvalue subroutines work ! t/pragma/subs.t See if subroutine pseudo-importation works ! t/pragma/utf8.t See if utf8 operations work ! t/pragma/warn/1global Tests of global warnings for warnings.t ! t/pragma/warn/2use Tests for "use warnings" for warnings.t ! t/pragma/warn/3both Tests for interaction of $^W and "use warnings" ! t/pragma/warn/4lint Tests for -W switch ! t/pragma/warn/5nolint Tests for -X switch ! t/pragma/warn/6default Tests default warnings ! t/pragma/warn/7fatal Tests fatal warnings ! t/pragma/warn/8signal Tests warnings + __WARN__ and __DIE__ ! t/pragma/warn/9enabled Tests warnings ! t/pragma/warn/av Tests for av.c for warnings.t ! t/pragma/warn/doio Tests for doio.c for warnings.t ! t/pragma/warn/doop Tests for doop.c for warnings.t ! t/pragma/warn/gv Tests for gv.c for warnings.t ! t/pragma/warn/hv Tests for hv.c for warnings.t ! t/pragma/warn/malloc Tests for malloc.c for warnings.t ! t/pragma/warn/mg Tests for mg.c for warnings.t ! t/pragma/warn/op Tests for op.c for warnings.t ! t/pragma/warn/perl Tests for perl.c for warnings.t ! t/pragma/warn/perlio Tests for perlio.c for warnings.t ! t/pragma/warn/perly Tests for perly.y for warnings.t ! t/pragma/warn/pp Tests for pp.c for warnings.t ! t/pragma/warn/pp_ctl Tests for pp_ctl.c for warnings.t ! t/pragma/warn/pp_hot Tests for pp_hot.c for warnings.t ! t/pragma/warn/pp_sys Tests for pp_sys.c for warnings.t ! t/pragma/warn/regcomp Tests for regcomp.c for warnings.t ! t/pragma/warn/regexec Tests for regexec.c for warnings.t ! t/pragma/warn/run Tests for run.c for warnings.t ! t/pragma/warn/sv Tests for sv.c for warnings.t ! t/pragma/warn/taint Tests for taint.c for warnings.t ! t/pragma/warn/toke Tests for toke.c for warnings.t ! t/pragma/warn/universal Tests for universal.c for warnings.t ! t/pragma/warn/utf8 Tests for utf8.c for warnings.t ! t/pragma/warn/util Tests for util.c for warnings.t ! t/pragma/warnings.t See if warning controls work ! t/run/runenv.t Test if perl honors its environment variables. ! taint.c Tainting code ! thrdvar.h Per-thread variables ! thread.h Threading header ! toke.c The tokener ! uconfig.h Configuration header for microperl ! uconfig.sh Configuration script for microperl ! universal.c The default UNIVERSAL package methods ! unixish.h Defines that are assumed on Unix ! utf8.c Unicode routines ! utf8.h Unicode header ! utfebcdic.h Unicode on EBCDIC (UTF-EBCDIC, tr16) header ! util.c Utility routines ! util.h Dummy header ! utils/Makefile Extract the utility scripts ! utils/c2ph.PL program to translate dbx stabs to perl ! utils/dprofpp.PL Perl code profile post-processor ! utils/h2ph.PL A thing to turn C .h files into perl .ph files ! utils/h2xs.PL Program to make .xs files from C header files ! utils/perlbug.PL A simple tool to submit a bug report ! utils/perlcc.PL Front-end for compiler ! utils/perldoc.PL A simple tool to find & display perl's documentation ! utils/pl2pm.PL A pl to pm translator ! utils/splain.PL Stand-alone version of diagnostics.pm ! vmesa/Makefile VM/ESA Makefile ! vmesa/vmesa.c VM/ESA-specific C code for Perl core ! vmesa/vmesaish.h VM/ESA-specific C header for Perl core ! vms/descrip_mms.template Template MM[SK] description file for build vms/ext/DCLsym/0README.txt ReadMe file for VMS::DCLsym vms/ext/DCLsym/DCLsym.pm Perl access to CLI symbols vms/ext/DCLsym/DCLsym.xs Perl access to CLI symbols vms/ext/DCLsym/Makefile.PL MakeMaker driver for VMS::DCLsym ! vms/ext/DCLsym/test.pl regression tests for VMS::DCLsym ! vms/ext/Filespec.pm VMS-Unix file syntax interconversion vms/ext/Stdio/0README.txt ReadMe file for VMS::Stdio vms/ext/Stdio/Makefile.PL MakeMaker driver for VMS::Stdio ! vms/ext/Stdio/Stdio.pm VMS options to stdio routines ! vms/ext/Stdio/Stdio.xs VMS options to stdio routines ! vms/ext/Stdio/test.pl regression tests for VMS::Stdio ! vms/ext/XSSymSet.pm manage linker symbols when building extensions ! vms/ext/filespec.t See if VMS::Filespec funtions work ! vms/ext/vmsish.pm Control VMS-specific behavior of Perl core ! vms/ext/vmsish.t Tests for vmsish.pm ! vms/gen_shrfls.pl generate options files and glue for shareable image ! vms/genconfig.pl retcon config.sh from config.h ! vms/genopt.com hack to write options files in case of broken makes ! vms/make_command.com record MM[SK] command used to build Perl ! vms/mms2make.pl convert descrip.mms to make syntax ! vms/munchconfig.c performs shell $var substitution for VMS ! vms/myconfig.com record local configuration info for bug report ! vms/perlvms.pod VMS-specific additions to Perl documentation ! vms/perly_c.vms perly.c with fixed declarations for global syms ! vms/perly_h.vms perly.h with fixed declarations for global syms ! vms/sockadapt.c glue for SockshShr socket support ! vms/sockadapt.h glue for SockshShr socket support ! vms/test.com DCL driver for regression tests ! vms/vms.c VMS-specific C code for Perl core ! vms/vms_yfix.pl convert Unix perly.[ch] to VMS perly_[ch].vms ! vms/vmsish.h VMS-specific C header for Perl core ! vms/vmspipe.com VMS-specific piped command helper script ! vms/writemain.pl Generate perlmain.c from miniperlmain.c+extensions ! vos/Changes Changes made to port Perl to the VOS operating system ! vos/build.cm VOS command macro to build Perl ! vos/compile_perl.cm VOS command macro to build multiple version of Perl ! vos/config.alpha.def definitions used by config.pl ! vos/config.alpha.h config.h for use with alpha VOS POSIX.1 support ! vos/config.ga.def definitions used by config.pl ! vos/config.ga.h config.h for use with generally-available VOS POSIX.1 support ! vos/config.pl script to convert a config_h.SH to a config.h ! vos/configure_perl.cm VOS command macro to configure perl before building ! vos/install_perl.cm VOS command macro to install perl after building ! vos/perl.bind VOS bind control file ! vos/test_vos_dummies.c Test program for "vos_dummies.c" ! vos/vos_dummies.c Wrappers to soak up undefined functions ! vos/vosish.h VOS-specific header file ! warnings.h The warning numbers ! warnings.pl Program to write warnings.h and lib/warnings.pm ! win32/FindExt.pm Scan for extensions ! win32/Makefile Win32 makefile for NMAKE (Visual C++ build) ! win32/bin/exetype.pl Set executable type to CONSOLE or WINDOWS ! win32/bin/mdelete.bat multifile delete ! win32/bin/perlglob.pl Win32 globbing ! win32/bin/pl2bat.pl wrap perl scripts into batch files ! win32/bin/runperl.pl run perl script via batch file namesake ! win32/bin/search.pl Win32 port ! win32/buildext.pl Build extensions once miniperl is built ! win32/config.bc Win32 base line config.sh (Borland C++ build) ! win32/config.gc Win32 base line config.sh (mingw32/gcc build) ! win32/config.vc Win32 base line config.sh (Visual C++ build) ! win32/config_H.bc Win32 config header (Borland C++ build) ! win32/config_H.gc Win32 config header (GNU build)? ! win32/config_H.vc Win32 config header (Visual C++ build) ! win32/config_h.PL Perl code to convert Win32 config.sh to config.h ! win32/config_sh.PL Perl code to update Win32 config.sh from Makefile ! win32/des_fcrypt.patch Win32 port ! win32/distclean.bat Remove _ALL_ files not listed here in MANIFEST ! win32/dl_win32.xs Win32 port ! win32/genmk95.pl Perl code to generate command.com-usable makefile.95 win32/include/arpa/inet.h Win32 port win32/include/dirent.h Win32 port win32/include/netdb.h Win32 port win32/include/sys/socket.h Win32 port ! win32/makefile.mk Win32 makefile for DMAKE (BC++, VC++ builds) ! win32/perlglob.c Win32 port ! win32/perlhost.h Perl "host" implementation ! win32/perllib.c Win32 port ! win32/pod.mak Win32 port ! win32/runperl.c Win32 port ! win32/sncfnmcs.pl Win32 port ! win32/splittree.pl Win32 port ! win32/vdir.h Perl "host" virtual directory manager ! win32/vmem.h Perl "host" memory manager ! win32/win32.c Win32 port ! win32/win32.h Win32 port ! win32/win32iop.h Win32 port ! win32/win32sck.c Win32 port ! win32/win32thread.c Win32 functions for threads ! win32/win32thread.h Win32 port mapping to threads ! writemain.SH Generate perlmain.c from miniperlmain.c+extensions ! x2p/EXTERN.h Same as above ! x2p/INTERN.h Same as above ! x2p/Makefile.SH Precursor to Makefile ! x2p/a2p.c Output of a2p.y run through byacc ! x2p/a2p.h Global declarations ! x2p/a2p.pod Pod for awk to perl translator ! x2p/a2p.y A yacc grammer for awk ! x2p/a2py.c Awk compiler, sort of ! x2p/cflags.SH A script that emits C compilation flags per file ! x2p/find2perl.PL A find to perl translator ! x2p/hash.c Hashes again ! x2p/hash.h Public declarations for the above ! x2p/proto.h Dummy header ! x2p/s2p.PL Sed to perl translator ! x2p/str.c String handling package ! x2p/str.h Public declarations for the above ! x2p/util.c Utility routines ! x2p/util.h Public declarations for the above ! x2p/walk.c Parse tree walker ! xsutils.c Additional bundled package methods not in UNIVERSAL:: --- 1635,2260 ---- os2/OS2/REXX/t/rx_tieydb.t DLL access module os2/OS2/REXX/t/rx_varset.t DLL access module os2/OS2/REXX/t/rx_vrexx.t DLL access module ! os2/os2_base.t Additional tests for builtin methods ! os2/os2add.sym Overriding symbols to export ! os2/os2ish.h Header for OS/2 ! os2/os2thread.h pthread-like typedefs ! os2/perl2cmd.pl Corrects installed binaries under OS/2 ! patchlevel.h The current patch level of perl ! perl.c main() ! perl.h Global declarations ! perlapi.c Perl API functions ! perlapi.h Perl API function declarations ! perlio.c C code for PerlIO abstraction ! perlio.h PerlIO abstraction ! perlio.sym Symbols for PerlIO abstraction ! perliol.h PerlIO Layer definition ! perlsdio.h Fake stdio using perlio ! perlsfio.h Prototype sfio mapping for PerlIO ! perlsh A poor man's perl shell ! perlvars.h Global variables ! perly.c A byacc'ed perly.y ! perly.fixer A program to remove yacc stack limitations ! perly.h The header file for perly.c ! perly.y Yacc grammar for perl ! perly_c.diff Fixup perly.c to allow recursion ! perlyline.pl Perl code to fix #line directives and gcc warnings in perly.c ! plan9/aperl Shell to make Perl error messages Acme-friendly ! plan9/arpa/inet.h Plan9 port: replacement C header file ! plan9/buildinfo Plan9 port: configuration information ! plan9/config.plan9 Plan9 port: config.h template ! plan9/exclude Plan9 port: tests to skip ! plan9/fndvers Plan9 port: update Perl version in config.plan9 ! plan9/genconfig.pl Plan9 port: generate config.sh ! plan9/mkfile Plan9 port: Mk driver for build ! plan9/myconfig.plan9 Plan9 port: script to print config summary ! plan9/plan9.c Plan9 port: Plan9-specific C routines ! plan9/plan9ish.h Plan9 port: Plan9-specific C header file ! plan9/setup.rc Plan9 port: script for easy build+install ! plan9/versnum Plan9 port: script to print version number ! pod/buildtoc.PL generate buildtoc which generates perltoc.pod ! pod/checkpods.PL Tool to check for common errors in pods ! pod/Makefile.SH generate Makefile whichs makes pods into something else ! pod/perl.pod Top level perl documentation ! pod/perl5004delta.pod Changes from 5.003 to 5.004 ! pod/perl5005delta.pod Changes from 5.004 to 5.005 ! pod/perl56delta.pod Changes from 5.005 to 5.6 ! pod/perl570delta.pod Changes from 5.6 to 5.7.0 ! pod/perl571delta.pod Changes from 5.7.0 to 5.7.1 ! pod/perl572delta.pod Changes from 5.7.1 to 5.7.2 ! pod/perlapi.pod Perl API documentation (autogenerated) ! pod/perlapio.pod PerlIO IO API info ! pod/perlbook.pod Perl book information ! pod/perlboot.pod Beginner's Object-oriented Tutorial ! pod/perlbot.pod Object-oriented Bag o' Tricks ! pod/perlcall.pod Callback info ! pod/perlclib.pod Internal replacements for standard C library functions ! pod/perlcompile.pod Info on using the Compiler suite ! pod/perldata.pod Data structure info ! pod/perldbmfilter.pod Info about DBM Filters ! pod/perldebguts.pod Debugger guts info ! pod/perldebtut.pod Perl debugging tutorial ! pod/perldebug.pod Debugger info ! pod/perldelta.pod Changes since last version ! pod/perldiag.pod Diagnostic info ! pod/perldsc.pod Data Structures Cookbook ! pod/perlebcdic.pod Considerations for running Perl on EBCDIC platforms ! pod/perlembed.pod Embedding info ! pod/perlfaq.pod Frequently Asked Questions, Top Level ! pod/perlfaq1.pod Frequently Asked Questions, Part 1 ! pod/perlfaq2.pod Frequently Asked Questions, Part 2 ! pod/perlfaq3.pod Frequently Asked Questions, Part 3 ! pod/perlfaq4.pod Frequently Asked Questions, Part 4 ! pod/perlfaq5.pod Frequently Asked Questions, Part 5 ! pod/perlfaq6.pod Frequently Asked Questions, Part 6 ! pod/perlfaq7.pod Frequently Asked Questions, Part 7 ! pod/perlfaq8.pod Frequently Asked Questions, Part 8 ! pod/perlfaq9.pod Frequently Asked Questions, Part 9 ! pod/perlfilter.pod Source filters info ! pod/perlfork.pod Info about fork() ! pod/perlform.pod Format info ! pod/perlfunc.pod Function info ! pod/perlguts.pod Internals info ! pod/perlhack.pod Perl hackers guide ! pod/perlhist.pod Perl history info ! pod/perlintern.pod Perl internal function docs (autogenrated) ! pod/perliol.pod Internals of PerlIO with layers. ! pod/perlipc.pod IPC info ! pod/perllexwarn.pod Lexical Warnings info ! pod/perllocale.pod Locale support info ! pod/perllol.pod How to use lists of lists ! pod/perlmod.pod Module mechanism info ! pod/perlmodinstall.pod Installing CPAN Modules ! pod/perlmodlib.PL Generate pod/perlmodlib.pod ! pod/perlmodlib.pod Module policy info ! pod/perlnewmod.pod Preparing a new module for distribution ! pod/perlnumber.pod Semantics of numbers and numeric operations ! pod/perlobj.pod Object info ! pod/perlop.pod Operator info ! pod/perlopentut.pod open() tutorial ! pod/perlpod.pod Pod info ! pod/perlport.pod Portability guide ! pod/perlre.pod Regular expression info ! pod/perlref.pod References info ! pod/perlreftut.pod Mark's references tutorial ! pod/perlrequick.pod Quick start guide for Perl regular expressions ! pod/perlretut.pod Tutorial for Perl regular expressions ! pod/perlrun.pod Execution info ! pod/perlsec.pod Security info ! pod/perlstyle.pod Style info ! pod/perlsub.pod Subroutine info ! pod/perlsyn.pod Syntax info ! pod/perlthrtut.pod Threads tutorial ! pod/perltie.pod Tieing an object class into a simple variable ! pod/perltoc.pod Table of Contents info ! pod/perltodo.pod Todo list explained ! pod/perltoot.pod Tom's object-oriented tutorial ! pod/perltootc.pod Tom's object-oriented tutorial (more on class data) ! pod/perltrap.pod Trap info ! pod/perlunicode.pod Unicode support info ! pod/perlutil.pod Accompanying utilities explained ! pod/perlvar.pod Variable info ! pod/perlxs.pod XS api info ! pod/perlxstut.pod XS tutorial ! pod/pod2html.PL Precursor for translator to turn pod into HTML ! pod/pod2latex.PL Precursor for translator to turn pod into LaTeX ! pod/pod2man.PL Precursor for translator to turn pod into manpage ! pod/pod2text.PL Precursor for translator to turn pod into text ! pod/pod2usage.PL Pod-Parser - print usage messages from POD docs ! pod/podchecker.PL Pod-Parser - Pod::Checker::podchecker() CLI ! pod/podselect.PL Pod-Parser - Pod::Select::podselect() CLI ! pod/roffitall troff the whole man page set ! pod/rofftoc Generate a table of contents in troff format ! pod/splitman Splits perlfunc into multiple man pages ! pod/splitpod Splits perlfunc into multiple pod pages ! Policy_sh.SH Hold site-wide preferences between Configure runs. ! Porting/config.sh Sample config.sh ! Porting/config_H Sample config.h ! Porting/Contract Social contract for contributed modules in Perl core ! Porting/findvars Find occurrences of words ! Porting/fixCORE Find and fix modules that generate warnings ! Porting/fixvars Find undeclared variables with C compiler and fix em ! Porting/genlog Generate formatted changelogs by querying p4d ! Porting/Glossary Glossary of config.sh variables ! Porting/makerel Release making utility ! Porting/p4d2p Generate standard patches from p4 diffs ! Porting/p4desc Smarter 'p4 describe', outputs diffs for new files ! Porting/patching.pod How to report changes made to Perl ! Porting/patchls Flexible patch file listing utility ! Porting/pumpkin.pod Guidelines and hints for Perl maintainers ! Porting/repository.pod How to use the Perl repository ! Porting/testall.atom Cumulative profile of the test suite with Third Degree ! pp.c Push/Pop code ! pp.h Push/Pop code defs ! pp.sym Push/Pop code symbols ! pp_ctl.c Push/Pop code for control flow ! pp_hot.c Push/Pop code for heavily used opcodes ! pp_pack.c Push/Pop code for pack/unpack ! pp_proto.h C++ definitions for Push/Pop code ! pp_sys.c Push/Pop code for system interaction ! proto.h Prototypes ! qnx/ar QNX implementation of "ar" utility ! qnx/cpp QNX implementation of preprocessor filter ! README The Instructions ! README.aix Notes about AIX port ! README.amiga Notes about AmigaOS port ! README.apollo Notes about Apollo DomainOS port ! README.beos Notes about BeOS port ! README.bs2000 Notes about BS2000 POSIX port ! README.cygwin Notes about Cygwin port ! README.dgux Notes about DG/UX port ! README.dos Notes about DOS/DJGPP port ! README.epoc Notes about EPOC port ! README.hpux Notes about HP-UX port ! README.hurd Notes about GNU/Hurd port ! README.machten Notes about Power MachTen port ! README.macos Notes about Mac OS (Classic) ! README.micro Notes about microperl ! README.mint Notes about Atari MiNT port ! README.mpeix Notes about MPE/iX port ! README.netware Notes about Netware port ! README.os2 Notes about OS/2 port ! README.os390 Notes about OS/390 (nee MVS) port ! README.plan9 Notes about Plan9 port ! README.qnx Notes about QNX port ! README.solaris Notes about Solaris port ! README.threads Notes about multithreading ! README.tru64 Notes about Tru64 ! README.uts Notes about UTS ! README.vmesa Notes about VM/ESA port ! README.vms Notes about installing the VMS port ! README.vos Notes about Stratus VOS port ! README.win32 Notes about Win32 port ! README.Y2K Notes about Year 2000 concerns ! regcomp.c Regular expression compiler ! regcomp.h Private declarations for above ! regcomp.pl Builder of regnodes.h ! regcomp.sym Data for regnodes.h ! regexec.c Regular expression evaluator ! regexp.h Public declarations for the above ! regnodes.h Description of nodes of RE engine ! run.c The interpreter loop ! scope.c Scope entry and exit code ! scope.h Scope entry and exit header ! sv.c Scalar value code ! sv.h Scalar value header ! t/base/commonsense.t See if configuration meets basic needs ! t/base/cond.t See if conditionals work ! t/base/if.t See if if works ! t/base/lex.t See if lexical items work ! t/base/pat.t See if pattern matching works ! t/base/rs.t See if record-read works ! t/base/term.t See if various terms work ! t/cmd/elsif.t See if else-if works ! t/cmd/for.t See if for loops work ! t/cmd/mod.t See if statement modifiers work ! t/cmd/subval.t See if subroutine values work ! t/cmd/switch.t See if switch optimizations work ! t/cmd/while.t See if while loops work ! t/comp/bproto.t See if builtins conform to their prototypes ! t/comp/cmdopt.t See if command optimization works ! t/comp/colon.t See if colons are parsed correctly ! t/comp/cpp.aux main file for cpp.t ! t/comp/cpp.t See if C preprocessor works ! t/comp/decl.t See if declarations work ! t/comp/multiline.t See if multiline strings work ! t/comp/package.t See if packages work ! t/comp/proto.t See if function prototypes work ! t/comp/redef.t See if we get correct warnings on redefined subs ! t/comp/require.t See if require works ! t/comp/script.t See if script invokation works ! t/comp/term.t See if more terms work ! t/comp/use.t See if pragmas work ! t/harness Finer diagnostics from test suite ! t/io/argv.t See if ARGV stuff works ! t/io/dup.t See if >& works right ! t/io/fflush.t See if auto-flush on fork/exec/system/qx works ! t/io/fs.t See if directory manipulations work ! t/io/inplace.t See if inplace editing works ! t/io/iprefix.t See if inplace editing works with prefixes ! t/io/nargv.t See if nested ARGV stuff works ! t/io/open.t See if open works ! t/io/openpid.t See if open works for subprocesses ! t/io/pipe.t See if secure pipes work ! t/io/print.t See if print commands work ! t/io/read.t See if read works ! t/io/tell.t See if file seeking works ! t/io/utf8.t See if file seeking works ! t/lib/1_compile.t See if the various libraries and extensions compile ! t/lib/compmod.pl Helper for 1_compile.t ! t/lib/dprof/test1_t Perl code profiler tests ! t/lib/dprof/test1_v Perl code profiler tests ! t/lib/dprof/test2_t Perl code profiler tests ! t/lib/dprof/test2_v Perl code profiler tests ! t/lib/dprof/test3_t Perl code profiler tests ! t/lib/dprof/test3_v Perl code profiler tests ! t/lib/dprof/test4_t Perl code profiler tests ! t/lib/dprof/test4_v Perl code profiler tests ! t/lib/dprof/test5_t Perl code profiler tests ! t/lib/dprof/test5_v Perl code profiler tests ! t/lib/dprof/test6_t Perl code profiler tests ! t/lib/dprof/test6_v Perl code profiler tests ! t/lib/dprof/V.pm Perl code profiler tests ! t/lib/filter-util.pl See if Filter::Util::Call works ! t/lib/h2ph.h Test header file for h2ph ! t/lib/h2ph.pht Generated output from h2ph.h by h2ph, for comparison ! t/lib/locale/latin1 Part of locale.t in Latin 1 ! t/lib/locale/utf8 Part of locale.t in UTF8 ! t/lib/MyFilter.pm Helper file for t/lib/filter-simple.t ! t/lib/sample-tests/bailout Test data for Test::Harness ! t/lib/sample-tests/combined Test data for Test::Harness ! t/lib/sample-tests/descriptive Test data for Test::Harness ! t/lib/sample-tests/duplicates Test data for Test::Harness ! t/lib/sample-tests/header_at_end Test data for Test::Harness ! t/lib/sample-tests/no_nums Test data for Test::Harness ! t/lib/sample-tests/simple Test data for Test::Harness ! t/lib/sample-tests/simple_fail Test data for Test::Harness ! t/lib/sample-tests/skip Test data for Test::Harness ! t/lib/sample-tests/skip_all Test data for Test::Harness ! t/lib/sample-tests/todo Test data for Test::Harness ! t/lib/sample-tests/with_comments Test data for Test::Harness ! t/lib/st-dump.pl See if Storable works ! t/lib/strict/refs Tests of "use strict 'refs'" for strict.t ! t/lib/strict/subs Tests of "use strict 'subs'" for strict.t ! t/lib/strict/vars Tests of "use strict 'vars'" for strict.t ! t/lib/Test/More/Catch.pm Utility module for testing Test::More ! t/lib/Test/Simple/Catch.pm Utility module for testing Test::Simple ! t/lib/Test/Simple/sample_tests/death.plx for exit.t ! t/lib/Test/Simple/sample_tests/death_in_eval.plx for exit.t ! t/lib/Test/Simple/sample_tests/extras.plx for exit.t ! t/lib/Test/Simple/sample_tests/five_fail.plx for exit.t ! t/lib/Test/Simple/sample_tests/last_minute_death.plx for exit.t ! t/lib/Test/Simple/sample_tests/one_fail.plx for exit.t ! t/lib/Test/Simple/sample_tests/require.plx for exit.t ! t/lib/Test/Simple/sample_tests/success.plx for exit.t ! t/lib/Test/Simple/sample_tests/too_few.plx for exit.t ! t/lib/Test/Simple/sample_tests/two_fail.plx for exit.t ! t/lib/warnings/1global Tests of global warnings for warnings.t ! t/lib/warnings/2use Tests for "use warnings" for warnings.t ! t/lib/warnings/3both Tests for interaction of $^W and "use warnings" ! t/lib/warnings/4lint Tests for -W switch ! t/lib/warnings/5nolint Tests for -X switch ! t/lib/warnings/6default Tests default warnings ! t/lib/warnings/7fatal Tests fatal warnings ! t/lib/warnings/8signal Tests warnings + __WARN__ and __DIE__ ! t/lib/warnings/9enabled Tests warnings ! t/lib/warnings/av Tests for av.c for warnings.t ! t/lib/warnings/doio Tests for doio.c for warnings.t ! t/lib/warnings/doop Tests for doop.c for warnings.t ! t/lib/warnings/gv Tests for gv.c for warnings.t ! t/lib/warnings/hv Tests for hv.c for warnings.t ! t/lib/warnings/malloc Tests for malloc.c for warnings.t ! t/lib/warnings/mg Tests for mg.c for warnings.t ! t/lib/warnings/op Tests for op.c for warnings.t ! t/lib/warnings/perl Tests for perl.c for warnings.t ! t/lib/warnings/perlio Tests for perlio.c for warnings.t ! t/lib/warnings/perly Tests for perly.y for warnings.t ! t/lib/warnings/pp Tests for pp.c for warnings.t ! t/lib/warnings/pp_ctl Tests for pp_ctl.c for warnings.t ! t/lib/warnings/pp_hot Tests for pp_hot.c for warnings.t ! t/lib/warnings/pp_pack Tests for pp_pack.c for warnings.t ! t/lib/warnings/pp_sys Tests for pp_sys.c for warnings.t ! t/lib/warnings/regcomp Tests for regcomp.c for warnings.t ! t/lib/warnings/regexec Tests for regexec.c for warnings.t ! t/lib/warnings/run Tests for run.c for warnings.t ! t/lib/warnings/sv Tests for sv.c for warnings.t ! t/lib/warnings/taint Tests for taint.c for warnings.t ! t/lib/warnings/toke Tests for toke.c for warnings.t ! t/lib/warnings/universal Tests for universal.c for warnings.t ! t/lib/warnings/utf8 Tests for utf8.c for warnings.t ! t/lib/warnings/util Tests for util.c for warnings.t ! t/op/64bitint.t See if 64 bit integers work ! t/op/anonsub.t See if anonymous subroutines work ! t/op/append.t See if . works ! t/op/args.t See if operations on @_ work ! t/op/arith.t See if arithmetic works ! t/op/array.t See if array operations work ! t/op/assignwarn.t See if OP= operators warn correctly for undef targets ! t/op/attrs.t See if attributes on declarations work ! t/op/auto.t See if autoincrement et all work ! t/op/avhv.t See if pseudo-hashes work ! t/op/bless.t See if bless works ! t/op/bop.t See if bitops work ! t/op/chars.t See if character escapes work ! t/op/chop.t See if chop works ! t/op/closure.t See if closures work ! t/op/cmp.t See if the various string and numeric compare work ! t/op/concat.t See if string concatenation works ! t/op/cond.t See if conditional expressions work ! t/op/context.t See if context propagation works ! t/op/defins.t See if auto-insert of defined() works ! t/op/delete.t See if delete works ! t/op/die.t See if die works ! t/op/die_exit.t See if die and exit status interaction works ! t/op/do.t See if subroutines work ! t/op/each.t See if hash iterators work ! t/op/eval.t See if eval operator works ! t/op/exec.t See if exec and system work ! t/op/exists_sub.t See if exists(&sub) works ! t/op/exp.t See if math functions work ! t/op/fh.t See if filehandles work ! t/op/filetest.t See if file tests work ! t/op/flip.t See if range operator works ! t/op/fork.t See if fork works ! t/op/glob.t See if <*> works ! t/op/gmagic.t See if GMAGIC works ! t/op/goto.t See if goto works ! t/op/goto_xs.t See if "goto &sub" works on XSUBs ! t/op/grent.t See if getgr*() functions work ! t/op/grep.t See if grep() and map() work ! t/op/groups.t See if $( works ! t/op/gv.t See if typeglobs work ! t/op/hashwarn.t See if warnings for bad hash assignments work ! t/op/inc.t See if inc/dec of integers near 32 bit limit work ! t/op/index.t See if index works ! t/op/int.t See if int works ! t/op/join.t See if join works ! t/op/length.t See if length works ! t/op/lex_assign.t See if ops involving lexicals or pad temps work ! t/op/lfs.t See if large files work for perlio ! t/op/list.t See if array lists work ! t/op/local.t See if local works ! t/op/loopctl.t See if next/last/redo work ! t/op/lop.t See if logical operators work ! t/op/magic.t See if magic variables work ! t/op/method.t See if method calls work ! t/op/misc.t See if miscellaneous bugs have been fixed ! t/op/mkdir.t See if mkdir works ! t/op/my.t See if lexical scoping works ! t/op/my_stash.t See if my Package works ! t/op/nothr5005.t local @_ test which does not work under use5005threads ! t/op/numconvert.t See if accessing fields does not change numeric values ! t/op/oct.t See if oct and hex work ! t/op/ord.t See if ord works ! t/op/override.t See if operator overriding works ! t/op/pack.t See if pack and unpack work ! t/op/pat.t See if esoteric patterns work ! t/op/pos.t See if pos works ! t/op/push.t See if push and pop work ! t/op/pwent.t See if getpw*() functions work ! t/op/quotemeta.t See if quotemeta works ! t/op/rand.t See if rand works ! t/op/range.t See if .. works ! t/op/re_tests Regular expressions for regexp.t ! t/op/read.t See if read() works ! t/op/readdir.t See if readdir() works ! t/op/recurse.t See if deep recursion works ! t/op/ref.t See if refs and objects work ! t/op/regexp.t See if regular expressions work ! t/op/regexp_noamp.t See if regular expressions work with optimizations ! t/op/regmesg.t See if one can get regular expression errors ! t/op/repeat.t See if x operator works ! t/op/reverse.t See if reverse operator works ! t/op/runlevel.t See if die() works from perl_call_*() ! t/op/sleep.t See if sleep works ! t/op/sort.t See if sort works ! t/op/splice.t See if splice works ! t/op/split.t See if split works ! t/op/sprintf.t See if sprintf works ! t/op/stat.t See if stat works ! t/op/study.t See if study works ! t/op/sub_lval.t See if lvalue subroutines work ! t/op/subst.t See if substitution works ! t/op/subst_amp.t See if $&-related substitution works ! t/op/subst_wamp.t See if substitution works with $& present ! t/op/substr.t See if substr works ! t/op/sysio.t See if sysread and syswrite work ! t/op/taint.t See if tainting works ! t/op/tie.t See if tie/untie functions work ! t/op/tiearray.t See if tie for arrays works ! t/op/tiehandle.t See if tie for handles works ! t/op/time.t See if time functions work ! t/op/tr.t See if tr works ! t/op/undef.t See if undef works ! t/op/universal.t See if UNIVERSAL class works ! t/op/unshift.t See if unshift works ! t/op/utf8decode.t See if UTF-8 decoding works ! t/op/vec.t See if vectors work ! t/op/ver.t See if v-strings and the %v format flag work ! t/op/wantarray.t See if wantarray works ! t/op/write.t See if write works (formats work) ! t/pod/emptycmd.t Test empty pod directives ! t/pod/emptycmd.xr Expected results for emptycmd.t ! t/pod/find.t See if Pod::Find works ! t/pod/for.t Test =for directive ! t/pod/for.xr Expected results for for.t ! t/pod/headings.t Test =head directives ! t/pod/headings.xr Expected results for headings.t ! t/pod/include.t Test =include directive ! t/pod/include.xr Expected results for include.t ! t/pod/included.t Test =include directive ! t/pod/included.xr Expected results for included.t ! t/pod/lref.t Test L<...> sequences ! t/pod/lref.xr Expected results for lref.t ! t/pod/multiline_items.t Test multiline =items t/pod/multiline_items.xr Test multiline =items ! t/pod/nested_items.t Test nested =items ! t/pod/nested_items.xr Expected results for nested_items.t ! t/pod/nested_seqs.t Test nested interior sequences ! t/pod/nested_seqs.xr Expected results for nested_seqs.t ! t/pod/oneline_cmds.t Test single paragraph ==cmds ! t/pod/oneline_cmds.xr Expected results for oneline_cmds.t ! t/pod/plainer.t Test Pod::Plainer ! t/pod/pod2usage.t Test Pod::Usage ! t/pod/pod2usage.xr Expected results for pod2usage.t ! t/pod/poderrs.t Test POD errors ! t/pod/poderrs.xr Expected results for emptycmd.t ! t/pod/podselect.t Test Pod::Select ! t/pod/podselect.xr Expected results for podselect.t ! t/pod/special_seqs.t Test "special" interior sequences ! t/pod/special_seqs.xr Expected results for emptycmd.t ! t/pod/testcmp.pl Module to compare output against expected results ! t/pod/testp2pt.pl Module to test Pod::PlainText for a given file ! t/pod/testpchk.pl Module to test Pod::Checker for a given file ! t/pod/testpods/lib/Pod/Stuff.pm Sample data for find.t ! t/README Instructions for regression tests ! t/run/exit.t Test perl's exit status. ! t/run/runenv.t Test if perl honors its environment variables. ! t/TEST The regression tester ! t/TestInit.pm Preamble library for core tests ! taint.c Tainting code ! thrdvar.h Per-thread variables ! thread.h Threading header ! Todo.micro The Wishlist for microperl ! toke.c The tokener ! uconfig.h Configuration header for microperl ! uconfig.sh Configuration script for microperl ! universal.c The default UNIVERSAL package methods ! unixish.h Defines that are assumed on Unix ! utf8.c Unicode routines ! utf8.h Unicode header ! utfebcdic.h Unicode on EBCDIC (UTF-EBCDIC, tr16) header ! util.c Utility routines ! util.h Dummy header ! utils.lst Lists utilities bundled with Perl ! utils/c2ph.PL program to translate dbx stabs to perl ! utils/dprofpp.PL Perl code profile post-processor ! utils/h2ph.PL A thing to turn C .h files into perl .ph files ! utils/h2xs.PL Program to make .xs files from C header files ! utils/libnetcfg.PL libnet ! utils/Makefile Extract the utility scripts ! utils/perlbug.PL A simple tool to submit a bug report ! utils/perlcc.PL Front-end for compiler ! utils/perldoc.PL A simple tool to find & display perl's documentation ! utils/pl2pm.PL A pl to pm translator ! utils/splain.PL Stand-alone version of diagnostics.pm ! uts/sprintf_wrap.c sprintf wrapper for UTS ! uts/strtol_wrap.c strtol wrapper for UTS ! vmesa/Makefile VM/ESA Makefile ! vmesa/vmesa.c VM/ESA-specific C code for Perl core ! vmesa/vmesaish.h VM/ESA-specific C header for Perl core ! vms/descrip_mms.template Template MM[SK] description file for build vms/ext/DCLsym/0README.txt ReadMe file for VMS::DCLsym vms/ext/DCLsym/DCLsym.pm Perl access to CLI symbols vms/ext/DCLsym/DCLsym.xs Perl access to CLI symbols vms/ext/DCLsym/Makefile.PL MakeMaker driver for VMS::DCLsym ! vms/ext/DCLsym/test.pl regression tests for VMS::DCLsym ! vms/ext/Filespec.pm VMS-Unix file syntax interconversion ! vms/ext/filespec.t See if VMS::Filespec funtions work vms/ext/Stdio/0README.txt ReadMe file for VMS::Stdio vms/ext/Stdio/Makefile.PL MakeMaker driver for VMS::Stdio ! vms/ext/Stdio/Stdio.pm VMS options to stdio routines ! vms/ext/Stdio/Stdio.xs VMS options to stdio routines ! vms/ext/Stdio/test.pl regression tests for VMS::Stdio ! vms/ext/vmsish.pm Control VMS-specific behavior of Perl core ! vms/ext/vmsish.t Tests for vmsish.pm ! vms/ext/XSSymSet.pm manage linker symbols when building extensions ! vms/gen_shrfls.pl generate options files and glue for shareable image ! vms/genconfig.pl retcon config.sh from config.h ! vms/genopt.com hack to write options files in case of broken makes ! vms/make_command.com record MM[SK] command used to build Perl ! vms/mms2make.pl convert descrip.mms to make syntax ! vms/munchconfig.c performs shell $var substitution for VMS ! vms/myconfig.com record local configuration info for bug report ! vms/perlvms.pod VMS-specific additions to Perl documentation ! vms/perly_c.vms perly.c with fixed declarations for global syms ! vms/perly_h.vms perly.h with fixed declarations for global syms ! vms/sockadapt.c glue for SockshShr socket support ! vms/sockadapt.h glue for SockshShr socket support ! vms/test.com DCL driver for regression tests ! vms/vms.c VMS-specific C code for Perl core ! vms/vms_yfix.pl convert Unix perly.[ch] to VMS perly_[ch].vms ! vms/vmsish.h VMS-specific C header for Perl core ! vms/vmspipe.com VMS-specific piped command helper script ! vms/writemain.pl Generate perlmain.c from miniperlmain.c+extensions ! vos/build.cm VOS command macro to build Perl ! vos/Changes Changes made to port Perl to the VOS operating system ! vos/compile_perl.cm VOS command macro to build multiple version of Perl ! vos/config.alpha.def definitions used by config.pl ! vos/config.alpha.h config.h for use with alpha VOS POSIX.1 support ! vos/config.ga.def definitions used by config.pl ! vos/config.ga.h config.h for use with generally-available VOS POSIX.1 support ! vos/config.pl script to convert a config_h.SH to a config.h ! vos/configure_perl.cm VOS command macro to configure perl before building ! vos/install_perl.cm VOS command macro to install perl after building ! vos/Makefile A helper for maintaining the config.*.* in UNIX ! vos/perl.bind VOS bind control file ! vos/test_vos_dummies.c Test program for "vos_dummies.c" ! vos/vos_dummies.c Wrappers to soak up undefined functions ! vos/vosish.h VOS-specific header file ! warnings.h The warning numbers ! warnings.pl Program to write warnings.h and lib/warnings.pm ! win32/bin/exetype.pl Set executable type to CONSOLE or WINDOWS ! win32/bin/perlglob.pl Win32 globbing ! win32/bin/pl2bat.pl wrap perl scripts into batch files ! win32/bin/runperl.pl run perl script via batch file namesake ! win32/bin/search.pl Win32 port ! win32/buildext.pl Build extensions once miniperl is built ! win32/config.bc Win32 base line config.sh (Borland C++ build) ! win32/config.gc Win32 base line config.sh (mingw32/gcc build) ! win32/config.vc Win32 base line config.sh (Visual C++ build) ! win32/config_H.bc Win32 config header (Borland C++ build) ! win32/config_H.gc Win32 config header (GNU build)? ! win32/config_h.PL Perl code to convert Win32 config.sh to config.h ! win32/config_H.vc Win32 config header (Visual C++ build) ! win32/config_sh.PL Perl code to update Win32 config.sh from Makefile ! win32/des_fcrypt.patch Win32 port ! win32/distclean.bat Remove _ALL_ files not listed here in MANIFEST ! win32/dl_win32.xs Win32 port ! win32/FindExt.pm Scan for extensions ! win32/genmk95.pl Perl code to generate command.com-usable makefile.95 win32/include/arpa/inet.h Win32 port win32/include/dirent.h Win32 port win32/include/netdb.h Win32 port win32/include/sys/socket.h Win32 port ! win32/Makefile Win32 makefile for NMAKE (Visual C++ build) ! win32/makefile.mk Win32 makefile for DMAKE (BC++, VC++ builds) ! win32/mdelete.bat multifile delete ! win32/perlglob.c Win32 port ! win32/perlhost.h Perl "host" implementation ! win32/perllib.c Win32 port ! win32/pod.mak Win32 port ! win32/runperl.c Win32 port ! win32/sncfnmcs.pl Win32 port ! win32/splittree.pl Win32 port ! win32/vdir.h Perl "host" virtual directory manager ! win32/vmem.h Perl "host" memory manager ! win32/win32.c Win32 port ! win32/win32.h Win32 port ! win32/win32io.c Win32 PerlIO layer support ! win32/win32iop.h Win32 port ! win32/win32sck.c Win32 port ! win32/win32thread.c Win32 functions for threads ! win32/win32thread.h Win32 port mapping to threads ! writemain.SH Generate perlmain.c from miniperlmain.c+extensions ! x2p/a2p.c Output of a2p.y run through byacc ! x2p/a2p.h Global declarations ! x2p/a2p.pod Pod for awk to perl translator ! x2p/a2p.y A yacc grammer for awk ! x2p/a2py.c Awk compiler, sort of ! x2p/cflags.SH A script that emits C compilation flags per file ! x2p/EXTERN.h Same as above ! x2p/find2perl.PL A find to perl translator ! x2p/hash.c Hashes again ! x2p/hash.h Public declarations for the above ! x2p/INTERN.h Same as above ! x2p/Makefile.SH Precursor to Makefile ! x2p/proto.h Dummy header ! x2p/s2p.PL Sed to perl translator ! x2p/str.c String handling package ! x2p/str.h Public declarations for the above ! x2p/util.c Utility routines ! x2p/util.h Public declarations for the above ! x2p/walk.c Parse tree walker ! XSUB.h Include file for extension subroutines ! xsutils.c Additional bundled package methods not in UNIVERSAL:: diff -c 'perl-5.7.1/Makefile.SH' 'perl-5.7.2/Makefile.SH' Index: ./Makefile.SH *** ./Makefile.SH Sat Apr 7 20:37:53 2001 --- ./Makefile.SH Mon Jul 9 17:09:38 2001 *************** *** 1,5 **** #! /bin/sh ! case $CONFIGDOTSH in '') if test -f config.sh then TOP=. --- 1,5 ---- #! /bin/sh ! case $PERL_CONFIG_SH in '') if test -f config.sh then TOP=. *************** *** 26,32 **** DPERL_EXTERNAL_GLOB='-DPERL_EXTERNAL_GLOB' case "$useshrplib" in true) ! # Prefix all runs of 'miniperl' and 'perl' with # $ldlibpth so that ./perl finds *this* shared libperl. case "$LD_LIBRARY_PATH" in '') --- 26,32 ---- DPERL_EXTERNAL_GLOB='-DPERL_EXTERNAL_GLOB' case "$useshrplib" in true) ! # Prefix all runs of 'miniperl' and 'perl' with # $ldlibpth so that ./perl finds *this* shared libperl. case "$LD_LIBRARY_PATH" in '') *************** *** 48,54 **** -compatibility_version 1 \ -current_version \ ${api_version}.${api_subversion} \ - -image_base 0x4be00000 \ -install_name \$(shrpdir)/\$@" ;; cygwin*) --- 48,53 ---- *************** *** 210,216 **** # Any special object files needed by this architecture, e.g. os2/os2.obj ARCHOBJS = $archobjs ! .SUFFIXES: .c \$(OBJ_EXT) # grrr SHELL = $sh --- 209,215 ---- # Any special object files needed by this architecture, e.g. os2/os2.obj ARCHOBJS = $archobjs ! .SUFFIXES: .c \$(OBJ_EXT) .i .s # grrr SHELL = $sh *************** *** 228,235 **** ## In the following dollars and backticks do not need the extra backslash. $spitshell >>Makefile <<'!NO!SUBS!' ! CCCMD = `sh $(shellflags) cflags $(LIBPERL) $@` private = preplibrary lib/ExtUtils/Miniperl.pm lib/Config.pm # Files to be built with variable substitution before miniperl --- 227,236 ---- ## In the following dollars and backticks do not need the extra backslash. $spitshell >>Makefile <<'!NO!SUBS!' ! CCCMD = `sh $(shellflags) cflags $(LIBPERL) $@` + CCCMDSRC = `sh $(shellflags) cflags $(LIBPERL) $<` + private = preplibrary lib/ExtUtils/Miniperl.pm lib/Config.pm # Files to be built with variable substitution before miniperl *************** *** 264,276 **** c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c ! c4 = globals.c perlio.c perlapi.c c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) ! obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) --- 265,277 ---- c1 = $(mallocsrc) av.c scope.c op.c doop.c doio.c dump.c hv.c mg.c c2 = perl.c perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c c3 = gv.c sv.c taint.c toke.c util.c deb.c run.c universal.c xsutils.c ! c4 = globals.c perlio.c perlapi.c numeric.c locale.c pp_pack.c c = $(c1) $(c2) $(c3) $(c4) miniperlmain.c perlmain.c obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) ! obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) xsutils$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) *************** *** 289,294 **** --- 290,303 ---- .c$(OBJ_EXT): $(CCCMD) $(PLDLFLAGS) $*.c + .c.i: + $(CCCMDSRC) -E $*.c > $*.i + + .c.s: + $(CCCMDSRC) -S $*.c + + .PHONY: all compile translators utilities + all: $(FIRSTMAKEFILE) miniperl extra.pods $(private) $(public) $(dynamic_ext) $(nonxs_ext) @echo " "; @echo " Everything is up to date. 'make test' to run test suite." *************** *** 296,302 **** compile: all echo "testing compilation" > testcompile; cd utils; $(MAKE) compile; ! cd x2p; $(MAKE) compile; cd pod; $(MAKE) compile; translators: miniperl lib/Config.pm FORCE --- 305,311 ---- compile: all echo "testing compilation" > testcompile; cd utils; $(MAKE) compile; ! cd x2p; $(MAKE) compile; cd pod; $(MAKE) compile; translators: miniperl lib/Config.pm FORCE *************** *** 311,316 **** --- 320,326 ---- # Phony target to force checking subdirectories. # Apparently some makes require an action for the FORCE target. + .PHONY: FORCE FORCE: @sh -c true !NO!SUBS! *************** *** 482,487 **** --- 492,498 ---- *) $spitshell >>Makefile <<'!NO!SUBS!' miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT) + -@rm -f miniperl.xok $(LDLIBPTH) $(CC) $(CLDFLAGS) -o miniperl \ miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) $(LLIBPERL) $(libs) $(LDLIBPTH) ./miniperl -w -Ilib -MExporter -e '' || $(MAKE) minitest *************** *** 492,498 **** $spitshell >>Makefile <<'!NO!SUBS!' perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT) ! $(SHRPENV) $(LDLIBPTH) $(CC) -o perl $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) # Purify/Quantify Perls. --- 503,510 ---- $spitshell >>Makefile <<'!NO!SUBS!' perl: $& perlmain$(OBJ_EXT) $(LIBPERL) $(DYNALOADER) $(static_ext) ext.libs $(PERLEXPORT) ! -@rm -f miniperl.xok ! $(SHRPENV) $(LDLIBPTH) $(CC) -o perl$(PERL_SUFFIX) $(PERL_PROFILING) $(CLDFLAGS) $(CCDLFLAGS) perlmain$(OBJ_EXT) $(DYNALOADER) $(static_ext) $(LLIBPERL) `cat ext.libs` $(libs) # Purify/Quantify Perls. *************** *** 508,526 **** # Third Degree Perl (Tru64 only) perl.config.dashg: ! @echo "Checking optimize='-g'..." ! @grep "^optimize=" config.sh ! @grep -q "^optimize='-g'" config.sh || exit 1 perl.third.config: config.sh @echo "To build perl.third you must Configure -Doptimize=-g -Uusemymalloc, checking..." @$(MAKE) perl.config.dashg ! @echo "Checking usemymalloc='n'..." ! @grep "^usemymalloc=" config.sh ! @grep -q "^usemymalloc='n'" config.sh || exit 1 perl.third: /usr/bin/atom perl.third.config perl atom -tool third -L. -all -gp -toolargs="-quiet -invalid -uninit heap+stack+partword+copy -min 0" perl # Pixie Perls (Tru64 and IRIX only) --- 520,539 ---- # Third Degree Perl (Tru64 only) perl.config.dashg: ! @echo "Checking optimize='-g' in config.sh..." ! @grep "^optimize=" config.sh ! @grep "^optimize='-g'" config.sh >/dev/null || exit 1 perl.third.config: config.sh @echo "To build perl.third you must Configure -Doptimize=-g -Uusemymalloc, checking..." @$(MAKE) perl.config.dashg ! @echo "Checking usemymalloc='n' in config.sh..." ! @grep "^usemymalloc=" config.sh ! @grep "^usemymalloc='n'" config.sh >/dev/null || exit 1 perl.third: /usr/bin/atom perl.third.config perl atom -tool third -L. -all -gp -toolargs="-quiet -invalid -uninit heap+stack+partword+copy -min 0" perl + @echo "Now you may run perl.third and then study perl.3log." # Pixie Perls (Tru64 and IRIX only) *************** *** 540,546 **** --- 553,584 ---- else \ $(MAKE) perl.pixie.irix; \ fi + @echo "Now you may run perl.pixie and then run pixie." + # Gprof Perl + + perl.config.dashpg: + @echo "Checking optimize='-pg' in config.sh..." + @grep "^optimize=" config.sh + @grep "^optimize='.*-pg.*'" config.sh >/dev/null || exit 1 + + perl.gprof.config: config.sh + @echo "To build perl.gprof you must Configure -Doptimize=-pg, checking..." + @$(MAKE) perl.config.dashpg + + perl.gprof: /usr/bin/gprof perl.gprof.config + @-rm -f perl + $(MAKE) PERL_SUFFIX=.gprof PERL_PROFILING=-pg perl + @echo "Now you may run perl.gprof and then run gprof perl.gprof." + + # Microperl. This is just a convenience thing if one happens to + # build also the full Perl and therefore the real big Makefile: + # usually one should manually explicitly issue the below command. + + .PHONY: microperl + microperl: + $(MAKE) -f Makefile.micro + # This version, if specified in Configure, does ONLY those scripts which need # set-id emulation. Suidperl must be setuid root. It contains the "taint" # checks as well as the special code to validate that the script in question *************** *** 564,570 **** # We have to call our ./makedir because Ultrix 4.3 make can't handle the line # test -d lib/auto || mkdir lib/auto # ! preplibrary: miniperl lib/Config.pm @sh ./makedir lib/auto @echo " AutoSplitting perl library" $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \ --- 602,609 ---- # We have to call our ./makedir because Ultrix 4.3 make can't handle the line # test -d lib/auto || mkdir lib/auto # ! .PHONY: preplibrary ! preplibrary: miniperl lib/Config.pm lib/lib.pm lib/re.pm @sh ./makedir lib/auto @echo " AutoSplitting perl library" $(LDLIBPTH) ./miniperl -Ilib -e 'use AutoSplit; \ *************** *** 571,577 **** autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm # Take care to avoid modifying lib/Config.pm without reason ! # (If trying to create a new port and having problems with the configpm script, # try 'make minitest' and/or commenting out the tests at the end of configpm.) lib/Config.pm: config.sh miniperl configpm lib/re.pm $(LDLIBPTH) ./miniperl configpm configpm.tmp --- 610,616 ---- autosplit_lib_modules(@ARGV)' lib/*.pm lib/*/*.pm # Take care to avoid modifying lib/Config.pm without reason ! # (If trying to create a new port and having problems with the configpm script, # try 'make minitest' and/or commenting out the tests at the end of configpm.) lib/Config.pm: config.sh miniperl configpm lib/re.pm $(LDLIBPTH) ./miniperl configpm configpm.tmp *************** *** 603,612 **** done -@test -f vms/perlvms.pod && cd pod && $(LNS) ../vms/perlvms.pod perlvms.pod && cd .. && echo "pod/perlvms.pod" >> extra.pods install-strip: $(MAKE) STRIPFLAGS=-s install ! install: $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) install-verbose: --- 642,654 ---- done -@test -f vms/perlvms.pod && cd pod && $(LNS) ../vms/perlvms.pod perlvms.pod && cd .. && echo "pod/perlvms.pod" >> extra.pods + .PHONY: install install-strip install-all install-verbose install-silent \ + no-install install.perl install.man installman install.html installhtml + install-strip: $(MAKE) STRIPFLAGS=-s install ! install install-all: $(MAKE) install.perl install.man STRIPFLAGS=$(STRIPFLAGS) install-verbose: *************** *** 652,658 **** # to run with precisely the same version of byacc as I use. You # normally shouldn't remake perly.[ch]. ! run_byacc: FORCE $(BYACC) -d perly.y -chmod 664 perly.c perly.h sh $(shellflags) ./perly.fixer y.tab.c perly.c --- 694,705 ---- # to run with precisely the same version of byacc as I use. You # normally shouldn't remake perly.[ch]. ! .PHONY: check_byacc run_byacc ! ! check_byacc: ! @$(BYACC) -V 2>&1 | grep 'version 1\.8\.2' ! ! run_byacc: FORCE check_byacc $(BYACC) -d perly.y -chmod 664 perly.c perly.h sh $(shellflags) ./perly.fixer y.tab.c perly.c *************** *** 660,665 **** --- 707,713 ---- -e 's/y\.tab/perly/g' perly.c >perly.tmp && mv perly.tmp perly.c sed -e '/^extern YYSTYPE yy/D' y.tab.h >yh.tmp && mv yh.tmp y.tab.h cmp -s y.tab.h perly.h && rm -f y.tab.h || mv y.tab.h perly.h + perl -i perlyline.pl perly.c chmod 664 vms/perly_c.vms vms/perly_h.vms perl vms/vms_yfix.pl perly.c perly.h vms/perly_c.vms vms/perly_h.vms *************** *** 733,738 **** --- 781,788 ---- ext/ByteLoader/byterun.c ext/B/B/Asmdata.pm regnodes.h \ warnings.h lib/warnings.pm + .PHONY: regen_headers regen_pods regen_all + regen_headers: FORCE -$(CHMOD_W) $(AUTOGEN_FILES) -perl keywords.pl *************** *** 761,774 **** --- 811,832 ---- @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) d_dummy $(dynamic_ext): miniperl preplibrary $(DYNALOADER) FORCE + @-rm -f lib/re.pm + @cat ext/re/re.pm > lib/re.pm @$(LDLIBPTH) sh ext/util/make_ext dynamic $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) s_dummy $(static_ext): miniperl preplibrary $(DYNALOADER) FORCE + @-rm -f lib/re.pm + @cat ext/re/re.pm > lib/re.pm @$(LDLIBPTH) sh ext/util/make_ext static $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) n_dummy $(nonxs_ext): miniperl preplibrary $(DYNALOADER) FORCE @$(LDLIBPTH) sh ext/util/make_ext nonxs $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) + .PHONY: clean _tidy _mopup _cleaner1 _cleaner2 \ + realclean _realcleaner clobber _clobber \ + distclean veryclean _verycleaner + clean: _tidy _mopup realclean: _realcleaner _mopup *************** *** 775,780 **** --- 833,839 ---- @echo "Note that make realclean does not delete config.sh or Policy.sh" _clobber: + -@rm -f Cross/run-* Cross/to-* Cross/from-* rm -f config.sh cppstdin Policy.sh clobber: _realcleaner _mopup _clobber *************** *** 795,801 **** -rm -f perl.loadmap miniperl.loadmap perl.prelmap miniperl.prelmap -rm -f perl.third lib*.so.perl.third perl.3log t/perl.third t/perl.3log -rm -f perl.pixie lib*.so.perl.pixie lib*.so.Addrs ! -rm -f perl.Addrs perl.Counts t/perl.Addrs t/perl.Counts rm -f perl suidperl miniperl $(LIBPERL) libperl.* microperl # Do not 'make _tidy' directly. --- 854,860 ---- -rm -f perl.loadmap miniperl.loadmap perl.prelmap miniperl.prelmap -rm -f perl.third lib*.so.perl.third perl.3log t/perl.third t/perl.3log -rm -f perl.pixie lib*.so.perl.pixie lib*.so.Addrs ! -rm -f perl.Addrs perl.Counts t/perl.Addrs t/perl.Counts *perl.xok rm -f perl suidperl miniperl $(LIBPERL) libperl.* microperl # Do not 'make _tidy' directly. *************** *** 827,839 **** rm -f h2ph.man pstruct rm -rf .config rm -f testcompile compilelog ! -rmdir lib/B lib/Data lib/Digest lib/Encode lib/MIME lib/IO/Socket lib/IO lib/Filter/Util lib/PerlIO lib/Sys lib/Thread lib/XS ! _realcleaner: @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=realclean @$(LDLIBPTH) $(MAKE) _cleaner2 ! _verycleaner: @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean @$(LDLIBPTH) $(MAKE) _cleaner2 -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig --- 886,898 ---- rm -f h2ph.man pstruct rm -rf .config rm -f testcompile compilelog ! -rmdir lib/B lib/Data lib/Digest lib/Encode lib/IO/Socket lib/IO lib/Filter/Util lib/List lib/MIME lib/PerlIO lib/Scalar lib/Sys lib/Thread lib/XS ! _realcleaner: @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=realclean @$(LDLIBPTH) $(MAKE) _cleaner2 ! _verycleaner: @$(LDLIBPTH) $(MAKE) _cleaner1 CLEAN=veryclean @$(LDLIBPTH) $(MAKE) _cleaner2 -rm -f *~ *.orig */*~ */*.orig */*/*~ */*/*.orig *************** *** 843,848 **** --- 902,908 ---- # If the source file has a /*NOSTRICT*/ somewhere, ignore the lint message # for that spot. + .PHONY: lint lint: $(c) lint $(lintflags) $(defs) perly.c $(c) > perl.fuzz *************** *** 859,864 **** --- 919,925 ---- $(SHELL) config_h.SH # When done, touch perlmain.c so that it doesn't get remade each time. + .PHONY: depend depend: makedepend sh ./makedepend MAKE=$(MAKE) - test -s perlmain.c && touch perlmain.c *************** *** 868,873 **** --- 929,941 ---- makedepend: makedepend.SH config.sh sh ./makedepend.SH + .PHONY: test check test_prep _test_prep \ + test_tty test-tty _test_tty test_notty test-notty _test_notty \ + utest ucheck test.utf8 check.utf8 \ + test.third check.third utest.third ucheck.third test_notty.third \ + test.deparse test_notty.deparse \ + minitest + # Cannot delegate rebuilding of t/perl to make # to allow interlaced test and minitest *************** *** 878,895 **** PERL=./perl $(MAKE) _test_prep _test_tty: ! cd t && $(LDLIBPTH) $(PERL_DEBUG) $(PERL) TEST $(UTF8) /dev/null 2>&1; then \ ! $(MAKE) _test_tty; \ else \ ! $(MAKE) _test_notty; \ fi @echo "Ran tests" > t/rantests --- 946,963 ---- PERL=./perl $(MAKE) _test_prep _test_tty: ! cd t && $(LDLIBPTH) $(PERL_DEBUG) $(PERL) TEST $(TEST_ARGS) /dev/null 2>&1; then \ ! $(MAKE) TEST_ARGS=$(TEST_ARGS) _test_tty ; \ else \ ! $(MAKE) TEST_ARGS=$(TEST_ARGS) _test_notty ; \ fi @echo "Ran tests" > t/rantests *************** *** 902,909 **** test_notty: test_prep PERL=./perl $(MAKE) _test_notty ! utest ucheck: test_prep ! PERL=./perl UTF8=-utf8 $(MAKE) _test test-prep: test_prep --- 970,977 ---- test_notty: test_prep PERL=./perl $(MAKE) _test_notty ! utest ucheck test.utf8 check.utf8: test_prep ! PERL=./perl TEST_ARGS=-utf8 $(MAKE) _test test-prep: test_prep *************** *** 920,930 **** PERL=./perl.third PERL_DEBUG=PERL_3LOG=1 $(MAKE) _test utest.third ucheck.third: test_prep.third perl.third ! PERL=./perl.third PERL_DEBUG=PERL_3LOG=1UTF=-utf8 $(MAKE) _test test_notty.third: test_prep.third perl.third PERL=./perl.third $(MAKE) PERL_DEBUG=PERL_3LOG=1 _test_notty # Can't depend on lib/Config.pm because that might be where miniperl # is crashing. minitest: miniperl lib/re.pm --- 988,1006 ---- PERL=./perl.third PERL_DEBUG=PERL_3LOG=1 $(MAKE) _test utest.third ucheck.third: test_prep.third perl.third ! PERL=./perl.third PERL_DEBUG=PERL_3LOG=1 TEST_ARGS=-utf8 $(MAKE) _test test_notty.third: test_prep.third perl.third PERL=./perl.third $(MAKE) PERL_DEBUG=PERL_3LOG=1 _test_notty + # Targets for Deparse testing. + + test.deparse: test_prep + PERL=./perl TEST_ARGS=-deparse $(MAKE) _test + + test_notty.deparse: test_prep + PERL=./perl TEST_ARGS=-deparse $(MAKE) _test_notty + # Can't depend on lib/Config.pm because that might be where miniperl # is crashing. minitest: miniperl lib/re.pm *************** *** 931,942 **** @echo "You may see some irrelevant test failures if you have been unable" @echo "to build lib/Config.pm." - cd t && (rm -f perl$(EXE_EXT); $(LNS) ../miniperl$(EXE_EXT) perl$(EXE_EXT)) \ ! && $(LDLIBPTH) ./perl TEST base/*.t comp/*.t cmd/*.t run/*.t io/*.t op/*.t pragma/*.t .clist *************** *** 976,988 **** --- 1057,1073 ---- Makefile: Makefile.SH ./config.sh $(SHELL) Makefile.SH + .PHONY: distcheck distcheck: FORCE perl '-MExtUtils::Manifest=&fullcheck' -e 'fullcheck()' + .PHONY: elc elc: emacs/cperl-mode.elc emacs/cperl-mode.elc: emacs/cperl-mode.el -cd emacs; emacs -batch -q -no-site-file -f batch-byte-compile cperl-mode.el + + .PHONY: etags ctags tags etags: TAGS diff -c 'perl-5.7.1/Makefile.micro' 'perl-5.7.2/Makefile.micro' Index: ./Makefile.micro *** ./Makefile.micro Tue Mar 6 04:04:16 2001 --- ./Makefile.micro Mon Jul 9 17:09:38 2001 *************** *** 1,7 **** CC = cc LD = $(CC) DEFINES = -DPERL_CORE -DPERL_MICRO ! CFLAGS = $(DEFINES) LIBS = -lm _O = .o --- 1,8 ---- CC = cc LD = $(CC) DEFINES = -DPERL_CORE -DPERL_MICRO ! OPTIMIZE = ! CFLAGS = $(DEFINES) $(OPTIMIZE) LIBS = -lm _O = .o *************** *** 11,19 **** uglobals$(_O) ugv$(_O) uhv$(_O) \ umg$(_O) uperlmain$(_O) uop$(_O) \ uperl$(_O) uperlio$(_O) uperly$(_O) upp$(_O) \ ! upp_ctl$(_O) upp_hot$(_O) upp_sys$(_O) \ uregcomp$(_O) uregexec$(_O) urun$(_O) \ uscope$(_O) usv$(_O) utaint$(_O) utoke$(_O) \ uuniversal$(_O) uutf8$(_O) uutil$(_O) uperlapi$(_O) microperl: $(O) --- 12,21 ---- uglobals$(_O) ugv$(_O) uhv$(_O) \ umg$(_O) uperlmain$(_O) uop$(_O) \ uperl$(_O) uperlio$(_O) uperly$(_O) upp$(_O) \ ! upp_ctl$(_O) upp_hot$(_O) upp_sys$(_O) upp_pack$(_O) \ uregcomp$(_O) uregexec$(_O) urun$(_O) \ uscope$(_O) usv$(_O) utaint$(_O) utoke$(_O) \ + unumeric$(_O) ulocale$(_O) \ uuniversal$(_O) uutf8$(_O) uutil$(_O) uperlapi$(_O) microperl: $(O) *************** *** 90,95 **** --- 92,100 ---- upp_sys$(_O): $(HE) pp_sys.c $(CC) -c -o $@ $(CFLAGS) pp_sys.c + upp_pack$(_O): $(HE) pp_pack.c + $(CC) -c -o $@ $(CFLAGS) pp_pack.c + uregcomp$(_O): $(HE) regcomp.c regcomp.h regnodes.h INTERN.h $(CC) -c -o $@ $(CFLAGS) regcomp.c *************** *** 110,115 **** --- 115,126 ---- utoke$(_O): $(HE) toke.c keywords.h $(CC) -c -o $@ $(CFLAGS) toke.c + + ulocale$(_O): $(HE) locale.c + $(CC) -c -o $@ $(CFLAGS) locale.c + + unumeric$(_O): $(HE) numeric.c + $(CC) -c -o $@ $(CFLAGS) numeric.c uuniversal$(_O): $(HE) universal.c objXSUB.h XSUB.h $(CC) -c -o $@ $(CFLAGS) universal.c diff -c /dev/null 'perl-5.7.2/NetWare/CLIBsdio.h' Index: ./NetWare/CLIBsdio.h *** ./NetWare/CLIBsdio.h Thu Jan 1 02:00:00 1970 --- ./NetWare/CLIBsdio.h Mon Jul 9 17:09:38 2001 *************** *** 0 **** --- 1,180 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : CLIBsdio.h + * DESCRIPTION : Forces the use of clib stdio.h calls over static watcom calls + * for C/C++ applications that statically link watcom libraries. + * + * This file must be included each time that stdio.h is included. + * In the case of the Perl project, just include stdio.h and + * the make should take care of the rest. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #ifndef _CLIBSDIO_H_ + #define _CLIBSDIO_H_ + + + #ifdef DEFINE_GPF + #define _GPFINIT =0 + #define _GPFEXT + #else + #define _GPFINIT + #define _GPFEXT extern + #endif + + #ifdef __cplusplus + extern "C" + { + #endif + + _GPFEXT void* gpf___get_stdin _GPFINIT; + _GPFEXT void* gpf___get_stdout _GPFINIT; + _GPFEXT void* gpf___get_stderr _GPFINIT; + + _GPFEXT void* gpf_clearerr _GPFINIT; + _GPFEXT void* gpf_fclose _GPFINIT; + _GPFEXT void* gpf_feof _GPFINIT; + _GPFEXT void* gpf_ferror _GPFINIT; + _GPFEXT void* gpf_fflush _GPFINIT; + _GPFEXT void* gpf_fgetc _GPFINIT; + _GPFEXT void* gpf_fgetpos _GPFINIT; + _GPFEXT void* gpf_fgets _GPFINIT; + _GPFEXT void* gpf_fopen _GPFINIT; + _GPFEXT void* gpf_fprintf _GPFINIT; + _GPFEXT void* gpf_fputc _GPFINIT; + _GPFEXT void* gpf_fputs _GPFINIT; + _GPFEXT void* gpf_fread _GPFINIT; + _GPFEXT void* gpf_freopen _GPFINIT; + _GPFEXT void* gpf_fscanf _GPFINIT; + _GPFEXT void* gpf_fseek _GPFINIT; + _GPFEXT void* gpf_fsetpos _GPFINIT; + _GPFEXT void* gpf_ftell _GPFINIT; + _GPFEXT void* gpf_fwrite _GPFINIT; + _GPFEXT void* gpf_getc _GPFINIT; + _GPFEXT void* gpf_getchar _GPFINIT; + _GPFEXT void* gpf_gets _GPFINIT; + _GPFEXT void* gpf_perror _GPFINIT; + _GPFEXT void* gpf_printf _GPFINIT; + _GPFEXT void* gpf_putc _GPFINIT; + _GPFEXT void* gpf_putchar _GPFINIT; + _GPFEXT void* gpf_puts _GPFINIT; + _GPFEXT void* gpf_rename _GPFINIT; + _GPFEXT void* gpf_rewind _GPFINIT; + _GPFEXT void* gpf_scanf _GPFINIT; + _GPFEXT void* gpf_setbuf _GPFINIT; + _GPFEXT void* gpf_setvbuf _GPFINIT; + _GPFEXT void* gpf_sprintf _GPFINIT; + _GPFEXT void* gpf_sscanf _GPFINIT; + _GPFEXT void* gpf_tmpfile _GPFINIT; + _GPFEXT void* gpf_tmpnam _GPFINIT; + _GPFEXT void* gpf_ungetc _GPFINIT; + _GPFEXT void* gpf_vfprintf _GPFINIT; + _GPFEXT void* gpf_vfscanf _GPFINIT; + _GPFEXT void* gpf_vprintf _GPFINIT; + _GPFEXT void* gpf_vscanf _GPFINIT; + _GPFEXT void* gpf_vsprintf _GPFINIT; + _GPFEXT void* gpf_vsscanf _GPFINIT; + + _GPFEXT void* gpf_fdopen _GPFINIT; + _GPFEXT void* gpf_fileno _GPFINIT; + + _GPFEXT void* gpf_cgets _GPFINIT; + _GPFEXT void* gpf_cprintf _GPFINIT; + _GPFEXT void* gpf_cputs _GPFINIT; + _GPFEXT void* gpf_cscanf _GPFINIT; + _GPFEXT void* gpf_fcloseall _GPFINIT; + _GPFEXT void* gpf_fgetchar _GPFINIT; + _GPFEXT void* gpf_flushall _GPFINIT; + _GPFEXT void* gpf_fputchar _GPFINIT; + _GPFEXT void* gpf_getch _GPFINIT; + _GPFEXT void* gpf_getche _GPFINIT; + _GPFEXT void* gpf_putch _GPFINIT; + _GPFEXT void* gpf_ungetch _GPFINIT; + _GPFEXT void* gpf_vcprintf _GPFINIT; + _GPFEXT void* gpf_vcscanf _GPFINIT; + + #ifdef __cplusplus + } + #endif + + #pragma aux __get_stdin = "call gpf___get_stdin"; + #pragma aux __get_stdout = "call gpf___get_stdout"; + #pragma aux __get_stderr = "call gpf___get_stderr"; + + #pragma aux clearerr = "call gpf_clearerr"; + #pragma aux fclose = "call gpf_fclose"; + #pragma aux feof = "call gpf_feof"; + #pragma aux ferror = "call gpf_ferror"; + #pragma aux fflush = "call gpf_fflush"; + #pragma aux fgetc = "call gpf_fgetc"; + #pragma aux fgetpos = "call gpf_fgetpos"; + #pragma aux fgets = "call gpf_fgets"; + #pragma aux fopen = "call gpf_fopen"; + #pragma aux fprintf = "call gpf_fprintf"; + #pragma aux fputc = "call gpf_fputc"; + #pragma aux fputs = "call gpf_fputs"; + #pragma aux fread = "call gpf_fread"; + #pragma aux freopen = "call gpf_freopen"; + #pragma aux fscanf = "call gpf_fscanf"; + #pragma aux fseek = "call gpf_fseek"; + #pragma aux fsetpos = "call gpf_fsetpos"; + #pragma aux ftell = "call gpf_ftell"; + #pragma aux fwrite = "call gpf_fwrite"; + #pragma aux getc = "call gpf_getc"; + #pragma aux getchar = "call gpf_getchar"; + #pragma aux gets = "call gpf_gets"; + #pragma aux perror = "call gpf_perror"; + #pragma aux printf = "call gpf_printf"; + #pragma aux putc = "call gpf_putc"; + #pragma aux putchar = "call gpf_putchar"; + #pragma aux puts = "call gpf_puts"; + #pragma aux rename = "call gpf_rename"; + #pragma aux rewind = "call gpf_rewind"; + #pragma aux scanf = "call gpf_scanf"; + #pragma aux setbuf = "call gpf_setbuf"; + #pragma aux setvbuf = "call gpf_setvbuf"; + #pragma aux sprintf = "call gpf_sprintf"; + #pragma aux sscanf = "call gpf_sscanf"; + #pragma aux tmpfile = "call gpf_tmpfile"; + #pragma aux tmpnam = "call gpf_tmpnam"; + #pragma aux ungetc = "call gpf_ungetc"; + #pragma aux vfprintf = "call gpf_vfprintf"; + #pragma aux vfscanf = "call gpf_vfscanf"; + #pragma aux vprintf = "call gpf_vprintf"; + #pragma aux vscanf = "call gpf_vscanf"; + #pragma aux vsprintf = "call gpf_vsprintf"; + #pragma aux vsscanf = "call gpf_vsscanf"; + + #pragma aux fdopen = "call gpf_fdopen"; + #pragma aux fileno = "call gpf_fileno"; + + #pragma aux cgets = "call gpf_cgets"; + #pragma aux cprintf = "call gpf_cprintf"; + #pragma aux cputs = "call gpf_cputs"; + #pragma aux cscanf = "call gpf_cscanf"; + #pragma aux fcloseall = "call gpf_fcloseall"; + #pragma aux fgetchar = "call gpf_fgetchar"; + #pragma aux flushall = "call gpf_flushall"; + #pragma aux fputchar = "call gpf_fputchar"; + #pragma aux getch = "call gpf_getch"; + #pragma aux getche = "call gpf_getche"; + #pragma aux putch = "call gpf_putch"; + #pragma aux ungetch = "call gpf_ungetch"; + #pragma aux vcprintf = "call gpf_vcprintf"; + #pragma aux vcscanf = "call gpf_vcscanf"; + + + #endif // _CLIBSDIO_H_ + diff -c /dev/null 'perl-5.7.2/NetWare/CLIBstr.h' Index: ./NetWare/CLIBstr.h *** ./NetWare/CLIBstr.h Thu Jan 1 02:00:00 1970 --- ./NetWare/CLIBstr.h Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,120 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : CLIBstr.h + * DESCRIPTION : Forces the use of clib string.h calls over static watcom calls + * for C/C++ applications that statically link watcom libraries. + * + * This file must be included each time that string.h is included. + * In the case of the Perl project, just include string.h and + * the make should take care of the rest. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #ifndef _CLIBSTR_H_ + #define _CLIBSTR_H_ + + + #ifdef DEFINE_GPF + #define _GPFINIT =0 + #define _GPFEXT + #else + #define _GPFINIT + #define _GPFEXT extern + #endif + + #ifdef __cplusplus + extern "C" + { + #endif + + _GPFEXT void* gpf_memchr _GPFINIT; + _GPFEXT void* gpf_memcmp _GPFINIT; + _GPFEXT void* gpf_memcpy _GPFINIT; + _GPFEXT void* gpf_memmove _GPFINIT; + _GPFEXT void* gpf_memset _GPFINIT; + _GPFEXT void* gpf_strchr _GPFINIT; + _GPFEXT void* gpf_strcmp _GPFINIT; + _GPFEXT void* gpf_strcoll _GPFINIT; + _GPFEXT void* gpf_strcspn _GPFINIT; + _GPFEXT void* gpf_strerror _GPFINIT; + _GPFEXT void* gpf_strtok_r _GPFINIT; + _GPFEXT void* gpf_strpbrk _GPFINIT; + _GPFEXT void* gpf_strrchr _GPFINIT; + _GPFEXT void* gpf_strspn _GPFINIT; + _GPFEXT void* gpf_strstr _GPFINIT; + _GPFEXT void* gpf_strtok _GPFINIT; + _GPFEXT void* gpf_strxfrm _GPFINIT; + _GPFEXT void* gpf_memicmp _GPFINIT; + _GPFEXT void* gpf_strcmpi _GPFINIT; + _GPFEXT void* gpf_stricmp _GPFINIT; + _GPFEXT void* gpf_strrev _GPFINIT; + _GPFEXT void* gpf_strupr _GPFINIT; + + _GPFEXT void* gpf_strcpy _GPFINIT; + _GPFEXT void* gpf_strcat _GPFINIT; + _GPFEXT void* gpf_strlen _GPFINIT; + _GPFEXT void* gpf_strncpy _GPFINIT; + _GPFEXT void* gpf_strncat _GPFINIT; + _GPFEXT void* gpf_strncmp _GPFINIT; + _GPFEXT void* gpf_strnicmp _GPFINIT; + _GPFEXT void* gpf_strdup _GPFINIT; + _GPFEXT void* gpf_strlist _GPFINIT; + _GPFEXT void* gpf_strlwr _GPFINIT; + _GPFEXT void* gpf_strnset _GPFINIT; + _GPFEXT void* gpf_strset _GPFINIT; + + #ifdef __cplusplus + } + #endif + + #pragma aux memchr = "call gpf_memchr"; + #pragma aux memcmp = "call gpf_memcmp"; + #pragma aux memcpy = "call gpf_memcpy"; + #pragma aux memmove = "call gpf_memmove"; + #pragma aux memset = "call gpf_memset"; + #pragma aux strchr = "call gpf_strchr"; + #pragma aux strcmp = "call gpf_strcmp"; + #pragma aux strcoll = "call gpf_strcoll"; + #pragma aux strcspn = "call gpf_strcspn"; + #pragma aux strerror = "call gpf_strerror"; + #pragma aux strtok_r = "call gpf_strtok_r"; + #pragma aux strpbrk = "call gpf_strpbrk"; + #pragma aux strrchr = "call gpf_strrchr"; + #pragma aux strspn = "call gpf_strspn"; + #pragma aux strstr = "call gpf_strstr"; + #pragma aux strtok = "call gpf_strtok"; + #pragma aux strxfrm = "call gpf_strxfrm"; + #pragma aux memicmp = "call gpf_memicmp"; + #pragma aux strcmpi = "call gpf_strcmpi"; + #pragma aux stricmp = "call gpf_stricmp"; + #pragma aux strrev = "call gpf_strrev"; + #pragma aux strupr = "call gpf_strupr"; + + #pragma aux strcpy = "call gpf_strcpy"; + #pragma aux strcat = "call gpf_strcat"; + #pragma aux strlen = "call gpf_strlen"; + #pragma aux strncpy = "call gpf_strncpy"; + #pragma aux strncat = "call gpf_strncat"; + #pragma aux strncmp = "call gpf_strncmp"; + #pragma aux strnicmp = "call gpf_strnicmp"; + #pragma aux strdup = "call gpf_strdup"; + #pragma aux strlist = "call gpf_strlist"; + #pragma aux strlwr = "call gpf_strlwr"; + #pragma aux strnset = "call gpf_strnset"; + #pragma aux strset = "call gpf_strset"; + + + #endif // _CLIBSTR_H_ + diff -c /dev/null 'perl-5.7.2/NetWare/CLIBstuf.c' Index: ./NetWare/CLIBstuf.c *** ./NetWare/CLIBstuf.c Thu Jan 1 02:00:00 1970 --- ./NetWare/CLIBstuf.c Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,151 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : CLIBstuf.c + * DESCRIPTION : The purpose of clibstuf is to make sure that Perl, cgi2perl and + * all the perl extension nlm's (*.NLP) use the Novell Netware CLIB versions + * of standard functions. This code loads up a whole bunch of function pointers + * to point at the standard CLIB functions. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #define DEFINE_GPF + #include "string.h" // Our version of string.h will include clibstr.h + #include "stdio.h" // Our version of stdio.h will include clibsdio.h + #include "clibstuf.h" + + #include + #include + #include + + + + void ImportFromCLIB (unsigned int nlmHandle, void** psymbol, char* symbolName) + { + *psymbol = ImportSymbol(nlmHandle, symbolName); + if (*psymbol == NULL) + { + ConsolePrintf("Symbol %s not found, unable to continue\n", symbolName); + exit(1); + } + } + + + void fnInitGpfGlobals(void) + { + unsigned int nlmHandle = GetNLMHandle(); + + ImportFromCLIB(nlmHandle, &gpf___get_stdin, "__get_stdin"); + ImportFromCLIB(nlmHandle, &gpf___get_stdout, "__get_stdout"); + ImportFromCLIB(nlmHandle, &gpf___get_stderr, "__get_stderr"); + ImportFromCLIB(nlmHandle, &gpf_clearerr, "clearerr"); + ImportFromCLIB(nlmHandle, &gpf_fclose, "fclose"); + ImportFromCLIB(nlmHandle, &gpf_feof, "feof"); + ImportFromCLIB(nlmHandle, &gpf_ferror, "ferror"); + ImportFromCLIB(nlmHandle, &gpf_fflush, "fflush"); + ImportFromCLIB(nlmHandle, &gpf_fgetc, "fgetc"); + ImportFromCLIB(nlmHandle, &gpf_fgetpos, "fgetpos"); + ImportFromCLIB(nlmHandle, &gpf_fgets, "fgets"); + ImportFromCLIB(nlmHandle, &gpf_fopen, "fopen"); + ImportFromCLIB(nlmHandle, &gpf_fputc, "fputc"); + ImportFromCLIB(nlmHandle, &gpf_fputs, "fputs"); + ImportFromCLIB(nlmHandle, &gpf_fread, "fread"); + ImportFromCLIB(nlmHandle, &gpf_freopen, "freopen"); + ImportFromCLIB(nlmHandle, &gpf_fscanf, "fscanf"); + ImportFromCLIB(nlmHandle, &gpf_fseek, "fseek"); + ImportFromCLIB(nlmHandle, &gpf_fsetpos, "fsetpos"); + ImportFromCLIB(nlmHandle, &gpf_ftell, "ftell"); + ImportFromCLIB(nlmHandle, &gpf_fwrite, "fwrite"); + ImportFromCLIB(nlmHandle, &gpf_getc, "getc"); + ImportFromCLIB(nlmHandle, &gpf_getchar, "getchar"); + ImportFromCLIB(nlmHandle, &gpf_gets, "gets"); + ImportFromCLIB(nlmHandle, &gpf_perror, "perror"); + ImportFromCLIB(nlmHandle, &gpf_putc, "putc"); + ImportFromCLIB(nlmHandle, &gpf_putchar, "putchar"); + ImportFromCLIB(nlmHandle, &gpf_puts, "puts"); + ImportFromCLIB(nlmHandle, &gpf_rename, "rename"); + ImportFromCLIB(nlmHandle, &gpf_rewind, "rewind"); + ImportFromCLIB(nlmHandle, &gpf_scanf, "scanf"); + ImportFromCLIB(nlmHandle, &gpf_setbuf, "setbuf"); + ImportFromCLIB(nlmHandle, &gpf_setvbuf, "setvbuf"); + ImportFromCLIB(nlmHandle, &gpf_sscanf, "sscanf"); + ImportFromCLIB(nlmHandle, &gpf_tmpfile, "tmpfile"); + ImportFromCLIB(nlmHandle, &gpf_tmpnam, "tmpnam"); + ImportFromCLIB(nlmHandle, &gpf_ungetc, "ungetc"); + ImportFromCLIB(nlmHandle, &gpf_vfscanf, "vfscanf"); + ImportFromCLIB(nlmHandle, &gpf_vscanf, "vscanf"); + ImportFromCLIB(nlmHandle, &gpf_vsscanf, "vsscanf"); + ImportFromCLIB(nlmHandle, &gpf_fdopen, "fdopen"); + ImportFromCLIB(nlmHandle, &gpf_fileno, "fileno"); + ImportFromCLIB(nlmHandle, &gpf_cgets, "cgets"); + ImportFromCLIB(nlmHandle, &gpf_cprintf, "cprintf"); + ImportFromCLIB(nlmHandle, &gpf_cputs, "cputs"); + ImportFromCLIB(nlmHandle, &gpf_cscanf, "cscanf"); + ImportFromCLIB(nlmHandle, &gpf_fcloseall, "fcloseall"); + ImportFromCLIB(nlmHandle, &gpf_fgetchar, "fgetchar"); + ImportFromCLIB(nlmHandle, &gpf_flushall, "flushall"); + ImportFromCLIB(nlmHandle, &gpf_fputchar, "fputchar"); + ImportFromCLIB(nlmHandle, &gpf_getch, "getch"); + ImportFromCLIB(nlmHandle, &gpf_getche, "getche"); + ImportFromCLIB(nlmHandle, &gpf_putch, "putch"); + ImportFromCLIB(nlmHandle, &gpf_ungetch, "ungetch"); + ImportFromCLIB(nlmHandle, &gpf_vcprintf, "vcprintf"); + ImportFromCLIB(nlmHandle, &gpf_vcscanf, "vcscanf"); + + ImportFromCLIB(nlmHandle, &gpf_memchr, "memchr"); + ImportFromCLIB(nlmHandle, &gpf_memcmp, "memcmp"); + ImportFromCLIB(nlmHandle, &gpf_memcpy, "memcpy"); + ImportFromCLIB(nlmHandle, &gpf_memmove, "memmove"); + ImportFromCLIB(nlmHandle, &gpf_memset, "memset"); + ImportFromCLIB(nlmHandle, &gpf_memicmp, "memicmp"); + + ImportFromCLIB(nlmHandle, &gpf_strerror, "strerror"); + ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); + + ImportFromCLIB(nlmHandle, &gpf_strcpy, "strcpy"); + ImportFromCLIB(nlmHandle, &gpf_strcat, "strcat"); + ImportFromCLIB(nlmHandle, &gpf_strchr, "strchr"); + ImportFromCLIB(nlmHandle, &gpf_strstr, "strstr"); + ImportFromCLIB(nlmHandle, &gpf_strcoll, "strcoll"); + ImportFromCLIB(nlmHandle, &gpf_strcspn, "strcspn"); + ImportFromCLIB(nlmHandle, &gpf_strpbrk, "strpbrk"); + ImportFromCLIB(nlmHandle, &gpf_strrchr, "strrchr"); + ImportFromCLIB(nlmHandle, &gpf_strrev, "strrev"); + ImportFromCLIB(nlmHandle, &gpf_strspn, "strspn"); + ImportFromCLIB(nlmHandle, &gpf_strupr, "strupr"); + ImportFromCLIB(nlmHandle, &gpf_strxfrm, "strxfrm"); + ImportFromCLIB(nlmHandle, &gpf_strcmp, "strcmp"); + ImportFromCLIB(nlmHandle, &gpf_stricmp, "stricmp"); + ImportFromCLIB(nlmHandle, &gpf_strtok, "strtok"); + ImportFromCLIB(nlmHandle, &gpf_strlen, "strlen"); + ImportFromCLIB(nlmHandle, &gpf_strncpy, "strncpy"); + ImportFromCLIB(nlmHandle, &gpf_strncat, "strncat"); + ImportFromCLIB(nlmHandle, &gpf_strncmp, "strncmp"); + ImportFromCLIB(nlmHandle, &gpf_strcmpi, "strcmpi"); + ImportFromCLIB(nlmHandle, &gpf_strnicmp, "strnicmp"); + ImportFromCLIB(nlmHandle, &gpf_strdup, "strdup"); + ImportFromCLIB(nlmHandle, &gpf_strlist, "strlist"); + ImportFromCLIB(nlmHandle, &gpf_strlwr, "strlwr"); + ImportFromCLIB(nlmHandle, &gpf_strnset, "strnset"); + ImportFromCLIB(nlmHandle, &gpf_strset, "strset"); + ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); + ImportFromCLIB(nlmHandle, &gpf_printf, "printf"); + ImportFromCLIB(nlmHandle, &gpf_fprintf, "fprintf"); + ImportFromCLIB(nlmHandle, &gpf_sprintf, "sprintf"); + ImportFromCLIB(nlmHandle, &gpf_vprintf, "vprintf"); + ImportFromCLIB(nlmHandle, &gpf_vfprintf, "vfprintf"); + ImportFromCLIB(nlmHandle, &gpf_vsprintf, "vsprintf"); + + } + diff -c /dev/null 'perl-5.7.2/NetWare/CLIBstuf.h' Index: ./NetWare/CLIBstuf.h *** ./NetWare/CLIBstuf.h Thu Jan 1 02:00:00 1970 --- ./NetWare/CLIBstuf.h Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,40 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : CLIBstuf.h + * DESCRIPTION : The purpose of clibstuf is to make sure that Perl, cgi2perl and + * all the perl extension nlm's (*.NLP) use the Novell Netware CLIB versions + * of standard functions. This code loads up a whole bunch of function pointers + * to point at the standard CLIB functions. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #ifndef __CLIBstuf_H__ + #define __CLIBstuf_H__ + + + #ifdef __cplusplus + extern "C" + { + #endif + + void fnInitGpfGlobals(void); + + #ifdef __cplusplus + } + #endif + + + #endif // __CLIBstuf_H__ + diff -c /dev/null 'perl-5.7.2/NetWare/Main.c' Index: ./NetWare/Main.c *** ./NetWare/Main.c Thu Jan 1 02:00:00 1970 --- ./NetWare/Main.c Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,182 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : Main.c + * DESCRIPTION : The purpose of clibstuf is to make sure that Perl, cgi2perl and + * all the perl extension nlm's (*.NLP) use the Novell Netware CLIB versions + * of standard functions. This code loads up a whole bunch of function pointers + * to point at the standard CLIB functions. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #define DEFINE_GPF + + #include + #include + #include + + #include "string.h" // Our version of string.h will include clibstr.h + #include "stdio.h" // Our version of stdio.h will include clibsdio.h + #include "clibstuf.h" + #include "clibstuf.h" + + #ifdef MPK_ON + #include + #include + #endif //MPK_ON + + + + /*============================================================================================ + + Function : main + + Description : This is called as the first step in an extension. + + Parameters : None + + Returns : Nothing. + + ==============================================================================================*/ + + void main(void) + { + fnInitGpfGlobals(); // For importing the CLIB calls in place of the Watcom calls + SynchronizeStart(); // Don't allow anything else to happen until all the symbols are imported + #ifdef MPK_ON + ExitThread(TSR_THREAD, 0); + #else + ExitThread(TSR_THREAD, 0); + #endif + } + + + void ImportFromCLIB (unsigned int nlmHandle, void** psymbol, char* symbolName) + { + *psymbol = ImportSymbol(nlmHandle, symbolName); + if (*psymbol == NULL) + { + ConsolePrintf("Symbol %s not found, unable to continue\n", symbolName); + exit(1); + } + } + + + void fnInitGpfGlobals(void) + { + unsigned int nlmHandle = GetNLMHandle(); + + ImportFromCLIB(nlmHandle, &gpf___get_stdin, "__get_stdin"); + ImportFromCLIB(nlmHandle, &gpf___get_stdout, "__get_stdout"); + ImportFromCLIB(nlmHandle, &gpf___get_stderr, "__get_stderr"); + ImportFromCLIB(nlmHandle, &gpf_clearerr, "clearerr"); + ImportFromCLIB(nlmHandle, &gpf_fclose, "fclose"); + ImportFromCLIB(nlmHandle, &gpf_feof, "feof"); + ImportFromCLIB(nlmHandle, &gpf_ferror, "ferror"); + ImportFromCLIB(nlmHandle, &gpf_fflush, "fflush"); + ImportFromCLIB(nlmHandle, &gpf_fgetc, "fgetc"); + ImportFromCLIB(nlmHandle, &gpf_fgetpos, "fgetpos"); + ImportFromCLIB(nlmHandle, &gpf_fgets, "fgets"); + ImportFromCLIB(nlmHandle, &gpf_fopen, "fopen"); + ImportFromCLIB(nlmHandle, &gpf_fputc, "fputc"); + ImportFromCLIB(nlmHandle, &gpf_fputs, "fputs"); + ImportFromCLIB(nlmHandle, &gpf_fread, "fread"); + ImportFromCLIB(nlmHandle, &gpf_freopen, "freopen"); + ImportFromCLIB(nlmHandle, &gpf_fscanf, "fscanf"); + ImportFromCLIB(nlmHandle, &gpf_fseek, "fseek"); + ImportFromCLIB(nlmHandle, &gpf_fsetpos, "fsetpos"); + ImportFromCLIB(nlmHandle, &gpf_ftell, "ftell"); + ImportFromCLIB(nlmHandle, &gpf_fwrite, "fwrite"); + ImportFromCLIB(nlmHandle, &gpf_getc, "getc"); + ImportFromCLIB(nlmHandle, &gpf_getchar, "getchar"); + ImportFromCLIB(nlmHandle, &gpf_gets, "gets"); + ImportFromCLIB(nlmHandle, &gpf_perror, "perror"); + ImportFromCLIB(nlmHandle, &gpf_putc, "putc"); + ImportFromCLIB(nlmHandle, &gpf_putchar, "putchar"); + ImportFromCLIB(nlmHandle, &gpf_puts, "puts"); + ImportFromCLIB(nlmHandle, &gpf_rename, "rename"); + ImportFromCLIB(nlmHandle, &gpf_rewind, "rewind"); + ImportFromCLIB(nlmHandle, &gpf_scanf, "scanf"); + ImportFromCLIB(nlmHandle, &gpf_setbuf, "setbuf"); + ImportFromCLIB(nlmHandle, &gpf_setvbuf, "setvbuf"); + ImportFromCLIB(nlmHandle, &gpf_sscanf, "sscanf"); + ImportFromCLIB(nlmHandle, &gpf_tmpfile, "tmpfile"); + ImportFromCLIB(nlmHandle, &gpf_tmpnam, "tmpnam"); + ImportFromCLIB(nlmHandle, &gpf_ungetc, "ungetc"); + ImportFromCLIB(nlmHandle, &gpf_vfscanf, "vfscanf"); + ImportFromCLIB(nlmHandle, &gpf_vscanf, "vscanf"); + ImportFromCLIB(nlmHandle, &gpf_vsscanf, "vsscanf"); + ImportFromCLIB(nlmHandle, &gpf_fdopen, "fdopen"); + ImportFromCLIB(nlmHandle, &gpf_fileno, "fileno"); + ImportFromCLIB(nlmHandle, &gpf_cgets, "cgets"); + ImportFromCLIB(nlmHandle, &gpf_cprintf, "cprintf"); + ImportFromCLIB(nlmHandle, &gpf_cputs, "cputs"); + ImportFromCLIB(nlmHandle, &gpf_cscanf, "cscanf"); + ImportFromCLIB(nlmHandle, &gpf_fcloseall, "fcloseall"); + ImportFromCLIB(nlmHandle, &gpf_fgetchar, "fgetchar"); + ImportFromCLIB(nlmHandle, &gpf_flushall, "flushall"); + ImportFromCLIB(nlmHandle, &gpf_fputchar, "fputchar"); + ImportFromCLIB(nlmHandle, &gpf_getch, "getch"); + ImportFromCLIB(nlmHandle, &gpf_getche, "getche"); + ImportFromCLIB(nlmHandle, &gpf_putch, "putch"); + ImportFromCLIB(nlmHandle, &gpf_ungetch, "ungetch"); + ImportFromCLIB(nlmHandle, &gpf_vcprintf, "vcprintf"); + ImportFromCLIB(nlmHandle, &gpf_vcscanf, "vcscanf"); + + ImportFromCLIB(nlmHandle, &gpf_memchr, "memchr"); + ImportFromCLIB(nlmHandle, &gpf_memcmp, "memcmp"); + ImportFromCLIB(nlmHandle, &gpf_memcpy, "memcpy"); + ImportFromCLIB(nlmHandle, &gpf_memmove, "memmove"); + ImportFromCLIB(nlmHandle, &gpf_memset, "memset"); + ImportFromCLIB(nlmHandle, &gpf_memicmp, "memicmp"); + + ImportFromCLIB(nlmHandle, &gpf_strerror, "strerror"); + ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); + + ImportFromCLIB(nlmHandle, &gpf_strcpy, "strcpy"); + ImportFromCLIB(nlmHandle, &gpf_strcat, "strcat"); + ImportFromCLIB(nlmHandle, &gpf_strchr, "strchr"); + ImportFromCLIB(nlmHandle, &gpf_strstr, "strstr"); + ImportFromCLIB(nlmHandle, &gpf_strcoll, "strcoll"); + ImportFromCLIB(nlmHandle, &gpf_strcspn, "strcspn"); + ImportFromCLIB(nlmHandle, &gpf_strpbrk, "strpbrk"); + ImportFromCLIB(nlmHandle, &gpf_strrchr, "strrchr"); + ImportFromCLIB(nlmHandle, &gpf_strrev, "strrev"); + ImportFromCLIB(nlmHandle, &gpf_strspn, "strspn"); + ImportFromCLIB(nlmHandle, &gpf_strupr, "strupr"); + ImportFromCLIB(nlmHandle, &gpf_strxfrm, "strxfrm"); + ImportFromCLIB(nlmHandle, &gpf_strcmp, "strcmp"); + ImportFromCLIB(nlmHandle, &gpf_stricmp, "stricmp"); + ImportFromCLIB(nlmHandle, &gpf_strtok, "strtok"); + ImportFromCLIB(nlmHandle, &gpf_strlen, "strlen"); + ImportFromCLIB(nlmHandle, &gpf_strncpy, "strncpy"); + ImportFromCLIB(nlmHandle, &gpf_strncat, "strncat"); + ImportFromCLIB(nlmHandle, &gpf_strncmp, "strncmp"); + ImportFromCLIB(nlmHandle, &gpf_strcmpi, "strcmpi"); + ImportFromCLIB(nlmHandle, &gpf_strnicmp, "strnicmp"); + ImportFromCLIB(nlmHandle, &gpf_strdup, "strdup"); + ImportFromCLIB(nlmHandle, &gpf_strlist, "strlist"); + ImportFromCLIB(nlmHandle, &gpf_strlwr, "strlwr"); + ImportFromCLIB(nlmHandle, &gpf_strnset, "strnset"); + ImportFromCLIB(nlmHandle, &gpf_strset, "strset"); + ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); + ImportFromCLIB(nlmHandle, &gpf_printf, "printf"); + ImportFromCLIB(nlmHandle, &gpf_fprintf, "fprintf"); + ImportFromCLIB(nlmHandle, &gpf_sprintf, "sprintf"); + ImportFromCLIB(nlmHandle, &gpf_vprintf, "vprintf"); + ImportFromCLIB(nlmHandle, &gpf_vfprintf, "vfprintf"); + ImportFromCLIB(nlmHandle, &gpf_vsprintf, "vsprintf"); + + } + diff -c /dev/null 'perl-5.7.2/NetWare/Makefile' Index: ./NetWare/Makefile *** ./NetWare/Makefile Thu Jan 1 02:00:00 1970 --- ./NetWare/Makefile Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,1525 ---- + ## + ## Makefile to build Perl on NetWare using Microsoft NMAKE and Watcom tools + ## + ## This will build perl.nlm, perl.lib and extensions called NLPs + ## + + ## + ## Please read README.netware before starting + ## + + ## + ## Build configuration. Edit the values below to suit your needs. + ## + + ## This file is created by using the makefile that creates Windows Perl as the reference + ## Author: sgp + ## Date Created: 13th July 2000 + ## Date Modified: 2nd July 2001 + + # Name of the NLM + NLM_NAME = perl.nlm + NLM_NAME8 = Perl + + MAKE_ACTION = Build + + # Flags + DBG_FLAG = -DDEBUGON + + NW_FLAGS = -DNETWARE -DNLM_PLATFORM -DNETDB_USE_INTERNET + + REL_DIR = Release + DEB_DIR = Debug + + !ifndef MAKE_TYPE + #MAKE_TYPE = Release + !message "Run bat\buildtype.bat to set the build type before continuing.\n" + !error + !endif #!ifndef MAKE_TYPE + + !ifdef USE_MPK + MPKFLAGS = -DMPK_ON -DIAPX386 + MPKMESSAGE = MPK Build... + XDCTOOL = mpkxdc + !ifndef MPKBASE + #MPKBASE = p:\mpk + !message "Run bat\setnwbld.bat to set the NetWare MPK SDK before continuing.\n" + !error + !endif #ifndef MPKBASE + NLM_INCLUDE_MP = $(MPKBASE)\include + MPKTOOL = $(MPKBASE)\$(XDCTOOL) + !else + MPKMESSAGE = Non MPK Build... + NLM_INCLUDE_MP = + MPKTOOL = + !endif #ifdef USE_MPK + + !ifndef NLMSDKBASE + #NLMSDKBASE = P:\ndk\nwsdk + !message "Run bat\setnwbld.bat to set the NetWare SDK before continuing.\n" + !error + !endif #ifndef NLMSDKBASE + NLMIMPORTS = $(NLMSDKBASE)\imports + + !ifdef WATCOM + C_COMPILER = wcc386 + CPP_COMPILER = wpp386 + NLM_LINK = wlink + NLM_LIB = lib386 + TOOL_HEADERS = $(WATCOM)\H;$(WATCOM)\H\NT + TOOL_PATH = $(WATCOM)\BINNT;$(WATCOM)\BINW + CCFLAGS = /zp1 /5s /w1 /zq /ms /otexanih /fpi + COMPILER_FLAG = -DWATCOM + ERROR_FLAG = -Fr + !if "$(MAKE_TYPE)"=="Debug" + BLDDIR = $(DEB_DIR) + BLDMESG = Debug version, + !ifdef USE_D2 + BS_CFLAGS = /od /d2 /en /st /hc -DDEBUGGING -DUSE_D2 $(DBG_FLAG) + BLDMESG = $(BLDMESG) Using /d2 option + !else + BS_CFLAGS = /od /d1 /en /st /hc -DDEBUGGING $(DBG_FLAG) + BLDMESG = $(BLDMESG) Using /d1 option + !endif #!ifdef USE_D2 + ! else + BLDDIR = $(REL_DIR) + BLDMESG = Release version + BS_CFLAGS = + !endif #if "$(MAKE_TYPE)"=="Debug" + !else #ifdef WATCOM + !ifdef CODEWARRIOR + # Here comes the CW tools - TO BE FILLED TO BUILD WITH CW - + C_COMPILER = + CPP_COMPILER = + NLM_LINK = + NLM_LIB = + TOOL_HEADERS = + TOOL_PATH = + CCFLAGS = + COMPILER_FLAG = + ERROR_FLAG = + # Debug flags comes here - Not mandatory - required only for debug build + !if "$(MAKE_TYPE)"=="Debug" + BLDDIR = $(DEB_DIR) + BLDMESG = Debug version, + !ifdef USE_D2 + BS_CFLAGS = + BLDMESG = $(BLDMESG) Using /d2 option + !else + BS_CFLAGS = + BLDMESG = $(BLDMESG) Using /d1 option + !endif #!ifdef USE_D2 + ! else + BLDDIR = $(REL_DIR) + BLDMESG = Release version + BS_CFLAGS = + !endif #if "$(MAKE_TYPE)"=="Debug" + !else #!ifdef CODEWARRIOR + !message "Tools base directory is not defined. Run bat\setnwbld.bat before proceeding" + !error + Run bat\setnwbld.bat + !endif #!ifdef CODEWARRIOR + !endif #ifdef WATCOM + + ADD_LOCDEFS = -DPERL_CORE + + NLM_INCLUDE = -I$(NLMSDKBASE)\include + NLM_INCLUDE_NLM = -I$(NLMSDKBASE)\include\nlm + NLM_INCLUDE_NLM_SYS = -I$(NLMSDKBASE)\include\nlm\sys + INCLUDE_NW = -I.\include + INC_PREV = -I.. + INC_THIS = -I.\ + + NLM_INCLUDE_PATH = $(NLMSDKBASE)\include\nlm;$(NLMSDKBASE)\include;$(NLMSDKBASE)\include\nlm\sys;$(NLM_INCLUDE_MP);$(TOOL_HEADERS) + + INCLUDE = $(NLM_INCLUDE_PATH) + + PATH = $(PATH);$(TOOL_PATH) + + NLM_INCLUDES = -I$(COREDIR) $(INCLUDE_NW) $(INC_THIS) $(INC_PREV) + + COMPLER_FLAGS = $(CCFLAGS) $(BS_CFLAGS) $(ADD_BUILDOPT) $(NW_FLAGS) $(COMPILER_FLAG) $(MPKFLAGS) + + # Source file list + NW_H_FILES = \ + .\iperlhost.h \ + .\interface.h \ + .\netware.h \ + .\nw5iop.h \ + .\nw5sck.h \ + .\nwpipe.h \ + .\nwplglob.h \ + .\nwtinfo.h \ + .\nwutil.h \ + .\nwperlsys.h \ + + NW_HOST_H_FILES = \ + .\iperlhost.h \ + .\interface.h \ + .\netware.h \ + .\nw5sck.h \ + .\nwperlsys.h \ + + CLIB_H_FILES = \ + .\clibsdio.h \ + .\clibstr.h \ + .\clibstuf.h \ + .\stdio.h \ + .\string.h \ + + NW_SRC = \ + .\CLIBstuf.c \ + .\nw5.c \ + .\nw5sck.c \ + .\nw5thread.c \ + .\nwmain.c \ + .\nwpipe.c \ + .\nwplglob.c \ + .\nwtinfo.c \ + .\nwutil.c \ + + EXT_MAIN_SRC = \ + .\Main.c \ + + PERL_IO_SRC = \ + ..\perlio.c + + PERL_LIB_SRC = \ + .\interface.c \ + .\nwperlsys.c \ + + + NW_SRC_OBJ = $(NW_SRC:.c=.obj) + NLM_MICROCORE_OBJ = $(MICROCORE_SRC:.c=.obj) + PERL_LIB_OBJ = $(PERL_LIB_SRC:.c=.obj) + PERL_IO_OBJ = $(PERL_IO_SRC:.c=.obj) + NLM_CORE_OBJ = $(NLM_MICROCORE_OBJ) + EXT_MAIN_OBJ = $(EXT_MAIN_SRC:.c=.obj) + + # For dependency checking + # $(BLDDIR) in place of Release or Debug is not working, should look into this - sgp + !if "$(BLDDIR)"=="Release" + NLM_OBJ = $(NLM_CORE_OBJ:..\=.\Release\) + NEWTARE_OBJ_DEP = $(NW_SRC_OBJ:.\=.\Release\) + PERL_LIB_OBJ_DEP = $(PERL_LIB_OBJ:.\=.\Release\) + PERL_IO_OBJ_DEP = $(PERL_IO_OBJ:..\=.\Release\) + !else + NLM_OBJ = $(NLM_CORE_OBJ:..\=.\Debug\) + NEWTARE_OBJ_DEP = $(NW_SRC_OBJ:.\=.\Debug\) + PERL_LIB_OBJ_DEP = $(PERL_LIB_OBJ:.\=.\Debug\) + PERL_IO_OBJ_DEP = $(PERL_IO_OBJ:..\=.\Debug\) + !endif + + # Symbol base_import & version added for NETWARE + NW_CFG_VARS = \ + "INST_DRV=$(INST_DRV)" \ + "INST_TOP=$(INST_TOP)" \ + "INST_VER=$(INST_VER)" \ + "INST_ARCH=$(INST_ARCH)" \ + "INST_NW_TOP1=$(INST_NW_TOP1)" \ + "INST_NW_TOP2=$(INST_NW_TOP2)" \ + "INST_NW_VER=$(INST_NW_VER)" \ + "archname=$(ARCHNAME)" \ + "cc=$(C_COMPILER)" \ + "ccflags=$(COMPLER_FLAGS)" \ + "cf_email=$(EMAIL)" \ + "d_crypt=$(D_CRYPT)" \ + "d_mymalloc=$(PERL_MALLOC)" \ + # "libs=$(LIBFILES)" \ + "incpath=$(NLM_INCLUDE_PATH)" \ + "libperl=$(PERLIMPLIB:..\=)" \ + "libpth=$(LIBPATH)" \ + # "libc=$(LIBC)" \ + "make=nmake" \ + "static_ext=$(STATIC_EXT)" \ + "dynamic_ext=$(DYNAMIC_EXT)" \ + "nonxs_ext=$(NONXS_EXT)" \ + "use5005threads=$(USE_5005THREADS)" \ + "useithreads=$(USE_ITHREADS)" \ + "usethreads=$(USE_5005THREADS)" \ + "usemultiplicity=$(USE_MULTI)" \ + "ld=$(NLM_LINK)" \ + "base_import=$(BASE_IMPORT_FILES)" \ + "LINK_FLAGS=$(LINK_FLAGS:"=\")" \ + "optimize=" \ + "d_times=define" \ + "d_stdio_cnt_lval=undef" \ + "d_stdio_ptr_lval=undef" \ + "d_stdiobase=undef" \ + "d_stdstdio=undef" \ + "d_times=undef" \ + "direntrytype=DIR" \ + "nlm_version=$(NLM_VERSION)" \ + "d_archname=NetWare" \ + "mpktool=$(MPKTOOL) $(XDCFLAGS)" \ + "toolpath=$(TOOL_PATH)" + + + NW_CFGSH_TMPL = config.wc + NW_CFGH_TMPL = config_H.wc + + SOCKET_NLP = $(AUTODIR)\Socket\Socket.nlp + FCNTL_NLP = $(AUTODIR)\Fcntl\Fcntl.nlp + IO_NLP = $(AUTODIR)\IO\IO.nlp + OPCODE_NLP = $(AUTODIR)\Opcode\Opcode.nlp + SDBM_FILE_NLP = $(AUTODIR)\SDBM_File\SDBM_File.nlp + POSIX_NLP = $(AUTODIR)\POSIX\POSIX.nlp + ATTRS_NLP = $(AUTODIR)\attrs\attrs.nlp + THREAD_NLP = $(AUTODIR)\Thread\Thread.nlp + B_NLP = $(AUTODIR)\B\B.nlp + DUMPER_NLP = $(AUTODIR)\Data\Dumper\Dumper.nlp + PEEK_NLP = $(AUTODIR)\Devel\Peek\Peek.nlp + RE_NLP = $(AUTODIR)\re\re.nlp + BYTELOADER_NLP = $(AUTODIR)\ByteLoader\ByteLoader.nlp + DPROF_NLP = $(AUTODIR)\Devel\DProf\DProf.nlp + GLOB_NLP = $(AUTODIR)\File\Glob\Glob.nlp + CWD_NLP = $(AUTODIR)\Cwd\Cwd.nlp + STORABLE_NLP = $(AUTODIR)\Storable\Storable.nlp + LISTUTIL_NLP = $(AUTODIR)\List\Util\Util.nlp + MIMEBASE64_NLP = $(AUTODIR)\MIME\Base64\Base64.nlp + XSTYPEMAP_NLP = $(AUTODIR)\XS\Typemap\Typemap.nlp + + EXTENSION_NLP = \ + $(FCNTL_NLP) \ + $(BYTELOADER_NLP) \ + $(IO_NLP) \ + $(SOCKET_NLP) \ + $(OPCODE_NLP) \ + $(B_NLP) \ + $(ATTRS_NLP) \ + $(SDBM_FILE_NLP) \ + $(POSIX_NLP) \ + $(THREAD_NLP) \ + $(DUMPER_NLP) \ + $(GLOB_NLP) \ + $(PEEK_NLP) \ + $(RE_NLP) \ + $(DPROF_NLP) \ + $(STORABLE_NLP) \ + $(LISTUTIL_NLP) \ + $(MIMEBASE64_NLP) \ + $(XSTYPEMAP_NLP) \ + # $(CWD_NLP) \ + # cwd.pm needs to be modifed for NetWare. + + # Begin - Following is required to build NetWare specific extensions Perl2UCS & CGI2Perl + + PERL2UCS = $(EXTDIR)\Perl2UCS\Perl2UCS + CGI2PERL = CGI2Perl\CGI2Perl + + PERL2UCS_NLP = $(AUTODIR)\Perl2UCS\Perl2UCS.nlp + CGI2PERL_NLP = \CGI2Perl\CGI2Perl.nlp + + NETWARE_EXTNS = \ + $(PERL2UCS_NLP) \ + $(CGI2PERL_NLP) + + # End + + ECHO_SRC = TestNLM\echo\echo.c + TYPE_SRC = TestNLM\type\type.c + ECHO_SRC_OBJ = $(ECHO_SRC:.c=.obj) + TYPE_SRC_OBJ = $(TYPE_SRC:.c=.obj) + ECHO_NLM = TestNLM\echo\echo.nlm + TYPE_NLM = TestNLM\type\type.nlm + + TEST_NLMS = \ + $(ECHO_NLM) \ + $(TYPE_NLM) \ + + ERRNO_PM_NW = $(LIBDIR)\Errno.pm + + EXTENSION_NPM = \ + $(ERRNO_PM_NW) \ + + + !ifndef SCREEN + SCREEN = 'none' + !endif + + !ifndef NLM_DESCRIPTION + NLM_DESCRIPTION = $(NLM_NAME8) for Netware + !endif + + !ifndef NLM_VERSION + NLM_VERSION = 5.72.0 + !endif + + !ifndef NLM_EXT + NLM_EXT = NLM + !endif + + !ifndef BUILT + BUILT = $(BLDDIR)\$(NLM_NAME8).$(NLM_EXT) + !endif + + !ifndef BASE_IMPORT_FILES + BASE_IMPORT_FILES = Import @$(NLMIMPORTS)\clib.imp, @$(NLMIMPORTS)\nlmlib.imp, @$(NLMIMPORTS)\threads.imp, @$(NLMIMPORTS)\nit.imp, @$(NLMIMPORTS)\socklib.imp, @$(NLMIMPORTS)\fpsm.imp, @$(NLMIMPORTS)\lib0.imp + !endif + + !ifdef USE_MPK + BASE_IMPORT_FILES = $(BASE_IMPORT_FILES), @$(MPKBASE)\import\mpkorg.imp + !endif + + !ifndef BASE_IMPORT_FNS + BASE_IMPORT_FNS = Import ImportSymbol, GetSystemConsoleScreen, LoadModule + !endif + + !ifdef WATCOM + NWLIBPATH = $(WATCOM)\lib386\netware + LIBPATH386 = $(WATCOM)\lib386 + LIBPATH = $(NWLIBPATH);$(LIBPATH386) + !else #!ifdef WATCOM + !ifdef CODEWARRIOR + NWLIBPATH = + LIBPATH386 = + LIBPATH = + !else #!ifdef CODEWARRIOR + !error Please define the tools base directory before proceeding + !endif #!ifdef CODEWARRIOR + !endif #!ifdef WATCOM + + !ifndef BASE_LIBRARIES + !ifdef WATCOM + BASE_LIBRARIES = Library plib3s.lib,math3s.lib,clib3s.lib + !else + !ifdef CODEWARRIOR + BASE_LIBRARIES = + !endif #!ifdef CODEWARRIOR + !endif #!ifdef WATCOM + !endif #!ifndef BASE_LIBRARIES + + COPYRIGHT = Copyright 2001 by Novell, Inc. All rights reserved. + + EXPORTS = Export @perl.imp + + # + # Set these to wherever you want "nmake install" to put your + # newly built perl. + # + INST_DRV = c: + INST_TOP = $(INST_DRV)\perl + + INST_NW_DRV = i: + INST_NW_VOL = sys: + INST_NW_TOP1 = $(INST_NW_VOL)\perl + INST_NW_TOP2 = $(INST_NW_DRV)\perl + #INST_NW_VER = \5.6.1 + + # + # Comment this out if you DON'T want your perl installation to be versioned. + # This means that the new installation will overwrite any files from the + # old installation at the same INST_TOP location. Leaving it enabled is + # the safest route, as perl adds the extra version directory to all the + # locations it installs files to. If you disable it, an alternative + # versioned installation can be obtained by setting INST_TOP above to a + # path that includes an arbitrary version string. + # + INST_VER = \5.7.2 + + # + # Comment this out if you DON'T want your perl installation to have + # architecture specific components. This means that architecture- + # specific files will be installed along with the architecture-neutral + # files. Leaving it enabled is safer and more flexible, in case you + # want to build multiple flavors of perl and install them together in + # the same location. Commenting it out gives you a simpler + # installation that is easier to understand for beginners. + # + INST_ARCH = \$(ARCHNAME) + + # + # uncomment to enable multiple interpreters. This is need for fork() + # emulation. + # + USE_MULTI = define + + # + # Beginnings of interpreter cloning/threads; still very incomplete. + # This should be enabled to get the fork() emulation. This needs + # USE_MULTI as well. + # + USE_ITHREADS = define + + # + # uncomment to enable the implicit "host" layer for all system calls + # made by perl. This needs USE_MULTI above. This is also needed to + # get fork(). + # + USE_IMP_SYS = define + + # uncomment this to enable the experimental PerlIO I/O subsystem + # else USE_STDIO will be defined. + #USE_PERLIO = define + #USE_STDIO = define + + # + # WARNING! This option is deprecated and will eventually go away (enable + # USE_ITHREADS instead). + # + # uncomment to enable threads-capabilities. This is incompatible with + # USE_ITHREADS, and is only here for people who may have come to rely + # on the experimental Thread support that was in 5.005. + # + #USE_5005THREADS= define + + # + # WARNING! This option is deprecated and will eventually go away (enable + # USE_MULTI instead). + # + # uncomment next line if you want to use the PERL_OBJECT build option. + # DO NOT ENABLE unless you have legacy code that relies on the C++ + # CPerlObj class that was available in 5.005. This cannot be enabled + # if you ask for USE_5005THREADS above. + # + #USE_OBJECT = define + + # For now let this be here + # + #CRYPT_SRC = fcrypt.c + + # For now let this be here + # + #CRYPT_LIB = fcrypt.lib + + # + # set this if you wish to use perl's malloc + # WARNING: Turning this on/off WILL break binary compatibility with extensions + # you may have compiled with/without it. Be prepared to recompile all + # extensions if you change the default. Currently, this cannot be enabled + # if you ask for USE_IMP_SYS above. + # + #PERL_MALLOC = define + + # + # set this to your email address (perl will guess a value from + # from your loginname and your hostname, which may not be right) + # + #EMAIL = + + ## + ## Build configuration ends. + ## + + ##################### CHANGE THESE ONLY IF YOU MUST ##################### + + !IF "$(CRYPT_SRC)$(CRYPT_LIB)" == "" + D_CRYPT = undef + !ELSE + D_CRYPT = define + CRYPT_FLAG = -DHAVE_DES_FCRYPT + !ENDIF + + !IF "$(USE_OBJECT)" == "define" + PERL_MALLOC = undef + USE_5005THREADS = undef + USE_MULTI = undef + USE_IMP_SYS = define + !ENDIF + + !IF "$(PERL_MALLOC)" == "" + PERL_MALLOC = undef + !ENDIF + + !IF "$(USE_5005THREADS)" == "" + USE_5005THREADS = undef + !ENDIF + + !IF "$(USE_5005THREADS)" == "define" + USE_ITHREADS = undef + !ENDIF + + !IF "$(USE_IMP_SYS)" == "define" + PERL_MALLOC = undef + !ENDIF + + !IF "$(USE_MULTI)" == "" + USE_MULTI = undef + !ENDIF + + !IF "$(USE_OBJECT)" == "" + USE_OBJECT = undef + !ENDIF + + !IF "$(USE_ITHREADS)" == "" + USE_ITHREADS = undef + !ENDIF + + !IF "$(USE_IMP_SYS)" == "" + USE_IMP_SYS = undef + !ENDIF + + !IF "$(USE_PERLCRT)" == "" + USE_PERLCRT = undef + !ENDIF + + !IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" == "defineundefundefundef" + USE_MULTI = define + !ENDIF + + !IF "$(USE_ITHREADS)$(USE_MULTI)$(USE_OBJECT)" == "defineundefundef" + USE_MULTI = define + USE_5005THREADS = undef + !ENDIF + + !IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef" + BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT + !ENDIF + + !IF "$(USE_IMP_SYS)" != "undef" + BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS + !ENDIF + + !IF "$(PROCESSOR_ARCHITECTURE)" == "" + PROCESSOR_ARCHITECTURE = x86 + !ENDIF + + !IF "$(USE_OBJECT)" == "define" + ARCHNAME = NetWare-$(PROCESSOR_ARCHITECTURE)-object + !ELSE + !IF "$(USE_5005THREADS)" == "define" + ARCHNAME = NetWare-$(PROCESSOR_ARCHITECTURE)-thread + !ELSE + !IF "$(USE_MULTI)" == "define" + ARCHNAME = NetWare-$(PROCESSOR_ARCHITECTURE)-multi + !ELSE + ARCHNAME = NetWare-$(PROCESSOR_ARCHITECTURE) + !ENDIF + !ENDIF + !ENDIF + + !IF "$(USE_MULTI)$(USE_5005THREADS)$(USE_OBJECT)" != "undefundefundef" + ADD_BUILDOPT = $(ADD_BUILDOPT) -DPERL_IMPLICIT_CONTEXT + !ENDIF + + !IF "$(USE_IMP_SYS)" != "undef" + ADD_BUILDOPT = $(ADD_BUILDOPT) -DPERL_IMPLICIT_SYS + !ENDIF + + !IF "$(USE_ITHREADS)" == "define" + ARCHNAME = $(ARCHNAME)-thread + !ENDIF + + !IF "$(USE_PERLIO)" == "define" + USE_STDIO = undef + ADD_BUILDOPT = $(ADD_BUILDOPT) -DUSE_PERLIO + ARCHNAME = $(ARCHNAME)-perlio + !ELSE + #USE_STDIO = define + #ADD_BUILDOPT = $(ADD_BUILDOPT) -DUSE_STDIO + !ENDIF + + ARCHDIR = ..\lib\$(ARCHNAME) + COREDIR = ..\lib\CORE + AUTODIR = ..\lib\auto + LIBDIR = ..\lib + EXTDIR = ..\ext + PODDIR = ..\pod + EXTUTILSDIR = $(LIBDIR)\ExtUtils + + # + INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin + INST_BIN = $(INST_SCRIPT)$(INST_ARCH) + INST_LIB = $(INST_TOP)$(INST_VER)\lib + INST_ARCHLIB = $(INST_LIB)$(INST_ARCH) + INST_COREDIR = $(INST_ARCHLIB)\CORE + INST_POD = $(INST_LIB)\pod + INST_HTML = $(INST_POD)\html + + # + # Options + # + + !IF "$(USE_OBJECT)" == "define" + OPTIMIZE = $(OPTIMIZE) $(CXX_FLAG) + BUILDOPT = $(BUILDOPT) -DPERL_OBJECT + !ENDIF + + OBJOUT_FLAG = -Fo + EXEOUT_FLAG = -Fe + + + #################### do not edit below this line ####################### + ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## + + o = .obj + + # + # Rules + # + + .SUFFIXES : .c $(o) .nlm .lib .nlp + + + # + # various targets + PERLIMPLIB = ..\perl.lib + + MINIPERL = ..\miniperl.exe + CONFIGPM = ..\lib\Config.pm + MINIMOD = ..\lib\ExtUtils\Miniperl.pm + X2P = ..\x2p\a2p.nlm + + PL2BAT = ..\win32\bin\pl2bat.pl + + UTILS = \ + ..\utils\h2ph \ + ..\utils\splain \ + ..\utils\dprofpp \ + ..\utils\perlbug \ + ..\utils\pl2pm \ + ..\utils\c2ph \ + ..\utils\h2xs \ + ..\utils\perldoc \ + ..\utils\perlcc \ + ..\pod\checkpods \ + ..\pod\pod2html \ + ..\pod\pod2latex \ + ..\pod\pod2man \ + ..\pod\pod2text \ + ..\pod\pod2usage \ + ..\pod\podchecker \ + ..\pod\podselect \ + ..\x2p\find2perl \ + ..\x2p\s2p + + MAKE = nmake -nologo + + XCOPY = xcopy /f /r /i /d + RCOPY = xcopy /f /r /i /e /d + NOOP = @echo + NULL = + + # + # filenames given to xsubpp must have forward slashes (since it puts + # full pathnames in #line strings) + XSUBPP = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \ + -C++ -prototypes + + MICROCORE_SRC = \ + ..\av.c \ + ..\deb.c \ + ..\doio.c \ + ..\doop.c \ + ..\dump.c \ + ..\globals.c \ + ..\gv.c \ + ..\hv.c \ + ..\locale.c \ + ..\mg.c \ + ..\numeric.c \ + ..\op.c \ + ..\perl.c \ + ..\perlapi.c \ + ..\perly.c \ + ..\pp.c \ + ..\pp_ctl.c \ + ..\pp_hot.c \ + ..\pp_pack.c \ + ..\pp_sys.c \ + ..\regcomp.c \ + ..\regexec.c \ + ..\run.c \ + ..\scope.c \ + ..\sv.c \ + ..\taint.c \ + ..\toke.c \ + ..\universal.c \ + ..\utf8.c \ + ..\util.c \ + ..\xsutils.c + + #EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c + + !IF "$(PERL_MALLOC)" == "define" + EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c + !ENDIF + + #!IF "$(USE_OBJECT)" != "define" + #EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c + #!ENDIF + + !IF "$(CRYPT_SRC)" != "" + NW_SRC = $(NW_SRC) .\$(CRYPT_SRC) + !ENDIF + + DLL_SRC = $(DYNALOADER).c + + X2P_SRC = \ + ..\x2p\a2p.c \ + ..\x2p\hash.c \ + ..\x2p\str.c \ + ..\x2p\util.c \ + ..\x2p\walk.c + + CORE_NOCFG_H = \ + ..\av.h \ + ..\cop.h \ + ..\cv.h \ + ..\dosish.h \ + ..\embed.h \ + ..\form.h \ + ..\gv.h \ + ..\handy.h \ + ..\hv.h \ + ..\iperlsys.h \ + ..\mg.h \ + ..\nostdio.h \ + ..\op.h \ + ..\opcode.h \ + ..\perl.h \ + ..\perlapi.h \ + ..\perlsdio.h \ + ..\perlsfio.h \ + ..\perly.h \ + ..\pp.h \ + ..\proto.h \ + ..\regexp.h \ + ..\scope.h \ + ..\sv.h \ + ..\thread.h \ + ..\unixish.h \ + ..\utf8.h \ + ..\util.h \ + ..\warnings.h \ + ..\XSUB.h \ + ..\EXTERN.h \ + ..\perlvars.h \ + ..\intrpvar.h \ + ..\thrdvar.h \ + + CORE_H = $(CORE_NOCFG_H) .\config.h + + DLL_OBJ = $(DLL_SRC:.c=.obj) + X2P_OBJ = $(X2P_SRC:.c=.obj) + + DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \ + Data/Dumper Devel/Peek ByteLoader Devel/DProf File/Glob \ + Storable/Storable List/Util MIME/Base64/Base64 XS/Typemap/Typemap + + STATIC_EXT = DynaLoader + NONXS_EXT = Errno + + DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader + SOCKET = $(EXTDIR)\Socket\Socket + FCNTL = $(EXTDIR)\Fcntl\Fcntl + OPCODE = $(EXTDIR)\Opcode\Opcode + SDBM_FILE = $(EXTDIR)\SDBM_File\SDBM_File + IO = $(EXTDIR)\IO\IO + POSIX = $(EXTDIR)\POSIX\POSIX + ATTRS = $(EXTDIR)\attrs\attrs + THREAD = $(EXTDIR)\Thread\Thread + B = $(EXTDIR)\B\B + RE = $(EXTDIR)\re\re + DUMPER = $(EXTDIR)\Data\Dumper\Dumper + ERRNO = $(EXTDIR)\Errno\Errno + PEEK = $(EXTDIR)\Devel\Peek\Peek + BYTELOADER = $(EXTDIR)\ByteLoader\ByteLoader + DPROF = $(EXTDIR)\Devel\DProf\DProf + GLOB = $(EXTDIR)\File\Glob\Glob + CWD = $(EXTDIR)\Cwd\Cwd + STORABLE = $(EXTDIR)\Storable\Storable + LISTUTIL = $(EXTDIR)\List\Util + MIMEBASE64 = $(EXTDIR)\MIME\Base64\Base64 + XSTYPEMAP = $(EXTDIR)\XS\Typemap\Typemap + + EXTENSION_C = \ + $(SOCKET).c \ + $(FCNTL).c \ + $(OPCODE).c \ + $(SDBM_FILE).c \ + $(IO).c \ + $(POSIX).c \ + $(ATTRS).c \ + $(THREAD).c \ + $(RE).c \ + $(DUMPER).c \ + $(PEEK).c \ + $(B).c \ + $(BYTELOADER).c \ + $(DPROF).c \ + $(GLOB).c \ + $(CWD).c \ + $(STORABLE).c \ + $(LISTUTIL).c \ + $(MIMEBASE64).c \ + $(XSTYPEMAP).c \ + + POD2HTML = $(PODDIR)\pod2html + POD2MAN = $(PODDIR)\pod2man + POD2LATEX = $(PODDIR)\pod2latex + POD2TEXT = $(PODDIR)\pod2text + + # + # Top targets + # + + all : .cleanoldfiles .\nwconfig.h $(CONFIGPM) $(NLM_NAME) $(EXTENSION_NLP) $(EXTENSION_NPM) $(TEST_NLMS) $(NETWARE_EXTNS) + + #------------------------------------------------------------ + + ..\config.sh : config.nw5 $(MINIPERL) config_sh.PL + $(MINIPERL) -I..\lib config_sh.PL $(NW_CFG_VARS) config.nw5 > ..\config.sh + + # this target is for when changes to the main config.sh happen + # edit config.{b,v,g,w}c and make this target once for each supported + # compiler (e.g. `dmake CCTYPE=BORLAND regen_config_h`) + regen_config_h: + perl config_sh.PL $(NW_CFG_VARS) $(NW_CFGSH_TMPL) > ..\config.sh + cd .. + -del /f perl.exe + perl configpm + cd netware + -del /f $(NW_CFGH_TMPL) + -mkdir $(COREDIR) + -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)" + rename config.h $(NW_CFGH_TMPL) + + $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl + cd .. && miniperl configpm + if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL) + $(XCOPY) ..\*.h $(COREDIR)\*.* + $(XCOPY) *.h $(COREDIR)\*.* + $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* + if exist include\* $(RCOPY) include $(COREDIR)\*.* + $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \ + || $(MAKE) /$(MAKEFLAGS) $(CONFIGPM) + + $(MINIPERL) : + $(error)Please build $(MINIPERL) before continuing + + $(MINIMOD) : $(MINIPERL) ..\minimod.pl + cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm + + ..\x2p\a2p$(o) : ..\x2p\a2p.c + @echo $(MPKMESSAGE)...$(BLDMESG)...$@ + @$(C_COMPILER) -I..\x2p $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$*.err ..\x2p\a2p.c + + ..\x2p\hash$(o) : ..\x2p\hash.c + @echo $(MPKMESSAGE)...$(BLDMESG)...$@ + @$(C_COMPILER) -I..\x2p $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$*.err ..\x2p\hash.c + + ..\x2p\str$(o) : ..\x2p\str.c + @echo $(MPKMESSAGE)...$(BLDMESG)...$@ + @$(C_COMPILER) -I..\x2p $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$*.err ..\x2p\str.c + + ..\x2p\util$(o) : ..\x2p\util.c + @echo $(MPKMESSAGE)...$(BLDMESG)...$@ + @$(C_COMPILER) -I..\x2p $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$*.err ..\x2p\util.c + + ..\x2p\walk$(o) : ..\x2p\walk.c + @echo $(MPKMESSAGE)...$(BLDMESG)...$@ + @$(C_COMPILER) -I..\x2p $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$*.err ..\x2p\walk.c + + $(X2P) : $(MINIPERL) $(X2P_OBJ) + $(MINIPERL) ..\x2p\find2perl.PL + $(MINIPERL) ..\x2p\s2p.PL + !ifdef USE_XDC + $(MPKTOOL) $(XDCFLAGS) $*.xdc + !endif + !ifdef WATCOM + @$(NLM_LINK) @<<$*.link + Form Novell NLM 'Awk to Perl converter' + Name $(X2P) + Option Quiet + Option Version = $(NLM_VERSION) + Option Copyright '$(COPYRIGHT)' + Option Caseexact + Option Map=$*.map, Verbose, screenname 'System Console' + Option Stack=32k + Option SYMFILE=$*.sym + !ifdef USE_XDC + OPTION XDCDATA=$*.xdc + !endif + Option NoDefaultLibs + $(EXTRA_LINK_OPTION) + !if "$(MAKE_TYPE)"=="Debug" + Debug novell + Debug codeview + !endif + LibPath $(LIBPATH) + $(BASE_LIBRARIES) + Module clib + $(BASE_IMPORT_FNS) + $(BASE_IMPORT_FILES) + $(ADD_IMPORT_FNS) + Import @perl.imp + $(EXPORTS) + File $(X2P_OBJ:.obj=,) .\$(BLDDIR)\clibstuf.obj + <\nul + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : stdio.h + * DESCRIPTION : Generated header file, do not edit. See makefile. + * This header file causes the includer to use clibstuf.h + * The purpose of clibstuf is to make sure that Perl, cgi2perl and + * all the perl extension nlm's (*.NLP) use the Novell Netware CLIB versions + * of standard functions. This code loads up a whole bunch of function pointers + * to point at the standard CLIB functions. + * Author : HYAK + * Date : January 2001. + * + */ + + + #ifndef __Stdio_H__ + #define __Stdio_H__ + + + #include "$(NLMSDKBASE)\INCLUDE\NLM\stdio.h" + #include "clibsdio.h" + + + #endif // __Stdio_H__ + + << + @copy stdio.h $(COREDIR) + + @copy << string.h >\nul + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : string.h + * DESCRIPTION : Generated header file, do not edit. See makefile. + * This header file causes the includer to use clibstuf.h + * The purpose of clibstuf is to make sure that Perl, cgi2perl and + * all the perl extension nlm's (*.NLP) use the Novell Netware CLIB versions + * of standard functions. This code loads up a whole bunch of function pointers + * to point at the standard CLIB functions. + * Author : HYAK + * Date : January 2001. + * + */ + + + #ifndef __String_H__ + #define __String_H__ + + + #include "$(NLMSDKBASE)\INCLUDE\NLM\string.h" + #include "clibstr.h" + + + #endif // __String_H__ + + << + @copy string.h $(COREDIR) + + + $(NLM_NAME): MESSAGE HEADERS $(BLDDIR)\nul $(NLM_OBJ) $(NEWTARE_OBJ_DEP) $(PERL_IO_OBJ_DEP) $(PERL_LIB_OBJ_DEP) $(DLL_OBJ) .XDC $(PERLIMPLIB) $(EXT_MAIN_OBJ) + @echo======= Linking $@ at $(MAKEDIR)\$(BLDDIR) ======= + !ifdef WATCOM + @$(NLM_LINK) @<<$(BLDDIR)\$*.link + Form Novell NLM '$(NLM_DESCRIPTION)' + Name $(BUILT) + Option Quiet + Option Version = $(NLM_VERSION) + Option Copyright '$(COPYRIGHT)' + Option Caseexact + Option Map=$(BLDDIR)\$(NLM_NAME8).map, Verbose, screenname $(SCREEN) + Option Stack=1000 + !ifdef NLM_NAME8 + Option SYMFILE=$(BLDDIR)\$(NLM_NAME8).sym + !ifdef USE_XDC + OPTION XDCDATA=$(BLDDIR)\$(NLM_NAME8).xdc + !endif + !else + Option SYMFILE=$(BLDDIR)\$(NLM_NAME).sym + !ifdef USE_XDC + OPTION XDCDATA=$(BLDDIR)\$(NLM_NAME).xdc + !endif + !endif + Option NoDefaultLibs + $(EXTRA_LINK_OPTION) + !if "$(MAKE_TYPE)"=="Debug" + # Debug all + Debug novell + Debug codeview + !endif + LibPath $(LIBPATH) + $(BASE_LIBRARIES) + Module clib + $(BASE_IMPORT_FNS) + $(BASE_IMPORT_FILES) + $(ADD_IMPORT_FNS) + Import @perl.imp + $(EXPORTS) + File $(NEWTARE_OBJ_DEP:.obj=.obj,) $(NLM_OBJ:.obj=.obj,) $(PERL_IO_OBJ_DEP:.obj=.obj,) $(PERL_LIB_OBJ_DEP:.obj=.obj,) $(DLL_OBJ:.obj=.obj,) + < perllib.def + $(MINIPERL) -w ..\makedef.pl PLATFORM=netware FILETYPE=imp $(BS_CFLAGS) $(DEFINES) $(ADD_BUILDOPT) \ + CCTYPE=$(CCTYPE) > perl.imp + + $(DLL_OBJ) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c + @echo $(MPKMESSAGE)...$(BLDMESG)...$@ + @$(C_COMPILER) @<<$(BLDDIR)\$(*F).options + $(NLM_INCLUDES) -I$(EXTDIR)\DynaLoader\ $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$(BLDDIR)\$(*F).err $(EXTDIR)\DynaLoader\$(*F).c + < $(*B).c + cd ..\..\netware + + $(PERL_LIB_OBJ_DEP) : $(NW_HOST_H_FILES) $(*F).c + @echo $(MPKMESSAGE)...$(BLDMESG)...$@ + @$(CPP_COMPILER) @<<$(BLDDIR)\$(*F).options + -I.. $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$*.err $(*F).c + < ..\config.sh + # @pause + # cd .. + # del config.sh + # rename nwconfig.sh config.sh + # cd netware + + config.nw5 : $(NW_CFGSH_TMPL) + copy $(NW_CFGSH_TMPL) config.nw5 + + $(SOCKET_NLP): $(NLM_NAME) $(SOCKET).xs + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(FCNTL_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(IO_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(OPCODE_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(B_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(DUMPER_NLP): + cd $(EXTDIR)\Data\$(*B) + ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\..\netware + + $(PEEK_NLP): + cd $(EXTDIR)\Devel\$(*B) + ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\..\netware + + $(RE_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(BYTELOADER_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(DPROF_NLP): + cd $(EXTDIR)\Devel\$(*B) + ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\..\netware + + $(GLOB_NLP): + cd $(EXTDIR)\File\$(*B) + ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\..\netware + + $(POSIX_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(THREAD_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(ATTRS_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(SDBM_FILE_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(CWD_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(STORABLE_NLP): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(LISTUTIL_NLP): + cd $(EXTDIR)\List\$(*B) + ..\..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\..\netware + + $(MIMEBASE64_NLP): + cd $(EXTDIR)\Mime\$(*B) + ..\..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\..\netware + + $(XSTYPEMAP_NLP): + cd $(EXTDIR)\XS\$(*B) + ..\..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\..\netware + + $(ERRNO_PM_NW): + cd $(EXTDIR)\$(*B) + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + $(MAKE) + cd ..\..\netware + + $(ECHO_SRC_OBJ): $*.c + @echo $(MPKMESSAGE) $(BLDMESG) $@ + @$(C_COMPILER) @<<$*.options + $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(OBJOUT_FLAG)$@ $(ERROR_FLAG)$*.err $*.c + < + #include + #else + #include + #endif //MPK_ON + + // Number of entries in the hashtable + // + #define NUM_ENTRIES 32 /* 2^5 */ + + + // macro to calculate the hash index for a given Thread ID + // + #define INDEXOF(tid) ((tid) & 0x1f) + + + // Semaphore to control access to global linked list + // + #ifdef MPK_ON + static SEMAPHORE g_tinfoSem = NULL; + static SEMAPHORE g_tCtxSem = NULL; + #else + static LONG g_tinfoSem = 0L; + static LONG g_tCtxSem = 0L; + #endif //MPK_ON + + // Hash table of thread information structures + // + ThreadInfo* g_ThreadInfo[NUM_ENTRIES]; + ThreadContext* g_ThreadCtx; + + + + /*============================================================================================ + + Function : fnTerminateThreadInfo + + Description : This function undoes fnInitializeThreadInfo; call once per NLM instance. + + Parameters : None. + + Returns : Boolean. + + ==============================================================================================*/ + + BOOL fnTerminateThreadInfo(void) + { + int index = 0; + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tinfoSem); + #else + WaitOnLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + for (index = 0; index < NUM_ENTRIES; index++) + { + if (g_ThreadInfo[index] != NULL) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + return FALSE; + } + } + #ifdef MPK_ON + kSemaphoreFree(g_tinfoSem); + g_tinfoSem = NULL; + #else + CloseLocalSemaphore(g_tinfoSem); + g_tinfoSem = 0; + #endif //MPK_ON + } + + return TRUE; + } + + + /*============================================================================================ + + Function : fnInitializeThreadInfo + + Description : Initializes the global ThreadInfo hashtable and semaphore. + Call once per NLM instance + + Parameters : None. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnInitializeThreadInfo(void) + { + int index = 0; + + if (g_tinfoSem) + return; + + #ifdef MPK_ON + g_tinfoSem = kSemaphoreAlloc((BYTE *)"threadInfo", 1); + #else + g_tinfoSem = OpenLocalSemaphore(1); + #endif //MPK_ON + + + for (index = 0; index < NUM_ENTRIES; index++) + g_ThreadInfo[index] = NULL; + + return; + } + + + /*============================================================================================ + + Function : fnRegisterWithThreadTable + + Description : This function registers/adds a new thread with the thread table. + + Parameters : None. + + Returns : Boolean. + + ==============================================================================================*/ + + BOOL fnRegisterWithThreadTable(void) + { + ThreadInfo* tinfo = NULL; + + #ifdef MPK_ON + tinfo = fnAddThreadInfo(labs((int)kCurrentThread())); + #else + tinfo = fnAddThreadInfo(GetThreadID()); + #endif //MPK_ON + + if (!tinfo) + return FALSE; + else + return TRUE; + } + + + /*============================================================================================ + + Function : fnUnregisterWithThreadTable + + Description : This function unregisters/removes a thread from the thread table. + + Parameters : None. + + Returns : Boolean. + + ==============================================================================================*/ + + BOOL fnUnregisterWithThreadTable(void) + { + #ifdef MPK_ON + return fnRemoveThreadInfo(labs((int)kCurrentThread())); + #else + return fnRemoveThreadInfo(GetThreadID()); + #endif //MPK_ON + } + + + /*============================================================================================ + + Function : fnAddThreadInfo + + Description : Adds a new ThreadInfo for the requested thread. + + Parameters : tid (IN) - ID of the thread. + + Returns : Pointer to the ThreadInfo Structure. + + ==============================================================================================*/ + + ThreadInfo* fnAddThreadInfo(int tid) + { + ThreadInfo* tip = NULL; + int index = 0; + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tinfoSem); + #else + WaitOnLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + // Add a new one to the beginning of the hash entry + // + tip = (ThreadInfo *) malloc(sizeof(ThreadInfo)); + if (tip == NULL) + { + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + return NULL; + } + index = INDEXOF(tid); // just take the bottom five bits + tip->next = g_ThreadInfo[index]; + tip->tid = tid; + tip->m_dontTouchHashLists = FALSE; + tip->m_allocList = NULL; + + g_ThreadInfo [index] = tip; + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + return tip; + } + + + /*============================================================================================ + + Function : fnRemoveThreadInfo + + Description : Frees the specified thread info structure and removes it from the + global linked list. + + Parameters : tid (IN) - ID of the thread. + + Returns : Boolean. + + ==============================================================================================*/ + + BOOL fnRemoveThreadInfo(int tid) + { + ThreadInfo* tip = NULL; + ThreadInfo* prevt = NULL; + int index = INDEXOF(tid); // just take the bottom five bits + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tinfoSem); + #else + WaitOnLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) + { + if (tip->tid == tid) + { + if (prevt == NULL) + g_ThreadInfo[index] = tip->next; + else + prevt->next = tip->next; + + free(tip); + tip=NULL; + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + return TRUE; + } + prevt = tip; + } + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + return FALSE; // entry not found + } + + + /*============================================================================================ + + Function : fnGetThreadInfo + + Description : Returns the thread info for the given thread ID or NULL if not successful. + + Parameters : tid (IN) - ID of the thread. + + Returns : Pointer to the ThreadInfo Structure. + + ==============================================================================================*/ + + ThreadInfo* fnGetThreadInfo(int tid) + { + ThreadInfo* tip; + int index = INDEXOF(tid); // just take the bottom five bits + + if (g_tinfoSem) { + #ifdef MPK_ON + kSemaphoreWait(g_tinfoSem); + #else + WaitOnLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + // see if this is already in the table at the index'th offset + // + for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) + { + if (tip->tid == tid) + { + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + return tip; + } + } + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + return NULL; + } + + BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList) + { + ThreadInfo* tip; + int index,tid; + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tinfoSem); + #else + WaitOnLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + #ifdef MPK_ON + tid=index = abs(kCurrentThread()); + #else + tid=index = GetThreadID(); + #endif //MPK_ON + + index = INDEXOF(index); // just take the bottom five bits + + // see if this is already in the table at the index'th offset + // + for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) + { + if (tip->tid == tid) + { + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + tip->m_allocList = addrs; + tip->m_dontTouchHashLists = dontTouchHashList; + return TRUE; + } + } + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + return FALSE; + } + + BOOL fnGetHashListAddrs(void **addrs, BOOL *dontTouchHashList) + { + ThreadInfo* tip; + int index,tid; + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tinfoSem); + #else + WaitOnLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + #ifdef MPK_ON + tid=index = abs(kCurrentThread()); + #else + tid=index = GetThreadID(); + #endif //MPK_ON + + index = INDEXOF(index); // just take the bottom five bits + + // see if this is already in the table at the index'th offset + // + for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) + { + if (tip->tid == tid) + { + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + *addrs = tip->m_allocList; + *dontTouchHashList = tip->m_dontTouchHashLists; + return TRUE; + } + } + + if (g_tinfoSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tinfoSem); + #else + SignalLocalSemaphore(g_tinfoSem); + #endif //MPK_ON + } + + return FALSE; + } + + + /*============================================================================================ + + Function : fnInitializeThreadCtx + + Description : Initialises the thread context. + + Parameters : None. + + Returns : Nothing. + + ==============================================================================================*/ + + long fnInitializeThreadCtx(void) + { + int index = 0; + //long tid; + + if (!g_tCtxSem) { + #ifdef MPK_ON + g_tCtxSem = kSemaphoreAlloc((BYTE *)"threadCtx", 1); + #else + g_tCtxSem = OpenLocalSemaphore(1); + #endif //MPK_ON + + g_ThreadCtx =NULL; + } + + return 0l; + } + + + /*============================================================================================ + + Function : fnAddThreadCtx + + Description : Add a new thread context. + + Parameters : lTLSIndex (IN) - Index + t (IN) - void pointer. + + Returns : Pointer to ThreadContext structure. + + ==============================================================================================*/ + + ThreadContext* fnAddThreadCtx(long lTLSIndex, void *t) + { + ThreadContext* tip = NULL; + ThreadContext* temp = NULL; + + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tCtxSem); + #else + WaitOnLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + + // add a new one to the beginning of the list + // + tip = (ThreadContext *) malloc(sizeof(ThreadContext)); + if (tip == NULL) + { + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tCtxSem); + #else + SignalLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + return NULL; + } + + #ifdef MPK_ON + lTLSIndex = labs(kCurrentThread()); + #else + lTLSIndex = GetThreadID(); + #endif //MPK_ON + + tip->next = NULL; + tip->tid = lTLSIndex; + tip->tInfo = t; + + if(g_ThreadCtx==NULL) { + g_ThreadCtx = tip; + } else { + int count=0; + //Traverse to the end + temp = g_ThreadCtx; + while(temp->next != NULL) + { + temp = temp->next; + count++; + } + temp->next = tip; + } + + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tCtxSem); + #else + SignalLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + return tip; + } + + + /*============================================================================================ + + Function : fnRemoveThreadCtx + + Description : Removes a thread context. + + Parameters : lTLSIndex (IN) - Index + + Returns : Boolean. + + ==============================================================================================*/ + + BOOL fnRemoveThreadCtx(long lTLSIndex) + { + ThreadContext* tip = NULL; + ThreadContext* prevt = NULL; + + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tCtxSem); + #else + WaitOnLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + + #ifdef MPK_ON + lTLSIndex = labs(kCurrentThread()); + #else + lTLSIndex = GetThreadID(); + #endif //MPK_ON + + tip = g_ThreadCtx; + while(tip) { + if (tip->tid == lTLSIndex) { + if (prevt == NULL) + g_ThreadCtx = tip->next; + else + prevt->next = tip->next; + + free(tip); + tip=NULL; + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tCtxSem); + #else + SignalLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + return TRUE; + } + prevt = tip; + tip = tip->next; + } + + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tCtxSem); + #else + SignalLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + + return FALSE; // entry not found + } + + + /*============================================================================================ + + Function : fnGetThreadCtx + + Description : Get a thread context. + + Parameters : lTLSIndex (IN) - Index + + Returns : Nothing. + + ==============================================================================================*/ + + void* fnGetThreadCtx(long lTLSIndex) + { + ThreadContext* tip; + + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreWait(g_tCtxSem); + #else + WaitOnLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + + #ifdef MPK_ON + lTLSIndex = labs(kCurrentThread()); + #else + lTLSIndex = GetThreadID(); + #endif //MPK_ON + + tip = g_ThreadCtx; + while(tip) { + if (tip->tid == lTLSIndex) { + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tCtxSem); + #else + SignalLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + return (tip->tInfo); + } + tip=tip->next; + } + + if (g_tCtxSem) + { + #ifdef MPK_ON + kSemaphoreSignal(g_tCtxSem); + #else + SignalLocalSemaphore(g_tCtxSem); + #endif //MPK_ON + } + + return NULL; + } + diff -c /dev/null 'perl-5.7.2/NetWare/NWUtil.c' Index: ./NetWare/NWUtil.c *** ./NetWare/NWUtil.c Thu Jan 1 02:00:00 1970 --- ./NetWare/NWUtil.c Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,826 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : NWUtil.c + * DESCRIPTION : Utility functions for NetWare implementation of Perl. + * Author : HYAK + * Date : Januray 2001. + * + */ + + + + #include "stdio.h" + #include "string.h" + + #include // For "MAX_DN_BYTES" + #include // For "malloc" and "free" + #include // For "getenv" + #include // For "isspace" + + #include + #include + #include + #include + + #include + #include + + #include "nwutil.h" + + + #define TRUE 1 + #define FALSE 0 + + + /** + Global variables used for better token parsing. When these were absent, + token parsing was not correct when there were more number of arguments passed. + These are used in fnCommandLineParser, fnSkipToken and fnScanToken to get/return + the correct and updated pointer to the command line string. + **/ + char *s1 = NULL; // Used in fnScanToken. + char *s2 = NULL; // Used in fnSkipToken. + + + + + /*============================================================================================ + + Function : fnSkipWhite + + Description : This function skips the white space characters in the given string and + returns the resultant value. + + Parameters : s (IN) - Input string. + + Returns : String. + + ==============================================================================================*/ + + char *fnSkipWhite(char *s) + { + while (isspace(*s)) + s++; + return s; + } + + + + /*============================================================================================ + + Function : fnNwGetEnvironmentStr + + Description : This function returns the NetWare environment string if available, + otherwise returns the supplied default value + + Parameters : name (IN) - To hold the NetWare environment value. + defaultvalue (IN) - Default value. + + + Returns : String. + + ==============================================================================================*/ + + char *fnNwGetEnvironmentStr(char *name, char *defaultvalue) + { + char* ret = getenv(name); + if (ret == NULL) + ret = defaultvalue; + return ret; + } + + + + /*============================================================================================ + + Function : fnCommandLineParser + + Description : This function parses the command line into argc/argv style of + Number of params and array of params. + + Parameters : pclp (IN) - CommandLine structure. + commandLine (IN) - CommandLine String. + preserverQuotes (IN) - Indicates whether to preserve/copy the quotes or not. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnCommandLineParser(PCOMMANDLINEPARSER pclp, char * commandLine, BOOL preserveQuotes) + { + char *buffer = NULL; + + int index = 0; + int do_delete = 1; + int i=0, j=0, k=0; + + + // +1 makes room for the terminating NULL + buffer = (char *) malloc((strlen(commandLine) + 1) * sizeof(char)); + if (buffer == NULL) + { + pclp->m_isValid = FALSE; + return; + } + + if (preserveQuotes) + { + // No I/O redirection nor quote processing if preserveQuotes + + char *s = NULL; + char *sSkippedToken = NULL; + + + strcpy(buffer, commandLine); + s = buffer; + s = fnSkipWhite(s); // Skip white spaces. + + s2 = s; // Update the global pointer. + + + pclp->sSkippedToken = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(pclp->sSkippedToken == NULL) + { + pclp->m_isValid = FALSE; + return; + } + + while (*s && pclp->m_isValid) + { + /**** + // Commented since only one time malloc and free is enough as is done outside this while loop. + // It is not required to do them everytime the execution comes into this while loop. + // Still retained here. Remove this once things are proved to be working fine to a good confident level, + + if(pclp->sSkippedToken) + { + free(pclp->sSkippedToken); + pclp->sSkippedToken = NULL; + } + + if(pclp->sSkippedToken == NULL) + { + pclp->sSkippedToken = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(pclp->sSkippedToken == NULL) + { + pclp->m_isValid = FALSE; + return; + } + } + ****/ + + // Empty the string. + strncpy(pclp->sSkippedToken, "", (MAX_DN_BYTES * sizeof(char))); + + // s is advanced by fnSkipToken + pclp->sSkippedToken = fnSkipToken(s, pclp->sSkippedToken); // Collect the next command-line argument. + + s2 = fnSkipWhite(s2); // s2 is already updated by fnSkipToken. + s = s2; // Update the local pointer too. + + fnAppendArgument(pclp, pclp->sSkippedToken); // Append the argument into an array. + } + + if(pclp->sSkippedToken) + { + free(pclp->sSkippedToken); + pclp->sSkippedToken = NULL; + } + } + else + { + char *s = NULL; + + strcpy(buffer, commandLine); + s = buffer; + s = fnSkipWhite(s); + + s1 = s; // Update the global pointer. + + while (*s && pclp->m_isValid) + { + // s is advanced by fnScanToken + // Check for I/O redirection here, *outside* of + // fnScanToken(), so that quote-protected angle + // brackets do NOT cause redirection. + if (*s == '<') + { + s = fnSkipWhite(s+1); // get stdin redirection + + if(pclp->m_redirInName) + { + free(pclp->m_redirInName); + pclp->m_redirInName = NULL; + } + + if(pclp->m_redirInName == NULL) + { + pclp->m_redirInName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(pclp->m_redirInName == NULL) + { + pclp->m_isValid = FALSE; + return; + } + } + + // Collect the next command-line argument. + pclp->m_redirInName = fnScanToken(s, pclp->m_redirInName); + + s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. + s = s1; // Update the local pointer too. + } + else if (*s == '>') + { + s = fnSkipWhite(s+1); //get stdout redirection + + if(pclp->m_redirOutName) + { + free(pclp->m_redirOutName); + pclp->m_redirOutName = NULL; + } + + if(pclp->m_redirOutName == NULL) + { + pclp->m_redirOutName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(pclp->m_redirOutName == NULL) + { + pclp->m_isValid = FALSE; + return; + } + } + + // Collect the next command-line argument. + pclp->m_redirOutName = fnScanToken(s, pclp->m_redirOutName); + + s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. + s = s1; // Update the local pointer too. + } + else if (*s == '2' && s[1] == '>') + { + s = fnSkipWhite(s+2); // get stderr redirection + + if(pclp->m_redirErrName) + { + free(pclp->m_redirErrName); + pclp->m_redirErrName = NULL; + } + + if(pclp->m_redirErrName == NULL) + { + pclp->m_redirErrName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(pclp->m_redirErrName == NULL) + { + pclp->m_isValid = FALSE; + return; + } + } + + // Collect the next command-line argument. + pclp->m_redirErrName = fnScanToken(s, pclp->m_redirErrName); + + s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. + s = s1; // Update the local pointer too. + } + else if (*s == '&' && s[1] == '>') + { + s = fnSkipWhite(s+2); // get stdout+stderr redirection + + if(pclp->m_redirBothName) + { + free(pclp->m_redirBothName); + pclp->m_redirBothName = NULL; + } + + if(pclp->m_redirBothName == NULL) + { + pclp->m_redirBothName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(pclp->m_redirBothName == NULL) + { + pclp->m_isValid = FALSE; + return; + } + } + + // Collect the next command-line argument. + pclp->m_redirBothName = fnScanToken(s, pclp->m_redirBothName); + + s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. + s = s1; // Update the local pointer too. + } + else + { + if(pclp->nextarg) + { + free(pclp->nextarg); + pclp->nextarg = NULL; + } + + if(pclp->nextarg == NULL) + { + pclp->nextarg = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(pclp->nextarg == NULL) + { + pclp->m_isValid = FALSE; + return; + } + } + + // Collect the next command-line argument. + pclp->nextarg = fnScanToken(s, pclp->nextarg); + + s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. + s = s1; // Update the local pointer too. + + // Append the next command-line argument into an array. + fnAppendArgument(pclp, pclp->nextarg); + } + } + } + + + // The -{ option, the --noscreen option, the --autodestroy option, if present, + // are processed now and removed from the argument vector. + for(index=0; index < pclp->m_argc; ) + { + // "-q" is replaced by "-{", because of clash with GetOpt - sgp - 7th Nov 2000 + // Copied from NDK build - Jan 5th 2001 + if (strncmp(pclp->m_argv[index], (char *)"-{", 2) == 0) + { + // found a -q option; grab the semaphore number + sscanf(pclp->m_argv[index], (char *)"-{%x", &pclp->m_qSemaphore); + fnDeleteArgument(pclp, index); // Delete the argument from the list. + } + else if (strcmp(pclp->m_argv[index], (char *)"--noscreen") == 0) + { + // found a --noscreen option + pclp->m_noScreen = 1; + fnDeleteArgument(pclp, index); + } + else if (strcmp(pclp->m_argv[index], (char *)"--autodestroy") == 0) + { + // found a --autodestroy option - create a screen but close automatically + pclp->m_AutoDestroy = 1; + fnDeleteArgument(pclp, index); + } + else + index++; + } + + // pclp->m_isValid is TRUE if there are more than 2 command line parameters OR + // if there is only one command and if it is the comman PERL. + pclp->m_isValid = ((pclp->m_argc >= 2) || ((pclp->m_argc > 0) && (stricmp(pclp->m_argv[0], LOAD_COMMAND) != 0))); + + if(buffer) + { + free(buffer); + buffer = NULL; + } + + return; + } + + + + /*============================================================================================ + + Function : fnAppendArgument + + Description : This function appends the arguments into a list. + + Parameters : pclp (IN) - CommandLine structure. + new_arg (IN) - The new argument to be appended. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnAppendArgument(PCOMMANDLINEPARSER pclp, char *new_arg) + { + char **new_argv = pclp->new_argv; + + int new_argv_len = pclp->m_argv_len*2; + int i = 0, j = 0; + + + // Lengthen the argument vector if there's not room for another. + // Testing for 'm_argc+2' rather than 'm_argc+1' in the test guarantees + // that there'll always be a NULL terminator at the end of argv. + if ((pclp->m_argc + 2) > pclp->m_argv_len) + { + new_argv = (char **) malloc(new_argv_len * sizeof(char*)); // get a longer arg-vector + if (new_argv == NULL) + { + pclp->m_isValid = FALSE; + return; + } + for(i=0; im_isValid = FALSE; + return; + } + } + + for (i=0; im_argc; i++) + strcpy(new_argv[i], pclp->m_argv[i]); // copy old arg strings + + for(i=0; i<(pclp->m_argv_len); i++) + { + if(pclp->m_argv[i]) + { + free(pclp->m_argv[i]); + pclp->m_argv[i] = NULL; + } + } + if (pclp->m_argv != NULL) + { + free(pclp->m_argv); + pclp->m_argv = NULL; + } + + + pclp->m_argv = new_argv; + pclp->m_argv_len = new_argv_len; + + } + + // Once m_argv is guaranteed long enough, appending the argument is a direct job. + strcpy(pclp->m_argv[pclp->m_argc], new_arg); // Appended the new argument. + pclp->m_argc++; // Increment the number of parameters appended. + + // The char array is emptied for all elements upto the end so that there are no junk characters. + // If this is not done, then the issue is like this: + // - Simple perl command like "perl" on the system console works fine for the first time. + // - When it is given the second time, a new blank screen should come up which also + // allows for editing. This was not consistently working well. + // More so when the command was like, "perl ", that is the name "perl" + // followed by a few blank spaces. It used to give error in opening file and + // would give some junk as the filename unable to open. + // Once the below fix was done, it is working fine. + for(i=pclp->m_argc; im_argv_len; i++) + strncpy(pclp->m_argv[i], "", (MAX_DN_BYTES * sizeof(char))); // MAX_DN_BYTES is the size of pclp->m_argv[]. + + + // Fix for empty command line double quote abend - perl <.pl> "" + if ((new_arg==NULL) || ((strlen(new_arg))<=0)) + { + pclp->m_argc--; // Decrement the number of parameters appended. + pclp->m_isValid = FALSE; + return; + } + + + return; + } + + + + /*============================================================================================ + + Function : fnSkipToken + + Description : This function collects the next command-line argument, breaking on + unquoted white space. The quote symbols are copied into the output. + White space has already been skipped. + + Parameters : s (IN) - Input string in which the token is skipped. + r (IN) - The resultant return string. + + Returns : String. + + ==============================================================================================*/ + + char *fnSkipToken(char *s, char *r) + { + register char *t=NULL; + register char quote = '\0'; // NULL, single quote, or double quote + char ch = '\0'; + + for (t=s; t[0]; t++) + { + ch = t[0]; + if (!quote) + { + if (isspace(ch)) // if unquoted whitespace... + { + break; // ...end of token found + } + else if (ch=='"' || ch=='\'') // if opening quote... + { + quote = ch; // ...enter quote mode + } + } + else + { + if (ch=='\\' && t[1]==quote) // if escaped quote... + { + t++; // ...skip backslash + } + else if (ch==quote) // if close quote... + { + quote = 0; // ...leave quote mode + } + } + } + + r = fnStashString(s, r, t-s); // get heap-allocated token string + t = fnSkipWhite(t); // skip any trailing white space + s = t; // return updated source pointer + + s2 = t; // return updated global source pointer + + return r; // return heap-allocated token string + } + + + + /*============================================================================================ + + Function : fnScanToken + + Description : This function collects the next command-line argument, breaking on + unquoted white space or I/O redirection symbols. Quote symbols are not + copied into the output. + When called, any leading white space has already been skipped. + + Parameters : x (IN) - Input string in which the token is scanned. + r (IN) - The resultant return string. + + Returns : String. + + ==============================================================================================*/ + + char *fnScanToken(char *x, char *r) + { + register char *s = x; // input string position + register char *t = x; // output string position + register char quote = '\0'; // either NULL, or single quote, or double quote + register char ch = '\0'; + register char c = '\0'; + + while (*s) + { + ch = *s; // invariant: ch != 0 + + // look to see if we've reached the end of the token + if (!quote) // but don't look for token break if we're inside quotes + { + if (isspace(ch)) + break; // break on whitespace + if (ch=='>') + break; // break on ">" (redirect stdout) + if (ch=='<') + break; // break on "<" (redirect stdin) + if (ch=='&' && x[1]=='>') + break; // break on "&>" (redirect both stdout & stderr) + } + + // process the next source character + if (ch=='\\' && (c=s[1]) && (c=='\\'||c=='>'||c=='<'||c==quote)) + { + //-----------------if an escaped '\\', '>', '<', or quote... + s++; // ...skip over the backslash... + *t++ = *s++; // ...and copy the escaped character + } + else if (ch==quote) // (won't match unless inside quotes because invariant ch!=0) + { + //-----------------if close quote... + s++; // ...skip over the quote... + quote=0; // ...and leave quote mode + } + else if (!quote && (ch=='"' || ch=='\'')) + { + //-----------------if opening quote... + quote = *s++; // ...enter quote mode (remembering quote char, and skipping the quote) + } + else + { //----------if normal character... + *t++ = *s++; // ...copy the character + } + } + + // clean up return values + r = fnStashString(x, r, t-x); // get heap-allocated token string + s = fnSkipWhite(s); // skip any trailing white space + x = s; // return updated source pointer + + s1 = s; // return updated global source pointer + + return r; + } + + + + /*============================================================================================ + + Function : fnStashString + + Description : This function return the heap-allocated token string. + + Parameters : s (IN) - Input string from which the token is extracted. + buffer (IN) - Return string. + length (IN) - Length of the token to be extracted. + + Returns : String. + + ==============================================================================================*/ + + char *fnStashString(char *s, char *buffer, int length) + { + if (length <= 0) + { + // Copy "" instead of NULL since "" indicates that there is memory allocated having no/null value. + // NULL indicates that there is no memory allocated to it! + strcpy(buffer, ""); + } + else + { + strncpy(buffer, s, length); + buffer[length] = '\0'; + } + + return buffer; + } + + + + /*============================================================================================ + + Function : fnDeleteArgument + + Description : This function deletes an argument (that was originally appended) from the list. + + Parameters : pclp (IN) - CommandLine structure. + index (IN) - Index of the argument to be deleted. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnDeleteArgument(PCOMMANDLINEPARSER pclp, int index) + { + int i = index; + + + // If index is greater than the no. of arguments, just return. + if (index >= pclp->m_argc) + return; + + // Move all the arguments after the index one up. + while(i < (pclp->m_argv_len-1)) + { + strcpy(pclp->m_argv[i], pclp->m_argv[i+1]); + i++; + } + + + // Delete the last one and free memory. + if ( pclp->m_argv[i] ) + { + free(pclp->m_argv[i]); + pclp->m_argv[i] = NULL; + } + + + pclp->m_argc--; // Decrement the number of arguments. + pclp->m_argv_len--; + + return; + } + + + + /*============================================================================================ + + Function : fnMy_MkTemp + + Description : This is a standard ANSI C mktemp for NetWare + + Parameters : templatestr (IN) - Input temp filename. + + Returns : String. + + ==============================================================================================*/ + + char* fnMy_MkTemp(char* templatestr) + { + char* pXs=NULL; + char numbuf[50]={'\0'}; + int count=0; + char* pPid=NULL; + + char termchar = '\0'; + char letter = 'a'; + + + if (templatestr && (pXs = strstr(templatestr, (char *)"XXXXXX"))) + { + // generate temp name + termchar = pXs[6]; + ltoa(GetThreadID(), numbuf, 16); + // numbuf[sizeof(numbuf)-1] = '\0'; + numbuf[strlen(numbuf)-1] = '\0'; + // beware! thread IDs are 8 hex digits on NW 4.11 and only the + // lower digits seem to change, whereas on NW 5 they are in the + // range of < 1000 hex or 3 hex digits in length. So the following + // logic ensures we use the least significant portion of the number. + if (strlen(numbuf) > 5) + pPid = &numbuf[strlen(numbuf)-5]; + else + pPid = numbuf; + + letter = 'a'; + do + { + sprintf(pXs, (char *)"%c%05.5s", letter, pPid); + pXs[6] = termchar; + if (access(templatestr, 0) != 0) // File does not exist + { + return templatestr; + } + letter++; + } while (letter <= 'z'); + + errno = ENOENT; + return NULL; + } + else + { + errno = EINVAL; + return NULL; + } + } + + + + /*============================================================================================ + + Function : fnSystemCommand + + Description : This function constructs a system command from the given + null-terminated argv array and runs the command on the system console. + + Parameters : argv (IN) - Array of input commands. + argc (IN) - Number of input parameters. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnSystemCommand (char** argv, int argc) + { + // calculate the size of a temp buffer needed + int k = 0; + int totalSize = 0; + int bytes = 0; + char* tempCmd = NULL; + char* tptr = NULL; + + + for(k=0; k + #include + #include + + #include "perl.h" + #include "nwutil.h" + #include "stdio.h" + #include "clibstuf.h" + + #ifdef MPK_ON + #include + #include + #endif //MPK_ON + + + // Thread group ID for this NLM. Set only by main when the NLM is initially loaded, + // so it should be okay for this to be global. + // + #ifdef MPK_ON + THREAD gThreadHandle; + #else + int gThreadGroupID = -1; + #endif //MPK_ON + + + // Global to kill all running scripts during NLM unload. + // + bool gKillAll = FALSE; + + + // Global structure needed by OS to register command parser. + // fnRegisterCommandLineHandler gets called only when the NLM is initially loaded, + // so it should be okay for this structure to be a global. + // + static struct commandParserStructure gCmdParser = {0,0,0}; + + + // True if the command-line parsing procedure has been registered with the OS. + // Altered only during initial NLM loading or unloading so it should be okay as a global. + // + BOOL gCmdProcInit = FALSE; + + + // Array to hold the screen name for all new screens. + // + char sPerlScreenName[MAX_DN_BYTES * sizeof(char)] = {'\0'}; + + + // Structure to pass data when spawning new threadgroups to run scripts. + // + typedef struct tagScriptData + { + char *m_commandLine; + BOOL m_fromConsole; + }ScriptData; + + + #define CS_CMD_NOT_FOUND -1 // Console command not found + #define CS_CMD_FOUND 0 // Console command found + + /** + The stack size is make 256k from the earlier 64k since complex scripts (charnames.t and complex.t) + were failing with the lower stack size. In fact, we tested with 128k and it also failed + for the complexity of the script used. In case the complexity of a script is increased, + then this might warrant an increase in the stack size. But instead of simply giving a very large stack, + a trade off was required and we stopped at 256k! + **/ + #define PERL_COMMAND_STACK_SIZE (256*1024L) // Stack size of thread that runs a perl script from command line + + #define MAX_COMMAND_SIZE 512 + + + #define kMaxValueLen 1024 // Size of the Environment variable value limited/truncated to 1024 characters. + #define kMaxVariableNameLen 256 // Size of the Environment variable name. + + + typedef void (*PFUSEACCURATECASEFORPATHS) (int); + typedef LONG (*PFGETFILESERVERMAJORVERSIONNUMBER) (void); + typedef void (*PFUCSTERMINATE) (); // For ucs terminate. + typedef void (*PFUNAUGMENTASTERISK)(BOOL); // For longfile support. + typedef int (*PFFSETMODE) (FILE *, char *); + + + // local function prototypes + // + void fnSigTermHandler(int sig); + void fnRegisterCommandLineHandler(void); + void fnLaunchPerl(void* context); + void fnSetUpEnvBlock(char*** penv); + void fnDestroyEnvBlock(char** env); + int fnFpSetMode(FILE* fp, int mode, int *err); + + void fnGetPerlScreenName(char *sPerlScreenName); + + + + + /*============================================================================================ + + Function : main + + Description : Called when the NLM is first loaded. Registers the command-line handler + and then terminates-stay-resident. + + Parameters : argc (IN) - No of Input strings. + argv (IN) - Array of Input strings. + + Returns : Nothing. + + ==============================================================================================*/ + + void main(int argc, char *argv[]) + { + char sysCmdLine[MAX_COMMAND_SIZE] = {'\0'}; + char cmdLineCopy[sizeof(PERL_COMMAND_NAME)+sizeof(sysCmdLine)+2] = {'\0'}; + + ScriptData* psdata = NULL; + + + // Keep this thread alive, since we use the thread group id of this thread to allocate memory on. + // When we unload the NLM, clib will tear the thread down. + // + #ifdef MPK_ON + gThreadHandle = kCurrentThread(); + #else + gThreadGroupID = GetThreadGroupID (); + #endif //MPK_ON + + signal (SIGTERM, fnSigTermHandler); + fnInitGpfGlobals(); // For importing the CLIB calls in place of the Watcom calls + fnInitializeThreadInfo(); + + + // Ensure that we have a "temp" directory + fnSetupNamespace(); + if (access(DEFTEMP, 0) != 0) + mkdir(DEFTEMP); + + // Create the file NUL if not present. This is done only once per NLM load. + // This is required for -e. + // Earlier verions were creating temporary files (in perl.c file) for -e. + // Now, the technique of creating temporary files are removed since they were + // fragile or insecure or slow. It now uses the memory by setting + // the BIT_BUCKET to "nul" on Win32, which is equivalent to /dev/nul of Unix. + // Since there is no equivalent of /dev/nul on NetWare, the work-around is that + // we create a file called "nul" and the BIT_BUCKET is set to "nul". + // This makes sure that -e works on NetWare too without the creation of temporary files + // in -e code in perl.c + { + char sNUL[MAX_DN_BYTES] = {'\0'}; + + strcpy(sNUL, DEFPERLROOT); + strcat(sNUL, "\\nul"); + if (access((const char *)sNUL, 0) != 0) + { + // The file, "nul" is not found and so create the file. + FILE *fp = NULL; + + fp = fopen((const char *)sNUL, (const char *)"w"); + fclose(fp); + } + } + + fnRegisterCommandLineHandler(); // Register the command line handler + SynchronizeStart(); // Restart the NLM startup process when using synchronization mode. + + fnGetPerlScreenName(sPerlScreenName); // Get the screen name. Done only once per NLM load. + + + // If the command line has two strings, then the first has to be "Perl" and the second is assumed + // to be a script to be run. If only one string (i.e., Perl) is input, then there is nothing to do! + // + if ((argc > 1) && getcmd(sysCmdLine)) + { + strcpy(cmdLineCopy, PERL_COMMAND_NAME); + strcat(cmdLineCopy, (char *)" "); // Space between the Perl Command and the input script name. + strcat(cmdLineCopy, sysCmdLine); // The command line parameters built into + + // Create a safe copy of the command line and pass it to the + // new thread for parsing. The new thread will be responsible + // to delete it when it is finished with it. + // + psdata = (ScriptData *) malloc(sizeof(ScriptData)); + if (psdata) + { + psdata->m_commandLine = NULL; + psdata->m_commandLine = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(psdata->m_commandLine) + { + strcpy(psdata->m_commandLine, cmdLineCopy); + psdata->m_fromConsole = TRUE; + + #ifdef MPK_ON + // kStartThread((char *)"ConsoleHandlerThread", fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void *)psdata); + // Establish a new thread within a new thread group. + BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); + #else + // Start a new thread in its own thread group + BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); + #endif //MPK_ON + } + else + { + free(psdata); + psdata = NULL; + return; + } + } + else + return; + } + + + // Keep this thread alive, since we use the thread group id of this thread to allocate memory on. + // When we unload the NLM, clib will tear the thread down. + // + #ifdef MPK_ON + kSuspendThread(gThreadHandle); + #else + SuspendThread(GetThreadID()); + #endif //MPK_ON + + + return; + } + + + + /*============================================================================================ + + Function : fnSigTermHandler + + Description : Called when the NLM is unloaded; used to unregister the console command handler. + + Parameters : sig (IN) + + Returns : Nothing. + + ==============================================================================================*/ + + void fnSigTermHandler(int sig) + { + int k = 0; + + + #ifdef MPK_ON + kResumeThread(gThreadHandle); + #endif //MPK_ON + + // Unregister the command line handler. + // + if (gCmdProcInit) + { + UnRegisterConsoleCommand (&gCmdParser); + gCmdProcInit = FALSE; + } + + // Free the global environ buffer + nw_freeenviron(); + + // Kill running scripts. + // + if (!fnTerminateThreadInfo()) + { + ConsolePrintf("Terminating Perl scripts...\n"); + gKillAll = TRUE; + + // fnTerminateThreadInfo will be run for 5 threads. If more threads/scripts are run, + // then the NLM will unload without terminating the thread info and leaks more memory. + // If this number is increased to reduce memory leaks, then it will unnecessarily take more time + // to unload when there are a smaller no of threads. Since this is a rare case, the no is kept as 5. + // + while (!fnTerminateThreadInfo() && k < 5) + { + sleep(1); + k++; + } + } + + // Delete the file, "nul" if present since the NLM is unloaded. + { + char sNUL[MAX_DN_BYTES] = {'\0'}; + + strcpy(sNUL, DEFPERLROOT); + strcat(sNUL, "\\nul"); + if (access((const char *)sNUL, 0) == 0) + { + // The file, "nul" is found and so delete it. + unlink((const char *)sNUL); + } + } + } + + + + /*============================================================================================ + + Function : fnCommandLineHandler + + Description : Gets called by OS when someone enters an unknown command at the system console, + after this routine is registered by RegisterConsoleCommand. + For the valid command we just spawn a thread with enough stack space + to actually run the script. + + Parameters : screenID (IN) - id for the screen. + cmdLine (IN) - Command line string. + + Returns : Long. + + ==============================================================================================*/ + + LONG fnCommandLineHandler (LONG screenID, BYTE * cmdLine) + { + ScriptData* psdata=NULL; + int OsThrdGrpID = -1; + LONG retCode = CS_CMD_FOUND; + char* cptr = NULL; + + + #ifdef MPK_ON + // Initialisation for MPK_ON + #else + OsThrdGrpID = -1; + #endif //MPK_ON + + + #ifdef MPK_ON + // For MPK_ON + #else + if (gThreadGroupID != -1) + OsThrdGrpID = SetThreadGroupID (gThreadGroupID); + #endif //MPK_ON + + + cptr = fnSkipWhite(cmdLine); // Skip white spaces. + if ((strnicmp(cptr, PERL_COMMAND_NAME, strlen(PERL_COMMAND_NAME)) == 0) && + ((cptr[strlen(PERL_COMMAND_NAME)] == ' ') || + (cptr[strlen(PERL_COMMAND_NAME)] == '\t') || + (cptr[strlen(PERL_COMMAND_NAME)] == '\0'))) + { + // Create a safe copy of the command line and pass it to the new thread for parsing. + // The new thread will be responsible to delete it when it is finished with it. + // + psdata = (ScriptData *) malloc(sizeof(ScriptData)); + if (psdata) + { + psdata->m_commandLine = NULL; + psdata->m_commandLine = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if(psdata->m_commandLine) + { + strcpy(psdata->m_commandLine, (char *)cmdLine); + psdata->m_fromConsole = TRUE; + + #ifdef MPK_ON + // kStartThread((char *)"ConsoleHandlerThread", fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void *)psdata); + // Establish a new thread within a new thread group. + BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); + #else + // Start a new thread in its own thread group + BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); + #endif //MPK_ON + } + else + { + free(psdata); + psdata = NULL; + retCode = CS_CMD_NOT_FOUND; + } + } + else + retCode = CS_CMD_NOT_FOUND; + } + else + retCode = CS_CMD_NOT_FOUND; + + + #ifdef MPK_ON + // For MPK_ON + #else + if (OsThrdGrpID != -1) + SetThreadGroupID (OsThrdGrpID); + #endif //MPK_ON + + + return retCode; + } + + + + /*============================================================================================ + + Function : fnRegisterCommandLineHandler + + Description : Registers the console command-line parsing function with the OS. + + Parameters : None. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnRegisterCommandLineHandler(void) + { + // Allocates resource tag for Console Command + if ((gCmdParser.RTag = + AllocateResourceTag (GetNLMHandle(), (char *)"Console Command", ConsoleCommandSignature)) != 0) + { + gCmdParser.parseRoutine = fnCommandLineHandler; // Set the Console Command parsing routine. + RegisterConsoleCommand (&gCmdParser); // Registers the Console Command parsing function + gCmdProcInit = TRUE; + } + + return; + } + + + + /*============================================================================================ + + Function : fnSetupNamespace + + Description : Sets the name space of the current threadgroup to the long name space. + + Parameters : None. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnSetupNamespace(void) + { + SetCurrentNameSpace(NWOS2_NAME_SPACE); + + + //LATER: call SetTargetNameSpace(NWOS2_NAME_SPACE)? Currently, if + // I make this call, then CPerlExe::Rename fails in certain cases, + // and it isn't clear why. Looks like a CLIB bug... + // SetTargetNameSpace(NWOS2_NAME_SPACE); + + //Uncommented that above call, retaining the comment so that it will be easy + //to revert back if there is any problem - sgp - 10th May 2000 + + //Commented again, since Perl debugger had some problems because of + //the above call - sgp - 20th June 2000 + + { + // if running on Moab, call UseAccurateCaseForPaths. This API + // does bad things on 4.11 so we call only for Moab. + PFGETFILESERVERMAJORVERSIONNUMBER pf_getfileservermajorversionnumber = NULL; + pf_getfileservermajorversionnumber = (PFGETFILESERVERMAJORVERSIONNUMBER) + ImportSymbol(GetNLMHandle(), (char *)"GetFileServerMajorVersionNumber"); + if (pf_getfileservermajorversionnumber && ((*pf_getfileservermajorversionnumber)() > 4)) + { + PFUSEACCURATECASEFORPATHS pf_useaccuratecaseforpaths = NULL; + pf_useaccuratecaseforpaths = (PFUSEACCURATECASEFORPATHS) + ImportSymbol(GetNLMHandle(), (char *)"UseAccurateCaseForPaths"); + if (pf_useaccuratecaseforpaths) + (*pf_useaccuratecaseforpaths)(TRUE); + { + PFUNAUGMENTASTERISK pf_unaugmentasterisk = NULL; + pf_unaugmentasterisk = (PFUNAUGMENTASTERISK) + ImportSymbol(GetNLMHandle(), (char *)"UnAugmentAsterisk"); + if (pf_unaugmentasterisk) + (*pf_unaugmentasterisk)(TRUE); + } + } + } + + return; + } + + + + /*============================================================================================ + + Function : fnLaunchPerl + + Description : Parse the command line into argc/argv style parameters and then run the script. + + Parameters : context (IN) - void* that will be typecasted to ScriptDate structure. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnLaunchPerl(void* context) + { + char* defaultDir = NULL; + char curdir[_MAX_PATH] = {'\0'}; + ScriptData* psdata = (ScriptData *) context; + + unsigned int moduleHandle = 0; + int currentThreadGroupID = -1; + + #ifdef MPK_ON + kExitNetWare(); + #endif //MPK_ON + + errno = 0; + + + if (psdata->m_fromConsole) + { + // get the default working directory name + // + defaultDir = fnNwGetEnvironmentStr("PERL_ROOT", DEFPERLROOT); + } + else + defaultDir = getcwd(curdir, sizeof(curdir)-1); + + // set long name space + // + fnSetupNamespace(); + + // make the working directory the current directory if from console + // + if (psdata->m_fromConsole) + chdir(defaultDir); + + + // run the script + // + fnRunScript(psdata); + + + // May have to check this, I am blindly calling UCSTerminate, irrespective of + // whether it is initialized or not + // Copied from the previous Perl - sgp - 31st Oct 2000 + moduleHandle = FindNLMHandle("UCSCORE.NLM"); + if (moduleHandle) + { + PFUCSTERMINATE ucsterminate = (PFUCSTERMINATE)ImportSymbol(moduleHandle, "therealUCSTerminate"); + if (ucsterminate!=NULL) + (*ucsterminate)(); + } + + + if (psdata->m_fromConsole) + { + // change thread groups for the call to free the memory + // allocated before the new thread group was started + #ifdef MPK_ON + // For MPK_ON + #else + if (gThreadGroupID != -1) + currentThreadGroupID = SetThreadGroupID (gThreadGroupID); + #endif //MPK_ON + } + + // Free memory + if (psdata) + { + if(psdata->m_commandLine) + { + free(psdata->m_commandLine); + psdata->m_commandLine = NULL; + } + + free(psdata); + psdata = NULL; + context = NULL; + } + + #ifdef MPK_ON + // For MPK_ON + #else + if (currentThreadGroupID != -1) + SetThreadGroupID (currentThreadGroupID); + #endif //MPK_ON + + #ifdef MPK_ON + // kExitThread(NULL); + #else + // just let the thread terminate by falling off the end of the + // function started by BeginThreadGroup + // ExitThread(EXIT_THREAD, 0); + #endif + + + return; + } + + + + /*============================================================================================ + + Function : fnRunScript + + Description : Parses and runs a perl script. + + Parameters : psdata (IN) - ScriptData structure. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnRunScript(ScriptData* psdata) + { + char **av=NULL; + char **en=NULL; + int exitstatus = 1; + int i=0, j=0; + int *dummy = 0; + + PCOMMANDLINEPARSER pclp = NULL; + + // Set up the environment block. This will only work on + // on Moab; on 4.11 the environment block will be empty. + char** env = NULL; + + BOOL use_system_console = TRUE; + BOOL newscreen = FALSE; + int newscreenhandle = 0; + + // redirect stdin or stdout and run the script + FILE* redirOut = NULL; + FILE* redirIn = NULL; + FILE* redirErr = NULL; + FILE* stderr_fp = NULL; + + int stdin_fd=-1, stdin_fd_dup=-1; + int stdout_fd=-1, stdout_fd_dup=-1; + int stderr_fd=-1, stderr_fd_dup=-1; + + + + // Main callback instance + // + if (fnRegisterWithThreadTable() == FALSE) + return; + + + // parse the command line into argc/argv style: + // number of params and char array of params + // + pclp = (PCOMMANDLINEPARSER) malloc(sizeof(COMMANDLINEPARSER)); + if (!pclp) + { + fnUnregisterWithThreadTable(); + return; + } + + + // Initialise the variables + pclp->m_isValid = TRUE; + pclp->m_redirInName = NULL; + pclp->m_redirOutName = NULL; + pclp->m_redirErrName = NULL; + pclp->m_redirBothName = NULL; + pclp->nextarg = NULL; + pclp->sSkippedToken = NULL; + pclp->m_argv = NULL; + pclp->new_argv = NULL; + + #ifdef MPK_ON + pclp->m_qSemaphore = NULL; + #else + pclp->m_qSemaphore = 0L; + #endif //MPK_ON + + pclp->m_noScreen = 0; + pclp->m_AutoDestroy = 0; + pclp->m_argc = 0; + pclp->m_argv_len = 1; + + + // Allocate memory + pclp->m_argv = (char **) malloc(pclp->m_argv_len * sizeof(char *)); + if (pclp->m_argv == NULL) + { + free(pclp); + pclp = NULL; + + fnUnregisterWithThreadTable(); + return; + } + + pclp->m_argv[0] = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if (pclp->m_argv[0] == NULL) + { + free(pclp->m_argv); + pclp->m_argv=NULL; + + free(pclp); + pclp = NULL; + + fnUnregisterWithThreadTable(); + return; + } + + + // Parse the command line + fnCommandLineParser(pclp, (char *)psdata->m_commandLine, FALSE); + if (!pclp->m_isValid) + { + if(pclp->m_argv) + { + for(i=0; im_argv_len; i++) + { + if(pclp->m_argv[i] != NULL) + { + free(pclp->m_argv[i]); + pclp->m_argv[i] = NULL; + } + } + + free(pclp->m_argv); + pclp->m_argv = NULL; + } + + if(pclp->nextarg) + { + free(pclp->nextarg); + pclp->nextarg = NULL; + } + if(pclp->sSkippedToken != NULL) + { + free(pclp->sSkippedToken); + pclp->sSkippedToken = NULL; + } + + if(pclp->m_redirInName) + { + free(pclp->m_redirInName); + pclp->m_redirInName = NULL; + } + if(pclp->m_redirOutName) + { + free(pclp->m_redirOutName); + pclp->m_redirOutName = NULL; + } + if(pclp->m_redirErrName) + { + free(pclp->m_redirErrName); + pclp->m_redirErrName = NULL; + } + if(pclp->m_redirBothName) + { + free(pclp->m_redirBothName); + pclp->m_redirBothName = NULL; + } + + + // Signal a semaphore, if indicated by "-{" option, to indicate that + // the script has terminated and files are closed + // + if (pclp->m_qSemaphore != 0) + { + #ifdef MPK_ON + kSemaphoreSignal(pclp->m_qSemaphore); + #else + SignalLocalSemaphore(pclp->m_qSemaphore); + #endif //MPK_ON + } + + free(pclp); + pclp = NULL; + + fnUnregisterWithThreadTable(); + return; + } + + + // Simulating a shell on NetWare can be difficult. If you don't + // create a new screen for the script to run in, you can output to + // the console but you can't get any input from the console. Therefore, + // every invocation of perl potentially needs its own screen unless + // you are running either "perl -h" or "perl -v" or you are redirecting + // stdin from a file. + // + // So we need to create a new screen and set that screen as the current + // screen when running any script launched from the console that is not + // "perl -h" or "perl -v" and is not redirecting stdin from a file. + // + // But it would be a little weird if we didn't create a new screen only + // in the case when redirecting stdin from a file; in only that case, + // stdout would be the console instead of a new screen. + // + // There is also the issue of standard err. In short, we might as well + // create a new screen no matter what is going on with redirection, just + // for the sake of consistency. + // + // In summary, we should a create a new screen and make that screen the + // current screen unless one of the following is true: + // * The command is "perl -h" + // * The command is "perl -v" + // * The script was launched by another perl script. In this case, + // the screen belonging to the parent perl script should probably be + // the same screen for this process. And it will be if use BeginThread + // instead of BeginThreadGroup when launching Perl from within a Perl + // script. + // + // In those cases where we create a new screen we should probably also display + // that screen. + // + + use_system_console = pclp->m_noScreen || + ((pclp->m_argc == 2) && (strcmp(pclp->m_argv[1], (char *)"-h") == 0)) || + ((pclp->m_argc == 2) && (strcmp(pclp->m_argv[1], (char *)"-v") == 0)); + + newscreen = (!use_system_console) && psdata->m_fromConsole; + + if (newscreen) + { + newscreenhandle = CreateScreen(sPerlScreenName, 0); + if (newscreenhandle) + DisplayScreen(newscreenhandle); + } + else if (use_system_console) + CreateScreen((char *)"System Console", 0); + + + if (pclp->m_redirInName) + { + if ((stdin_fd = fileno(stdin)) != -1) + { + stdin_fd_dup = dup(stdin_fd); + if (stdin_fd_dup != -1) + { + redirIn = fdopen (stdin_fd_dup, (char const *)"r"); + if (redirIn) + stdin = freopen (pclp->m_redirInName, (char const *)"r", redirIn); + if (!stdin) + { + redirIn = NULL; + // undo the redirect, if possible + stdin = fdopen(stdin_fd, (char const *)"r"); + } + } + } + } + + /** + The below code stores the handle for the existing stdout to be used later and the existing stdout is closed. + stdout is then initialised to the new File pointer where the operations are done onto that. + Later (look below for the code), the saved stdout is restored back. + **/ + if (pclp->m_redirOutName) + { + if ((stdout_fd = fileno(stdout)) != -1) // Handle of the existing stdout. + { + stdout_fd_dup = dup(stdout_fd); + if (stdout_fd_dup != -1) + { + // Close the existing stdout. + fflush(stdout); // Write any unwritten data to the file. + + // New stdout + redirOut = fdopen (stdout_fd_dup, (char const *)"w"); + if (redirOut) + stdout = freopen (pclp->m_redirOutName, (char const *)"w", redirOut); + if (!stdout) + { + redirOut = NULL; + // Undo the redirection. + stdout = fdopen(stdout_fd, (char const *)"w"); + } + setbuf(stdout, NULL); // Unbuffered file pointer. + } + } + } + + if (pclp->m_redirErrName) + { + if ((stderr_fd = fileno(stderr)) != -1) + { + stderr_fd_dup = dup(stderr_fd); + if (stderr_fd_dup != -1) + { + fflush(stderr); + + redirErr = fdopen (stderr_fd_dup, (char const *)"w"); + if (redirErr) + stderr = freopen (pclp->m_redirErrName, (char const *)"w", redirErr); + if (!stderr) + { + redirErr = NULL; + // undo the redirect, if possible + stderr = fdopen(stderr_fd, (char const *)"w"); + } + setbuf(stderr, NULL); // Unbuffered file pointer. + } + } + } + + if (pclp->m_redirBothName) + { + if ((stdout_fd = fileno(stdout)) != -1) + { + stdout_fd_dup = dup(stdout_fd); + if (stdout_fd_dup != -1) + { + fflush(stdout); + + redirOut = fdopen (stdout_fd_dup, (char const *)"w"); + if (redirOut) + stdout = freopen (pclp->m_redirBothName, (char const *)"w", redirOut); + if (!stdout) + { + redirOut = NULL; + // undo the redirect, if possible + stdout = fdopen(stdout_fd, (char const *)"w"); + } + setbuf(stdout, NULL); // Unbuffered file pointer. + } + } + if ((stderr_fd = fileno(stderr)) != -1) + { + stderr_fp = stderr; + stderr = stdout; + } + } + + + env = NULL; + fnSetUpEnvBlock(&env); // Set up the ENV block + + // Run the Perl script + exitstatus = RunPerl(pclp->m_argc, pclp->m_argv, env); + + + // clean up any redirection + // + if (pclp->m_redirInName && redirIn) + { + fclose(stdin); + stdin = fdopen(stdin_fd, (char const *)"r"); // Put back the old handle for stdin. + } + + if (pclp->m_redirOutName && redirOut) + { + // Close the new stdout. + fflush(stdout); + fclose(stdout); + + // Put back the old handle for stdout. + stdout = fdopen(stdout_fd, (char const *)"w"); + setbuf(stdout, NULL); // Unbuffered file pointer. + } + + if (pclp->m_redirErrName && redirErr) + { + fflush(stderr); + fclose(stderr); + + stderr = fdopen(stderr_fd, (char const *)"w"); // Put back the old handle for stderr. + setbuf(stderr, NULL); // Unbuffered file pointer. + } + + if (pclp->m_redirBothName && redirOut) + { + stderr = stderr_fp; + + fflush(stdout); + fclose(stdout); + + stdout = fdopen(stdout_fd, (char const *)"w"); // Put back the old handle for stdout. + setbuf(stdout, NULL); // Unbuffered file pointer. + } + + + if (newscreen && newscreenhandle) + { + //added for --autodestroy switch + if(!pclp->m_AutoDestroy) + { + if ((redirOut == NULL) && (redirIn == NULL) && (!gKillAll)) + { + printf((char *)"\n\nPress any key to exit\n"); + getch(); + } + } + DestroyScreen(newscreenhandle); + } + + // Set the mode for stdin and stdout + fnFpSetMode(stdin, O_TEXT, dummy); + fnFpSetMode(stdout, O_TEXT, dummy); + + // Cleanup + if(pclp->m_argv) + { + for(i=0; im_argv_len; i++) + { + if(pclp->m_argv[i] != NULL) + { + free(pclp->m_argv[i]); + pclp->m_argv[i] = NULL; + } + } + + free(pclp->m_argv); + pclp->m_argv = NULL; + } + + if(pclp->nextarg) + { + free(pclp->nextarg); + pclp->nextarg = NULL; + } + if(pclp->sSkippedToken != NULL) + { + free(pclp->sSkippedToken); + pclp->sSkippedToken = NULL; + } + + if(pclp->m_redirInName) + { + free(pclp->m_redirInName); + pclp->m_redirInName = NULL; + } + if(pclp->m_redirOutName) + { + free(pclp->m_redirOutName); + pclp->m_redirOutName = NULL; + } + if(pclp->m_redirErrName) + { + free(pclp->m_redirErrName); + pclp->m_redirErrName = NULL; + } + if(pclp->m_redirBothName) + { + free(pclp->m_redirBothName); + pclp->m_redirBothName = NULL; + } + + + // Signal a semaphore, if indicated by -{ option, to indicate that + // the script has terminated and files are closed + // + if (pclp->m_qSemaphore != 0) + { + #ifdef MPK_ON + kSemaphoreSignal(pclp->m_qSemaphore); + #else + SignalLocalSemaphore(pclp->m_qSemaphore); + #endif //MPK_ON + } + + if(pclp) + { + free(pclp); + pclp = NULL; + } + + if(env) + fnDestroyEnvBlock(env); + fnUnregisterWithThreadTable(); + // Remove the thread context set during Perl_set_context + Remove_Thread_Ctx(); + + + return; + } + + + + /*============================================================================================ + + Function : fnSetUpEnvBlock + + Description : Sets up the initial environment block. + + Parameters : penv (IN) - ENV variable as char***. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnSetUpEnvBlock(char*** penv) + { + char** env = NULL; + + int sequence = 0; + char var[kMaxVariableNameLen+1] = {'\0'}; + char val[kMaxValueLen+1] = {'\0'}; + char both[kMaxVariableNameLen + kMaxValueLen + 5] = {'\0'}; + size_t len = kMaxValueLen; + int totalcnt = 0; + + while(scanenv( &sequence, var, &len, val )) + { + totalcnt++; + len = kMaxValueLen; + } + // add one for null termination + totalcnt++; + + + env = (char **) malloc (totalcnt * sizeof(char *)); + if (env) + { + int cnt = 0; + int i = 0; + + sequence = 0; + len = kMaxValueLen; + + while( (cnt < (totalcnt-1)) && scanenv( &sequence, var, &len, val ) ) + { + val[len] = '\0'; + strcpy( both, var ); + strcat( both, (char *)"=" ); + strcat( both, val ); + + env[cnt] = (char *) malloc((sizeof(both)+1) * sizeof(char)); + if (env[cnt]) + { + strcpy(env[cnt], both); + cnt++; + } + else + { + for(i=0; im_commandLine = NULL; + psdata->m_commandLine = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + + if(psdata->m_commandLine) + { + strcpy(psdata->m_commandLine, cmdLine); + psdata->m_fromConsole = FALSE; + + #ifdef MPK_ON + BeginThread(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); + #else + // Start a new thread in its own thread group + BeginThread(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); + #endif //MPK_ON + } + else + { + free(psdata); + psdata = NULL; + return; + } + } + else + return; + + return; + } + + + + /*============================================================================================ + + Function : fnGetPerlScreenName + + Description : This function creates the Perl screen name. + Gets called from main only once when the Perl NLM loads. + + Parameters : sPerlScreenName (OUT) - Resultant Perl screen name. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnGetPerlScreenName(char *sPerlScreenName) + { + // HYAK: + // The logic for using 32 in the below array sizes is like this: + // The NetWare CLIB SDK documentation says that for base 2 conversion, + // this number must be minimum 8. Also, in the example of the documentation, + // 20 is used as the size and testing is done for bases from 2 upto 16. + // So, to simply chose a number above 20 and also keeping in mind not to reserve + // unnecessary big array sizes, I have chosen 32 ! + // Less than that may also suffice. + char sPerlRevision[32 * sizeof(char)] = {'\0'}; + char sPerlVersion[32 * sizeof(char)] = {'\0'}; + char sPerlSubVersion[32 * sizeof(char)] = {'\0'}; + + // The defines for PERL_REVISION, PERL_VERSION, PERL_SUBVERSION are available in + // patchlevel.h under root and gets included when perl.h is included. + // The number 10 below indicates base 10. + itoa(PERL_REVISION, sPerlRevision, 10); + itoa(PERL_VERSION, sPerlVersion, 10); + itoa(PERL_SUBVERSION, sPerlSubVersion, 10); + + // Concatenate substrings to get a string like Perl5.6.1 which is used as the screen name. + sprintf(sPerlScreenName, "%s%s.%s.%s", PERL_COMMAND_NAME, + sPerlRevision, sPerlVersion, sPerlSubVersion); + + return; + } + + + + // Global variable to hold the environ information. + // First time it is accessed, it will be created and initialized and + // next time onwards, the pointer will be returned. + + // Improvements - Dynamically read env everytime a request comes - Is this required? + char** genviron = NULL; + + + /*============================================================================================ + + Function : nw_getenviron + + Description : Gets the environment information. + + Parameters : None. + + Returns : Nothing. + + ==============================================================================================*/ + + char *** + nw_getenviron() + { + if (genviron) + return (&genviron); // This might leak memory upto 11736 bytes on some versions of NetWare. + // return genviron; // Abending on some versions of NetWare. + else + fnSetUpEnvBlock(&genviron); + + return (&genviron); + } + + + + /*============================================================================================ + + Function : nw_freeenviron + + Description : Frees the environment information. + + Parameters : None. + + Returns : Nothing. + + ==============================================================================================*/ + + void + nw_freeenviron() + { + if (genviron) + { + fnDestroyEnvBlock(genviron); + genviron=NULL; + } + } + diff -c /dev/null 'perl-5.7.2/NetWare/Nwpipe.c' Index: ./NetWare/Nwpipe.c *** ./NetWare/Nwpipe.c Thu Jan 1 02:00:00 1970 --- ./NetWare/Nwpipe.c Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,704 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : NWPipe.c + * DESCRIPTION : Functions to implement pipes on NetWare. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #include + #include + + #include "win32ish.h" + #include "nwpipe.h" + #include "nwplglob.h" + + + // This was added since the compile failed saying "undefined P_WAIT" + // when USE_ITHREADS was commented in the makefile + #ifndef P_WAIT + #define P_WAIT 0 + #endif + + #ifndef P_NOWAIT + #define P_NOWAIT 1 + #endif + + + + + /*============================================================================================ + + Function : fnPipeFileMakeArgv + + Description : This function makes the argument array. + + Parameters : ptpf (IN) - Input structure. + + Returns : Boolean. + + ==============================================================================================*/ + + BOOL fnPipeFileMakeArgv(PTEMPPIPEFILE ptpf) + { + int i=0, j=0; + int dindex = 0; + int sindex = 0; + + ptpf->m_argv_len = 0; + + + // Below 2 is added for the following reason: + // - The first one is for an additional value that will be added through ptpf->m_redirect. + // - The second one is for a NULL termination of the array. + // This is required for spawnvp API that takes a NULL-terminated array as its 3rd parameter. + // If the array is NOT NULL-terminated, then the server abends at the spawnvp call !! + ptpf->m_argv = (char **) malloc((ptpf->m_pipeCommand->m_argc + 2) * sizeof(char*)); + if (ptpf->m_argv == NULL) + return FALSE; + + // For memory allocation it is just +1 since the last one is only for NULL-termination + // and no memory is required to be allocated. + for(i=0; i<(ptpf->m_pipeCommand->m_argc + 1); i++) + { + ptpf->m_argv[i] = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if (ptpf->m_argv[i] == NULL) + { + for(j=0; jm_argv[j]) + { + free(ptpf->m_argv[j]); + ptpf->m_argv[j] = NULL; + } + } + free(ptpf->m_argv); + ptpf->m_argv = NULL; + + return FALSE; + } + } + + // Copy over parsed items, removing "load" keyword if necessary. + sindex = ((stricmp(ptpf->m_pipeCommand->m_argv[0], LOAD_COMMAND) == 0) ? 1 : 0); + while (sindex < ptpf->m_pipeCommand->m_argc) + { + strcpy(ptpf->m_argv[dindex], ptpf->m_pipeCommand->m_argv[sindex]); + dindex++; + sindex++; + } + + if (stricmp(ptpf->m_argv[0], PERL_COMMAND_NAME) == 0) // If Perl is the first command. + { + ptpf->m_launchPerl = TRUE; + + #ifdef MPK_ON + ptpf->m_perlSynchSemaphore = kSemaphoreAlloc((BYTE *)"pipeSemaphore", 0); + #else + ptpf->m_perlSynchSemaphore = OpenLocalSemaphore(0); + #endif //MPK_ON + } + else if (stricmp(ptpf->m_argv[0], (char *)"perlglob") == 0) + ptpf->m_doPerlGlob = TRUE; + + + // Create last argument, which will redirect to or from the temp file + if (!ptpf->m_doPerlGlob || ptpf->m_mode) + { + if (!ptpf->m_mode) // If read mode? + { + if (ptpf->m_launchPerl) + strcpy(ptpf->m_redirect, (char *)">"); + else + strcpy(ptpf->m_redirect, (char *)"(CLIB_OPT)/>"); + } + else + { + if (ptpf->m_launchPerl) + strcpy(ptpf->m_redirect, (char *)"<"); + else + strcpy(ptpf->m_redirect, (char *)"(CLIB_OPT)/<"); + } + strcat(ptpf->m_redirect, ptpf->m_fileName); + + if (ptpf->m_launchPerl) + { + char tbuf[15] = {'\0'}; + sprintf(tbuf, (char *)" -{%x", ptpf->m_perlSynchSemaphore); + strcat(ptpf->m_redirect, tbuf); + } + + strcpy(ptpf->m_argv[dindex], (char*) ptpf->m_redirect); + dindex++; + } + + if (dindex < (ptpf->m_pipeCommand->m_argc + 1)) + { + if(ptpf->m_argv[dindex]) + { + free(ptpf->m_argv[dindex]); + ptpf->m_argv[dindex] = NULL; // NULL termination - required for spawnvp call. + } + } + + ptpf->m_argv_len = dindex; // Length of the argv array OR number of argv string values. + ptpf->m_argv[ptpf->m_argv_len] = NULL; // NULL termination - required for spawnvp call. + + + return TRUE; + } + + + /*============================================================================================ + + Function : fnPipeFileOpen + + Description : This function opens the pipe file. + + Parameters : ptpf (IN) - Input structure. + command (IN) - Input command string. + mode (IN) - Mode of opening. + + Returns : File pointer. + + ==============================================================================================*/ + + FILE* fnPipeFileOpen(PTEMPPIPEFILE ptpf, char* command, char* mode) + { + int i=0, j=0; + + char tempName[_MAX_PATH] = {'\0'}; + + + ptpf->m_fileName = (char *) malloc(_MAX_PATH * sizeof(char)); + if(ptpf->m_fileName == NULL) + return NULL; + + // The char array is emptied so that there is no junk characters. + strncpy(ptpf->m_fileName, "", (_MAX_PATH * sizeof(char))); + + + // Save off stuff + // + if(strchr(mode,'r') != 0) + ptpf->m_mode = FALSE; // Read mode + else if(strchr(mode,'w') != 0) + ptpf->m_mode = TRUE; // Write mode + else + { + if(ptpf->m_fileName != NULL) + { + // if (strlen(ptpf->m_fileName)) + if (ptpf->m_fileName) + unlink(ptpf->m_fileName); + + free(ptpf->m_fileName); + ptpf->m_fileName = NULL; + } + + return NULL; + } + + + ptpf->m_pipeCommand = (PCOMMANDLINEPARSER) malloc(sizeof(COMMANDLINEPARSER)); + if (!ptpf->m_pipeCommand) + { + // if (strlen(ptpf->m_fileName)) + if (ptpf->m_fileName) + unlink(ptpf->m_fileName); + + free(ptpf->m_fileName); + ptpf->m_fileName = NULL; + + return NULL; + } + + // Initialise the variables + ptpf->m_pipeCommand->m_isValid = TRUE; + + /**** + // Commented since these are not being used. Still retained here. + // To be removed once things are proved to be working fine to a good confident level, + + ptpf->m_pipeCommand->m_redirInName = NULL; + ptpf->m_pipeCommand->m_redirOutName = NULL; + ptpf->m_pipeCommand->m_redirErrName = NULL; + ptpf->m_pipeCommand->m_redirBothName = NULL; + ptpf->m_pipeCommand->nextarg = NULL; + ****/ + + ptpf->m_pipeCommand->sSkippedToken = NULL; + ptpf->m_pipeCommand->m_argv = NULL; + ptpf->m_pipeCommand->new_argv = NULL; + + #ifdef MPK_ON + ptpf->m_pipeCommand->m_qSemaphore = NULL; + #else + ptpf->m_pipeCommand->m_qSemaphore = 0L; + #endif //MPK_ON + + ptpf->m_pipeCommand->m_noScreen = 0; + ptpf->m_pipeCommand->m_AutoDestroy = 0; + ptpf->m_pipeCommand->m_argc = 0; + ptpf->m_pipeCommand->m_argv_len = 1; + + + ptpf->m_pipeCommand->m_argv = (char **) malloc(ptpf->m_pipeCommand->m_argv_len * sizeof(char *)); + if (ptpf->m_pipeCommand->m_argv == NULL) + { + free(ptpf->m_pipeCommand); + ptpf->m_pipeCommand = NULL; + + // if (strlen(ptpf->m_fileName)) + if (ptpf->m_fileName) + unlink(ptpf->m_fileName); + + free(ptpf->m_fileName); + ptpf->m_fileName = NULL; + + return NULL; + } + ptpf->m_pipeCommand->m_argv[0] = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if (ptpf->m_pipeCommand->m_argv[0] == NULL) + { + for(j=0; jm_pipeCommand->m_argv[j]) + { + free(ptpf->m_pipeCommand->m_argv[j]); + ptpf->m_pipeCommand->m_argv[j]=NULL; + } + } + free(ptpf->m_pipeCommand->m_argv); + ptpf->m_pipeCommand->m_argv=NULL; + + free(ptpf->m_pipeCommand); + ptpf->m_pipeCommand = NULL; + + // if (strlen(ptpf->m_fileName)) + if (ptpf->m_fileName) + unlink(ptpf->m_fileName); + + free(ptpf->m_fileName); + ptpf->m_fileName = NULL; + + return NULL; + } + + + ptpf->m_redirect = (char *) malloc(MAX_DN_BYTES * sizeof(char)); + if (ptpf->m_redirect == NULL) + { + for(i=0; im_pipeCommand->m_argv_len; i++) + { + if(ptpf->m_pipeCommand->m_argv[i] != NULL) + { + free(ptpf->m_pipeCommand->m_argv[i]); + ptpf->m_pipeCommand->m_argv[i] = NULL; + } + } + + free(ptpf->m_pipeCommand->m_argv); + ptpf->m_pipeCommand->m_argv = NULL; + + free(ptpf->m_pipeCommand); + ptpf->m_pipeCommand = NULL; + + + // if (strlen(ptpf->m_fileName)) + if (ptpf->m_fileName) + unlink(ptpf->m_fileName); + + free(ptpf->m_fileName); + ptpf->m_fileName = NULL; + + return NULL; + } + + // The char array is emptied. + // If it is not done so, then it could contain some junk values and the string length in that case + // will not be zero. This causes erroneous results in fnPipeFileMakeArgv() function + // where strlen(ptpf->m_redirect) is used as a check for incrementing the parameter count and + // it will wrongly get incremented in such cases. + strncpy(ptpf->m_redirect, "", (MAX_DN_BYTES * sizeof(char))); + + // Parse the parameters. + fnCommandLineParser(ptpf->m_pipeCommand, (char *)command, TRUE); + if (!ptpf->m_pipeCommand->m_isValid) + { + fnTempPipeFileReleaseMemory(ptpf); + return NULL; + } + + + // Create a temporary file name + // + strncpy ( tempName, fnNwGetEnvironmentStr((char *)"TEMP", DEFTEMP), (_MAX_PATH - 20) ); + tempName[_MAX_PATH-20] = '\0'; + strcat(tempName, (char *)"\\plXXXXXX.tmp"); + if (!fnMy_MkTemp(tempName)) + { + fnTempPipeFileReleaseMemory(ptpf); + return NULL; + } + + // create a temporary place-holder file + fclose(fopen(tempName, (char *)"w")); + strcpy(ptpf->m_fileName, tempName); + + + // Make the argument array + if(!fnPipeFileMakeArgv(ptpf)) + { + fnTempPipeFileReleaseMemory(ptpf); + + // Release additional memory + if(ptpf->m_argv != NULL) + { + for(i=0; im_argv_len; i++) + { + if(ptpf->m_argv[i] != NULL) + { + free(ptpf->m_argv[i]); + ptpf->m_argv[i] = NULL; + } + } + + free(ptpf->m_argv); + ptpf->m_argv = NULL; + } + + return NULL; + } + + + // Open the temp file in the appropriate way... + // + if (!ptpf->m_mode) // If Read mode? + { + // we wish to spawn a command, intercept its output, + // and then get that output + // + if (!ptpf->m_argv[0]) + { + fnTempPipeFileReleaseMemory(ptpf); + + // Release additional memory + if(ptpf->m_argv != NULL) + { + for(i=0; im_argv_len; i++) + { + if(ptpf->m_argv[i] != NULL) + { + free(ptpf->m_argv[i]); + ptpf->m_argv[i] = NULL; + } + } + + free(ptpf->m_argv); + ptpf->m_argv = NULL; + } + + return NULL; + } + + if (ptpf->m_launchPerl) + fnPipeFileDoPerlLaunch(ptpf); + else + if (ptpf->m_doPerlGlob) + fnDoPerlGlob(ptpf->m_argv, ptpf->m_fileName); // hack to do perl globbing + else + spawnvp(P_WAIT, ptpf->m_argv[0], ptpf->m_argv); + + ptpf->m_file = fopen (ptpf->m_fileName, (char *)"r"); // Get the Pipe file handle + } + else if (ptpf->m_mode) // If Write mode? + { + // we wish to open the file for writing now and + // do the command later + // + ptpf->m_file = fopen(ptpf->m_fileName, (char *)"w"); + } + + fnTempPipeFileReleaseMemory(ptpf); + + // Release additional memory + if(ptpf->m_argv != NULL) + { + for(i=0; i<(ptpf->m_argv_len); i++) + { + if(ptpf->m_argv[i] != NULL) + { + free(ptpf->m_argv[i]); + ptpf->m_argv[i] = NULL; + } + } + + free(ptpf->m_argv); + ptpf->m_argv = NULL; + } + + + return ptpf->m_file; // Return the Pipe file handle. + } + + + /*============================================================================================ + + Function : fnPipeFileClose + + Description : This function closes the pipe file. + + Parameters : ptpf (IN) - Input structure. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnPipeFileClose(PTEMPPIPEFILE ptpf) + { + int i = 0; + + if (ptpf->m_mode) // If Write mode? + { + // we wish to spawn a command using our temp file for + // its input + // + if(ptpf->m_file != NULL) + { + fclose (ptpf->m_file); + ptpf->m_file = NULL; + } + + if (ptpf->m_launchPerl) + fnPipeFileDoPerlLaunch(ptpf); + else if (ptpf->m_argv) + spawnvp(P_WAIT, ptpf->m_argv[0], ptpf->m_argv); + } + + + // Close the temporary Pipe File, if opened + if (ptpf->m_file) + { + fclose(ptpf->m_file); + ptpf->m_file = NULL; + } + // Delete the temporary Pipe Filename if still valid and free the memory associated with the file name. + if(ptpf->m_fileName != NULL) + { + // if (strlen(ptpf->m_fileName)) + if (ptpf->m_fileName) + unlink(ptpf->m_fileName); + + free(ptpf->m_fileName); + ptpf->m_fileName = NULL; + } + + /** + if(ptpf->m_argv != NULL) + { + for(i=0; i<(ptpf->m_argv_len); i++) + { + if(ptpf->m_argv[i] != NULL) + { + free(ptpf->m_argv[i]); + ptpf->m_argv[i] = NULL; + } + } + + free(ptpf->m_argv); + ptpf->m_argv = NULL; + } + **/ + + if (ptpf->m_perlSynchSemaphore) + { + #ifdef MPK_ON + kSemaphoreFree(ptpf->m_perlSynchSemaphore); + #else + CloseLocalSemaphore(ptpf->m_perlSynchSemaphore); + #endif //MPK_ON + } + + + return; + } + + + /*============================================================================================ + + Function : fnPipeFileDoPerlLaunch + + Description : This function launches Perl. + + Parameters : ptpf (IN) - Input structure. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnPipeFileDoPerlLaunch(PTEMPPIPEFILE ptpf) + { + char curdir[_MAX_PATH] = {'\0'}; + char* pcwd = NULL; + + int i=0; + + + // save off the current working directory to restore later + // this is just a hack! these problems of synchronization and + // restoring calling context need a much better solution! + pcwd = (char *)getcwd(curdir, sizeof(curdir)-1); + fnSystemCommand(ptpf->m_argv, ptpf->m_argv_len); + if (ptpf->m_perlSynchSemaphore) + { + #ifdef MPK_ON + kSemaphoreWait(ptpf->m_perlSynchSemaphore); + #else + WaitOnLocalSemaphore(ptpf->m_perlSynchSemaphore); + #endif //MPK_ON + } + + if (pcwd) + chdir(pcwd); + + return; + } + + + /*============================================================================================ + + Function : fnTempPipeFile + + Description : This function initialises the variables of the structure passed in. + + Parameters : ptpf (IN) - Input structure. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnTempPipeFile(PTEMPPIPEFILE ptpf) + { + ptpf->m_fileName = NULL; + + ptpf->m_mode = FALSE; // Default mode = Read mode. + ptpf->m_file = NULL; + ptpf->m_pipeCommand = NULL; + ptpf->m_argv = NULL; + + ptpf->m_redirect = NULL; + + ptpf->m_launchPerl = FALSE; + ptpf->m_doPerlGlob = FALSE; + + #ifdef MPK_ON + ptpf->m_perlSynchSemaphore = NULL; + #else + ptpf->m_perlSynchSemaphore = 0L; + #endif + + ptpf->m_argv_len = 0; + + return; + } + + + /*============================================================================================ + + Function : fnTempPipeFileReleaseMemory + + Description : This function frees the memory allocated to various buffers. + + Parameters : ptpf (IN) - Input structure. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnTempPipeFileReleaseMemory(PTEMPPIPEFILE ptpf) + { + int i=0; + + + if (ptpf->m_pipeCommand) + { + if(ptpf->m_pipeCommand->m_argv != NULL) + { + for(i=0; im_pipeCommand->m_argv_len; i++) + { + if(ptpf->m_pipeCommand->m_argv[i] != NULL) + { + free(ptpf->m_pipeCommand->m_argv[i]); + ptpf->m_pipeCommand->m_argv[i] = NULL; + } + } + + free(ptpf->m_pipeCommand->m_argv); + ptpf->m_pipeCommand->m_argv = NULL; + } + + if(ptpf->m_pipeCommand->sSkippedToken != NULL) + { + free(ptpf->m_pipeCommand->sSkippedToken); + ptpf->m_pipeCommand->sSkippedToken = NULL; + } + /**** + // Commented since these are not being used. Still retained here. + // To be removed once things are proved to be working fine to a good confident level, + + if(ptpf->m_pipeCommand->nextarg) + { + free(ptpf->m_pipeCommand->nextarg); + ptpf->m_pipeCommand->nextarg = NULL; + } + + if(ptpf->m_pipeCommand->m_redirInName) + { + free(ptpf->m_pipeCommand->m_redirInName); + ptpf->m_pipeCommand->m_redirInName = NULL; + } + if(ptpf->m_pipeCommand->m_redirOutName) + { + free(ptpf->m_pipeCommand->m_redirOutName); + ptpf->m_pipeCommand->m_redirOutName = NULL; + } + if(ptpf->m_pipeCommand->m_redirErrName) + { + free(ptpf->m_pipeCommand->m_redirErrName); + ptpf->m_pipeCommand->m_redirErrName = NULL; + } + if(ptpf->m_pipeCommand->m_redirBothName) + { + free(ptpf->m_pipeCommand->m_redirBothName); + ptpf->m_pipeCommand->m_redirBothName = NULL; + } + ****/ + + if(ptpf->m_pipeCommand != NULL) + { + free(ptpf->m_pipeCommand); + ptpf->m_pipeCommand = NULL; + } + } + + if(ptpf->m_redirect != NULL) + { + free(ptpf->m_redirect); + ptpf->m_redirect = NULL; + } + + return; + } + diff -c /dev/null 'perl-5.7.2/NetWare/bat/BldNWExt.bat' Index: ./NetWare/bat/BldNWExt.bat *** ./NetWare/bat/BldNWExt.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/BldNWExt.bat Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,39 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: Sat Apr 14 13:05:44 2001 + @rem LAST REVISED: Sat Apr 14 2001 + @rem Batch file to toggle b/n building and not building NetWare + @rem specific extns - cgi2perl & perl2ucs. + + if "%1" == "" goto Usage + + if "%1" == "/now" goto now + if "%1" == "on" goto yes + if "%1" == "off" goto no + if "%1" == "/?" goto usage + if "%1" == "/h" goto usage + goto dontknow + + :now + if not "%NW_EXTNS%" == "yes" echo NW_EXTNS is removed, doesn't build NetWare specific extensions + if "%NW_EXTNS%" == "yes" echo NW_EXTNS is set, builds NetWare specific extensions + goto exit + + :yes + Set NW_EXTNS=yes + echo ....NW_EXTNS is set, builds NetWare specific extensions + goto exit + + :no + Set NW_EXTNS= + echo ....NW_EXTNS is removed, doesn't build NetWare specific extensions + goto exit + + :dontknow + goto Usage + + :Usage + @echo on + @echo "Usage: BldNWExt [on|off]" + @echo "Usage: BldNWExt /now" - To display current setting + :exit diff -c /dev/null 'perl-5.7.2/NetWare/bat/Buildtype.bat' Index: ./NetWare/bat/Buildtype.bat *** ./NetWare/bat/Buildtype.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/Buildtype.bat Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,53 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: 24th July 2000 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to set debug/release build and toggle D2 flag for + @rem debugging in case of debug build. + @rem This file calls ToggleD2.bat which switches b/n d2 & d1 flags + + if "%1" == "" goto Usage + if "%1" == "/now" goto now + if "%1" == "/?" goto usage + if "%1" == "/h" goto usage + + if "%1" == "r" goto set_type_rel + if "%1" == "R" goto set_type_rel + + if "%1" == "d" goto set_type_dbg + if "%1" == "D" goto set_type_dbg + + Rem Invalid input, display help message + goto Usage + + :set_type_rel + set MAKE_TYPE=Release + echo ....Build set to %MAKE_TYPE% + goto set_d2_off + + :set_type_dbg + set MAKE_TYPE=Debug + echo ....Build set to %MAKE_TYPE% + if "%2" == "" goto set_d2_off + call ToggleD2 %2 + + goto exit + + :set_d2_off + call ToggleD2 off + goto exit + + :now + if "%MAKE_TYPE%" == "" echo MAKE_TYPE is not set, hence it defaults to Release build + if not "%MAKE_TYPE%" == "" echo Current build type is - %MAKE_TYPE% + call ToggleD2 /now + goto exit + + :Usage + @echo on + @echo "Usage: buildtype r/R|d/D [on/off]" + @echo on/off - Toggling D2 flag for debug build + @echo "Usage: buildtype /now" - To display current setting + @echo Ex. buildtype d on + + :exit diff -c /dev/null 'perl-5.7.2/NetWare/bat/MPKBuild.bat' Index: ./NetWare/bat/MPKBuild.bat *** ./NetWare/bat/MPKBuild.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/MPKBuild.bat Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,64 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: 22nd May 2000 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to set MPK/Non-MPK builds and toggle XDC flag setting + @rem This file calls ToggleXDC.bat + + if "%1" == "" goto Usage + + if "%1" == "/now" goto now + if "%1" == "on" goto yes + if "%1" == "off" goto no + if "%1" == "/?" goto usage + goto dontknow + + :now + if "%USE_MPK%" == "" echo USE_MPK is removed, doesn't use MPK APIs + if not "%USE_MPK%" == "" echo USE_MPK is set, uses MPK APIs, MPKBASE set to %MPKBASE% + call ToggleXDC %1 + goto exit + + :yes + Set USE_MPK=1 + echo ....USE_MPK is set, uses MPK APIs + if "%2" == "" goto setdef + if "%2" == "default" goto setdef + SET MPKBASE=%2 + :yescon1 + call ToggleXDC on %3 %4 + echo ....MPKBASE set to %MPKBASE% + goto exit + + :no + Set USE_MPK= + SET MPKBASE= + if not "%2" == "" goto xdc_u + call ToggleXDC off + :nocon1 + echo ....USE_MPK is removed. doesn't use MPK APIs + goto exit + + :dontknow + goto Usage + + :setdef + SET MPKBASE=p:\apps\mpk + goto yescon1 + + :xdc_u + call ToggleXDC on %2 %3 + goto nocon1 + + :Usage + @echo on + @echo "Usage: MPKBuild [on][off] [[path][default]] [[flag1] [flag2]]" + @echo "Usage: MPKBuild /now" - To display current setting + @echo Scenarios... + @echo ...Use MPK, path set to default and XDC set to -u :MPKBuild on + @echo ...Use MPK, path set to default and XDC set to -u :MPKBuild on default -n + @echo ...Use MPK, path set to "path" and XDC set to -n :MPKBuild on "path" -n + @echo ...Use MPK, path set to default and XDC set to -n, -u :MPKBuild on default -n -u + @echo ...No MPK, No XDC :MPKBuild off + @echo ...No MPK, Use XDC with -u flag :MPKBuild off -u + :exit diff -c /dev/null 'perl-5.7.2/NetWare/bat/SetNWBld.bat' Index: ./NetWare/bat/SetNWBld.bat *** ./NetWare/bat/SetNWBld.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/SetNWBld.bat Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,62 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: Thu 18th Jan 2001 09:18:08 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to set the path to NetWare SDK, Watcom directories & MPK SDK + @rem This file calls setnlmsdk.bat, setwatcom.bat & setmpksdk.bat + + REM If no parameters are passed, display usage + if "%1" == "" goto Usage + if "%1" == "/?" goto Usage + if "%1" == "/h" goto Usage + + REM Display the current settings + if "%1" == "/now" goto now + + REM If na is passed, don't set that parameter + if "%1" == "na" goto skip_nlmsdk_msg + :setnwsdk + call setnlmsdk %1 + goto skip_nlmsdk_nomsg + + :skip_nlmsdk_msg + @echo Retaining NLMSDKBASE=%NLMSDKBASE% + :skip_nlmsdk_nomsg + + if "%2" == "" goto exit + if "%2" == "na" goto skip_watcom_msg + :setwatcom + call setwatcom %2 + goto skip_watcom_nomsg + + :skip_watcom_msg + @echo Retaining WATCOM=%WATCOM% + :skip_watcom_nomsg + + if "%3" == "" goto exit + if "%3" == "na" goto skip_mpksdk_msg + :setmpk + call setmpksdk %3 + goto skip_mpksdk_nomsg + + :skip_mpksdk_msg + @echo Retaining MPKBASE=%MPKBASE% + :skip_mpksdk_nomsg + + goto exit + + :now + @echo NLMSDKBASE=%NLMSDKBASE% + @echo WATCOM=%WATCOM% + @echo MPKBASE=%MPKBASE% + goto exit + + goto exit + :Usage + @echo on + @echo "Usage: setnwbld [] []" + @echo "Usage: setnwbld /now" - To display current setting + @echo Pass na if you don't want to change a setting + @echo Ex. setnwbld d:\ndk\nwsdk na p:\mpk + @echo Ex. setnwbld d:\ndk\ + :exit diff -c /dev/null 'perl-5.7.2/NetWare/bat/Setmpksdk.bat' Index: ./NetWare/bat/Setmpksdk.bat *** ./NetWare/bat/Setmpksdk.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/Setmpksdk.bat Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,27 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: 24th July 2000 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to set the path to MPK SDK + @rem This file is called from SetNWBld.bat. + + if "%1" == "/now" goto now + if "%1" == "" goto Usage + if "%1" == "/?" goto usage + if "%1" == "/h" goto usage + + SET MPKBASE=%1 + echo MPKBASE set to %1 + + goto exit + + :now + @echo MPKBASE=%MPKBASE% + goto exit + + :Usage + @echo on + @echo "Usage: setmpksdk " + @echo "Usage: setmpksdk /now" - To display current setting + @echo Ex. setmpksdk p:\sw\mpk + :exit diff -c /dev/null 'perl-5.7.2/NetWare/bat/Setnlmsdk.bat' Index: ./NetWare/bat/Setnlmsdk.bat *** ./NetWare/bat/Setnlmsdk.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/Setnlmsdk.bat Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,28 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: 24th July 2000 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to set the path to NetWare SDK + @rem This file is called from SetNWBld.bat. + + if "%1" == "/now" goto now + if "%1" == "" goto Usage + if "%1" == "/?" goto usage + if "%1" == "/h" goto usage + + set NLMSDKBASE=%1 + echo NLMSDKBASE set to %1 + + goto exit + + :now + @echo NLMSDKBASE=%NLMSDKBASE% + goto exit + + :Usage + @echo on + @echo "Usage: setnlmsdk " + @echo "Usage: setnlmsdk /now" - To display current setting + @echo Ex. setnlmsdk e:\sdkcd14\nwsdk + :exit + diff -c /dev/null 'perl-5.7.2/NetWare/bat/Setwatcom.bat' Index: ./NetWare/bat/Setwatcom.bat *** ./NetWare/bat/Setwatcom.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/Setwatcom.bat Mon Jul 9 17:09:39 2001 *************** *** 0 **** --- 1,28 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: 24th July 2000 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to set the path to Watcom directories + @rem This file is called from SetNWBld.bat. + + if "%1" == "/now" goto now + if "%1" == "" goto Usage + if "%1" == "/?" goto usage + if "%1" == "/h" goto usage + + set WATCOM=%1 + echo WATCOM set to %1 + + goto exit + + :now + @echo WATCOM=%WATCOM% + goto exit + + :Usage + @echo on + @echo "Usage: setwatcom " + @echo "Usage: setwatcom /now" - To display current setting + @echo Ex. setwatcom d:\Watcom + :exit + diff -c /dev/null 'perl-5.7.2/NetWare/bat/ToggleD2.bat' Index: ./NetWare/bat/ToggleD2.bat *** ./NetWare/bat/ToggleD2.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/ToggleD2.bat Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,40 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: 23rd August 1999 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to toggle D2 flag for debugging in case of debug build + @rem and remove in case of release build. + @rem This file is called from BuildType.bat + + if "%1" == "" goto Usage + + if "%1" == "/now" goto now + if "%1" == "on" goto yes + if "%1" == "off" goto no + if "%1" == "/?" goto usage + if "%1" == "/h" goto usage + goto dontknow + + :now + if "%USE_D2%" == "" echo USE_D2 is removed, uses /d1 + if not "%USE_D2%" == "" echo USE_D2 is set, uses /d2 + goto exit + + :yes + Set USE_D2=1 + echo ....USE_D2 is set, uses /d2 + goto exit + + :no + Set USE_D2= + echo ....USE_D2 is removed. uses /d1 + goto exit + + :dontknow + goto Usage + + :Usage + @echo on + @echo "Usage: ToggleD2 [on|off]" + @echo "Usage: ToggleD2 /now" - To display current setting + :exit diff -c /dev/null 'perl-5.7.2/NetWare/bat/ToggleXDC.bat' Index: ./NetWare/bat/ToggleXDC.bat *** ./NetWare/bat/ToggleXDC.bat Thu Jan 1 02:00:00 1970 --- ./NetWare/bat/ToggleXDC.bat Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,43 ---- + @echo off + @rem AUTHOR: sgp + @rem CREATED: 2nd November 1999 + @rem LAST REVISED: 6th April 2001 + @rem Batch file to toggle XDC flag setting, to link with XDC or not + @rem This file is called from MPKBuild.bat. + + if "%1" == "" goto Usage + + if "%1" == "/now" goto now + if "%1" == "on" goto yes + if "%1" == "off" goto no + if "%1" == "/?" goto usage + goto dontknow + + :now + if "%USE_XDC%" == "" echo USE_XDC is removed, doesn't link with XDCDATA + if not "%USE_XDC%" == "" echo USE_XDC is set, links with XDCDATA, XDCFLAGS = %XDCFLAGS% + goto exit + + :yes + Set USE_XDC=1 + echo ....USE_XDC is set, links with XDCDATA + if "%2" == "" SET XDCFLAGS=-n + if not "%2" == "" SET XDCFLAGS=%2 + if not "%3" == "" SET XDCFLAGS=%XDCFLAGS% %3 + echo ....XDCFLAGS set to %XDCFLAGS% + goto exit + + :no + Set USE_XDC= + SET XDCFLAGS= + echo ....USE_XDC is removed. doesn't link with XDCDATA + goto exit + + :dontknow + goto Usage + + :Usage + @echo on + @echo "Usage: ToggleXDC [on|off] [[flag1] [flag2]]" + @echo "Usage: ToggleD2 /now" - To display current setting + :exit diff -c /dev/null 'perl-5.7.2/NetWare/config.wc' Index: ./NetWare/config.wc *** ./NetWare/config.wc Thu Jan 1 02:00:00 1970 --- ./NetWare/config.wc Fri Jul 13 03:18:23 2001 *************** *** 0 **** --- 1,805 ---- + ## Configured by: ~cf_email~ + ## Target system: NetWare + Author='Guruprasad' + PERL_CONFIG_SH='true' + Date='$Date' + Header='' + Id='$Id' + Locker='' + Log='$Log' + Mcc='Mcc' + RCSfile='$RCSfile' + Revision='$Revision' + Source='' + State='' + _a='.lib' + _exe='.exe' + _nlm='.nlm' + _nlp='.nlp' + _o='.obj' + afs='false' + alignbytes='8' + ansi2knr='' + aphostname='' + api_revision='~PERL_API_REVISION~' + api_subversion='~PERL_API_SUBVERSION~' + api_version='~PERL_API_VERSION~' + api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~' + ar='lib386' + archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~' + archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~' + archname64='' + archname='NetWare' + archobjs='' + awk='awk' + baserev='5' + bash='' + bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~' + bincompat5005='undef' + binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~' + bison='' + byacc='byacc' + byteorder='1234' + c='' + castflags='0' + cat='type' + cc='cl' + cccdlflags=' ' + ccdlflags=' ' + ccflags='-MD -DNETWARE' + ccsymbols='' + cf_by='nobody' + cf_email='nobody@no.where.net' + cf_time='' + charsize='1' + chgrp='' + chmod='' + chown='' + clocktype='clock_t' + comm='' + compress='' + contains='grep' + cp='copy' + cpio='' + cpp='cl -nologo -E' + cpp_stuff='42' + cppccsymbols='' + cppflags='-DNETWARE' + cpplast='' + cppminus='' + cpprun='cl -nologo -E' + cppstdin='cl -nologo -E' + cppsymbols='' + crosscompile='undef' + cryptlib='' + csh='undef' + d_Gconvert='sprintf((b),"%.*g",(n),(x))' + d_PRIEldbl='undef' + d_PRIFldbl='undef' + d_PRIGldbl='undef' + d_PRIX64='undef' + d_PRId64='undef' + d_PRIeldbl='undef' + d_PRIfldbl='undef' + d_PRIgldbl='undef' + d_PRIi64='undef' + d_PRIo64='undef' + d_PRIu64='undef' + d_PRIx64='undef' + d_access='define' + d_accessx='undef' + d_alarm='undef' + d_archlib='define' + d_atolf='undef' + d_atoll='undef' + d_attribut='undef' + d_bcmp='undef' + d_bcopy='undef' + d_bincompat5005='undef' + d_bsd='define' + d_bsdgetpgrp='undef' + d_bsdsetpgrp='undef' + d_bzero='undef' + d_casti32='undef' + d_castneg='define' + d_charvspr='undef' + d_chown='undef' + d_chroot='undef' + d_chsize='define' + d_closedir='define' + d_const='define' + d_crypt='undef' + d_csh='undef' + d_cuserid='undef' + d_dbl_dig='define' + d_difftime='define' + d_dirnamlen='undef' + d_dlerror='define' + d_dlopen='define' + d_dlsymun='undef' + d_dosuid='undef' + d_drand48proto='undef' + d_dup2='define' + d_eaccess='undef' + d_endgrent='undef' + d_endhent='undef' + d_endnent='undef' + d_endpent='undef' + d_endpwent='undef' + d_endsent='undef' + d_endspent='undef' + d_eofnblk='define' + d_eunice='undef' + d_fchdir='undef' + d_fchmod='undef' + d_fchown='undef' + d_fcntl='undef' + d_fd_macros='define' + d_fd_set='define' + d_fds_bits='define' + d_fgetpos='define' + d_flexfnam='define' + d_flock='define' + d_fork='undef' + d_fpathconf='undef' + d_fpos64_t='undef' + d_fs_data_s='undef' + d_fseeko='undef' + d_fsetpos='define' + d_fstatfs='undef' + d_fstatvfs='undef' + d_ftello='undef' + d_ftime='define' + d_getcwd='undef' + d_getfsstat='undef' + d_getgrent='undef' + d_getgrps='undef' + d_gethbyaddr='define' + d_gethbyname='define' + d_gethent='undef' + d_gethname='define' + d_gethostprotos='define' + d_getlogin='define' + d_getmnt='undef' + d_getmntent='undef' + d_getnbyaddr='undef' + d_getnbyname='undef' + d_getnent='undef' + d_getnetprotos='define' + d_getpbyname='define' + d_getpbynumber='define' + d_getpent='undef' + d_getpgid='undef' + d_getpgrp2='undef' + d_getpgrp='undef' + d_getppid='undef' + d_getprior='undef' + d_getprotoprotos='define' + d_getpwent='undef' + d_getsbyname='define' + d_getsbyport='define' + d_getsent='undef' + d_getservprotos='define' + d_getspent='undef' + d_getspnam='undef' + d_gettimeod='undef' + d_gnulibc='undef' + d_grpasswd='undef' + d_hasmntopt='undef' + d_htonl='define' + d_iconv='undef' + d_index='undef' + d_inetaton='undef' + d_int64_t='undef' + d_isascii='define' + d_killpg='undef' + d_lchown='undef' + d_ldbl_dig='define' + d_link='define' + d_locconv='define' + d_lockf='undef' + d_longdbl='define' + d_longlong='undef' + d_lseekproto='define' + d_lstat='undef' + d_madvise='undef' + d_mblen='define' + d_mbstowcs='define' + d_mbtowc='define' + d_memchr='define' + d_memcmp='define' + d_memcpy='define' + d_memmove='define' + d_memset='define' + d_mkdir='define' + d_mkdtemp='undef' + d_mkfifo='undef' + d_mkstemp='undef' + d_mkstemps='undef' + d_mktime='define' + d_mmap='undef' + d_mprotect='undef' + d_msg='undef' + d_msg_ctrunc='undef' + d_msg_dontroute='undef' + d_msg_oob='undef' + d_msg_peek='undef' + d_msg_proxy='undef' + d_msgctl='undef' + d_msgget='undef' + d_msgrcv='undef' + d_msgsnd='undef' + d_msync='undef' + d_munmap='undef' + d_mymalloc='undef' + d_nice='undef' + d_nl_langinfo='undef' + d_nv_preserves_uv='define' + d_off64_t='undef' + d_old_pthread_create_joinable='undef' + d_oldpthreads='undef' + d_oldsock='undef' + d_open3='undef' + d_pathconf='undef' + d_pause='undef' + d_phostname='undef' + d_pipe='define' + d_poll='undef' + d_portable='define' + d_pthread_atfork='undef' + d_pthread_yield='undef' + d_pwage='undef' + d_pwchange='undef' + d_pwclass='undef' + d_pwcomment='undef' + d_pwexpire='undef' + d_pwgecos='undef' + d_pwpasswd='undef' + d_pwquota='undef' + d_qgcvt='undef' + d_quad='undef' + d_readdir='define' + d_readlink='undef' + d_rename='define' + d_rewinddir='define' + d_rmdir='define' + d_safebcpy='undef' + d_safemcpy='undef' + d_sanemcmp='define' + d_sched_yield='undef' + d_scm_rights='undef' + d_seekdir='define' + d_select='define' + d_sem='undef' + d_semctl='undef' + d_semctl_semid_ds='undef' + d_semctl_semun='undef' + d_semget='undef' + d_semop='undef' + d_setegid='undef' + d_seteuid='undef' + d_setgrent='undef' + d_setgrps='undef' + d_sethent='undef' + d_setlinebuf='undef' + d_setlocale='define' + d_setnent='undef' + d_setpent='undef' + d_setpgid='undef' + d_setpgrp2='undef' + d_setpgrp='undef' + d_setprior='undef' + d_setpwent='undef' + d_setregid='undef' + d_setresgid='undef' + d_setresuid='undef' + d_setreuid='undef' + d_setrgid='undef' + d_setruid='undef' + d_setsent='undef' + d_setsid='undef' + d_setspent='undef' + d_setvbuf='define' + d_sfio='undef' + d_shm='undef' + d_shmat='undef' + d_shmatprototype='undef' + d_shmctl='undef' + d_shmdt='undef' + d_shmget='undef' + d_sigaction='undef' + d_sigsetjmp='undef' + d_socket='define' + d_socklen_t='undef' + d_sockpair='undef' + d_sqrtl='undef' + d_statblks='undef' + d_statfs_f_flags='undef' + d_statfs_s='undef' + d_statvfs='undef' + d_stdio_cnt_lval='undef' + d_stdio_ptr_lval='undef' + d_stdio_stream_array='undef' + d_stdiobase='undef' + d_stdstdio='undef' + d_strchr='define' + d_strcoll='define' + d_strctcpy='define' + d_strerrm='strerror(e)' + d_strerror='define' + d_strftime='define' + d_strtod='define' + d_strtol='define' + d_strtold='undef' + d_strtoll='undef' + d_strtoul='define' + d_strtoull='undef' + d_strtouq='undef' + d_strxfrm='define' + d_suidsafe='undef' + d_symlink='undef' + d_syscall='undef' + d_sysconf='undef' + d_sysernlst='' + d_syserrlst='define' + d_system='define' + d_tcgetpgrp='undef' + d_tcsetpgrp='undef' + d_telldir='define' + d_telldirproto='define' + d_time='define' + d_times='undef' + d_truncate='undef' + d_tzname='define' + d_umask='define' + d_uname='define' + d_union_semun='define' + d_ustat='undef' + d_vendorarch='undef' + d_vendorbin='undef' + d_vendorlib='undef' + d_vfork='undef' + d_void_closedir='undef' + d_voidsig='define' + d_voidtty='' + d_volatile='define' + d_vprintf='define' + d_wait4='undef' + d_waitpid='define' + d_wcstombs='define' + d_wctomb='define' + d_xenix='undef' + date='date' + db_hashtype='int' + db_prefixtype='int' + defvoidused='15' + def_perlroot='sys:\perl\scripts' + def_temp='sys:\perl\temp' + direntrytype='DIR' + dlext='nlp' + dlsrc='dl_netware.xs' + doublesize='8' + drand01='(rand()/(double)((unsigned)1< + * or defines the symbol DBL_DIG, which is the number + * of significant digits in a double precision number. If this + * symbol is not defined, a guess of 15 is usually pretty good. + */ + #define HAS_DBL_DIG /**/ + + /* HAS_DIFFTIME: + * This symbol, if defined, indicates that the difftime routine is + * available. + */ + #define HAS_DIFFTIME /**/ + + /* HAS_DLERROR: + * This symbol, if defined, indicates that the dlerror routine is + * available to return a string describing the last error that + * occurred from a call to dlopen(), dlclose() or dlsym(). + */ + #define HAS_DLERROR /**/ + + /* HAS_DUP2: + * This symbol, if defined, indicates that the dup2 routine is + * available to duplicate file descriptors. + */ + #define HAS_DUP2 /**/ + + /* HAS_FCHDIR: + * This symbol, if defined, indicates that the fchdir routine is + * available to change directory using a file descriptor. + */ + /*#define HAS_FCHDIR /**/ + + /* HAS_FCHMOD: + * This symbol, if defined, indicates that the fchmod routine is available + * to change mode of opened files. If unavailable, use chmod(). + */ + /*#define HAS_FCHMOD /**/ + + /* HAS_FCHOWN: + * This symbol, if defined, indicates that the fchown routine is available + * to change ownership of opened files. If unavailable, use chown(). + */ + /*#define HAS_FCHOWN /**/ + + /* HAS_FCNTL: + * This symbol, if defined, indicates to the C program that + * the fcntl() function exists. + */ + /*#define HAS_FCNTL /**/ + + /* HAS_FGETPOS: + * This symbol, if defined, indicates that the fgetpos routine is + * available to get the file position indicator, similar to ftell(). + */ + #define HAS_FGETPOS /**/ + + /* HAS_FLOCK: + * This symbol, if defined, indicates that the flock routine is + * available to do file locking. + */ + #define HAS_FLOCK /**/ + + /* HAS_FORK: + * This symbol, if defined, indicates that the fork routine is + * available. + */ + /*#define HAS_FORK /**/ + + /* HAS_FSETPOS: + * This symbol, if defined, indicates that the fsetpos routine is + * available to set the file position indicator, similar to fseek(). + */ + #define HAS_FSETPOS /**/ + + /* HAS_GETTIMEOFDAY: + * This symbol, if defined, indicates that the gettimeofday() system + * call is available for a sub-second accuracy clock. Usually, the file + * needs to be included (see I_SYS_RESOURCE). + * The type "Timeval" should be used to refer to "struct timeval". + */ + /*#define HAS_GETTIMEOFDAY /**/ + #ifdef HAS_GETTIMEOFDAY + #define Timeval struct timeval /* Structure used by gettimeofday() */ + #endif + + /* HAS_GETGROUPS: + * This symbol, if defined, indicates that the getgroups() routine is + * available to get the list of process groups. If unavailable, multiple + * groups are probably not supported. + */ + /*#define HAS_GETGROUPS /**/ + + /* HAS_GETLOGIN: + * This symbol, if defined, indicates that the getlogin routine is + * available to get the login name. + */ + #define HAS_GETLOGIN /**/ + + /* HAS_GETPGID: + * This symbol, if defined, indicates to the C program that + * the getpgid(pid) function is available to get the + * process group id. + */ + /*#define HAS_GETPGID /**/ + + /* HAS_GETPGRP2: + * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX) + * routine is available to get the current process group. + */ + /*#define HAS_GETPGRP2 /**/ + + /* HAS_GETPPID: + * This symbol, if defined, indicates that the getppid routine is + * available to get the parent process ID. + */ + /*#define HAS_GETPPID /**/ + + /* HAS_GETPRIORITY: + * This symbol, if defined, indicates that the getpriority routine is + * available to get a process's priority. + */ + /*#define HAS_GETPRIORITY /**/ + + /* HAS_INET_ATON: + * This symbol, if defined, indicates to the C program that the + * inet_aton() function is available to parse IP address "dotted-quad" + * strings. + */ + /*#define HAS_INET_ATON /**/ + + /* HAS_KILLPG: + * This symbol, if defined, indicates that the killpg routine is available + * to kill process groups. If unavailable, you probably should use kill + * with a negative process number. + */ + /*#define HAS_KILLPG /**/ + + /* HAS_LINK: + * This symbol, if defined, indicates that the link routine is + * available to create hard links. + */ + #define HAS_LINK /**/ + + /* HAS_LOCALECONV: + * This symbol, if defined, indicates that the localeconv routine is + * available for numeric and monetary formatting conventions. + */ + #define HAS_LOCALECONV /**/ + + /* HAS_LOCKF: + * This symbol, if defined, indicates that the lockf routine is + * available to do file locking. + */ + /*#define HAS_LOCKF /**/ + + /* HAS_LSTAT: + * This symbol, if defined, indicates that the lstat routine is + * available to do file stats on symbolic links. + */ + /*#define HAS_LSTAT /**/ + + /* HAS_MBLEN: + * This symbol, if defined, indicates that the mblen routine is available + * to find the number of bytes in a multibye character. + */ + #define HAS_MBLEN /**/ + + /* HAS_MBSTOWCS: + * This symbol, if defined, indicates that the mbstowcs routine is + * available to covert a multibyte string into a wide character string. + */ + #define HAS_MBSTOWCS /**/ + + /* HAS_MBTOWC: + * This symbol, if defined, indicates that the mbtowc routine is available + * to covert a multibyte to a wide character. + */ + #define HAS_MBTOWC /**/ + + /* HAS_MEMCMP: + * This symbol, if defined, indicates that the memcmp routine is available + * to compare blocks of memory. + */ + #define HAS_MEMCMP /**/ + + /* HAS_MEMCPY: + * This symbol, if defined, indicates that the memcpy routine is available + * to copy blocks of memory. + */ + #define HAS_MEMCPY /**/ + + /* HAS_MEMMOVE: + * This symbol, if defined, indicates that the memmove routine is available + * to copy potentially overlapping blocks of memory. This should be used + * only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your + * own version. + */ + #define HAS_MEMMOVE /**/ + + /* HAS_MEMSET: + * This symbol, if defined, indicates that the memset routine is available + * to set blocks of memory. + */ + #define HAS_MEMSET /**/ + + /* HAS_MKDIR: + * This symbol, if defined, indicates that the mkdir routine is available + * to create directories. Otherwise you should fork off a new process to + * exec /bin/mkdir. + */ + #define HAS_MKDIR /**/ + + /* HAS_MKFIFO: + * This symbol, if defined, indicates that the mkfifo routine is + * available to create FIFOs. Otherwise, mknod should be able to + * do it for you. However, if mkfifo is there, mknod might require + * super-user privileges which mkfifo will not. + */ + /*#define HAS_MKFIFO /**/ + + /* HAS_MKTIME: + * This symbol, if defined, indicates that the mktime routine is + * available. + */ + #define HAS_MKTIME /**/ + + /* HAS_MSYNC: + * This symbol, if defined, indicates that the msync system call is + * available to synchronize a mapped file. + */ + /*#define HAS_MSYNC /**/ + + /* HAS_MUNMAP: + * This symbol, if defined, indicates that the munmap system call is + * available to unmap a region, usually mapped by mmap(). + */ + /*#define HAS_MUNMAP /**/ + + /* HAS_NICE: + * This symbol, if defined, indicates that the nice routine is + * available. + */ + /*#define HAS_NICE /**/ + + /* HAS_PATHCONF: + * This symbol, if defined, indicates that pathconf() is available + * to determine file-system related limits and options associated + * with a given filename. + */ + /* HAS_FPATHCONF: + * This symbol, if defined, indicates that pathconf() is available + * to determine file-system related limits and options associated + * with a given open file descriptor. + */ + /*#define HAS_PATHCONF /**/ + /*#define HAS_FPATHCONF /**/ + + /* HAS_PAUSE: + * This symbol, if defined, indicates that the pause routine is + * available to suspend a process until a signal is received. + */ + /*#define HAS_PAUSE /**/ + + /* HAS_PIPE: + * This symbol, if defined, indicates that the pipe routine is + * available to create an inter-process channel. + */ + #define HAS_PIPE /**/ + + /* HAS_POLL: + * This symbol, if defined, indicates that the poll routine is + * available to poll active file descriptors. You may safely + * include when this symbol is defined. + */ + /*#define HAS_POLL /**/ + + /* HAS_READDIR: + * This symbol, if defined, indicates that the readdir routine is + * available to read directory entries. You may have to include + * . See I_DIRENT. + */ + #define HAS_READDIR /**/ + + /* HAS_SEEKDIR: + * This symbol, if defined, indicates that the seekdir routine is + * available. You may have to include . See I_DIRENT. + */ + #define HAS_SEEKDIR /**/ + + /* HAS_TELLDIR: + * This symbol, if defined, indicates that the telldir routine is + * available. You may have to include . See I_DIRENT. + */ + #define HAS_TELLDIR /**/ + + /* HAS_REWINDDIR: + * This symbol, if defined, indicates that the rewinddir routine is + * available. You may have to include . See I_DIRENT. + */ + #define HAS_REWINDDIR /**/ + + /* HAS_READLINK: + * This symbol, if defined, indicates that the readlink routine is + * available to read the value of a symbolic link. + */ + /*#define HAS_READLINK /**/ + + /* HAS_RENAME: + * This symbol, if defined, indicates that the rename routine is available + * to rename files. Otherwise you should do the unlink(), link(), unlink() + * trick. + */ + #define HAS_RENAME /**/ + + /* HAS_RMDIR: + * This symbol, if defined, indicates that the rmdir routine is + * available to remove directories. Otherwise you should fork off a + * new process to exec /bin/rmdir. + */ + #define HAS_RMDIR /**/ + + /* HAS_SELECT: + * This symbol, if defined, indicates that the select routine is + * available to select active file descriptors. If the timeout field + * is used, may need to be included. + */ + #define HAS_SELECT /**/ + + /* HAS_SETEGID: + * This symbol, if defined, indicates that the setegid routine is available + * to change the effective gid of the current program. + */ + /*#define HAS_SETEGID /**/ + + /* HAS_SETEUID: + * This symbol, if defined, indicates that the seteuid routine is available + * to change the effective uid of the current program. + */ + /*#define HAS_SETEUID /**/ + + /* HAS_SETLINEBUF: + * This symbol, if defined, indicates that the setlinebuf routine is + * available to change stderr or stdout from block-buffered or unbuffered + * to a line-buffered mode. + */ + /*#define HAS_SETLINEBUF /**/ + + /* HAS_SETLOCALE: + * This symbol, if defined, indicates that the setlocale routine is + * available to handle locale-specific ctype implementations. + */ + #define HAS_SETLOCALE /**/ + + /* HAS_SETPGID: + * This symbol, if defined, indicates that the setpgid(pid, gpid) + * routine is available to set process group ID. + */ + /*#define HAS_SETPGID /**/ + + /* HAS_SETPGRP2: + * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) + * routine is available to set the current process group. + */ + /*#define HAS_SETPGRP2 /**/ + + /* HAS_SETPRIORITY: + * This symbol, if defined, indicates that the setpriority routine is + * available to set a process's priority. + */ + /*#define HAS_SETPRIORITY /**/ + + /* HAS_SETREGID: + * This symbol, if defined, indicates that the setregid routine is + * available to change the real and effective gid of the current + * process. + */ + /* HAS_SETRESGID: + * This symbol, if defined, indicates that the setresgid routine is + * available to change the real, effective and saved gid of the current + * process. + */ + /*#define HAS_SETREGID /**/ + /*#define HAS_SETRESGID /**/ + + /* HAS_SETREUID: + * This symbol, if defined, indicates that the setreuid routine is + * available to change the real and effective uid of the current + * process. + */ + /* HAS_SETRESUID: + * This symbol, if defined, indicates that the setresuid routine is + * available to change the real, effective and saved uid of the current + * process. + */ + /*#define HAS_SETREUID /**/ + /*#define HAS_SETRESUID /**/ + + /* HAS_SETRGID: + * This symbol, if defined, indicates that the setrgid routine is available + * to change the real gid of the current program. + */ + /*#define HAS_SETRGID /**/ + + /* HAS_SETRUID: + * This symbol, if defined, indicates that the setruid routine is available + * to change the real uid of the current program. + */ + /*#define HAS_SETRUID /**/ + + /* HAS_SETSID: + * This symbol, if defined, indicates that the setsid routine is + * available to set the process group ID. + */ + /*#define HAS_SETSID /**/ + + /* Shmat_t: + * This symbol holds the return type of the shmat() system call. + * Usually set to 'void *' or 'char *'. + */ + /* HAS_SHMAT_PROTOTYPE: + * This symbol, if defined, indicates that the sys/shm.h includes + * a prototype for shmat(). Otherwise, it is up to the program to + * guess one. Shmat_t shmat _((int, Shmat_t, int)) is a good guess, + * but not always right so it should be emitted by the program only + * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. + */ + #define Shmat_t void * /**/ + /*#define HAS_SHMAT_PROTOTYPE /**/ + + /* HAS_STRCHR: + * This symbol is defined to indicate that the strchr()/strrchr() + * functions are available for string searching. If not, try the + * index()/rindex() pair. + */ + /* HAS_INDEX: + * This symbol is defined to indicate that the index()/rindex() + * functions are available for string searching. + */ + #define HAS_STRCHR /**/ + /*#define HAS_INDEX /**/ + + /* HAS_STRCOLL: + * This symbol, if defined, indicates that the strcoll routine is + * available to compare strings using collating information. + */ + #define HAS_STRCOLL /**/ + + /* USE_STRUCT_COPY: + * This symbol, if defined, indicates that this C compiler knows how + * to copy structures. If undefined, you'll need to use a block copy + * routine of some sort instead. + */ + #define USE_STRUCT_COPY /**/ + + /* HAS_STRTOD: + * This symbol, if defined, indicates that the strtod routine is + * available to provide better numeric string conversion than atof(). + */ + #define HAS_STRTOD /**/ + + /* HAS_STRTOL: + * This symbol, if defined, indicates that the strtol routine is available + * to provide better numeric string conversion than atoi() and friends. + */ + #define HAS_STRTOL /**/ + + /* HAS_STRXFRM: + * This symbol, if defined, indicates that the strxfrm() routine is + * available to transform strings. + */ + #define HAS_STRXFRM /**/ + + /* HAS_SYMLINK: + * This symbol, if defined, indicates that the symlink routine is available + * to create symbolic links. + */ + /*#define HAS_SYMLINK /**/ + + /* HAS_SYSCALL: + * This symbol, if defined, indicates that the syscall routine is + * available to call arbitrary system calls. If undefined, that's tough. + */ + /*#define HAS_SYSCALL /**/ + + /* HAS_SYSCONF: + * This symbol, if defined, indicates that sysconf() is available + * to determine system related limits and options. + */ + /*#define HAS_SYSCONF /**/ + + /* HAS_SYSTEM: + * This symbol, if defined, indicates that the system routine is + * available to issue a shell command. + */ + #define HAS_SYSTEM /**/ + + /* HAS_TCGETPGRP: + * This symbol, if defined, indicates that the tcgetpgrp routine is + * available to get foreground process group ID. + */ + /*#define HAS_TCGETPGRP /**/ + + /* HAS_TCSETPGRP: + * This symbol, if defined, indicates that the tcsetpgrp routine is + * available to set foreground process group ID. + */ + /*#define HAS_TCSETPGRP /**/ + + /* HAS_TRUNCATE: + * This symbol, if defined, indicates that the truncate routine is + * available to truncate files. + */ + /*#define HAS_TRUNCATE /**/ + + /* HAS_TZNAME: + * This symbol, if defined, indicates that the tzname[] array is + * available to access timezone names. + */ + #define HAS_TZNAME /**/ + + /* HAS_UMASK: + * This symbol, if defined, indicates that the umask routine is + * available to set and get the value of the file creation mask. + */ + #define HAS_UMASK /**/ + + /* HAS_USLEEP: + * This symbol, if defined, indicates that the usleep routine is + * available to let the process sleep on a sub-second accuracy. + */ + /*#define HAS_USLEEP /**/ + + /* HASVOLATILE: + * This symbol, if defined, indicates that this C compiler knows about + * the volatile declaration. + */ + #define HASVOLATILE /**/ + #ifndef HASVOLATILE + #define volatile + #endif + + /* HAS_WAIT4: + * This symbol, if defined, indicates that wait4() exists. + */ + /*#define HAS_WAIT4 /**/ + + /* HAS_WAITPID: + * This symbol, if defined, indicates that the waitpid routine is + * available to wait for child process. + */ + #define HAS_WAITPID /**/ + + /* HAS_WCSTOMBS: + * This symbol, if defined, indicates that the wcstombs routine is + * available to convert wide character strings to multibyte strings. + */ + #define HAS_WCSTOMBS /**/ + + /* HAS_WCTOMB: + * This symbol, if defined, indicates that the wctomb routine is available + * to covert a wide character to a multibyte. + */ + #define HAS_WCTOMB /**/ + + /* I_ARPA_INET: + * This symbol, if defined, indicates to the C program that it should + * include to get inet_addr and friends declarations. + */ + #define I_ARPA_INET /**/ + + /* I_DBM: + * This symbol, if defined, indicates that exists and should + * be included. + */ + /* I_RPCSVC_DBM: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_DBM /**/ + #define I_RPCSVC_DBM /**/ + + /* I_DIRENT: + * This symbol, if defined, indicates to the C program that it should + * include . Using this symbol also triggers the definition + * of the Direntry_t define which ends up being 'struct dirent' or + * 'struct direct' depending on the availability of . + */ + /* DIRNAMLEN: + * This symbol, if defined, indicates to the C program that the length + * of directory entry names is provided by a d_namlen field. Otherwise + * you need to do strlen() on the d_name field. + */ + /* Direntry_t: + * This symbol is set to 'struct direct' or 'struct dirent' depending on + * whether dirent is available or not. You should use this pseudo type to + * portably declare your directory entries. + */ + #define I_DIRENT /**/ + /*#define DIRNAMLEN /**/ + #define Direntry_t DIR + + /* I_DLFCN: + * This symbol, if defined, indicates that exists and should + * be included. + */ + #define I_DLFCN /**/ + + /* I_FCNTL: + * This manifest constant tells the C program to include . + */ + #define I_FCNTL /**/ + + /* I_FLOAT: + * This symbol, if defined, indicates to the C program that it should + * include to get definition of symbols like DBL_MAX or + * DBL_MIN, i.e. machine dependent floating point values. + */ + #define I_FLOAT /**/ + + /* I_LIMITS: + * This symbol, if defined, indicates to the C program that it should + * include to get definition of symbols like WORD_BIT or + * LONG_MAX, i.e. machine dependant limitations. + */ + #define I_LIMITS /**/ + + /* I_LOCALE: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #define I_LOCALE /**/ + + /* I_MATH: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #define I_MATH /**/ + + /* I_MEMORY: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_MEMORY /**/ + + /* I_NDBM: + * This symbol, if defined, indicates that exists and should + * be included. + */ + /*#define I_NDBM /**/ + + /* I_NET_ERRNO: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_NET_ERRNO /**/ + + /* I_NETINET_IN: + * This symbol, if defined, indicates to the C program that it should + * include . Otherwise, you may try . + */ + #define I_NETINET_IN /**/ + + /* I_SFIO: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SFIO /**/ + + /* I_STDDEF: + * This symbol, if defined, indicates that exists and should + * be included. + */ + #define I_STDDEF /**/ + + /* I_STDLIB: + * This symbol, if defined, indicates that exists and should + * be included. + */ + #define I_STDLIB /**/ + + /* I_STRING: + * This symbol, if defined, indicates to the C program that it should + * include (USG systems) instead of (BSD systems). + */ + #define I_STRING /**/ + + /* I_SYS_DIR: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_DIR /**/ + + /* I_SYS_FILE: + * This symbol, if defined, indicates to the C program that it should + * include to get definition of R_OK and friends. + */ + /*#define I_SYS_FILE /**/ + + /* I_SYS_IOCTL: + * This symbol, if defined, indicates that exists and should + * be included. Otherwise, include or . + */ + /* I_SYS_SOCKIO: + * This symbol, if defined, indicates the should be included + * to get socket ioctl options, like SIOCATMARK. + */ + #define I_SYS_IOCTL /**/ + #define I_SYS_SOCKIO /**/ + + /* I_SYS_NDIR: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_NDIR /**/ + + /* I_SYS_PARAM: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_PARAM /**/ + + /* I_SYS_RESOURCE: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_RESOURCE /**/ + + /* I_SYS_SELECT: + * This symbol, if defined, indicates to the C program that it should + * include in order to get definition of struct timeval. + */ + /*#define I_SYS_SELECT /**/ + + /* I_SYS_STAT: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #define I_SYS_STAT /**/ + + /* I_SYS_TIMES: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_TIMES /**/ + + /* I_SYS_TYPES: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #define I_SYS_TYPES /**/ + + /* I_SYS_UN: + * This symbol, if defined, indicates to the C program that it should + * include to get UNIX domain socket definitions. + */ + /*#define I_SYS_UN /**/ + + /* I_SYS_WAIT: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_WAIT /**/ + + /* I_TERMIO: + * This symbol, if defined, indicates that the program should include + * rather than . There are also differences in + * the ioctl() calls that depend on the value of this symbol. + */ + /* I_TERMIOS: + * This symbol, if defined, indicates that the program should include + * the POSIX termios.h rather than sgtty.h or termio.h. + * There are also differences in the ioctl() calls that depend on the + * value of this symbol. + */ + /* I_SGTTY: + * This symbol, if defined, indicates that the program should include + * rather than . There are also differences in + * the ioctl() calls that depend on the value of this symbol. + */ + /*#define I_TERMIO /**/ + /*#define I_TERMIOS /**/ + /*#define I_SGTTY /**/ + + /* I_UNISTD: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_UNISTD /**/ + + /* I_UTIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #define I_UTIME /**/ + + /* I_VALUES: + * This symbol, if defined, indicates to the C program that it should + * include to get definition of symbols like MINFLOAT or + * MAXLONG, i.e. machine dependant limitations. Probably, you + * should use instead, if it is available. + */ + /*#define I_VALUES /**/ + + /* I_VFORK: + * This symbol, if defined, indicates to the C program that it should + * include vfork.h. + */ + /*#define I_VFORK /**/ + + /* CAN_PROTOTYPE: + * If defined, this macro indicates that the C compiler can handle + * function prototypes. + */ + /* _: + * This macro is used to declare function parameters for folks who want + * to make declarations with prototypes using a different style than + * the above macros. Use double parentheses. For example: + * + * int main _((int argc, char *argv[])); + */ + #define CAN_PROTOTYPE /**/ + #ifdef CAN_PROTOTYPE + #define _(args) args + #else + #define _(args) () + #endif + + /* SH_PATH: + * This symbol contains the full pathname to the shell used on this + * on this system to execute Bourne shell scripts. Usually, this will be + * /bin/sh, though it's possible that some systems will have /bin/ksh, + * /bin/pdksh, /bin/ash, /bin/bash, or even something such as + * D:/bin/sh.exe. + */ + #define SH_PATH "cmd /x /c" /**/ + + /* INTSIZE: + * This symbol contains the value of sizeof(int) so that the C + * preprocessor can make decisions based on it. + */ + /* LONGSIZE: + * This symbol contains the value of sizeof(long) so that the C + * preprocessor can make decisions based on it. + */ + /* SHORTSIZE: + * This symbol contains the value of sizeof(short) so that the C + * preprocessor can make decisions based on it. + */ + #define INTSIZE 4 /**/ + #define LONGSIZE 4 /**/ + #define SHORTSIZE 2 /**/ + + /* MULTIARCH: + * This symbol, if defined, signifies that the build + * process will produce some binary files that are going to be + * used in a cross-platform environment. This is the case for + * example with the NeXT "fat" binaries that contain executables + * for several CPUs. + */ + /*#define MULTIARCH /**/ + + /* HAS_QUAD: + * This symbol, if defined, tells that there's a 64-bit integer type, + * Quad_t, and its unsigned counterpar, Uquad_t. QUADKIND will be one + * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T. + */ + /*#define HAS_QUAD /**/ + #ifdef HAS_QUAD + # define Quad_t __int64 /**/ + # define Uquad_t unsigned __int64 /**/ + # define QUADKIND 5 /**/ + # define QUAD_IS_INT 1 + # define QUAD_IS_LONG 2 + # define QUAD_IS_LONG_LONG 3 + # define QUAD_IS_INT64_T 4 + #endif + + /* HAS_ACCESSX: + * This symbol, if defined, indicates that the accessx routine is + * available to do extended access checks. + */ + /*#define HAS_ACCESSX /**/ + + /* HAS_EACCESS: + * This symbol, if defined, indicates that the eaccess routine is + * available to do extended access checks. + */ + /*#define HAS_EACCESS /**/ + + /* I_SYS_ACCESS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_ACCESS /**/ + + /* I_SYS_SECURITY: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_SYS_SECURITY /**/ + + /* OSNAME: + * This symbol contains the name of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ + /* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ + #define OSNAME "NetWare" /**/ + #define OSVERS "5.x" /**/ + + /* MEM_ALIGNBYTES: + * This symbol contains the number of bytes required to align a + * double, or a long double when applicable. Usual values are 2, + * 4 and 8. The default is eight, for safety. + */ + #if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) + # define MEM_ALIGNBYTES 8 + #else + #define MEM_ALIGNBYTES 8 + #endif + + /* ARCHLIB: + * This variable, if defined, holds the name of the directory in + * which the user wants to put architecture-dependent public + * library files for perl5. It is most often a local directory + * such as /usr/local/lib. Programs using this variable must be + * prepared to deal with filename expansion. If ARCHLIB is the + * same as PRIVLIB, it is not defined, since presumably the + * program already searches PRIVLIB. + */ + /* ARCHLIB_EXP: + * This symbol contains the ~name expanded version of ARCHLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ + #define ARCHLIB "c:\\perl\\5.7.2\\lib\\NetWare-x86-multi-thread" /**/ + /*#define ARCHLIB_EXP "" /**/ + + /* ARCHNAME: + * This symbol holds a string representing the architecture name. + * It may be used to construct an architecture-dependant pathname + * where library files may be held under a private library, for + * instance. + */ + #define ARCHNAME "NetWare-x86-multi-thread" /**/ + + /* HAS_ATOLF: + * This symbol, if defined, indicates that the atolf routine is + * available to convert strings into long doubles. + */ + /*#define HAS_ATOLF /**/ + + /* HAS_ATOLL: + * This symbol, if defined, indicates that the atoll routine is + * available to convert strings into long longs. + */ + /*#define HAS_ATOLL /**/ + + /* BIN: + * This symbol holds the path of the bin directory where the package will + * be installed. Program must be prepared to deal with ~name substitution. + */ + /* BIN_EXP: + * This symbol is the filename expanded version of the BIN symbol, for + * programs that do not want to deal with that at run-time. + */ + #define BIN "c:\\perl\\5.7.2\\bin\\NetWare-x86-multi-thread" /**/ + #define BIN_EXP "c:\\perl\\5.7.2\\bin\\NetWare-x86-multi-thread" /**/ + + /* PERL_BINCOMPAT_5005: + * This symbol, if defined, indicates that this version of Perl should be + * binary-compatible with Perl 5.005. This is impossible for builds + * that use features like threads and multiplicity it is always undef + * for those versions. + */ + /*#define PERL_BINCOMPAT_5005 /**/ + + /* BYTEORDER: + * This symbol holds the hexadecimal constant defined in byteorder, + * i.e. 0x1234 or 0x4321, etc... + * If the compiler supports cross-compiling or multiple-architecture + * binaries (eg. on NeXT systems), use compiler-defined macros to + * determine the byte order. + * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture + * Binaries (MAB) on either big endian or little endian machines. + * The endian-ness is available at compile-time. This only matters + * for perl, where the config.h can be generated and installed on + * one system, and used by a different architecture to build an + * extension. Older versions of NeXT that might not have + * defined either *_ENDIAN__ were all on Motorola 680x0 series, + * so the default case (for NeXT) is big endian to catch them. + * This might matter for NeXT 3.0. + */ + #if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) + # ifdef __LITTLE_ENDIAN__ + # if LONGSIZE == 4 + # define BYTEORDER 0x1234 + # else + # if LONGSIZE == 8 + # define BYTEORDER 0x12345678 + # endif + # endif + # else + # ifdef __BIG_ENDIAN__ + # if LONGSIZE == 4 + # define BYTEORDER 0x4321 + # else + # if LONGSIZE == 8 + # define BYTEORDER 0x87654321 + # endif + # endif + # endif + # endif + # if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__)) + # define BYTEORDER 0x4321 + # endif + #else + #define BYTEORDER 0x1234 /* large digits for MSB */ + #endif /* NeXT */ + + /* CAT2: + * This macro catenates 2 tokens together. + */ + /* STRINGIFY: + * This macro surrounds its token with double quotes. + */ + #if 42 == 1 + #define CAT2(a,b) a/**/b + #define STRINGIFY(a) "a" + /* If you can get stringification with catify, tell me how! */ + #endif + #if 42 == 42 + #define PeRl_CaTiFy(a, b) a ## b + #define PeRl_StGiFy(a) #a + /* the additional level of indirection enables these macros to be + * used as arguments to other macros. See K&R 2nd ed., page 231. */ + #define CAT2(a,b) PeRl_CaTiFy(a,b) + #define StGiFy(a) PeRl_StGiFy(a) + #define STRINGIFY(a) PeRl_StGiFy(a) + #endif + #if 42 != 1 && 42 != 42 + # include "Bletch: How does this C preprocessor catenate tokens?" + #endif + + /* CPPSTDIN: + * This symbol contains the first part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. Typical value of "cc -E" or "/lib/cpp", but it can also + * call a wrapper. See CPPRUN. + */ + /* CPPMINUS: + * This symbol contains the second part of the string which will invoke + * the C preprocessor on the standard input and produce to standard + * output. This symbol will have the value "-" if CPPSTDIN needs a minus + * to specify standard input, otherwise the value is "". + */ + /* CPPRUN: + * This symbol contains the string which will invoke a C preprocessor on + * the standard input and produce to standard output. It needs to end + * with CPPLAST, after all other preprocessor flags have been specified. + * The main difference with CPPSTDIN is that this program will never be a + * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is + * available directly to the user. Note that it may well be different from + * the preprocessor used to compile the C program. + */ + /* CPPLAST: + * This symbol is intended to be used along with CPPRUN in the same manner + * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". + */ + #define CPPSTDIN "cl -nologo -E" + #define CPPMINUS "" + #define CPPRUN "cl -nologo -E" + #define CPPLAST "" + + /* HAS__FWALK: + * This symbol, if defined, indicates that the _fwalk system call is + * available to apply a function to all the file handles. + */ + /*#define HAS__FWALK /**/ + + /* HAS_ACCESS: + * This manifest constant lets the C program know that the access() + * system call is available to check for accessibility using real UID/GID. + * (always present on UNIX.) + */ + #define HAS_ACCESS /**/ + + /* CASTI32: + * This symbol is defined if the C compiler can cast negative + * or large floating point numbers to 32-bit ints. + */ + /*#define CASTI32 /**/ + + /* CASTNEGFLOAT: + * This symbol is defined if the C compiler can cast negative + * numbers to unsigned longs, ints and shorts. + */ + /* CASTFLAGS: + * This symbol contains flags that say what difficulties the compiler + * has casting odd floating values to unsigned long: + * 0 = ok + * 1 = couldn't cast < 0 + * 2 = couldn't cast >= 0x80000000 + * 4 = couldn't cast in argument expression list + */ + #define CASTNEGFLOAT /**/ + #define CASTFLAGS 0 /**/ + + /* VOID_CLOSEDIR: + * This symbol, if defined, indicates that the closedir() routine + * does not return a value. + */ + /*#define VOID_CLOSEDIR /**/ + + /* HAS_STRUCT_CMSGHDR: + * This symbol, if defined, indicates that the struct cmsghdr + * is supported. + */ + /*#define HAS_STRUCT_CMSGHDR /**/ + + /* HAS_CSH: + * This symbol, if defined, indicates that the C-shell exists. + */ + /* CSH: + * This symbol, if defined, contains the full pathname of csh. + */ + /*#define HAS_CSH /**/ + #ifdef HAS_CSH + #define CSH "" /**/ + #endif + + /* DLSYM_NEEDS_UNDERSCORE: + * This symbol, if defined, indicates that we need to prepend an + * underscore to the symbol name before calling dlsym(). This only + * makes sense if you *have* dlsym, which we will presume is the + * case if you're using dl_dlopen.xs. + */ + /*#define DLSYM_NEEDS_UNDERSCORE /**/ + + /* HAS_DRAND48_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the drand48() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern double drand48 _((void)); + */ + /*#define HAS_DRAND48_PROTO /**/ + + /* HAS_ENDGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the group database. + */ + /*#define HAS_ENDGRENT /**/ + + /* HAS_ENDHOSTENT: + * This symbol, if defined, indicates that the endhostent() routine is + * available to close whatever was being used for host queries. + */ + /*#define HAS_ENDHOSTENT /**/ + + /* HAS_ENDNETENT: + * This symbol, if defined, indicates that the endnetent() routine is + * available to close whatever was being used for network queries. + */ + /*#define HAS_ENDNETENT /**/ + + /* HAS_ENDPROTOENT: + * This symbol, if defined, indicates that the endprotoent() routine is + * available to close whatever was being used for protocol queries. + */ + /*#define HAS_ENDPROTOENT /**/ + + /* HAS_ENDPWENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for finalizing sequential access of the passwd database. + */ + /*#define HAS_ENDPWENT /**/ + + /* HAS_ENDSERVENT: + * This symbol, if defined, indicates that the endservent() routine is + * available to close whatever was being used for service queries. + */ + /*#define HAS_ENDSERVENT /**/ + + /* FCNTL_CAN_LOCK: + * This symbol, if defined, indicates that fcntl() can be used + * for file locking. Normally on Unix systems this is defined. + * It may be undefined on VMS. + */ + /*#define FCNTL_CAN_LOCK /**/ + + /* HAS_FD_SET: + * This symbol, when defined, indicates presence of the fd_set typedef + * in + */ + #define HAS_FD_SET /**/ + + /* FLEXFILENAMES: + * This symbol, if defined, indicates that the system supports filenames + * longer than 14 characters. + */ + #define FLEXFILENAMES /**/ + + /* HAS_FPOS64_T: + * This symbol will be defined if the C compiler supports fpos64_t. + */ + /*#define HAS_FPOS64_T /**/ + + /* HAS_FREXPL: + * This symbol, if defined, indicates that the frexpl routine is + * available to break a long double floating-point number into + * a normalized fraction and an integral power of 2. + */ + /*#define HAS_FREXPL /**/ + + /* HAS_STRUCT_FS_DATA: + * This symbol, if defined, indicates that the struct fs_data + * to do statfs() is supported. + */ + /*#define HAS_STRUCT_FS_DATA /**/ + + /* HAS_FSEEKO: + * This symbol, if defined, indicates that the fseeko routine is + * available to fseek beyond 32 bits (useful for ILP32 hosts). + */ + /*#define HAS_FSEEKO /**/ + + /* HAS_FSTATFS: + * This symbol, if defined, indicates that the fstatfs routine is + * available to stat filesystems by file descriptors. + */ + /*#define HAS_FSTATFS /**/ + + /* HAS_FSYNC: + * This symbol, if defined, indicates that the fsync routine is + * available to write a file's modified data and attributes to + * permanent storage. + */ + /*#define HAS_FSYNC /**/ + + /* HAS_FTELLO: + * This symbol, if defined, indicates that the ftello routine is + * available to ftell beyond 32 bits (useful for ILP32 hosts). + */ + /*#define HAS_FTELLO /**/ + + /* Gconvert: + * This preprocessor macro is defined to convert a floating point + * number to a string without a trailing decimal point. This + * emulates the behavior of sprintf("%g"), but is sometimes much more + * efficient. If gconvert() is not available, but gcvt() drops the + * trailing decimal point, then gcvt() is used. If all else fails, + * a macro using sprintf("%g") is used. Arguments for the Gconvert + * macro are: value, number of digits, whether trailing zeros should + * be retained, and the output buffer. + * Possible values are: + * d_Gconvert='gconvert((x),(n),(t),(b))' + * d_Gconvert='gcvt((x),(n),(b))' + * d_Gconvert='sprintf((b),"%.*g",(n),(x))' + * The last two assume trailing zeros should not be kept. + */ + #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) + + /* HAS_GETCWD: + * This symbol, if defined, indicates that the getcwd routine is + * available to get the current working directory. + */ + /*#define HAS_GETCWD /**/ + + /* HAS_GETESPWNAM: + * This symbol, if defined, indicates that the getespwnam system call is + * available to retrieve enchanced (shadow) password entries by name. + */ + /*#define HAS_GETESPWNAM /**/ + + /* HAS_GETFSSTAT: + * This symbol, if defined, indicates that the getfsstat routine is + * available to stat filesystems in bulk. + */ + /*#define HAS_GETFSSTAT /**/ + + /* HAS_GETGRENT: + * This symbol, if defined, indicates that the getgrent routine is + * available for sequential access of the group database. + */ + /*#define HAS_GETGRENT /**/ + + /* HAS_GETHOSTBYADDR: + * This symbol, if defined, indicates that the gethostbyaddr() routine is + * available to look up hosts by their IP addresses. + */ + #define HAS_GETHOSTBYADDR /**/ + + /* HAS_GETHOSTBYNAME: + * This symbol, if defined, indicates that the gethostbyname() routine is + * available to look up host names in some data base or other. + */ + #define HAS_GETHOSTBYNAME /**/ + + /* HAS_GETHOSTENT: + * This symbol, if defined, indicates that the gethostent() routine is + * available to look up host names in some data base or another. + */ + /*#define HAS_GETHOSTENT /**/ + + /* HAS_GETHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * gethostname() routine to derive the host name. See also HAS_UNAME + * and PHOSTNAME. + */ + /* HAS_UNAME: + * This symbol, if defined, indicates that the C program may use the + * uname() routine to derive the host name. See also HAS_GETHOSTNAME + * and PHOSTNAME. + */ + /* PHOSTNAME: + * This symbol, if defined, indicates the command to feed to the + * popen() routine to derive the host name. See also HAS_GETHOSTNAME + * and HAS_UNAME. Note that the command uses a fully qualified path, + * so that it is safe even if used by a process with super-user + * privileges. + */ + /* HAS_PHOSTNAME: + * This symbol, if defined, indicates that the C program may use the + * contents of PHOSTNAME as a command to feed to the popen() routine + * to derive the host name. + */ + #define HAS_GETHOSTNAME /**/ + #define HAS_UNAME /**/ + /*#define HAS_PHOSTNAME /**/ + #ifdef HAS_PHOSTNAME + #define PHOSTNAME "" /* How to get the host name */ + #endif + + /* HAS_GETHOST_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for gethostent(), gethostbyname(), and + * gethostbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ + #define HAS_GETHOST_PROTOS /**/ + + /* HAS_GETITIMER: + * This symbol, if defined, indicates that the getitimer routine is + * available to return interval timers. + */ + /*#define HAS_GETITIMER /**/ + + /* HAS_GETMNT: + * This symbol, if defined, indicates that the getmnt routine is + * available to get filesystem mount info by filename. + */ + /*#define HAS_GETMNT /**/ + + /* HAS_GETMNTENT: + * This symbol, if defined, indicates that the getmntent routine is + * available to iterate through mounted file systems to get their info. + */ + /*#define HAS_GETMNTENT /**/ + + /* HAS_GETNETBYADDR: + * This symbol, if defined, indicates that the getnetbyaddr() routine is + * available to look up networks by their IP addresses. + */ + /*#define HAS_GETNETBYADDR /**/ + + /* HAS_GETNETBYNAME: + * This symbol, if defined, indicates that the getnetbyname() routine is + * available to look up networks by their names. + */ + /*#define HAS_GETNETBYNAME /**/ + + /* HAS_GETNETENT: + * This symbol, if defined, indicates that the getnetent() routine is + * available to look up network names in some data base or another. + */ + /*#define HAS_GETNETENT /**/ + + /* HAS_GETNET_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getnetent(), getnetbyname(), and + * getnetbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ + #define HAS_GETNET_PROTOS /**/ + + /* HAS_GETPAGESIZE: + * This symbol, if defined, indicates that the getpagesize system call + * is available to get system page size, which is the granularity of + * many memory management calls. + */ + /*#define HAS_GETPAGESIZE /**/ + + /* HAS_GETPROTOENT: + * This symbol, if defined, indicates that the getprotoent() routine is + * available to look up protocols in some data base or another. + */ + /*#define HAS_GETPROTOENT /**/ + + /* HAS_GETPGRP: + * This symbol, if defined, indicates that the getpgrp routine is + * available to get the current process group. + */ + /* USE_BSD_GETPGRP: + * This symbol, if defined, indicates that getpgrp needs one + * arguments whereas USG one needs none. + */ + /*#define HAS_GETPGRP /**/ + /*#define USE_BSD_GETPGRP /**/ + + /* HAS_GETPROTOBYNAME: + * This symbol, if defined, indicates that the getprotobyname() + * routine is available to look up protocols by their name. + */ + /* HAS_GETPROTOBYNUMBER: + * This symbol, if defined, indicates that the getprotobynumber() + * routine is available to look up protocols by their number. + */ + #define HAS_GETPROTOBYNAME /**/ + #define HAS_GETPROTOBYNUMBER /**/ + + /* HAS_GETPROTO_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getprotoent(), getprotobyname(), and + * getprotobyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ + #define HAS_GETPROTO_PROTOS /**/ + + /* HAS_GETPRPWNAM: + * This symbol, if defined, indicates that the getprpwnam system call is + * available to retrieve protected (shadow) password entries by name. + */ + /*#define HAS_GETPRPWNAM /**/ + + /* HAS_GETPWENT: + * This symbol, if defined, indicates that the getpwent routine is + * available for sequential access of the passwd database. + * If this is not available, the older getpw() function may be available. + */ + /*#define HAS_GETPWENT /**/ + + /* HAS_GETSERVENT: + * This symbol, if defined, indicates that the getservent() routine is + * available to look up network services in some data base or another. + */ + /*#define HAS_GETSERVENT /**/ + + /* HAS_GETSERV_PROTOS: + * This symbol, if defined, indicates that includes + * prototypes for getservent(), getservbyname(), and + * getservbyaddr(). Otherwise, it is up to the program to guess + * them. See netdbtype.U for probing for various Netdb_xxx_t types. + */ + #define HAS_GETSERV_PROTOS /**/ + + /* HAS_GETSPNAM: + * This symbol, if defined, indicates that the getspnam system call is + * available to retrieve SysV shadow password entries by name. + */ + /*#define HAS_GETSPNAM /**/ + + /* HAS_GETSERVBYNAME: + * This symbol, if defined, indicates that the getservbyname() + * routine is available to look up services by their name. + */ + /* HAS_GETSERVBYPORT: + * This symbol, if defined, indicates that the getservbyport() + * routine is available to look up services by their port. + */ + #define HAS_GETSERVBYNAME /**/ + #define HAS_GETSERVBYPORT /**/ + + /* HAS_GNULIBC: + * This symbol, if defined, indicates to the C program that + * the GNU C library is being used. + */ + /*#define HAS_GNULIBC /**/ + #if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE) + # define _GNU_SOURCE + #endif + /* HAS_HASMNTOPT: + * This symbol, if defined, indicates that the hasmntopt routine is + * available to query the mount options of file systems. + */ + /*#define HAS_HASMNTOPT /**/ + + /* HAS_HTONL: + * This symbol, if defined, indicates that the htonl() routine (and + * friends htons() ntohl() ntohs()) are available to do network + * order byte swapping. + */ + /* HAS_HTONS: + * This symbol, if defined, indicates that the htons() routine (and + * friends htonl() ntohl() ntohs()) are available to do network + * order byte swapping. + */ + /* HAS_NTOHL: + * This symbol, if defined, indicates that the ntohl() routine (and + * friends htonl() htons() ntohs()) are available to do network + * order byte swapping. + */ + /* HAS_NTOHS: + * This symbol, if defined, indicates that the ntohs() routine (and + * friends htonl() htons() ntohl()) are available to do network + * order byte swapping. + */ + #define HAS_HTONL /**/ + #define HAS_HTONS /**/ + #define HAS_NTOHL /**/ + #define HAS_NTOHS /**/ + + /* HAS_ICONV: + * This symbol, if defined, indicates that the iconv routine is + * available to do character set conversions. + */ + /*#define HAS_ICONV /**/ + + /* HAS_INT64_T: + * This symbol will defined if the C compiler supports int64_t. + * Usually the needs to be included, but sometimes + * is enough. + */ + /*#define HAS_INT64_T /**/ + + /* HAS_ISASCII: + * This manifest constant lets the C program know that isascii + * is available. + */ + #define HAS_ISASCII /**/ + + /* HAS_ISNAN: + * This symbol, if defined, indicates that the isnan routine is + * available to check whether a double is a NaN. + */ + /*#define HAS_ISNAN /**/ + + /* HAS_ISNANL: + * This symbol, if defined, indicates that the isnanl routine is + * available to check whether a long double is a NaN. + */ + /*#define HAS_ISNANL /**/ + + /* HAS_LCHOWN: + * This symbol, if defined, indicates that the lchown routine is + * available to operate on a symbolic link (instead of following the + * link). + */ + /*#define HAS_LCHOWN /**/ + + /* HAS_LDBL_DIG: + * This symbol, if defined, indicates that this system's + * or defines the symbol LDBL_DIG, which is the number + * of significant digits in a long double precision number. Unlike + * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined. + */ + #define HAS_LDBL_DIG /**/ + + /* HAS_LONG_DOUBLE: + * This symbol will be defined if the C compiler supports long + * doubles. + */ + /* LONG_DOUBLESIZE: + * This symbol contains the size of a long double, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long doubles. + */ + #define HAS_LONG_DOUBLE /**/ + #ifdef HAS_LONG_DOUBLE + #define LONG_DOUBLESIZE 10 /**/ + #endif + + /* HAS_LONG_LONG: + * This symbol will be defined if the C compiler supports long long. + */ + /* LONGLONGSIZE: + * This symbol contains the size of a long long, so that the + * C preprocessor can make decisions based on it. It is only + * defined if the system supports long long. + */ + /*#define HAS_LONG_LONG /**/ + #ifdef HAS_LONG_LONG + #define LONGLONGSIZE 8 /**/ + #endif + + /* HAS_LSEEK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the lseek() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern off_t lseek(int, off_t, int); + */ + #define HAS_LSEEK_PROTO /**/ + + /* HAS_MADVISE: + * This symbol, if defined, indicates that the madvise system call is + * available to map a file into memory. + */ + /*#define HAS_MADVISE /**/ + + /* HAS_MEMCHR: + * This symbol, if defined, indicates that the memchr routine is available + * to locate characters within a C string. + */ + #define HAS_MEMCHR /**/ + + /* HAS_MKDTEMP: + * This symbol, if defined, indicates that the mkdtemp routine is + * available to exclusively create a uniquely named temporary directory. + */ + /*#define HAS_MKDTEMP /**/ + + /* HAS_MKSTEMP: + * This symbol, if defined, indicates that the mkstemp routine is + * available to exclusively create and open a uniquely named + * temporary file. + */ + /*#define HAS_MKSTEMP /**/ + + /* HAS_MKSTEMPS: + * This symbol, if defined, indicates that the mkstemps routine is + * available to excluslvely create and open a uniquely named + * (with a suffix) temporary file. + */ + /*#define HAS_MKSTEMPS /**/ + + /* HAS_MMAP: + * This symbol, if defined, indicates that the mmap system call is + * available to map a file into memory. + */ + /* Mmap_t: + * This symbol holds the return type of the mmap() system call + * (and simultaneously the type of the first argument). + * Usually set to 'void *' or 'cadd_t'. + */ + /*#define HAS_MMAP /**/ + #define Mmap_t void * /**/ + + /* HAS_MODFL: + * This symbol, if defined, indicates that the modfl routine is + * available to split a long double x into a fractional part f and + * an integer part i such that |f| < 1.0 and (f + i) = x. + */ + /* HAS_MODFL_POW32_BUG: + * This symbol, if defined, indicates that the modfl routine is + * broken for long doubles >= pow(2, 32). + * For example from 4294967303.150000 one would get 4294967302.000000 + * and 1.150000. The bug has been seen in certain versions of glibc, + * release 2.2.2 is known to be okay. + */ + /*#define HAS_MODFL /**/ + /*#define HAS_MODFL_POW32_BUG /**/ + + /* HAS_MPROTECT: + * This symbol, if defined, indicates that the mprotect system call is + * available to modify the access protection of a memory mapped file. + */ + /*#define HAS_MPROTECT /**/ + + /* HAS_MSG: + * This symbol, if defined, indicates that the entire msg*(2) library is + * supported (IPC mechanism based on message queues). + */ + /*#define HAS_MSG /**/ + + /* HAS_STRUCT_MSGHDR: + * This symbol, if defined, indicates that the struct msghdr + * is supported. + */ + /*#define HAS_STRUCT_MSGHDR /**/ + + /* HAS_OFF64_T: + * This symbol will be defined if the C compiler supports off64_t. + */ + /*#define HAS_OFF64_T /**/ + + /* HAS_OPEN3: + * This manifest constant lets the C program know that the three + * argument form of open(2) is available. + */ + /*#define HAS_OPEN3 /**/ + + /* OLD_PTHREAD_CREATE_JOINABLE: + * This symbol, if defined, indicates how to create pthread + * in joinable (aka undetached) state. NOTE: not defined + * if pthread.h already has defined PTHREAD_CREATE_JOINABLE + * (the new version of the constant). + * If defined, known values are PTHREAD_CREATE_UNDETACHED + * and __UNDETACHED. + */ + /*#define OLD_PTHREAD_CREATE_JOINABLE /**/ + + /* HAS_PTHREAD_YIELD: + * This symbol, if defined, indicates that the pthread_yield + * routine is available to yield the execution of the current + * thread. sched_yield is preferable to pthread_yield. + */ + /* SCHED_YIELD: + * This symbol defines the way to yield the execution of + * the current thread. Known ways are sched_yield, + * pthread_yield, and pthread_yield with NULL. + */ + /* HAS_SCHED_YIELD: + * This symbol, if defined, indicates that the sched_yield + * routine is available to yield the execution of the current + * thread. sched_yield is preferable to pthread_yield. + */ + /*#define HAS_PTHREAD_YIELD /**/ + #define SCHED_YIELD /**/ + /*#define HAS_SCHED_YIELD /**/ + + /* HAS_READV: + * This symbol, if defined, indicates that the readv routine is + * available to do gather reads. You will also need + * and there I_SYSUIO. + */ + /*#define HAS_READV /**/ + + /* HAS_RECVMSG: + * This symbol, if defined, indicates that the recvmsg routine is + * available to send structured socket messages. + */ + /*#define HAS_RECVMSG /**/ + + /* HAS_SAFE_BCOPY: + * This symbol, if defined, indicates that the bcopy routine is available + * to copy potentially overlapping memory blocks. Otherwise you should + * probably use memmove() or memcpy(). If neither is defined, roll your + * own version. + */ + /*#define HAS_SAFE_BCOPY /**/ + + /* HAS_SAFE_MEMCPY: + * This symbol, if defined, indicates that the memcpy routine is available + * to copy potentially overlapping memory blocks. Otherwise you should + * probably use memmove() or memcpy(). If neither is defined, roll your + * own version. + */ + /*#define HAS_SAFE_MEMCPY /**/ + + /* HAS_SANE_MEMCMP: + * This symbol, if defined, indicates that the memcmp routine is available + * and can be used to compare relative magnitudes of chars with their high + * bits set. If it is not defined, roll your own version. + */ + #define HAS_SANE_MEMCMP /**/ + + /* HAS_SBRK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the sbrk() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern void* sbrk _((int)); + * extern void* sbrk _((size_t)); + */ + /*#define HAS_SBRK_PROTO /**/ + + /* HAS_SEM: + * This symbol, if defined, indicates that the entire sem*(2) library is + * supported. + */ + /*#define HAS_SEM /**/ + + /* HAS_SENDMSG: + * This symbol, if defined, indicates that the sendmsg routine is + * available to send structured socket messages. + */ + /*#define HAS_SENDMSG /**/ + + /* HAS_SETGRENT: + * This symbol, if defined, indicates that the setgrent routine is + * available for initializing sequential access of the group database. + */ + /*#define HAS_SETGRENT /**/ + + /* HAS_SETGROUPS: + * This symbol, if defined, indicates that the setgroups() routine is + * available to set the list of process groups. If unavailable, multiple + * groups are probably not supported. + */ + /*#define HAS_SETGROUPS /**/ + + /* HAS_SETHOSTENT: + * This symbol, if defined, indicates that the sethostent() routine is + * available. + */ + /*#define HAS_SETHOSTENT /**/ + + /* HAS_SETITIMER: + * This symbol, if defined, indicates that the setitimer routine is + * available to set interval timers. + */ + /*#define HAS_SETITIMER /**/ + + /* HAS_SETNETENT: + * This symbol, if defined, indicates that the setnetent() routine is + * available. + */ + /*#define HAS_SETNETENT /**/ + + /* HAS_SETPROTOENT: + * This symbol, if defined, indicates that the setprotoent() routine is + * available. + */ + /*#define HAS_SETPROTOENT /**/ + + /* HAS_SETPGRP: + * This symbol, if defined, indicates that the setpgrp routine is + * available to set the current process group. + */ + /* USE_BSD_SETPGRP: + * This symbol, if defined, indicates that setpgrp needs two + * arguments whereas USG one needs none. See also HAS_SETPGID + * for a POSIX interface. + */ + /*#define HAS_SETPGRP /**/ + /*#define USE_BSD_SETPGRP /**/ + + /* HAS_SETPROCTITLE: + * This symbol, if defined, indicates that the setproctitle routine is + * available to set process title. + */ + /*#define HAS_SETPROCTITLE /**/ + + /* HAS_SETPWENT: + * This symbol, if defined, indicates that the setpwent routine is + * available for initializing sequential access of the passwd database. + */ + /*#define HAS_SETPWENT /**/ + + /* HAS_SETSERVENT: + * This symbol, if defined, indicates that the setservent() routine is + * available. + */ + /*#define HAS_SETSERVENT /**/ + + /* HAS_SETVBUF: + * This symbol, if defined, indicates that the setvbuf routine is + * available to change buffering on an open stdio stream. + * to a line-buffered mode. + */ + #define HAS_SETVBUF /**/ + + /* USE_SFIO: + * This symbol, if defined, indicates that sfio should + * be used. + */ + /*#define USE_SFIO /**/ + + /* HAS_SHM: + * This symbol, if defined, indicates that the entire shm*(2) library is + * supported. + */ + /*#define HAS_SHM /**/ + + /* HAS_SIGACTION: + * This symbol, if defined, indicates that Vr4's sigaction() routine + * is available. + */ + /*#define HAS_SIGACTION /**/ + + /* HAS_SIGSETJMP: + * This variable indicates to the C program that the sigsetjmp() + * routine is available to save the calling process's registers + * and stack environment for later use by siglongjmp(), and + * to optionally save the process's signal mask. See + * Sigjmp_buf, Sigsetjmp, and Siglongjmp. + */ + /* Sigjmp_buf: + * This is the buffer type to be used with Sigsetjmp and Siglongjmp. + */ + /* Sigsetjmp: + * This macro is used in the same way as sigsetjmp(), but will invoke + * traditional setjmp() if sigsetjmp isn't available. + * See HAS_SIGSETJMP. + */ + /* Siglongjmp: + * This macro is used in the same way as siglongjmp(), but will invoke + * traditional longjmp() if siglongjmp isn't available. + * See HAS_SIGSETJMP. + */ + /*#define HAS_SIGSETJMP /**/ + #ifdef HAS_SIGSETJMP + #define Sigjmp_buf sigjmp_buf + #define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask)) + #define Siglongjmp(buf,retval) siglongjmp((buf),(retval)) + #else + #define Sigjmp_buf jmp_buf + #define Sigsetjmp(buf,save_mask) setjmp((buf)) + #define Siglongjmp(buf,retval) longjmp((buf),(retval)) + #endif + + /* HAS_SOCKET: + * This symbol, if defined, indicates that the BSD socket interface is + * supported. + */ + /* HAS_SOCKETPAIR: + * This symbol, if defined, indicates that the BSD socketpair() call is + * supported. + */ + /* HAS_MSG_CTRUNC: + * This symbol, if defined, indicates that the MSG_CTRUNC is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ + /* HAS_MSG_DONTROUTE: + * This symbol, if defined, indicates that the MSG_DONTROUTE is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ + /* HAS_MSG_OOB: + * This symbol, if defined, indicates that the MSG_OOB is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ + /* HAS_MSG_PEEK: + * This symbol, if defined, indicates that the MSG_PEEK is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ + /* HAS_MSG_PROXY: + * This symbol, if defined, indicates that the MSG_PROXY is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ + /* HAS_SCM_RIGHTS: + * This symbol, if defined, indicates that the SCM_RIGHTS is supported. + * Checking just with #ifdef might not be enough because this symbol + * has been known to be an enum. + */ + #define HAS_SOCKET /**/ + /*#define HAS_SOCKETPAIR /**/ + /*#define HAS_MSG_CTRUNC /**/ + /*#define HAS_MSG_DONTROUTE /**/ + /*#define HAS_MSG_OOB /**/ + /*#define HAS_MSG_PEEK /**/ + /*#define HAS_MSG_PROXY /**/ + /*#define HAS_SCM_RIGHTS /**/ + + /* HAS_SOCKS5_INIT: + * This symbol, if defined, indicates that the socks5_init routine is + * available to initialize SOCKS 5. + */ + /*#define HAS_SOCKS5_INIT /**/ + + /* HAS_SQRTL: + * This symbol, if defined, indicates that the sqrtl routine is + * available to do long double square roots. + */ + /*#define HAS_SQRTL /**/ + + /* USE_STAT_BLOCKS: + * This symbol is defined if this system has a stat structure declaring + * st_blksize and st_blocks. + */ + #ifndef USE_STAT_BLOCKS + /*#define USE_STAT_BLOCKS /**/ + #endif + + /* HAS_STRUCT_STATFS_F_FLAGS: + * This symbol, if defined, indicates that the struct statfs + * does have the f_flags member containing the mount flags of + * the filesystem containing the file. + * This kind of struct statfs is coming from (BSD 4.3), + * not from (SYSV). Older BSDs (like Ultrix) do not + * have statfs() and struct statfs, they have ustat() and getmnt() + * with struct ustat and struct fs_data. + */ + /*#define HAS_STRUCT_STATFS_F_FLAGS /**/ + + /* HAS_STRUCT_STATFS: + * This symbol, if defined, indicates that the struct statfs + * to do statfs() is supported. + */ + /*#define HAS_STRUCT_STATFS /**/ + + /* HAS_FSTATVFS: + * This symbol, if defined, indicates that the fstatvfs routine is + * available to stat filesystems by file descriptors. + */ + /*#define HAS_FSTATVFS /**/ + + /* USE_STDIO_PTR: + * This symbol is defined if the _ptr and _cnt fields (or similar) + * of the stdio FILE structure can be used to access the stdio buffer + * for a file handle. If this is defined, then the FILE_ptr(fp) + * and FILE_cnt(fp) macros will also be defined and should be used + * to access these fields. + */ + /* FILE_ptr: + * This macro is used to access the _ptr field (or equivalent) of the + * FILE structure pointed to by its argument. This macro will always be + * defined if USE_STDIO_PTR is defined. + */ + /* STDIO_PTR_LVALUE: + * This symbol is defined if the FILE_ptr macro can be used as an + * lvalue. + */ + /* FILE_cnt: + * This macro is used to access the _cnt field (or equivalent) of the + * FILE structure pointed to by its argument. This macro will always be + * defined if USE_STDIO_PTR is defined. + */ + /* STDIO_CNT_LVALUE: + * This symbol is defined if the FILE_cnt macro can be used as an + * lvalue. + */ + /* STDIO_PTR_LVAL_SETS_CNT: + * This symbol is defined if using the FILE_ptr macro as an lvalue + * to increase the pointer by n has the side effect of decreasing the + * value of File_cnt(fp) by n. + */ + /* STDIO_PTR_LVAL_NOCHANGE_CNT: + * This symbol is defined if using the FILE_ptr macro as an lvalue + * to increase the pointer by n leaves File_cnt(fp) unchanged. + */ + /*#define USE_STDIO_PTR /**/ + #ifdef USE_STDIO_PTR + #define FILE_ptr(fp) ((fp)->_ptr) + /*#define STDIO_PTR_LVALUE /**/ + #define FILE_cnt(fp) ((fp)->_cnt) + /*#define STDIO_CNT_LVALUE /**/ + /*#define STDIO_PTR_LVAL_SETS_CNT /**/ + /*#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/ + #endif + + /* USE_STDIO_BASE: + * This symbol is defined if the _base field (or similar) of the + * stdio FILE structure can be used to access the stdio buffer for + * a file handle. If this is defined, then the FILE_base(fp) macro + * will also be defined and should be used to access this field. + * Also, the FILE_bufsiz(fp) macro will be defined and should be used + * to determine the number of bytes in the buffer. USE_STDIO_BASE + * will never be defined unless USE_STDIO_PTR is. + */ + /* FILE_base: + * This macro is used to access the _base field (or equivalent) of the + * FILE structure pointed to by its argument. This macro will always be + * defined if USE_STDIO_BASE is defined. + */ + /* FILE_bufsiz: + * This macro is used to determine the number of bytes in the I/O + * buffer pointed to by _base field (or equivalent) of the FILE + * structure pointed to its argument. This macro will always be defined + * if USE_STDIO_BASE is defined. + */ + /*#define USE_STDIO_BASE /**/ + #ifdef USE_STDIO_BASE + #define FILE_base(fp) ((fp)->_base) + #define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base) + #endif + + /* HAS_STRERROR: + * This symbol, if defined, indicates that the strerror routine is + * available to translate error numbers to strings. See the writeup + * of Strerror() in this file before you try to define your own. + */ + /* HAS_SYS_ERRLIST: + * This symbol, if defined, indicates that the sys_errlist array is + * available to translate error numbers to strings. The extern int + * sys_nerr gives the size of that table. + */ + /* Strerror: + * This preprocessor symbol is defined as a macro if strerror() is + * not available to translate error numbers to strings but sys_errlist[] + * array is there. + */ + #define HAS_STRERROR /**/ + #define HAS_SYS_ERRLIST /**/ + #define Strerror(e) strerror(e) + + /* HAS_STRTOLD: + * This symbol, if defined, indicates that the strtold routine is + * available to convert strings to long doubles. + */ + /*#define HAS_STRTOLD /**/ + + /* HAS_STRTOLL: + * This symbol, if defined, indicates that the strtoll routine is + * available to convert strings to long longs. + */ + /*#define HAS_STRTOLL /**/ + + /* HAS_STRTOQ: + * This symbol, if defined, indicates that the strtoq routine is + * available to convert strings to long longs (quads). + */ + /*#define HAS_STRTOQ /**/ + + /* HAS_STRTOUL: + * This symbol, if defined, indicates that the strtoul routine is + * available to provide conversion of strings to unsigned long. + */ + #define HAS_STRTOUL /**/ + + /* HAS_STRTOULL: + * This symbol, if defined, indicates that the strtoull routine is + * available to convert strings to unsigned long longs. + */ + /*#define HAS_STRTOULL /**/ + + /* HAS_STRTOUQ: + * This symbol, if defined, indicates that the strtouq routine is + * available to convert strings to unsigned long longs (quads). + */ + /*#define HAS_STRTOUQ /**/ + + /* HAS_TELLDIR_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the telldir() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern long telldir _((DIR*)); + */ + #define HAS_TELLDIR_PROTO /**/ + + /* Time_t: + * This symbol holds the type returned by time(). It can be long, + * or time_t on BSD sites (in which case should be + * included). + */ + #define Time_t time_t /* Time type */ + + /* HAS_TIMES: + * This symbol, if defined, indicates that the times() routine exists. + * Note that this became obsolete on some systems (SUNOS), which now + * use getrusage(). It may be necessary to include . + */ + /*#define HAS_TIMES /**/ + + /* HAS_UALARM: + * This symbol, if defined, indicates that the ualarm routine is + * available to do alarms with microsecond granularity. + */ + /*#define HAS_UALARM /**/ + + /* HAS_UNION_SEMUN: + * This symbol, if defined, indicates that the union semun is + * defined by including . If not, the user code + * probably needs to define it as: + * union semun { + * int val; + * struct semid_ds *buf; + * unsigned short *array; + * } + */ + /* USE_SEMCTL_SEMUN: + * This symbol, if defined, indicates that union semun is + * used for semctl IPC_STAT. + */ + /* USE_SEMCTL_SEMID_DS: + * This symbol, if defined, indicates that struct semid_ds * is + * used for semctl IPC_STAT. + */ + #define HAS_UNION_SEMUN /**/ + /*#define USE_SEMCTL_SEMUN /**/ + /*#define USE_SEMCTL_SEMID_DS /**/ + + /* HAS_USTAT: + * This symbol, if defined, indicates that the ustat system call is + * available to query file system statistics by dev_t. + */ + /*#define HAS_USTAT /**/ + + /* HAS_VFORK: + * This symbol, if defined, indicates that vfork() exists. + */ + /*#define HAS_VFORK /**/ + + /* Signal_t: + * This symbol's value is either "void" or "int", corresponding to the + * appropriate return type of a signal handler. Thus, you can declare + * a signal handler using "Signal_t (*handler)()", and define the + * handler using "Signal_t handler(sig)". + */ + #define Signal_t void /* Signal handler's return type */ + + /* HAS_VPRINTF: + * This symbol, if defined, indicates that the vprintf routine is available + * to printf with a pointer to an argument list. If unavailable, you + * may need to write your own, probably in terms of _doprnt(). + */ + /* USE_CHAR_VSPRINTF: + * This symbol is defined if this system has vsprintf() returning type + * (char*). The trend seems to be to declare it as "int vsprintf()". It + * is up to the package author to declare vsprintf correctly based on the + * symbol. + */ + #define HAS_VPRINTF /**/ + /*#define USE_CHAR_VSPRINTF /**/ + + /* HAS_WRITEV: + * This symbol, if defined, indicates that the writev routine is + * available to do scatter writes. + */ + /*#define HAS_WRITEV /**/ + + /* USE_DYNAMIC_LOADING: + * This symbol, if defined, indicates that dynamic loading of + * some sort is available. + */ + #define USE_DYNAMIC_LOADING /**/ + + /* DOUBLESIZE: + * This symbol contains the size of a double, so that the C preprocessor + * can make decisions based on it. + */ + #define DOUBLESIZE 8 /**/ + + /* EBCDIC: + * This symbol, if defined, indicates that this system uses + * EBCDIC encoding. + */ + /*#define EBCDIC /**/ + + /* FFLUSH_NULL: + * This symbol, if defined, tells that fflush(NULL) does flush + * all pending stdio output. + */ + /* FFLUSH_ALL: + * This symbol, if defined, tells that to flush + * all pending stdio output one must loop through all + * the stdio file handles stored in an array and fflush them. + * Note that if fflushNULL is defined, fflushall will not + * even be probed for and will be left undefined. + */ + #define FFLUSH_NULL /**/ + /*#define FFLUSH_ALL /**/ + + /* Fpos_t: + * This symbol holds the type used to declare file positions in libc. + * It can be fpos_t, long, uint, etc... It may be necessary to include + * to get any typedef'ed information. + */ + #define Fpos_t fpos_t /* File position type */ + + /* Gid_t_f: + * This symbol defines the format string used for printing a Gid_t. + */ + #define Gid_t_f "ld" /**/ + + /* Gid_t_sign: + * This symbol holds the signedess of a Gid_t. + * 1 for unsigned, -1 for signed. + */ + #define Gid_t_sign -1 /* GID sign */ + + /* Gid_t_size: + * This symbol holds the size of a Gid_t in bytes. + */ + #define Gid_t_size 4 /* GID size */ + + /* Gid_t: + * This symbol holds the return type of getgid() and the type of + * argument to setrgid() and related functions. Typically, + * it is the type of group ids in the kernel. It can be int, ushort, + * gid_t, etc... It may be necessary to include to get + * any typedef'ed information. + */ + #define Gid_t gid_t /* Type for getgid(), etc... */ + + /* Groups_t: + * This symbol holds the type used for the second argument to + * getgroups() and setgroups(). Usually, this is the same as + * gidtype (gid_t) , but sometimes it isn't. + * It can be int, ushort, gid_t, etc... + * It may be necessary to include to get any + * typedef'ed information. This is only required if you have + * getgroups() or setgroups().. + */ + #if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS) + #define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */ + #endif + + /* DB_Prefix_t: + * This symbol contains the type of the prefix structure element + * in the header file. In older versions of DB, it was + * int, while in newer ones it is u_int32_t. + */ + /* DB_Hash_t: + * This symbol contains the type of the prefix structure element + * in the header file. In older versions of DB, it was + * int, while in newer ones it is size_t. + */ + /* DB_VERSION_MAJOR_CFG: + * This symbol, if defined, defines the major version number of + * Berkeley DB found in the header when Perl was configured. + */ + /* DB_VERSION_MINOR_CFG: + * This symbol, if defined, defines the minor version number of + * Berkeley DB found in the header when Perl was configured. + * For DB version 1 this is always 0. + */ + /* DB_VERSION_PATCH_CFG: + * This symbol, if defined, defines the patch version number of + * Berkeley DB found in the header when Perl was configured. + * For DB version 1 this is always 0. + */ + #define DB_Hash_t int /**/ + #define DB_Prefix_t int /**/ + #define DB_VERSION_MAJOR_CFG undef /**/ + #define DB_VERSION_MINOR_CFG undef /**/ + #define DB_VERSION_PATCH_CFG undef /**/ + + /* I_GRP: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /* GRPASSWD: + * This symbol, if defined, indicates to the C program that struct group + * in contains gr_passwd. + */ + /*#define I_GRP /**/ + /*#define GRPASSWD /**/ + + /* I_ICONV: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_ICONV /**/ + + /* I_IEEEFP: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_IEEEFP /**/ + + /* I_INTTYPES: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_INTTYPES /**/ + + /* I_LIBUTIL: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_LIBUTIL /**/ + + /* I_MACH_CTHREADS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_MACH_CTHREADS /**/ + + /* I_MNTENT: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_MNTENT /**/ + + /* I_NETDB: + * This symbol, if defined, indicates that exists and + * should be included. + */ + #define I_NETDB /**/ + + /* I_NETINET_TCP: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_NETINET_TCP /**/ + + /* I_POLL: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_POLL /**/ + + /* I_PROT: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_PROT /**/ + + /* I_PTHREAD: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /*#define I_PTHREAD /**/ + + /* I_PWD: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /* PWQUOTA: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_quota. + */ + /* PWAGE: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_age. + */ + /* PWCHANGE: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_change. + */ + /* PWCLASS: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_class. + */ + /* PWEXPIRE: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_expire. + */ + /* PWCOMMENT: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_comment. + */ + /* PWGECOS: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_gecos. + */ + /* PWPASSWD: + * This symbol, if defined, indicates to the C program that struct passwd + * contains pw_passwd. + */ + /*#define I_PWD /**/ + /*#define PWQUOTA /**/ + /*#define PWAGE /**/ + /*#define PWCHANGE /**/ + /*#define PWCLASS /**/ + /*#define PWEXPIRE /**/ + /*#define PWCOMMENT /**/ + /*#define PWGECOS /**/ + /*#define PWPASSWD /**/ + + /* I_SHADOW: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SHADOW /**/ + + /* I_SOCKS: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SOCKS /**/ + + /* I_SUNMATH: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SUNMATH /**/ + + /* I_SYSLOG: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SYSLOG /**/ + + /* I_SYSMODE: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SYSMODE /**/ + + /* I_SYS_MOUNT: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SYS_MOUNT /**/ + + /* I_SYS_STATFS: + * This symbol, if defined, indicates that exists. + */ + /*#define I_SYS_STATFS /**/ + + /* I_SYS_STATVFS: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SYS_STATVFS /**/ + + /* I_SYSUIO: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SYSUIO /**/ + + /* I_SYSUTSNAME: + * This symbol, if defined, indicates that exists and + * should be included. + */ + #define I_SYSUTSNAME /**/ + + /* I_SYS_VFS: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_SYS_VFS /**/ + + /* I_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /* I_SYS_TIME: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + /* I_SYS_TIME_KERNEL: + * This symbol, if defined, indicates to the C program that it should + * include with KERNEL defined. + */ + #define I_TIME /**/ + /*#define I_SYS_TIME /**/ + /*#define I_SYS_TIME_KERNEL /**/ + + /* I_USTAT: + * This symbol, if defined, indicates that exists and + * should be included. + */ + /*#define I_USTAT /**/ + + /* PERL_INC_VERSION_LIST: + * This variable specifies the list of subdirectories in over + * which perl.c:incpush() and lib/lib.pm will automatically + * search when adding directories to @INC, in a format suitable + * for a C initialization string. See the inc_version_list entry + * in Porting/Glossary for more details. + */ + #define PERL_INC_VERSION_LIST 0 /**/ + + /* INSTALL_USR_BIN_PERL: + * This symbol, if defined, indicates that Perl is to be installed + * also as /usr/bin/perl. + */ + /*#define INSTALL_USR_BIN_PERL /**/ + + /* PERL_PRIfldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'f') for output. + */ + /* PERL_PRIgldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'g') for output. + */ + /* PERL_PRIeldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'e') for output. + */ + /* PERL_SCNfldbl: + * This symbol, if defined, contains the string used by stdio to + * format long doubles (format 'f') for input. + */ + /*#define PERL_PRIfldbl "f" /**/ + /*#define PERL_PRIgldbl "g" /**/ + /*#define PERL_PRIeldbl "e" /**/ + /*#define PERL_SCNfldbl undef /**/ + + /* Off_t: + * This symbol holds the type used to declare offsets in the kernel. + * It can be int, long, off_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ + /* LSEEKSIZE: + * This symbol holds the number of bytes used by the Off_t. + */ + /* Off_t_size: + * This symbol holds the number of bytes used by the Off_t. + */ + #define Off_t off_t /* type */ + #define LSEEKSIZE 4 /* size */ + #define Off_t_size 4 /* size */ + + /* Free_t: + * This variable contains the return type of free(). It is usually + * void, but occasionally int. + */ + /* Malloc_t: + * This symbol is the type of pointer returned by malloc and realloc. + */ + #define Malloc_t void * /**/ + #define Free_t void /**/ + + /* MYMALLOC: + * This symbol, if defined, indicates that we're using our own malloc. + */ + /*#define MYMALLOC /**/ + + /* Mode_t: + * This symbol holds the type used to declare file modes + * for systems calls. It is usually mode_t, but may be + * int or unsigned short. It may be necessary to include + * to get any typedef'ed information. + */ + #define Mode_t mode_t /* file mode parameter for system calls */ + + /* VAL_O_NONBLOCK: + * This symbol is to be used during open() or fcntl(F_SETFL) to turn on + * non-blocking I/O for the file descriptor. Note that there is no way + * back, i.e. you cannot turn it blocking again this way. If you wish to + * alternatively switch between blocking and non-blocking, use the + * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. + */ + /* VAL_EAGAIN: + * This symbol holds the errno error code set by read() when no data was + * present on the non-blocking file descriptor. + */ + /* RD_NODATA: + * This symbol holds the return code from read() when no data is present + * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is + * not defined, then you can't distinguish between no data and EOF by + * issuing a read(). You'll have to find another way to tell for sure! + */ + /* EOF_NONBLOCK: + * This symbol, if defined, indicates to the C program that a read() on + * a non-blocking file descriptor will return 0 on EOF, and not the value + * held in RD_NODATA (-1 usually, in that case!). + */ + #define VAL_O_NONBLOCK O_NONBLOCK + #define VAL_EAGAIN EAGAIN + #define RD_NODATA -1 + #define EOF_NONBLOCK + + /* NEED_VA_COPY: + * This symbol, if defined, indicates that the system stores + * the variable argument list datatype, va_list, in a format + * that cannot be copied by simple assignment, so that some + * other means must be used when copying is required. + * As such systems vary in their provision (or non-provision) + * of copying mechanisms, handy.h defines a platform- + * independent macro, Perl_va_copy(src, dst), to do the job. + */ + /*#define NEED_VA_COPY /**/ + + /* Netdb_host_t: + * This symbol holds the type used for the 1st argument + * to gethostbyaddr(). + */ + /* Netdb_hlen_t: + * This symbol holds the type used for the 2nd argument + * to gethostbyaddr(). + */ + /* Netdb_name_t: + * This symbol holds the type used for the argument to + * gethostbyname(). + */ + /* Netdb_net_t: + * This symbol holds the type used for the 1st argument to + * getnetbyaddr(). + */ + #define Netdb_host_t char * /**/ + #define Netdb_hlen_t int /**/ + #define Netdb_name_t char * /**/ + #define Netdb_net_t long /**/ + + /* PERL_OTHERLIBDIRS: + * This variable contains a colon-separated set of paths for the perl + * binary to search for additional library files or modules. + * These directories will be tacked to the end of @INC. + * Perl will automatically search below each path for version- + * and architecture-specific directories. See PERL_INC_VERSION_LIST + * for more details. + */ + /*#define PERL_OTHERLIBDIRS "undef" /**/ + + /* IVTYPE: + * This symbol defines the C type used for Perl's IV. + */ + /* UVTYPE: + * This symbol defines the C type used for Perl's UV. + */ + /* I8TYPE: + * This symbol defines the C type used for Perl's I8. + */ + /* U8TYPE: + * This symbol defines the C type used for Perl's U8. + */ + /* I16TYPE: + * This symbol defines the C type used for Perl's I16. + */ + /* U16TYPE: + * This symbol defines the C type used for Perl's U16. + */ + /* I32TYPE: + * This symbol defines the C type used for Perl's I32. + */ + /* U32TYPE: + * This symbol defines the C type used for Perl's U32. + */ + /* I64TYPE: + * This symbol defines the C type used for Perl's I64. + */ + /* U64TYPE: + * This symbol defines the C type used for Perl's U64. + */ + /* NVTYPE: + * This symbol defines the C type used for Perl's NV. + */ + /* IVSIZE: + * This symbol contains the sizeof(IV). + */ + /* UVSIZE: + * This symbol contains the sizeof(UV). + */ + /* I8SIZE: + * This symbol contains the sizeof(I8). + */ + /* U8SIZE: + * This symbol contains the sizeof(U8). + */ + /* I16SIZE: + * This symbol contains the sizeof(I16). + */ + /* U16SIZE: + * This symbol contains the sizeof(U16). + */ + /* I32SIZE: + * This symbol contains the sizeof(I32). + */ + /* U32SIZE: + * This symbol contains the sizeof(U32). + */ + /* I64SIZE: + * This symbol contains the sizeof(I64). + */ + /* U64SIZE: + * This symbol contains the sizeof(U64). + */ + /* NVSIZE: + * This symbol contains the sizeof(NV). + */ + /* NV_PRESERVES_UV: + * This symbol, if defined, indicates that a variable of type NVTYPE + * can preserve all the bits of a variable of type UVTYPE. + */ + /* NV_PRESERVES_UV_BITS: + * This symbol contains the number of bits a variable of type NVTYPE + * can preserve of a variable of type UVTYPE. + */ + #define IVTYPE long /**/ + #define UVTYPE unsigned long /**/ + #define I8TYPE char /**/ + #define U8TYPE unsigned char /**/ + #define I16TYPE short /**/ + #define U16TYPE unsigned short /**/ + #define I32TYPE long /**/ + #define U32TYPE unsigned long /**/ + #ifdef HAS_QUAD + #define I64TYPE __int64 /**/ + #define U64TYPE unsigned __int64 /**/ + #endif + #define NVTYPE double /**/ + #define IVSIZE 4 /**/ + #define UVSIZE 4 /**/ + #define I8SIZE 1 /**/ + #define U8SIZE 1 /**/ + #define I16SIZE 2 /**/ + #define U16SIZE 2 /**/ + #define I32SIZE 4 /**/ + #define U32SIZE 4 /**/ + #ifdef HAS_QUAD + #define I64SIZE 8 /**/ + #define U64SIZE 8 /**/ + #endif + #define NVSIZE 8 /**/ + #define NV_PRESERVES_UV + #define NV_PRESERVES_UV_BITS undef + + /* IVdf: + * This symbol defines the format string used for printing a Perl IV + * as a signed decimal integer. + */ + /* UVuf: + * This symbol defines the format string used for printing a Perl UV + * as an unsigned decimal integer. + */ + /* UVof: + * This symbol defines the format string used for printing a Perl UV + * as an unsigned octal integer. + */ + /* UVxf: + * This symbol defines the format string used for printing a Perl UV + * as an unsigned hexadecimal integer in lowercase abcdef. + */ + /* UVXf: + * This symbol defines the format string used for printing a Perl UV + * as an unsigned hexadecimal integer in uppercase ABCDEF. + */ + /* NVef: + * This symbol defines the format string used for printing a Perl NV + * using %e-ish floating point format. + */ + /* NVff: + * This symbol defines the format string used for printing a Perl NV + * using %f-ish floating point format. + */ + /* NVgf: + * This symbol defines the format string used for printing a Perl NV + * using %g-ish floating point format. + */ + #define IVdf "ld" /**/ + #define UVuf "lu" /**/ + #define UVof "lo" /**/ + #define UVxf "lx" /**/ + #define UVXf undef /**/ + #define NVef "e" /**/ + #define NVff "f" /**/ + #define NVgf "g" /**/ + + /* Pid_t: + * This symbol holds the type used to declare process ids in the kernel. + * It can be int, uint, pid_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ + #define Pid_t int /* PID type */ + + /* PRIVLIB: + * This symbol contains the name of the private library for this package. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. The program + * should be prepared to do ~ expansion. + */ + /* PRIVLIB_EXP: + * This symbol contains the ~name expanded version of PRIVLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ + #define PRIVLIB "sys:\\perl\\lib" /**/ + #define PRIVLIB_EXP (fnNwGetEnvironmentStr("PRIVLIB", PRIVLIB)) /**/ + + /* PTRSIZE: + * This symbol contains the size of a pointer, so that the C preprocessor + * can make decisions based on it. It will be sizeof(void *) if + * the compiler supports (void *); otherwise it will be + * sizeof(char *). + */ + #define PTRSIZE 4 /**/ + + /* Drand01: + * This macro is to be used to generate uniformly distributed + * random numbers over the range [0., 1.[. You may have to supply + * an 'extern double drand48();' in your program since SunOS 4.1.3 + * doesn't provide you with anything relevant in its headers. + * See HAS_DRAND48_PROTO. + */ + /* Rand_seed_t: + * This symbol defines the type of the argument of the + * random seed function. + */ + /* seedDrand01: + * This symbol defines the macro to be used in seeding the + * random number generator (see Drand01). + */ + /* RANDBITS: + * This symbol indicates how many bits are produced by the + * function used to generate normalized random numbers. + * Values include 15, 16, 31, and 48. + */ + #define Drand01() (rand()/(double)((unsigned)1< to get any typedef'ed information. + */ + #define Size_t size_t /* length paramater for string functions */ + + /* Sock_size_t: + * This symbol holds the type used for the size argument of + * various socket calls (just the base type, not the pointer-to). + */ + #define Sock_size_t int /**/ + + /* SSize_t: + * This symbol holds the type used by functions that return + * a count of bytes or an error condition. It must be a signed type. + * It is usually ssize_t, but may be long or int, etc. + * It may be necessary to include or + * to get any typedef'ed information. + * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). + */ + #define SSize_t int /* signed count of bytes */ + + /* STARTPERL: + * This variable contains the string to put in front of a perl + * script to make sure (one hopes) that it runs with perl and not + * some shell. + */ + #define STARTPERL "#!perl" /**/ + + /* STDCHAR: + * This symbol is defined to be the type of char used in stdio.h. + * It has the values "unsigned char" or "char". + */ + #define STDCHAR char /**/ + + /* HAS_STDIO_STREAM_ARRAY: + * This symbol, if defined, tells that there is an array + * holding the stdio streams. + */ + /* STDIO_STREAM_ARRAY: + * This symbol tells the name of the array holding the stdio streams. + * Usual values include _iob, __iob, and __sF. + */ + /*#define HAS_STDIO_STREAM_ARRAY /**/ + #define STDIO_STREAM_ARRAY + + /* Uid_t_f: + * This symbol defines the format string used for printing a Uid_t. + */ + #define Uid_t_f "ld" /**/ + + /* Uid_t_sign: + * This symbol holds the signedess of a Uid_t. + * 1 for unsigned, -1 for signed. + */ + #define Uid_t_sign -1 /* UID sign */ + + /* Uid_t_size: + * This symbol holds the size of a Uid_t in bytes. + */ + #define Uid_t_size 4 /* UID size */ + + /* Uid_t: + * This symbol holds the type used to declare user ids in the kernel. + * It can be int, ushort, uid_t, etc... It may be necessary to include + * to get any typedef'ed information. + */ + #define Uid_t uid_t /* UID type */ + + /* USE_64_BIT_INT: + * This symbol, if defined, indicates that 64-bit integers should + * be used when available. If not defined, the native integers + * will be employed (be they 32 or 64 bits). The minimal possible + * 64-bitness is used, just enough to get 64-bit integers into Perl. + * This may mean using for example "long longs", while your memory + * may still be limited to 2 gigabytes. + */ + /* USE_64_BIT_ALL: + * This symbol, if defined, indicates that 64-bit integers should + * be used when available. If not defined, the native integers + * will be used (be they 32 or 64 bits). The maximal possible + * 64-bitness is employed: LP64 or ILP64, meaning that you will + * be able to use more than 2 gigabytes of memory. This mode is + * even more binary incompatible than USE_64_BIT_INT. You may not + * be able to run the resulting executable in a 32-bit CPU at all or + * you may need at least to reboot your OS to 64-bit mode. + */ + #ifndef USE_64_BIT_INT + /*#define USE_64_BIT_INT /**/ + #endif + + #ifndef USE_64_BIT_ALL + /*#define USE_64_BIT_ALL /**/ + #endif + + /* USE_LARGE_FILES: + * This symbol, if defined, indicates that large file support + * should be used when available. + */ + #ifndef USE_LARGE_FILES + /*#define USE_LARGE_FILES /**/ + #endif + + /* USE_LONG_DOUBLE: + * This symbol, if defined, indicates that long doubles should + * be used when available. + */ + #ifndef USE_LONG_DOUBLE + /*#define USE_LONG_DOUBLE /**/ + #endif + + /* USE_MORE_BITS: + * This symbol, if defined, indicates that 64-bit interfaces and + * long doubles should be used when available. + */ + #ifndef USE_MORE_BITS + /*#define USE_MORE_BITS /**/ + #endif + + /* MULTIPLICITY: + * This symbol, if defined, indicates that Perl should + * be built to use multiplicity. + */ + #ifndef MULTIPLICITY + #define MULTIPLICITY /**/ + #endif + + /* USE_PERLIO: + * This symbol, if defined, indicates that the PerlIO abstraction should + * be used throughout. If not defined, stdio should be + * used in a fully backward compatible manner. + */ + #ifndef USE_PERLIO + /*#define USE_PERLIO /**/ + #endif + + /* USE_SOCKS: + * This symbol, if defined, indicates that Perl should + * be built to use socks. + */ + #ifndef USE_SOCKS + /*#define USE_SOCKS /**/ + #endif + + /* USE_ITHREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the interpreter-based threading implementation. + */ + /* USE_5005THREADS: + * This symbol, if defined, indicates that Perl should be built to + * use the 5.005-based threading implementation. + */ + /* OLD_PTHREADS_API: + * This symbol, if defined, indicates that Perl should + * be built to use the old draft POSIX threads API. + */ + /* USE_REENTRANT_API: + * This symbol, if defined, indicates that Perl should + * try to use the various _r versions of library functions. + * This is extremely experimental. + */ + /*#define USE_5005THREADS /**/ + #define USE_ITHREADS /**/ + #if defined(USE_5005THREADS) && !defined(USE_ITHREADS) + #define USE_THREADS /* until src is revised*/ + #endif + /*#define OLD_PTHREADS_API /**/ + /*#define USE_REENTRANT_API /**/ + + /* PERL_VENDORARCH: + * If defined, this symbol contains the name of a private library. + * The library is private in the sense that it needn't be in anyone's + * execution path, but it should be accessible by the world. + * It may have a ~ on the front. + * The standard distribution will put nothing in this directory. + * Vendors who distribute perl may wish to place their own + * architecture-dependent modules and extensions in this directory with + * MakeMaker Makefile.PL INSTALLDIRS=vendor + * or equivalent. See INSTALL for details. + */ + /* PERL_VENDORARCH_EXP: + * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ + /*#define PERL_VENDORARCH "" /**/ + /*#define PERL_VENDORARCH_EXP "" /**/ + + /* PERL_VENDORLIB_EXP: + * This symbol contains the ~name expanded version of VENDORLIB, to be used + * in programs that are not prepared to deal with ~ expansion at run-time. + */ + /* PERL_VENDORLIB_STEM: + * This define is PERL_VENDORLIB_EXP with any trailing version-specific component + * removed. The elements in inc_version_list (inc_version_list.U) can + * be tacked onto this variable to generate a list of directories to search. + */ + /*#define PERL_VENDORLIB_EXP "" /**/ + /*#define PERL_VENDORLIB_STEM "" /**/ + + /* VOIDFLAGS: + * This symbol indicates how much support of the void type is given by this + * compiler. What various bits mean: + * + * 1 = supports declaration of void + * 2 = supports arrays of pointers to functions returning void + * 4 = supports comparisons between pointers to void functions and + * addresses of void functions + * 8 = suports declaration of generic void pointers + * + * The package designer should define VOIDUSED to indicate the requirements + * of the package. This can be done either by #defining VOIDUSED before + * including config.h, or by defining defvoidused in Myinit.U. If the + * latter approach is taken, only those flags will be tested. If the + * level of void support necessary is not present, defines void to int. + */ + #ifndef VOIDUSED + #define VOIDUSED 15 + #endif + #define VOIDFLAGS 15 + #if (VOIDFLAGS & VOIDUSED) != VOIDUSED + #define void int /* is void to be avoided? */ + #define M_VOID /* Xenix strikes again */ + #endif + + /* PERL_XS_APIVERSION: + * This variable contains the version of the oldest perl binary + * compatible with the present perl. perl.c:incpush() and + * lib/lib.pm will automatically search in c:\\perl\\site\\5.7.2\\lib\\NetWare-x86-multi-thread for older + * directories across major versions back to xs_apiversion. + * This is only useful if you have a perl library directory tree + * structured like the default one. + * See INSTALL for how this works. + * The versioned site_perl directory was introduced in 5.005, + * so that is the lowest possible value. + * Since this can depend on compile time options (such as + * bincompat) it is set by Configure. Other non-default sources + * of potential incompatibility, such as multiplicity, threads, + * debugging, 64bits, sfio, etc., are not checked for currently, + * though in principle we could go snooping around in old + * Config.pm files. + */ + /* PERL_PM_APIVERSION: + * This variable contains the version of the oldest perl + * compatible with the present perl. (That is, pure perl modules + * written for pm_apiversion will still work for the current + * version). perl.c:incpush() and lib/lib.pm will automatically + * search in c:\\perl\\site\\5.7.2\\lib for older directories across major versions + * back to pm_apiversion. This is only useful if you have a perl + * library directory tree structured like the default one. The + * versioned site_perl library was introduced in 5.005, so that's + * the default setting for this variable. It's hard to imagine + * it changing before Perl6. It is included here for symmetry + * with xs_apiveprsion -- the searching algorithms will + * (presumably) be similar. + * See the INSTALL file for how this works. + */ + #define PERL_XS_APIVERSION "5.6.0" + #define PERL_PM_APIVERSION "5.005" + + /* SETUID_SCRIPTS_ARE_SECURE_NOW: + * This symbol, if defined, indicates that the bug that prevents + * setuid scripts from being secure is not present in this kernel. + */ + /* DOSUID: + * This symbol, if defined, indicates that the C program should + * check the script that it is executing for setuid/setgid bits, and + * attempt to emulate setuid/setgid on systems that have disabled + * setuid #! scripts because the kernel can't do it securely. + * It is up to the package designer to make sure that this emulation + * is done securely. Among other things, it should do an fstat on + * the script it just opened to make sure it really is a setuid/setgid + * script, it should make sure the arguments passed correspond exactly + * to the argument on the #! line, and it should not trust any + * subprocesses to which it must pass the filename rather than the + * file descriptor of the script to be executed. + */ + /*#define SETUID_SCRIPTS_ARE_SECURE_NOW /**/ + /*#define DOSUID /**/ + + /* I_STDARG: + * This symbol, if defined, indicates that exists and should + * be included. + */ + /* I_VARARGS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #define I_STDARG /**/ + /*#define I_VARARGS /**/ + + /* USE_CROSS_COMPILE: + * This symbol, if defined, indicates that Perl is being cross-compiled. + */ + /* PERL_TARGETARCH: + * This symbol, if defined, indicates the target architecture + * Perl has been cross-compiled to. Undefined if not a cross-compile. + */ + #ifndef USE_CROSS_COMPILE + /*#define USE_CROSS_COMPILE /**/ + #define PERL_TARGETARCH "undef" /**/ + #endif + + /* HAS_DBMINIT_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the dbminit() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int dbminit(char *); + */ + /*#define HAS_DBMINIT_PROTO /**/ + + /* HAS_FLOCK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the flock() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int flock(int, int); + */ + /*#define HAS_FLOCK_PROTO /**/ + + /* HAS_REALPATH: + * This symbol, if defined, indicates that the realpath routine is + * available to do resolve paths. + */ + /*#define HAS_REALPATH /**/ + + /* HAS_SIGPROCMASK: + * This symbol, if defined, indicates that the sigprocmask + * system call is available to examine or change the signal mask + * of the calling process. + */ + /*#define HAS_SIGPROCMASK /**/ + + /* HAS_SOCKATMARK: + * This symbol, if defined, indicates that the sockatmark routine is + * available to test whether a socket is at the out-of-band mark. + */ + /*#define HAS_SOCKATMARK /**/ + + /* HAS_SOCKATMARK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the sockatmark() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int sockatmark _((int)); + */ + /*#define HAS_SOCKATMARK_PROTO /**/ + + /* HAS_SETRESGID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresgid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); + */ + /*#define HAS_SETRESGID_PROTO /**/ + + /* HAS_SETRESUID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresuid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); + */ + /*#define HAS_SETRESUID_PROTO /**/ + + /* HAS_STRFTIME: + * This symbol, if defined, indicates that the strftime routine is + * available to do time formatting. + */ + #define HAS_STRFTIME /**/ + + /* HAS_SYSCALL_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the syscall() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int syscall(int, ...); + * extern int syscall(long, ...); + */ + /*#define HAS_SYSCALL_PROTO /**/ + + /* U32_ALIGNMENT_REQUIRED: + * This symbol, if defined, indicates that you must access + * character data through U32-aligned pointers. + */ + /*#define U32_ALIGNMENT_REQUIRED /**/ + + /* HAS_USLEEP_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the usleep() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int usleep(useconds_t); + */ + /*#define HAS_USLEEP_PROTO /**/ + + /* HAS_PTHREAD_ATFORK: + * This symbol, if defined, indicates that the pthread_atfork routine + * is available setup fork handlers. + */ + /*#define HAS_PTHREAD_ATFORK /**/ + + #endif diff -c /dev/null 'perl-5.7.2/NetWare/config_h.PL' Index: ./NetWare/config_h.PL *** ./NetWare/config_h.PL Thu Jan 1 02:00:00 1970 --- ./NetWare/config_h.PL Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,120 ---- + # + use Config; + use File::Compare qw(compare); + use File::Copy qw(copy); + my $OBJ = 1 if $Config{'ccflags'} =~ /PERL_OBJECT/i; + my $name = $0; + $name =~ s#^(.*)\.PL$#../$1.SH#; + my %opt; + while (@ARGV && $ARGV[0] =~ /^([\w_]+)=(.*)$/) + { + $opt{$1}=$2; + shift(@ARGV); + } + + $opt{CONFIG_H} ||= 'config.h'; + + my $patchlevel = $opt{INST_VER}; + $patchlevel =~ s|^[\\/]||; + $patchlevel =~ s|~VERSION~|$Config{version}|g; + $patchlevel ||= $Config{version}; + $patchlevel = qq["$patchlevel"]; + + open(SH,"<$name") || die "Cannot open $name:$!"; + while () + { + last if /^sed/; + } + ($term,$file,$pat) = /^sed\s+<<(\S+)\s+>(\S+)\s+(.*)$/; + $file =~ s/^\$(\w+)$/$opt{$1}/g; + + my $str = "sub munge\n{\n"; + + while ($pat =~ s/-e\s+'([^']*)'\s*//) + { + my $e = $1; + $e =~ s/\\([\(\)])/$1/g; + $e =~ s/\\(\d)/\$$1/g; + $str .= "$e;\n"; + } + $str .= "}\n"; + + eval $str; + + die "$str:$@" if $@; + + open(H,">$file.new") || die "Cannot open $file.new:$!"; + binmode H; # no CRs (which cause a spurious rebuild) + while () + { + last if /^$term$/o; + s/\$([\w_]+)/Config($1)/eg; + s/`([^\`]*)`/BackTick($1)/eg; + munge(); + s/\\\$/\$/g; + s#/[ *\*]*\*/#/**/#; + if (/^\s*#define\s+(SITELIB|VENDORLIB)_EXP/) + { + $_ = "#define ". $1 . "_EXP (nw_get_". lc($1) . "($patchlevel))\t/**/\n"; + } + # Added for NetWare and removed PRIVLIB from the above, the same thing might have + # to be done for other as well + elsif (/^\s*#define\s+(PRIVLIB)_EXP/) + { + $_ = "#define ". $1 . "_EXP (fnNwGetEnvironmentStr(\"PRIVLIB\", PRIVLIB))\t/**/\n"; + } + # incpush() handles archlibs, so disable them + elsif (/^\s*#define\s+(ARCHLIB|SITEARCH|VENDORARCH)_EXP/) + { + $_ = "/*#define ". $1 . "_EXP \"\"\t/**/\n"; + } + print H; + } + close(H); + close(SH); + + + chmod(0666,"../lib/CORE/config.h"); + copy("$file.new","../lib/CORE/config.h") || die "Cannot copy:$!"; + chmod(0444,"../lib/CORE/config.h"); + + if (!$OBJ && compare("$file.new",$file)) + { + warn "$file has changed\n"; + chmod(0666,$file); + unlink($file); + rename("$file.new",$file); + #chmod(0444,$file); + exit(1); + } + else + { + unlink ("$file.new"); + exit(0); + } + + sub Config + { + my $var = shift; + my $val = $Config{$var}; + $val = 'undef' unless defined $val; + $val =~ s/\\/\\\\/g; + return $val; + } + + sub BackTick + { + my $cmd = shift; + if ($cmd =~ /^echo\s+(.*?)\s*\|\s+sed\s+'(.*)'\s*$/) + { + local ($data,$pat) = ($1,$2); + $data =~ s/\s+/ /g; + eval "\$data =~ $pat"; + return $data; + } + else + { + die "Cannot handle \`$cmd\`"; + } + return $cmd; + } diff -c /dev/null 'perl-5.7.2/NetWare/config_sh.PL' Index: ./NetWare/config_sh.PL *** ./NetWare/config_sh.PL Thu Jan 1 02:00:00 1970 --- ./NetWare/config_sh.PL Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,83 ---- + # take a semicolon separated path list and turn it into a quoted + # list of paths that Text::Parsewords will grok + sub mungepath { + my $p = shift; + # remove leading/trailing semis/spaces + $p =~ s/^[ ;]+//; + $p =~ s/[ ;]+$//; + $p =~ s/'/"/g; + my @p = map { $_ = "\"$_\"" if /\s/ and !/^".*"$/; $_ } split /;/, $p; + return join(' ', @p); + } + + # generate an array of option strings from command-line args + # or an option file + # -- added by BKS, 10-17-1999 to fix command-line overflow problems + sub loadopts { + if ($ARGV[0] =~ /--cfgsh-option-file/) { + shift @ARGV; + my $optfile = shift @ARGV; + local (*F); + open OPTF, $optfile or die "Can't open $optfile: $!\n"; + my @opts; + chomp(my $line = ); + my @vars = split(/\t+~\t+/, $line); + for (@vars) { + push(@opts, $_) unless (/^\s*$/); + } + close OPTF; + return \@opts; + } + else { + return \@ARGV; + } + } + + my %opt; + my $optref = loadopts(); + while (@{$optref} && $optref->[0] =~ /^([\w_]+)=(.*)$/) { + $opt{$1}=$2; + shift(@{$optref}); + } + + my $pl_h = '../patchlevel.h'; + + if (-e $pl_h) { + open PL, "<$pl_h" or die "Can't open $pl_h: $!"; + while () { + if (/^#\s*define\s+(PERL_\w+)\s+([\d.]+)/) { + $opt{$1} = $2; + } + } + close PL; + } + else { + die "Can't find $pl_h: $!"; + } + $opt{VERSION} = "$opt{PERL_REVISION}.$opt{PERL_VERSION}.$opt{PERL_SUBVERSION}"; + $opt{INST_VER} =~ s|~VERSION~|$opt{VERSION}|g; + + $opt{'cf_by'} = $ENV{USERNAME} unless $opt{'cf_by'}; + $opt{'cf_email'} = $opt{'cf_by'} . '@' . (gethostbyname('localhost'))[0] + unless $opt{'cf_email'}; + $opt{'usemymalloc'} = 'y' if $opt{'d_mymalloc'} eq 'define'; + + $opt{libpth} = mungepath($opt{libpth}) if exists $opt{libpth}; + $opt{incpath} = mungepath($opt{incpath}) if exists $opt{incpath}; + + while (<>) { + s/~([\w_]+)~/$opt{$1}/g; + if (/^([\w_]+)=(.*)$/) { + my($k,$v) = ($1,$2); + # this depends on cf_time being empty in the template (or we'll + # get a loop) + if ($k eq 'cf_time') { + $_ = "$k='" . localtime(time) . "'\n" if $v =~ /^\s*'\s*'/; + } + elsif (exists $opt{$k}) { + $_ = "$k='$opt{$k}'\n"; + } + } + print; + } + diff -c /dev/null 'perl-5.7.2/NetWare/deb.h' Index: ./NetWare/deb.h *** ./NetWare/deb.h Thu Jan 1 02:00:00 1970 --- ./NetWare/deb.h Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,47 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : deb.h + * DESCRIPTION : Defines Breakpoint macro. + * Author : SGP + * Date : January 2001. + * + */ + + + + #ifndef __Inc__deb___ + #define __Inc__deb___ + + + #include + + + #if defined(DEBUGON) && !defined(USE_D2) + //debug build and d1 flag is used, so enable IDB + #define DBGMESG ConsolePrintf + #define IDB(x) \ + ConsolePrintf(x); \ + _asm {int 3} + #else + #if defined(USE_D2) + //debug build and d2 flag is used, so disable IDB + #define DBGMESG ConsolePrintf + #define IDB ConsolePrintf + #else + //release build, so disable DBGMESG and IDB + #define DBGMESG + #define IDB + #endif //if defined(USE_D2) + #endif //if defined(DEBUGON) && !defined(USE_D2) + + + #endif /*__Inc__deb___*/ + diff -c /dev/null 'perl-5.7.2/NetWare/dl_netware.xs' Index: ./NetWare/dl_netware.xs *** ./NetWare/dl_netware.xs Thu Jan 1 02:00:00 1970 --- ./NetWare/dl_netware.xs Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,194 ---- + /* dl_netware.xs + * + * Platform: NetWare + * Author: SGP + * Created: 21st July 2000 + * Last Modified: 23rd Oct 2000 + * Note: !!!Any modification to the xs file to be done to the one which is under netware directory!!! + * Modification History + * 23rd Oct - Failing to find nlms with long names fixed - sdbm_file + */ + + /* + + NetWare related modifications done on dl_win32.xs file created by Wei-Yuen Tan to get this file. + + */ + + + #include + #include + + #include "EXTERN.h" + #include "perl.h" + #include "XSUB.h" + + + //function pointer for UCSInitialize + typedef void (*PFUCSINITIALIZE) (); + + #ifdef PERL_OBJECT + + #endif /* PERL_OBJECT */ + + #include "dlutils.c" /* SaveError() etc */ + + static void + dl_private_init(pTHXo) + { + (void)dl_generic_private_init(aTHXo); + } + + + MODULE = DynaLoader PACKAGE = DynaLoader + + BOOT: + (void)dl_private_init(aTHXo); + + + void * + dl_load_file(filename,flags=0) + char * filename + int flags + PREINIT: + CODE: + { + char* mod_name = filename; + + //Names with more than 8 chars can't be found with FindNLMHandle + //8 - Name, 1 - Period, 3 - Extension, 1 - String terminator + char mod_name8[13]={'\0'}; + char *p=NULL; + char *buffer=NULL; + int nNameLength=0; + unsigned int nlmHandle=0; + + while (*mod_name) mod_name++; + + //Get the module name with extension to see if it is already loaded + while (mod_name > filename && mod_name[-1] != '/' && mod_name[-1] != '\\') mod_name--; + + DLDEBUG(1,PerlIO_printf(Perl_debug_log,"dl_load_file(%s):\n", filename)); + + buffer = strdup(mod_name); + p = strtok (buffer, "."); + if (p) { + nNameLength = (strlen(p)>8)?8:strlen(p); + memcpy(mod_name8,p,nNameLength); + *(mod_name8 + nNameLength) = '.'; + *(mod_name8 + nNameLength+1) ='\0'; + p = strtok (NULL, "."); + if (p){ + strcat(mod_name8,p); + + if ( (nlmHandle = FindNLMHandle(mod_name8)) == NULL ) + { + //NLM/NLP not loaded, load it and get the handle + if(spawnlp(P_NOWAIT, filename, filename, NULL)!=0) + { + //failed to load the NLM/NLP, this unlikely + //If multiple scripts are executed for the first time before running any other + //ucs script, sometimes there used to be an abend. + switch(NetWareErrno) + { + case LOAD_CAN_NOT_LOAD_MULTIPLE_COPIES: + nlmHandle = FindNLMHandle(mod_name8); + break; + case LOAD_ALREADY_IN_PROGRESS: + #ifdef MPK_ON + kYieldThread(); + #else + ThreadSwitch(); + #endif //MPK_ON + nlmHandle = FindNLMHandle(mod_name8); + break; + default: + nlmHandle = 0; + } + } + else + { + nlmHandle = FindNLMHandle(mod_name8); + } + } + //use UCSExt encountered- + //initialize UCS, this has to be terminated when the script finishes execution + //Is the script intending to use UCS Extensions? + //This should be done once per script execution + if (strcmp(mod_name,"Perl2UCS.nlp")==0) + { + unsigned int moduleHandle = 0; + moduleHandle = FindNLMHandle("UCSCORE.NLM"); + if (moduleHandle) + { + PFUCSINITIALIZE ucsinit = (PFUCSINITIALIZE)ImportSymbol(moduleHandle,"UCSInitialize"); + if (ucsinit!=NULL) + (*ucsinit)(); + } + } + + DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%x\n", nlmHandle)); + ST(0) = sv_newmortal() ; + if (nlmHandle == NULL) + //SaveError(aTHXo_ "load_file:%s", + // OS_Error_String(aTHXo)) ; + ConsolePrintf("load_file error : %s\n", mod_name8); + else + sv_setiv( ST(0), (IV)nlmHandle); + } + } + free(buffer); + + + } + + void * + dl_find_symbol(libhandle, symbolname) + void * libhandle + char * symbolname + CODE: + DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_find_symbol(handle=%x, symbol=%s)\n", + libhandle, symbolname)); + + //import the symbol that the dynaloader is asking for. + RETVAL = (void *)ImportSymbol((int)libhandle, symbolname); + + DLDEBUG(2,PerlIO_printf(Perl_debug_log," symbolref = %x\n", RETVAL)); + ST(0) = sv_newmortal() ; + if (RETVAL == NULL) + //SaveError(aTHXo_ "find_symbol:%s", + // OS_Error_String(aTHXo)) ; + ConsolePrintf("find_symbol error \n"); + else + sv_setiv( ST(0), (IV)RETVAL); + + void + dl_undef_symbols() + PPCODE: + + + # These functions should not need changing on any platform: + + void + dl_install_xsub(perl_name, symref, filename="$Package") + char * perl_name + void * symref + char * filename + CODE: + DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_install_xsub(name=%s, symref=%x)\n", + perl_name, symref)); + ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name, + (void(*)(pTHXo_ CV *))symref, + filename))); + + + char * + dl_error() + CODE: + RETVAL = LastError ; + OUTPUT: + RETVAL + + # end. + + diff -c /dev/null 'perl-5.7.2/NetWare/intdef.h' Index: ./NetWare/intdef.h *** ./NetWare/intdef.h Thu Jan 1 02:00:00 1970 --- ./NetWare/intdef.h Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,86 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : intdef.h + * DESCRIPTION : ANSI functions hash defined to equivalent Netware functions. + * Author : SGP + * Date : July 1999. + * + */ + + + + #ifndef __INTDEF__ + #define __INTDEF__ + + + #include + #include "..\utility\utility.h" + + + //ANSI functions define to equivalent NetWare internationalization functions + + #define setlocale NWLsetlocale + #define localeconv NWLlocaleconv + #define strncoll NWstrncoll + #define strftime NWLstrftime + + #define atoi NWLatoi + #define itoa NWitoa + #define utoa NWutoa + #define ultoa NWultoa + #define ltoa NWltoa + + #define isalnum NWLisalnum + #define isalpha NWLisalpha + #define isdigit NWLisdigit + + #define strlen NWLmbslen + #define mblen NWLmblen + + //#define strcpy(x,y) NWLstrbcpy(x,y,NWstrlen(y)+1) + #define strcpy(x,y) \ + NWstrncpy(x,y,NWstrlen(y)); \ + x[NWstrlen(y)] ='\0'; + #define strncpy(x,y,z) NWLstrbcpy(x,y,(z + 1)) + #define strcat(x,y) NWLstrbcpy((x + NWstrlen(x)), y, (NWstrlen(y) +1)) + #define strncmp(s1,s2,l) NWgstrncmp(s1,s2,l) + #define strnicmp(s1,s2,l) NWgstrnicmp(s1,s2,l) + + #define toupper(s1) NWCharUpr(s1) + #define wsprintf NWsprintf + + #define strncat(x,y,l) \ + NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strncat\n"); \ + strncat(x,y,l); + + #define strdup(s1) \ + NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strdup\n"); \ + strdup(s1); + + #define strlist \ + NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strlist\n"); \ + strlist; + + #define strlwr(s1) \ + NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strlwr\n"); \ + strlwr(s1); + + #define strnset(s1,l1,l2) \ + NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strnset\n"); \ + strnset(s1,l1,l2); + + #define strset(s1,l1) \ + NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strset\n"); \ + strset(s1,l1); + + + #endif // __INTDEF__ + diff -c /dev/null 'perl-5.7.2/NetWare/interface.c' Index: ./NetWare/interface.c *** ./NetWare/interface.c Thu Jan 1 02:00:00 1970 --- ./NetWare/interface.c Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,208 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : interface.c + * DESCRIPTION : Calling Perl APIs. + * Author : SGP + * Date Created : January 2001. + * Date Modified: July 2nd 2001. + */ + + + + #include "interface.h" + #include "nwtinfo.h" + + static void xs_init(pTHX); + + EXTERN_C int RunPerl(int argc, char **argv, char **env); + EXTERN_C void Perl_nw5_init(int *argcp, char ***argvp); + EXTERN_C void boot_DynaLoader (pTHXo_ CV* cv); + + + ClsPerlHost::ClsPerlHost() + { + + } + + ClsPerlHost::~ClsPerlHost() + { + + } + + ClsPerlHost::VersionNumber() + { + return 0; + } + + bool + ClsPerlHost::RegisterWithThreadTable() + { + return(fnRegisterWithThreadTable()); + } + + bool + ClsPerlHost::UnregisterWithThreadTable() + { + return(fnUnregisterWithThreadTable()); + } + + int + ClsPerlHost::PerlCreate(PerlInterpreter *my_perl) + { + /* if (!(my_perl = perl_alloc())) // Allocate memory for Perl. + return (1);*/ + perl_construct(my_perl); + + return 1; + } + + int + ClsPerlHost::PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env) + { + return(perl_parse(my_perl, xs_init, argc, argv, env)); // Parse the command line. + } + + int + ClsPerlHost::PerlRun(PerlInterpreter *my_perl) + { + return(perl_run(my_perl)); // Run Perl. + } + + void + ClsPerlHost::PerlDestroy(PerlInterpreter *my_perl) + { + perl_destruct(my_perl); // Destructor for Perl. + perl_free(my_perl); // Free the memory allocated for Perl. + + } + + /*============================================================================================ + + Function : xs_init + + Description : + + Parameters : pTHX (IN) - + + Returns : Nothing. + + ==============================================================================================*/ + + static void xs_init(pTHX) + { + char *file = __FILE__; + + dXSUB_SYS; + newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); + } + + + EXTERN_C + int RunPerl(int argc, char **argv, char **env) + { + int exitstatus = 0; + ClsPerlHost nlm; + + PerlInterpreter *my_perl = NULL; // defined in Perl.h + PerlInterpreter *new_perl = NULL; // defined in Perl.h + + #ifdef PERL_GLOBAL_STRUCT + #define PERLVAR(var,type) + #define PERLVARA(var,type) + #define PERLVARI(var,type,init) PL_Vars.var = init; + #define PERLVARIC(var,type,init) PL_Vars.var = init; + + #include "perlvars.h" + + #undef PERLVAR + #undef PERLVARA + #undef PERLVARI + #undef PERLVARIC + #endif + + PERL_SYS_INIT(&argc, &argv); + + if (!(my_perl = perl_alloc())) // Allocate memory for Perl. + return (1); + + if(nlm.PerlCreate(my_perl)) + { + PL_perl_destruct_level = 0; + + exitstatus = nlm.PerlParse(my_perl, argc, argv, env); + if(exitstatus == 0) + { + #if defined(TOP_CLONE) && defined(USE_ITHREADS) // XXXXXX testing + # ifdef PERL_OBJECT + CPerlHost *h = new CPerlHost(); + new_perl = perl_clone_using(my_perl, 1, + h->m_pHostperlMem, + h->m_pHostperlMemShared, + h->m_pHostperlMemParse, + h->m_pHostperlEnv, + h->m_pHostperlStdIO, + h->m_pHostperlLIO, + h->m_pHostperlDir, + h->m_pHostperlSock, + h->m_pHostperlProc + ); + CPerlObj *pPerl = (CPerlObj*)new_perl; + # else + new_perl = perl_clone(my_perl, 1); + # endif + + exitstatus = perl_run(new_perl); // Run Perl. + PERL_SET_THX(my_perl); + #else + exitstatus = nlm.PerlRun(my_perl); + #endif + } + nlm.PerlDestroy(my_perl); + } + + #ifdef USE_ITHREADS + if (new_perl) + { + PERL_SET_THX(new_perl); + nlm.PerlDestroy(new_perl); + } + #endif + + PERL_SYS_TERM(); + return exitstatus; + } + + + // FUNCTION: AllocStdPerl + // + // DESCRIPTION: + // Allocates a standard perl handler that other perl handlers + // may delegate to. You should call FreeStdPerl to free this + // instance when you are done with it. + // + IPerlHost* AllocStdPerl() + { + return new ClsPerlHost(); + } + + + // FUNCTION: FreeStdPerl + // + // DESCRIPTION: + // Frees an instance of a standard perl handler allocated by + // AllocStdPerl. + // + void FreeStdPerl(IPerlHost* pPerlHost) + { + delete (ClsPerlHost*) pPerlHost; + } + + diff -c /dev/null 'perl-5.7.2/NetWare/interface.h' Index: ./NetWare/interface.h *** ./NetWare/interface.h Thu Jan 1 02:00:00 1970 --- ./NetWare/interface.h Mon Jul 9 17:09:40 2001 *************** *** 0 **** --- 1,45 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : interface.c + * DESCRIPTION : Perl parsing and running functions. + * Author : SGP + * Date Created : January 2001. + * Date Modified: July 2nd 2001. + */ + + + + #ifndef __Interface_H__ + #define __Interface_H__ + + + #include "iperlhost.h" + + + class ClsPerlHost : public IPerlHost + { + public: + ClsPerlHost(void); + virtual ~ClsPerlHost(void); + + int VersionNumber(); + + int PerlCreate(PerlInterpreter *my_perl); + int PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env); + int PerlRun(PerlInterpreter *my_perl); + void PerlDestroy(PerlInterpreter *my_perl); + bool RegisterWithThreadTable(void); + bool UnregisterWithThreadTable(void); + }; + + + #endif // __Interface_H__ + diff -c /dev/null 'perl-5.7.2/NetWare/iperlhost.h' Index: ./NetWare/iperlhost.h *** ./NetWare/iperlhost.h Thu Jan 1 02:00:00 1970 --- ./NetWare/iperlhost.h Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,46 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : iperlhost.h + * DESCRIPTION : IPerlHost class file. + * Author : SGP + * Date Created : January 2001. + * Date Modified: July 2nd 2001. + */ + + + + #ifndef __iPerlHost_H__ + #define __iPerlHost_H__ + + + #include "EXTERN.h" + #include "perl.h" + + + class IPerlHost + { + public: + virtual int VersionNumber() = 0; + + virtual int PerlCreate(PerlInterpreter *my_perl) = 0; + virtual int PerlParse(PerlInterpreter *my_perl,int argc, char** argv, char** env) = 0; + virtual int PerlRun(PerlInterpreter *my_perl) = 0; + virtual void PerlDestroy(PerlInterpreter *my_perl) = 0; + virtual bool RegisterWithThreadTable(void)=0; + virtual bool UnregisterWithThreadTable(void)=0; + }; + + extern "C" IPerlHost* AllocStdPerl(); + extern "C" void FreeStdPerl(IPerlHost* pPerlHost); + + + #endif // __iPerlHost_H__ + diff -c /dev/null 'perl-5.7.2/NetWare/netware.h' Index: ./NetWare/netware.h *** ./NetWare/netware.h Thu Jan 1 02:00:00 1970 --- ./NetWare/netware.h Mon Jul 9 17:19:43 2001 *************** *** 0 **** --- 1,89 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : netware.h + * DESCRIPTION : Include for NetWare stuff. + * This is based on the win32.h file of Win32 port. + * Author : SGP + * Date : January 2001. + * + */ + + + + #ifndef _INC_NW_PERL5 + #define _INC_NW_PERL5 + + #include + #include "stdio.h" + + // to get the internal debugger break for functions that are not yet handled + #include "deb.h" + + #ifndef EXT + #include "EXTERN.h" + #endif + + //structure that will be used by times routine. + struct tms { + long tms_utime; + long tms_stime; + long tms_cutime; + long tms_cstime; + }; + + #define PERL_GET_CONTEXT_DEFINED + #define ENV_IS_CASELESS + + #undef init_os_extras + #define init_os_extras Perl_init_os_extras + + #define HAVE_INTERP_INTERN + struct interp_intern { + void * internal_host; + }; + + /* + * handle socket stuff, assuming socket is always available + */ + #include + #include + #include + + //This is clashing with a definition in perly.h, hence + //undefine, may have to redefine if need be - CHKSGP + #undef WORD + + #ifndef SOCKET + typedef u_int SOCKET; + #endif + + #define nw_internal_host (PL_sys_intern.internal_host) + + EXTERN_C void Perl_nw5_init(int *argcp, char ***argvp); + + #define PTHREAD_ATFORK(prepare,parent,child) NOOP + + /* + * This provides a layer of functions and macros to ensure extensions will + * get to use the same RTL functions as the core. + */ + #include "nw5iop.h" + + // Below is called in Run.c file when a perl script executes/runs. + #ifdef MPK_ON + #define PERL_ASYNC_CHECK() kYieldThread(); + #else + #define PERL_ASYNC_CHECK() ThreadSwitch(); + #endif + + + #endif /* _INC_NW_PERL5 */ + diff -c /dev/null 'perl-5.7.2/NetWare/nw5.c' Index: ./NetWare/nw5.c *** ./NetWare/nw5.c Thu Jan 1 02:00:00 1970 --- ./NetWare/nw5.c Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,905 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nw5.c + * DESCRIPTION : Definitions for the redefined functions for NetWare. + * Author : SGP, HYAK + * Date : January 2001. + * + */ + + + + #include // For dTHXo, etc. + #include "nwpipe.h" + + + // This was added since the compile failed saying "undefined P_WAIT" + // when USE_ITHREADS was commented in the makefile + #ifndef P_WAIT + #define P_WAIT 0 + #endif + + #ifndef P_NOWAIT + #define P_NOWAIT 1 + #endif + + // The array is used to store pointer to the memory allocated to the TempPipeFile structure everytime + // a call to the function, nw_Popen. If a simple variable is used, everytime the memory is allocated before + // the previously allocated memory is freed, the pointer will get overwritten and the previous memory allocations + // are lost! Only the most recent one will get freed when calls are made to nw_Pclose. + // By using the array and the iPopenCount to index the array, all memory are freed! + + // The size of the array indicates the limit on the no of times the nw_Popen function can be called (and + // memory allocted) from within a script through backtick operators! + // This is arbitrarily set to MAX_PIPE_RECURSION=256 which indicates there can be 256 nested backtick operators possible! + PTEMPPIPEFILE ptpf1[MAX_PIPE_RECURSION] = {'\0'}; + int iPopenCount = 0; + FILE* File1[MAX_PIPE_RECURSION] = {'\0'}; + + + /** + General: + + In this code, wherever there is a FILE *, the error condition is checked; and only if the FILE * is TRUE, + then the corresponding operation is done. Otherwise the error value is returned. + This is done because the file operations like "open" in the Perl code returns the FILE *, + returning a valid value if the file is found or NULL when the particular file is not found. + Now, if the return value is NULL, then an operation say "fgets", "fopen" etc. using this this NULL value + for FILE * will abend the server. If the check is made then an operation on a non existing file + does not abend the server. + **/ + + void + nw_abort(void) + { + abort(); // Terminate the NLM application abnormally. + return; + } + + int + nw_access(const char *path, int mode) + { + return access(path, mode); + } + + int + nw_chmod(const char *path, int mode) + { + return chmod(path, mode); + } + + void + nw_clearerr(FILE *pf) + { + if(pf) + clearerr(pf); + } + + int + nw_close(int fd) + { + return close(fd); + } + + nw_closedir(DIR *dirp) + { + return (closedir(dirp)); + } + + void + nw_setbuf(FILE *pf, char *buf) + { + if(pf) + setbuf(pf, buf); + } + + int + nw_setmode(FILE *fp, int mode) + { + int *dummy = 0; + return(fnFpSetMode(fp, mode, dummy)); + } + + int + nw_setvbuf(FILE *pf, char *buf, int type, size_t size) + { + if(pf) + return setvbuf(pf, buf, type, size); + else + return -1; + } + + + unsigned int + nw_sleep(unsigned int t) + { + delay(t*1000); // Put the thread to sleep for 't' seconds. Initially 't' is passed in milliseconds. + return 0; + } + + int + nw_spawnvp(int mode, char *cmdname, char **argv) + { + // There is no pass-around environment on NetWare so we throw that + // argument away for now. + + // The function "spawnvp" does not work in all situations. Loading + // edit.nlm seems to work, for example, but the name of the file + // to edit does not appear to get passed correctly. Another problem + // is that on Netware, P_WAIT does not really work reliably. It only + // works with NLMs built to use CLIB (according to Nile Thayne). + // NLMs such as EDIT that are written directly to the system have no + // way of running synchronously from another process. The whole + // architecture on NetWare seems pretty busted, so we just support it + // as best we can. + // + // The spawnvp function only launches NLMs, it will not execute a command; + // the NetWare "system" function is used for that purpose. Unfortunately, "system" + // always returns success whether the command is successful or not or even + // if the command was not found! To avoid ambiguity--you can have both an + // NLM named "perl" and a system command named "perl"--we need to + // force perl scripts to carry the word "load" when loading an NLM. This + // might be clearer anyway. + + int ret = 0; + int argc = 0; + + + if (stricmp(cmdname, LOAD_COMMAND) == 0) + { + if (argv[1] != NULL) + ret = spawnvp(mode, argv[1], &argv[1]); + } + else + { + int i=0; + while (argv[i] != '\0') + i++; + argc = i; + + fnSystemCommand(argv, argc); + } + + return ret; + } + + int + nw_execv(char *cmdname, char **argv) + { + return spawnvp(P_WAIT, cmdname, (char **)argv); + } + + + int + nw_execvp(char *cmdname, char **argv) + { + return nw_spawnvp(P_WAIT, cmdname, (char **)argv); + } + + int + nw_stat(const char *path, struct stat *sbuf) + { + return (stat(path, sbuf)); + } + + FILE * + nw_stderr(void) + { + return (stderr); + } + + FILE * + nw_stdin(void) + { + return (stdin); + } + + FILE * + nw_stdout() + { + return (stdout); + } + + long + nw_telldir(DIR *dirp) + { + dTHXo; + Perl_croak(aTHX_ "telldir function is not implemented"); + return 0l; + } + + int + nw_times(struct tms *timebuf) + { + clock_t now = clock(); + + timebuf->tms_utime = now; + timebuf->tms_stime = 0; + timebuf->tms_cutime = 0; + timebuf->tms_cstime = 0; + + return 0; + } + + FILE* + nw_tmpfile(void) + { + return tmpfile(); + } + + int + nw_uname(struct utsname *name) + { + return(uname(name)); + } + + int + nw_ungetc(int c, FILE *pf) + { + if(pf) + return ungetc(c, pf); + else + return -1; + } + + int + nw_unlink(const char *filename) + { + return(unlink(filename)); + } + + int + nw_utime(const char *filename, struct utimbuf *times) + { + return(utime(filename, times)); + } + + int + nw_vfprintf(FILE *fp, const char *format, va_list args) + { + if(fp) + return (vfprintf(fp, format, args)); + else + return -1; + } + + int + nw_wait(int *status) + { + return 0; + } + + int + nw_waitpid(int pid, int *status, int flags) + { + return 0; + } + + int + nw_write(int fd, const void *buf, unsigned int cnt) + { + return write(fd, buf, cnt); + } + + char * + nw_crypt(const char *txt, const char *salt) + { + dTHXo; + + #ifdef HAVE_DES_FCRYPT + dTHR; + return des_fcrypt(txt, salt, w32_crypt_buffer); + #else + Perl_croak(aTHX_ "The crypt() function is unimplemented due to excessive paranoia."); + return Nullch; + #endif + } + + int + nw_dup(int fd) + { + return dup(fd); + } + + int + nw_dup2(int fd1,int fd2) + { + return dup2(fd1,fd2); + } + + void* + nw_dynaload(const char* filename) + { + return NULL; + } + + int + nw_fclose(FILE *pf) + { + if(pf) + return (fclose(pf)); + else + return -1; + } + + FILE * + nw_fdopen(int handle, const char *mode) + { + return(fdopen(handle, mode)); + } + + int + nw_feof(FILE *fp) + { + if(fp) + return (feof(fp)); + else + return -1; + } + + int + nw_ferror(FILE *fp) + { + if(fp) + return (ferror(fp)); + else + return -1; + } + + + int + nw_fflush(FILE *pf) + { + if(pf) + return fflush(pf); + else + return -1; + } + + int + nw_fgetpos(FILE *pf, fpos_t *p) + { + if(pf) + return fgetpos(pf, p); + else + return -1; + } + + char* + nw_fgets(char *s, int n, FILE *pf) + { + if(pf) + return(fgets(s, n, pf)); + else + return NULL; + } + + int + nw_fileno(FILE *pf) + { + if(pf) + return fileno(pf); + else + return -1; + } + + int + nw_flock(int fd, int oper) + { + return 0; + } + + + FILE * + nw_fopen(const char *filename, const char *mode) + { + return (fopen(filename, mode)); + } + + int + nw_fputc(int c, FILE *pf) + { + if(pf) + return fputc(c,pf); + else + return -1; + } + + int + nw_fputs(const char *s, FILE *pf) + { + if(pf) + return fputs(s, pf); + else + return -1; + } + + size_t + nw_fread(void *buf, size_t size, size_t count, FILE *fp) + { + if(fp) + return fread(buf, size, count, fp); + else + return -1; + } + + FILE * + nw_freopen(const char *path, const char *mode, FILE *stream) + { + if(stream) + return freopen(path, mode, stream); + else + return NULL; + } + + int + nw_fseek(FILE *pf, long offset, int origin) + { + if(pf) + return (fseek(pf, offset, origin)); + else + return -1; + } + + int + nw_fsetpos(FILE *pf, const fpos_t *p) + { + if(pf) + return fsetpos(pf, p); + else + return -1; + } + + long + nw_ftell(FILE *pf) + { + if(pf) + return ftell(pf); + else + return -1; + } + + size_t + nw_fwrite(const void *buf, size_t size, size_t count, FILE *fp) + { + if(fp) + return fwrite(buf, size, count, fp); + else + return -1; + } + + long + nw_get_osfhandle(int fd) + { + return 0l; + } + + int + nw_getc(FILE *pf) + { + if(pf) + return getc(pf); + else + return -1; + } + + int + nw_putc(int c, FILE *pf) + { + if(pf) + return putc(c,pf); + else + return -1; + } + + int + nw_fgetc(FILE *pf) + { + if(pf) + return fgetc(pf); + else + return -1; + } + + int + nw_getpid(void) + { + return GetThreadGroupID(); + } + + int + nw_kill(int pid, int sig) + { + return 0; + } + + int + nw_link(const char *oldname, const char *newname) + { + return 0; + } + + long + nw_lseek(int fd, long offset, int origin) + { + return lseek(fd, offset, origin); + } + + int + nw_chdir(const char *dir) + { + return chdir(dir); + } + + int + nw_rmdir(const char *dir) + { + return rmdir(dir); + } + + DIR * + nw_opendir(char *filename) + { + char *buff = NULL; + int len = 0; + DIR *ret = NULL; + + len = strlen(filename); + buff = malloc(len + 5); + if (buff) { + strcpy(buff, filename); + if (buff[len-1]=='/' || buff[len-1]=='\\') { + buff[--len] = 0; + } + strcpy(buff+len, "/*.*"); + ret = opendir(buff); + free (buff); + buff = NULL; + return ret; + } else { + return NULL; + } + } + + int + nw_open(const char *path, int flag, ...) + { + va_list ap; + int pmode = -1; + + va_start(ap, flag); + pmode = va_arg(ap, int); + va_end(ap); + + if (stricmp(path, "/dev/null")==0) + path = "NUL"; + + return open(path, flag, pmode); + } + + int + nw_open_osfhandle(long handle, int flags) + { + return 0; + } + + unsigned long + nw_os_id(void) + { + return 0l; + } + + int nw_Pipe(int* a, int* e) + { + int ret = 0; + + errno = 0; + ret = pipe(a); + if(errno) + e = &errno; + + return ret; + } + + FILE* nw_Popen(char* command, char* mode, int* e) + { + int i = -1; + + FILE* ret = NULL; + PTEMPPIPEFILE ptpf = NULL; + + // this callback is supposed to call _popen, which spawns an + // asynchronous command and opens a pipe to it. The returned + // file handle can be read or written to; if read, it represents + // stdout of the called process and will return EOF when the + // called process finishes. If written to, it represents stdin + // of the called process. Naturally _popen is not available on + // NetWare so we must do some fancy stuff to simulate it. We will + // redirect to and from temp files; this has the side effect + // of having to run the process synchronously rather than + // asynchronously. This means that you will only be able to do + // this with CLIB NLMs built to run on the calling thread. + + errno = 0; + + ptpf1[iPopenCount] = (PTEMPPIPEFILE) malloc(sizeof(TEMPPIPEFILE)); + if (!ptpf1[iPopenCount]) + return NULL; + + ptpf = ptpf1[iPopenCount]; + iPopenCount ++; + if(iPopenCount > MAX_PIPE_RECURSION) + iPopenCount = MAX_PIPE_RECURSION; // Limit to the max no of pipes to be open recursively. + + fnTempPipeFile(ptpf); + ret = fnPipeFileOpen((PTEMPPIPEFILE) ptpf, (char *) command, (char *) mode); + if (ret) + File1[iPopenCount-1] = ret; // Store the obtained Pipe file handle. + else + { // Pipe file not obtained. So free the allocated memory. + if(ptpf1[iPopenCount-1]) + { + free(ptpf1[iPopenCount-1]); + ptpf1[iPopenCount-1] = NULL; + ptpf = NULL; + iPopenCount --; + } + } + + if (errno) + e = &errno; + + return ret; + } + + int nw_Pclose(FILE* file, int* e) + { + int i=0, j=0; + + errno = 0; + + if(file) + { + if(iPopenCount > 0) + { + for (i=0; i + #else + # include + #endif + + /* + * defines for flock emulation + */ + #define LOCK_SH 1 + #define LOCK_EX 2 + #define LOCK_NB 4 + #define LOCK_UN 8 + + + /* + * Make this as close to original stdio as possible. + */ + + /* + * function prototypes for our own win32io layer + */ + /********CHKSGP ****/ + //making DLLExport as nothing + #define DllExport + /*******************/ + + START_EXTERN_C + + int * nw_errno(void); + char *** nw_environ(void); + + FILE* nw_stdin(void); + FILE* nw_stdout(void); + FILE* nw_stderr(void); + int nw_ferror(FILE *fp); + int nw_feof(FILE *fp); + + char* nw_strerror(int e); + + int nw_fprintf(FILE *pf, const char *format, ...); + int nw_printf(const char *format, ...); + int nw_vfprintf(FILE *pf, const char *format, va_list arg); + int nw_vprintf(const char *format, va_list arg); + + size_t nw_fread(void *buf, size_t size, size_t count, FILE *pf); + size_t nw_fwrite(const void *buf, size_t size, size_t count, FILE *pf); + FILE* nw_fopen(const char *path, const char *mode); + FILE* nw_fdopen(int fh, const char *mode); + FILE* nw_freopen(const char *path, const char *mode, FILE *pf); + int nw_fclose(FILE *pf); + + int nw_fputs(const char *s,FILE *pf); + int nw_fputc(int c,FILE *pf); + int nw_ungetc(int c,FILE *pf); + int nw_getc(FILE *pf); + int nw_fileno(FILE *pf); + void nw_clearerr(FILE *pf); + int nw_fflush(FILE *pf); + long nw_ftell(FILE *pf); + int nw_fseek(FILE *pf,long offset,int origin); + int nw_fgetpos(FILE *pf,fpos_t *p); + int nw_fsetpos(FILE *pf,const fpos_t *p); + void nw_rewind(FILE *pf); + FILE* nw_tmpfile(void); + + void nw_abort(void); + + int nw_stat(const char *name,struct stat *sbufptr); + + FILE* nw_Popen(char* command, char* mode, int* e); + int nw_Pclose(FILE* file, int* e); + int nw_Pipe(int* a, int* e); + + int nw_rename( const char *oname, const char *newname); + //int nw_setmode( int fd, int mode); + int nw_setmode( FILE *fp, int mode); + long nw_lseek( int fd, long offset, int origin); + int nw_dup( int fd); + int nw_dup2(int h1, int h2); + int nw_open(const char *path, int oflag,...); + int nw_close(int fd); + int nw_read(int fd, void *buf, unsigned int cnt); + int nw_write(int fd, const void *buf, unsigned int cnt); + + int nw_spawnvp(int mode, char *cmdname, char **argv); + + int nw_rmdir(const char *dir); + int nw_chdir(const char *dir); + int nw_flock(int fd, int oper); + + int nw_execv(char *cmdname, char **argv); + int nw_execvp(char *cmdname, char **argv); + + void nw_setbuf(FILE *pf, char *buf); + int nw_setvbuf(FILE *pf, char *buf, int type, size_t size); + char* nw_fgets(char *s, int n, FILE *pf); + + int nw_fgetc(FILE *pf); + + int nw_putc(int c, FILE *pf); + + int nw_open_osfhandle(long handle, int flags); + long nw_get_osfhandle(int fd); + + DIR* nw_opendir(char *filename); + struct direct* nw_readdir(DIR *dirp); + long nw_telldir(DIR *dirp); + void nw_seekdir(DIR *dirp, long loc); + void nw_rewinddir(DIR *dirp); + int nw_closedir(DIR *dirp); + + unsigned int nw_sleep(unsigned int); + int nw_times(struct tms *timebuf); + + int nw_stat(const char *path, struct stat *buf); + int nw_link(const char *oldname, const char *newname); + int nw_unlink(const char *f); + int nw_utime(const char *f, struct utimbuf *t); + DllExport int nw_uname(struct utsname *n); + + int nw_wait(int *status); + + int nw_waitpid(int pid, int *status, int flags); + int nw_kill(int pid, int sig); + + unsigned long nw_os_id(void); + void* nw_dynaload(const char*filename); + + int nw_access(const char *path, int mode); + int nw_chmod(const char *path, int mode); + int nw_getpid(void); + + char * nw_crypt(const char *txt, const char *salt); + + int nw_isatty(int fd); + char* nw_mktemp(char *Template); + int nw_chsize(int handle, long size); + END_EXTERN_C + + + /* + * the following six(6) is #define in stdio.h + */ + #ifndef WIN32IO_IS_STDIO + #undef environ + #undef feof + #undef pipe + #undef pause + #undef sleep + #undef times + #undef alarm + #undef ioctl + #undef unlink + #undef utime + #undef uname + #undef wait + + #ifdef __BORLANDC__ + #undef ungetc + #undef getc + #undef putc + #undef getchar + #undef putchar + #undef fileno + #endif + + #define environ (*nw_environ()) + + + #if !defined(MYMALLOC) || !defined(PERL_CORE) + + #endif + + + #endif /* WIN32IO_IS_STDIO */ + #endif /* NW5IOP_H */ + diff -c /dev/null 'perl-5.7.2/NetWare/nw5sck.c' Index: ./NetWare/nw5sck.c *** ./NetWare/nw5sck.c Thu Jan 1 02:00:00 1970 --- ./NetWare/nw5sck.c Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,299 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nw5sck.c + * DESCRIPTION : Socket related functions. + * Author : SGP + * Date : January 2001. + * Date Modified: June 26th 2001. + */ + + + + #include "EXTERN.h" + #include "perl.h" + + #if defined(PERL_OBJECT) + #define NO_XSLOCKS + #include "XSUB.h" + #endif + + #include "nw5iop.h" + #include "nw5sck.h" + #include + #include + + u_long + nw_htonl(u_long hostlong) + { + return htonl(hostlong); + } + + u_short + nw_htons(u_short hostshort) + { + return htons(hostshort); + } + + u_long + nw_ntohl(u_long netlong) + { + return ntohl(netlong); + } + + u_short + nw_ntohs(u_short netshort) + { + return ntohs(netshort); + } + + SOCKET + nw_accept(SOCKET s, struct sockaddr *addr, int *addrlen) + { + return ((SOCKET)(accept(s, addr, addrlen))); + } + + int + nw_bind(SOCKET s, const struct sockaddr *addr, int addrlen) + { + return ((int)bind(s, (struct sockaddr *)addr, addrlen)); + + } + + int + nw_connect(SOCKET s, const struct sockaddr *addr, int addrlen) + { + return((int)connect(s, (struct sockaddr *)addr, addrlen)); + } + + void + nw_endhostent() + { + endhostent(); + } + + void + nw_endnetent() + { + endnetent(); + } + + void + nw_endprotoent() + { + endprotoent(); + } + + void + nw_endservent() + { + endservent(); + } + + struct hostent * + nw_gethostent() + { + return(gethostent()); + } + + struct netent * + nw_getnetent(void) + { + return ((struct netent *) getnetent()); + } + + struct protoent * + nw_getprotoent(void) + { + return ((struct protoent *) getprotoent()); + } + + struct hostent * + nw_gethostbyname(const char *name) + { + return(gethostbyname((char*)name)); + } + + int + nw_gethostname(char *name, int len) + { + return(gethostname(name, len)); + } + + struct hostent * + nw_gethostbyaddr(const char *addr, int len, int type) + { + return(gethostbyaddr((char*)addr, len, type)); + } + + struct netent * + nw_getnetbyaddr(long net, int type) + { + return(getnetbyaddr(net,type)); + } + + struct netent * + nw_getnetbyname(char *name) + { + return (struct netent *)getnetbyname(name); + } + + int + nw_getpeername(SOCKET s, struct sockaddr *addr, int *addrlen) + { + return((int)getpeername(s, addr, addrlen)); + } + + struct protoent * + nw_getprotobyname(const char *name) + { + return ((struct protoent *)getprotobyname((char*)name)); + } + + struct protoent * + nw_getprotobynumber(int num) + { + return ((struct protoent *)getprotobynumber(num)); + } + + struct servent * + nw_getservbyname(const char *name, const char *proto) + { + return (struct servent *)getservbyname((char*)name, (char*)proto); + } + + + struct servent * + nw_getservbyport(int port, const char *proto) + { + return (struct servent *)getservbyport(port, (char*)proto); + } + + struct servent * + nw_getservent(void) + { + return (struct servent *) getservent(); + } + + void + nw_sethostent(int stayopen) + { + sethostent(stayopen); + } + + void + nw_setnetent(int stayopen) + { + setnetent(stayopen); + } + + void + nw_setprotoent(int stayopen) + { + setprotoent(stayopen); + } + + void + nw_setservent(int stayopen) + { + setservent(stayopen); + } + + int + nw_setsockopt(SOCKET s, int level, int optname, const char* optval, int optlen) + { + return setsockopt(s, level, optname, (char*)optval, optlen); + } + + int + nw_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen) + { + return getsockname(s, addr, addrlen); + } + + int + nw_getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen) + { + return ((int)getsockopt(s, level, optname, optval, optlen)); + } + + unsigned long + nw_inet_addr(const char *cp) + { + return inet_addr((char*)cp); + } + + SOCKET + nw_socket(int af, int type, int protocol) + { + SOCKET s; + + #ifndef USE_SOCKETS_AS_HANDLES + s = socket(af, type, protocol); + #else + if((s = socket(af, type, protocol)) == INVALID_SOCKET) + //errno = WSAGetLastError(); + else + s = s; + #endif /* USE_SOCKETS_AS_HANDLES */ + + return s; + } + + int + nw_listen(SOCKET s, int backlog) + { + return(listen(s, backlog)); + } + + int + nw_send(SOCKET s, const char *buf, int len, int flags) + { + return(send(s,(char*)buf,len,flags)); + } + + int + nw_recv(SOCKET s, char *buf, int len, int flags) + { + return (recv(s, buf, len, flags)); + } + + int + nw_sendto(SOCKET s, const char *buf, int len, int flags, + const struct sockaddr *to, int tolen) + { + return(sendto(s, (char*)buf, len, flags, (struct sockaddr *)to, tolen)); + } + + int + nw_recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) + { + int r; + int frombufsize = *fromlen; + + r = recvfrom(s, buf, len, flags, from, fromlen); + //Not sure if the is required - chksgp + if (r && frombufsize == *fromlen) + (void)nw_getpeername(s, from, fromlen); + return r; + } + + int + nw_select(int nfds, fd_set* rd, fd_set* wr, fd_set* ex, const struct timeval* timeout) + { + return(select(nfds, rd, wr, ex, (struct timeval*)timeout)); + } + + int + nw_shutdown(SOCKET s, int how) + { + return (shutdown(s, how)); + } + diff -c /dev/null 'perl-5.7.2/NetWare/nw5sck.h' Index: ./NetWare/nw5sck.h *** ./NetWare/nw5sck.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nw5sck.h Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,129 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nw5sck.h + * DESCRIPTION : Socket related functions. + * Author : SGP + * Date : January 2001. + * Date Modified: June 26th 2001. + * + */ + + + + #ifndef _INC_NW_SOCKET + #define _INC_NW_SOCKET + + + #include + #ifdef __cplusplus + extern "C" { + #endif + + typedef u_int SOCKET; + + struct nwsockent local_context; + + # undef gethostbyname + # undef gethostbyaddr + + # undef endhostent + # undef endnetent + # undef endprotoent + # undef endservent + # undef gethostent + # undef getprotoent + # undef getnetbyaddr + # undef getnetbyname + # undef gethostbyaddr + # undef getprotobyname + # undef getservbyname + # undef getservbyport + # undef getservent + # undef sethostent + # undef setnetent + # undef setprotoent + # undef setservent + + # define gethostbyname(name) NetDBgethostbyname(&local_context,name) + # define gethostbyaddr(a,l,t) NetDBgethostbyaddr(&local_context,a,l,t) + + # define endhostent() NetDBendhostent(&local_context) + # define endnetent() NWendnetent(&local_context) + # define endprotoent() NWendprotoent(&local_context) + # define endservent() NWendservent(&local_context) + # define gethostent() NetDBgethostent(&local_context,NULL) + # define getprotoent() NWgetprotoent(&local_context) + # define gethostbyaddr(a,l,t) NetDBgethostbyaddr(&local_context,a,l,t) + # define getnetbyaddr(net,typ) NWgetnetbyaddr(&local_context,net,typ) + # define getnetbyname(name) NWgetnetbyname(&local_context,name) + # define getprotobyname(name) NWgetprotobyname(&local_context,name) + # define getservbyname(n,p) NWgetservbyname(&local_context,n,p) + # define getservbyport(n,p) NWgetservbyport(&local_context,n,p) + # define getservent() NWgetservent(&local_context) + # define sethostent() NWsethostent(&local_context, stayopen) + # define setnetent() NWsetnetent(&local_context, stayopen) + # define setprotoent() NWsetprotoent(&local_context, stayopen) + # define setservent() NWsetservent(&local_context, stayopen) + + u_long nw_htonl(u_long hostlong); + u_short nw_htons(u_short hostshort); + u_long nw_ntohl(u_long netlong); + u_short nw_ntohs(u_short netshort); + + SOCKET nw_accept(SOCKET s, struct sockaddr *addr, int *addrlen); + int nw_bind(SOCKET s, const struct sockaddr *addr, int addrlen); + int nw_connect(SOCKET s, const struct sockaddr *addr, int addrlen); + + struct hostent * nw_gethostbyname(const char * name); + struct hostent * nw_gethostbyaddr(const char *addr, int len, int type); + int nw_gethostname(char *name, int len); + struct netent * nw_getnetbyaddr(long net, int type); + struct netent *nw_getnetbyname(char *name); + int nw_getpeername(SOCKET s, struct sockaddr *addr, int *addrlen); + struct protoent * nw_getprotobyname(const char *name); + struct protoent * nw_getprotobynumber(int num); + struct servent * nw_getservbyname(const char *name, const char *proto); + struct servent * nw_getservbyport(int port, const char *proto); + struct servent * nw_getservent(void); + void nw_sethostent(int stayopen); + void nw_setnetent(int stayopen); + void nw_setprotoent(int stayopen); + void nw_setservent(int stayopen); + int nw_setsockopt(SOCKET s, int level, int optname, const char* optval, int optlen); + + int nw_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen); + int nw_getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen); + + unsigned long nw_inet_addr(const char *cp); + + void nw_endhostent(); + void nw_endnetent(); + void nw_endprotoent(); + void nw_endservent(); + struct hostent *nw_gethostent(); + struct netent *nw_getnetent(); + struct protoent * nw_getprotoent(); + + SOCKET nw_socket(int af, int type, int protocol); + int nw_listen(SOCKET s, int backlog); + int nw_send(SOCKET s, const char *buf, int len, int flags); + int nw_recv(SOCKET s, char *buf, int len, int flags); + int nw_sendto(SOCKET s, const char *buf, int len, int flags,const struct sockaddr *to, int tolen); + int nw_recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen); + int nw_select(int nfds, fd_set* rd, fd_set* wr, fd_set* ex, const struct timeval* timeout); + int nw_shutdown(SOCKET s, int how); + #ifdef __cplusplus + } + #endif + + + #endif // _INC_NW_SOCKET + diff -c /dev/null 'perl-5.7.2/NetWare/nw5thread.c' Index: ./NetWare/nw5thread.c *** ./NetWare/nw5thread.c Thu Jan 1 02:00:00 1970 --- ./NetWare/nw5thread.c Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,86 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nw5thread.c + * DESCRIPTION : Thread related functions. + * Author : SGP + * Date : January 2001. + * + */ + + + + #include "EXTERN.h" + #include "perl.h" + + #if defined(PERL_OBJECT) + #define NO_XSLOCKS + extern CPerlObj* pPerl; + #include "XSUB.h" + #endif + + //For Thread Local Storage + #include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" + #include "nwtinfo.h" + + #ifdef USE_DECLSPEC_THREAD + __declspec(thread) void *PL_current_context = NULL; + #endif + + + void + Perl_set_context(void *t) + { + #if defined(USE_THREADS) || defined(USE_ITHREADS) + # ifdef USE_DECLSPEC_THREAD + Perl_current_context = t; + # else + fnAddThreadCtx(PL_thr_key, t); + # endif + #endif + } + + + void * + Perl_get_context(void) + { + #if defined(USE_THREADS) || defined(USE_ITHREADS) + # ifdef USE_DECLSPEC_THREAD + return Perl_current_context; + # else + return(fnGetThreadCtx(PL_thr_key)); + # endif + #else + return NULL; + #endif + } + + + //To Remove the Thread Context stored during Perl_set_context + BOOL + Remove_Thread_Ctx(void) + { + #if defined(USE_THREADS) || defined(USE_ITHREADS) + # ifdef USE_DECLSPEC_THREAD + return TRUE; + # else + return(fnRemoveThreadCtx(PL_thr_key)); + # endif + # else + return TRUE; + #endif + } + + + //PL_thr_key - Not very sure if this is global or per thread. When multiple scripts + //run simultaneously on NetWare, this will give problems. Hence in nwtinfo.c, the + //current thread id is used as the TLS index & PL_thr_key is not used. + //This has to be checked???? - sgp + diff -c /dev/null 'perl-5.7.2/NetWare/nw5thread.h' Index: ./NetWare/nw5thread.h *** ./NetWare/nw5thread.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nw5thread.h Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,176 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nw5thread.h + * DESCRIPTION : Thread related functions. + * Author : SGP + * Date : January 2001. + * + */ + + + + #ifndef _NW5THREAD_H + #define _NW5THREAD_H + + + #include + + #include "netware.h" + + typedef long perl_key; + + #if (defined (USE_ITHREADS) || defined (USE_THREADS)) && defined(MPK_ON) + #ifdef __cplusplus + extern "C" + { + #endif + #include + #include + #define kSUCCESS (0) + #define ERROR_INVALID_MUTEX (0x1010) + + #ifdef __cplusplus + } + #endif + #undef WORD + //On NetWare, since the NLM will be resident, only once the MUTEX_INIT gets called and + //this will be freed when the script terminates. But when a new script is executed, + //then MUTEX_LOCK will fail since it is already freed. Even if this problem is fixed + //by not freeing the mutex when script terminates but when the NLM unloads, there will + //still be problems when multiple scripts are running simultaneously in a multi-processor + //machine - sgp + typedef MUTEX perl_mutex; + # define MUTEX_INIT(m) \ + STMT_START { \ + /*if ((*(m) = kMutexAlloc("NetWarePerlMutex")) == NULL) */\ + /*Perl_croak_nocontext("panic: MUTEX_ALLOC"); */\ + /*ConsolePrintf("Mutex Init %d\n",*(m)); */\ + } STMT_END + + # define MUTEX_LOCK(m) \ + STMT_START { \ + /*ConsolePrintf("Mutex lock %d\n",*(m)); */\ + /*if (kMutexLock(*(m)) == ERROR_INVALID_MUTEX) */\ + /*Perl_croak_nocontext("panic: MUTEX_LOCK"); */\ + } STMT_END + + # define MUTEX_UNLOCK(m) \ + STMT_START { \ + /*ConsolePrintf("Mutex unlock %d\n",*(m)); */\ + /*if (kMutexUnlock(*(m)) != kSUCCESS) \ + Perl_croak_nocontext("panic: MUTEX_UNLOCK"); */\ + } STMT_END + + # define MUTEX_DESTROY(m) \ + STMT_START { \ + /*ConsolePrintf("Mutex Destroy %d\n",*(m)); */\ + /*if (kMutexWaitCount(*(m)) == 0 ) */\ + /*{ */\ + /*PERL_SET_INTERP(NULL); *//*newly added CHKSGP???*/ \ + /*if (kMutexFree(*(m)) != kSUCCESS) */ \ + /*Perl_croak_nocontext("panic: MUTEX_FREE"); */\ + /*} */\ + } STMT_END + + #else + typedef unsigned long perl_mutex; + # define MUTEX_INIT(m) + # define MUTEX_LOCK(m) + # define MUTEX_UNLOCK(m) + # define MUTEX_DESTROY(m) + #endif + + /* These macros assume that the mutex associated with the condition + * will always be held before COND_{SIGNAL,BROADCAST,WAIT,DESTROY}, + * so there's no separate mutex protecting access to (c)->waiters + */ + //For now let us just see when this happens -sgp. + #define COND_INIT(c) \ + STMT_START { \ + ConsolePrintf("In COND_INIT\n"); \ + } STMT_END + + /* (c)->waiters = 0; \ + (c)->sem = OpenLocalSemaphore (0); \ + if ((c)->sem == NULL) \ + Perl_croak_nocontext("panic: COND_INIT (%ld)",errno); \*/ + + #define COND_SIGNAL(c) \ + STMT_START { \ + ConsolePrintf("In COND_SIGNAL\n"); \ + } STMT_END + /*if ((c)->waiters > 0 && \ + SignalLocalSemaphore((c)->sem) != 0) \ + Perl_croak_nocontext("panic: COND_SIGNAL (%ld)",errno); \*/ + + #define COND_BROADCAST(c) \ + STMT_START { \ + ConsolePrintf("In COND_BROADCAST\n"); \ + } STMT_END + + /*if ((c)->waiters > 0 ) { \ + int count; \ + for(count=0; count<(c)->waiters; count++) { \ + if(SignalLocalSemaphore((c)->sem) != 0) \ + Perl_croak_nocontext("panic: COND_BROADCAST (%ld)",GetLastError());\ + } \ + } \*/ + #define COND_WAIT(c, m) \ + STMT_START { \ + ConsolePrintf("In COND_WAIT\n"); \ + } STMT_END + + + #define COND_DESTROY(c) \ + STMT_START { \ + ConsolePrintf("In COND_DESTROY\n"); \ + } STMT_END + + /* (c)->waiters = 0; \ + if (CloseLocalSemaphore((c)->sem) != 0) \ + Perl_croak_nocontext("panic: COND_DESTROY (%ld)",errno); \*/ + + #if 0 + #define DETACH(t) \ + STMT_START { \ + if (CloseHandle((t)->self) == 0) { \ + MUTEX_UNLOCK(&(t)->mutex); \ + Perl_croak_nocontext("panic: DETACH"); \ + } \ + } STMT_END + #endif //#if 0 + + //Following has to be defined CHKSGP + #if defined(PERLDLL) && defined(USE_DECLSPEC_THREAD) && (!defined(__BORLANDC__) || defined(_DLL)) + extern __declspec(thread) void *PL_current_context; + #define PERL_SET_CONTEXT(t) (PL_current_context = t) + #define PERL_GET_CONTEXT PL_current_context + #else + #define PERL_GET_CONTEXT Perl_get_context() + #define PERL_SET_CONTEXT(t) Perl_set_context(t) + #endif + + //Check the following, will be used in Thread extension - CHKSGP + #define THREAD_RET_TYPE unsigned __stdcall + #define THREAD_RET_CAST(p) ((unsigned)(p)) + + #define INIT_THREADS NOOP + + //Ideally this should have been PL_thr_key = fnInitializeThreadCtx(); + //See the comment at the end of file nw5thread.c as to why PL_thr_key is not assigned - sgp + #define ALLOC_THREAD_KEY \ + STMT_START { \ + fnInitializeThreadCtx(); \ + } STMT_END + + + #endif /* _NW5THREAD_H */ + diff -c /dev/null 'perl-5.7.2/NetWare/nwperlsys.c' Index: ./NetWare/nwperlsys.c *** ./NetWare/nwperlsys.c Thu Jan 1 02:00:00 1970 --- ./NetWare/nwperlsys.c Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,228 ---- + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nwperlsys.c + * DESCRIPTION : Contains calls to Perl APIs and + * utility functions calls + * + * Author : SGP + * Date Created : June 12th 2001. + * Date Modified: June 26th 2001. + */ + + #include "EXTERN.h" + #include "perl.h" + + + #ifdef PERL_OBJECT + #define NO_XSLOCKS + #endif + + //CHKSGP + //Including this is giving premature end-of-file error during compilation + //#include "XSUB.h" + + #ifdef PERL_IMPLICIT_SYS + + //Includes iperlsys.h and function definitions + #include "nwperlsys.h" + + /*============================================================================================ + + Function : fnFreeMemEntry + + Description : Called for each outstanding memory allocation at the end of a script run. + Frees the outstanding allocations + + Parameters : ptr (IN). + context (IN) + + Returns : Nothing. + + ==============================================================================================*/ + + void fnFreeMemEntry(void* ptr, void* context) + { + if(ptr) + { + PerlMemFree(NULL, ptr); + } + } + /*============================================================================================ + + Function : fnAllocListHash + + Description : Hashing function for hash table of memory allocations. + + Parameters : invalue (IN). + + Returns : unsigned. + + ==============================================================================================*/ + + unsigned fnAllocListHash(void* const& invalue) + { + return (((unsigned) invalue & 0x0000ff00) >> 8); + } + + /*============================================================================================ + + Function : perl_alloc + + Description : creates a Perl interpreter variable and initializes + + Parameters : none + + Returns : Pointer to Perl interpreter + + ==============================================================================================*/ + + EXTERN_C PerlInterpreter* + perl_alloc(void) + { + PerlInterpreter* my_perl = NULL; + + WCValHashTable* m_allocList; + m_allocList = new WCValHashTable (fnAllocListHash, 256); + fnInsertHashListAddrs(m_allocList, FALSE); + + my_perl = perl_alloc_using(&perlMem, + NULL, + NULL, + &perlEnv, + &perlStdIO, + &perlLIO, + &perlDir, + &perlSock, + &perlProc); + if (my_perl) { + #ifdef PERL_OBJECT + CPerlObj* pPerl = (CPerlObj*)my_perl; + #endif + //nw5_internal_host = m_allocList; + } + return my_perl; + } + + /*============================================================================================ + + Function : perl_alloc_override + + Description : creates a Perl interpreter variable and initializes + + Parameters : Pointer to structure containing function pointers + + Returns : Pointer to Perl interpreter + + ==============================================================================================*/ + EXTERN_C PerlInterpreter* + perl_alloc_override(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, + struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, + struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, + struct IPerlDir** ppDir, struct IPerlSock** ppSock, + struct IPerlProc** ppProc) + { + PerlInterpreter *my_perl = NULL; + + struct IPerlMem* lpMem; + struct IPerlEnv* lpEnv; + struct IPerlStdIO* lpStdio; + struct IPerlLIO* lpLIO; + struct IPerlDir* lpDir; + struct IPerlSock* lpSock; + struct IPerlProc* lpProc; + + WCValHashTable* m_allocList; + m_allocList = new WCValHashTable (fnAllocListHash, 256); + fnInsertHashListAddrs(m_allocList, FALSE); + + if (!ppMem) + lpMem=&perlMem; + else + lpMem=*ppMem; + + if (!ppEnv) + lpEnv=&perlEnv; + else + lpEnv=*ppEnv; + + if (!ppStdIO) + lpStdio=&perlStdIO; + else + lpStdio=*ppStdIO; + + if (!ppLIO) + lpLIO=&perlLIO; + else + lpLIO=*ppLIO; + + if (!ppDir) + lpDir=&perlDir; + else + lpDir=*ppDir; + + if (!ppSock) + lpSock=&perlSock; + else + lpSock=*ppSock; + + if (!ppProc) + lpProc=&perlProc; + else + lpProc=*ppProc; + + my_perl = perl_alloc_using(lpMem, + NULL, + NULL, + lpEnv, + lpStdio, + lpLIO, + lpDir, + lpSock, + lpProc); + + if (my_perl) { + #ifdef PERL_OBJECT + CPerlObj* pPerl = (CPerlObj*)my_perl; + #endif + //nw5_internal_host = pHost; + } + return my_perl; + } + /*============================================================================================ + + Function : nw5_delete_internal_host + + Description : Deletes the alloc_list pointer + + Parameters : alloc_list pointer + + Returns : none + + ==============================================================================================*/ + + EXTERN_C void + nw5_delete_internal_host(void *h) + { + WCValHashTable* m_allocList; + void **listptr; + BOOL m_dontTouchHashLists; + if (fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { + m_allocList = (WCValHashTable*)listptr; + fnInsertHashListAddrs(m_allocList, TRUE); + if (m_allocList) + { + m_allocList->forAll(fnFreeMemEntry, NULL); + fnInsertHashListAddrs(NULL, FALSE); + delete m_allocList; + } + } + } + + #endif /* PERL_IMPLICIT_SYS */ diff -c /dev/null 'perl-5.7.2/NetWare/nwperlsys.h' Index: ./NetWare/nwperlsys.h *** ./NetWare/nwperlsys.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nwperlsys.h Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,1385 ---- + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nwperlsys.h + * DESCRIPTION : Derives from iperlsys.h and define the + * platform specific function + * Author : SGP + * Date Created : June 12th 2001. + * Date Modified: June 30th 2001. + */ + + #ifndef ___NWPerlSys_H___ + #define ___NWPerlSys_H___ + + + #include "iperlsys.h" + #include "nwstdio.h" + + #include "nw5iop.h" + #include + + //Socket related calls + #include "nw5sck.h" + + //Store the Watcom hash list + #include "nwtinfo.h" + + //Watcom hash list + #include + + #include "win32ish.h" + + START_EXTERN_C + extern int do_spawn2(char *cmd, int exectype); + extern int do_aspawn(void *vreally, void **vmark, void **vsp); + extern void Perl_init_os_extras(void); + BOOL fnGetHashListAddrs(void *addrs, BOOL *dontTouchHashList); + END_EXTERN_C + + /* IPerlMem - Memory management functions - Begin ========================================*/ + + void* + PerlMemMalloc(struct IPerlMem* piPerl, size_t size) + { + void *ptr = NULL; + ptr = malloc(size); + if (ptr) { + void **listptr; + BOOL m_dontTouchHashLists; + if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { + if (listptr) { + WCValHashTable* m_allocList= (WCValHashTable*)listptr; + (WCValHashTable*)m_allocList->insert(ptr); + } + } + } + return(ptr); + } + + void* + PerlMemRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) + { + void *newptr = NULL; + WCValHashTable* m_allocList; + + newptr = realloc(ptr, size); + + if (ptr) + { + void **listptr; + BOOL m_dontTouchHashLists; + if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { + m_allocList= (WCValHashTable*)listptr; + (WCValHashTable*)m_allocList->remove(ptr); + } + } + if (newptr) + { + if (m_allocList) + (WCValHashTable*)m_allocList->insert(newptr); + } + + return(newptr); + } + + void + PerlMemFree(struct IPerlMem* piPerl, void* ptr) + { + BOOL m_dontTouchHashLists; + WCValHashTable* m_allocList; + + void **listptr; + if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { + m_allocList= (WCValHashTable*)listptr; + // Final clean up, free all the nodes from the hash list + if (m_dontTouchHashLists) + { + if(ptr) + { + free(ptr); + ptr = NULL; + } + } + else + { + if(ptr && m_allocList) + { + if ((WCValHashTable*)m_allocList->remove(ptr)) + { + free(ptr); + ptr = NULL; + } + else + { + // If it comes here, that means that the memory pointer is not contained in the hash list. + // But no need to free now, since if is deleted here, it will result in an abend!! + // If the memory is still there, it will be cleaned during final cleanup anyway. + } + } + } + } + return; + } + + void* + PerlMemCalloc(struct IPerlMem* piPerl, size_t num, size_t size) + { + void *ptr = NULL; + + ptr = calloc(num, size); + if (ptr) { + void **listptr; + BOOL m_dontTouchHashLists; + if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { + if (listptr) { + WCValHashTable* m_allocList= (WCValHashTable*)listptr; + (WCValHashTable*)m_allocList->insert(ptr); + } + } + } + return(ptr); + } + + struct IPerlMem perlMem = + { + PerlMemMalloc, + PerlMemRealloc, + PerlMemFree, + PerlMemCalloc, + }; + + /* IPerlMem - Memory management functions - End ========================================*/ + + /* IPerlDir - Directory Manipulation functions - Begin ===================================*/ + + int + PerlDirMakedir(struct IPerlDir* piPerl, const char *dirname, int mode) + { + return mkdir(dirname); + } + + int + PerlDirChdir(struct IPerlDir* piPerl, const char *dirname) + { + return nw_chdir(dirname); + } + + int + PerlDirRmdir(struct IPerlDir* piPerl, const char *dirname) + { + return nw_rmdir(dirname); + } + + int + PerlDirClose(struct IPerlDir* piPerl, DIR *dirp) + { + return nw_closedir(dirp); + } + + DIR* + PerlDirOpen(struct IPerlDir* piPerl, char *filename) + { + return nw_opendir(filename); + } + + struct direct * + PerlDirRead(struct IPerlDir* piPerl, DIR *dirp) + { + return nw_readdir(dirp); + } + + void + PerlDirRewind(struct IPerlDir* piPerl, DIR *dirp) + { + nw_rewinddir(dirp); + } + + void + PerlDirSeek(struct IPerlDir* piPerl, DIR *dirp, long loc) + { + nw_seekdir(dirp, loc); + } + + long + PerlDirTell(struct IPerlDir* piPerl, DIR *dirp) + { + return nw_telldir(dirp); + } + + struct IPerlDir perlDir = + { + PerlDirMakedir, + PerlDirChdir, + PerlDirRmdir, + PerlDirClose, + PerlDirOpen, + PerlDirRead, + PerlDirRewind, + PerlDirSeek, + PerlDirTell, + }; + + /* IPerlDir - Directory Manipulation functions - End ===================================*/ + + /* IPerlEnv - Environment related functions - Begin ======================================*/ + + char* + PerlEnvGetenv(struct IPerlEnv* piPerl, const char *varname) + { + return(getenv(varname)); + }; + + int + PerlEnvPutenv(struct IPerlEnv* piPerl, const char *envstring) + { + return(putenv(envstring)); + }; + + char* + PerlEnvGetenv_len(struct IPerlEnv* piPerl, const char* varname, unsigned long* len) + { + *len = 0; + char *e = getenv(varname); + if (e) + *len = strlen(e); + return e; + } + + int + PerlEnvUname(struct IPerlEnv* piPerl, struct utsname *name) + { + return nw_uname(name); + } + + void + PerlEnvClearenv(struct IPerlEnv* piPerl) + { + + } + + struct IPerlEnv perlEnv = + { + PerlEnvGetenv, + PerlEnvPutenv, + PerlEnvGetenv_len, + PerlEnvUname, + PerlEnvClearenv, + /* PerlEnvGetChildenv, + PerlEnvFreeChildenv, + PerlEnvGetChilddir, + PerlEnvFreeChilddir,*/ + }; + + /* IPerlEnv - Environment related functions - End ======================================*/ + + /* IPerlStdio - Stdio functions - Begin ================================================*/ + + FILE* + PerlStdIOStdin(struct IPerlStdIO* piPerl) + { + return nw_stdin(); + } + + FILE* + PerlStdIOStdout(struct IPerlStdIO* piPerl) + { + return nw_stdout(); + } + + FILE* + PerlStdIOStderr(struct IPerlStdIO* piPerl) + { + return nw_stderr(); + } + + FILE* + PerlStdIOOpen(struct IPerlStdIO* piPerl, const char *path, const char *mode) + { + return nw_fopen(path, mode); + } + + int + PerlStdIOClose(struct IPerlStdIO* piPerl, FILE* pf) + { + return nw_fclose(pf); + } + + int + PerlStdIOEof(struct IPerlStdIO* piPerl, FILE* pf) + { + return nw_feof(pf); + } + + int + PerlStdIOError(struct IPerlStdIO* piPerl, FILE* pf) + { + return nw_ferror(pf); + } + + void + PerlStdIOClearerr(struct IPerlStdIO* piPerl, FILE* pf) + { + nw_clearerr(pf); + } + + int + PerlStdIOGetc(struct IPerlStdIO* piPerl, FILE* pf) + { + return nw_getc(pf); + } + + char* + PerlStdIOGetBase(struct IPerlStdIO* piPerl, FILE* pf) + { + #ifdef FILE_base + FILE *f = pf; + return FILE_base(f); + #else + return Nullch; + #endif + } + + int + PerlStdIOGetBufsiz(struct IPerlStdIO* piPerl, FILE* pf) + { + #ifdef FILE_bufsiz + FILE *f = pf; + return FILE_bufsiz(f); + #else + return (-1); + #endif + } + + int + PerlStdIOGetCnt(struct IPerlStdIO* piPerl, FILE* pf) + { + #ifdef USE_STDIO_PTR + FILE *f = pf; + return FILE_cnt(f); + #else + return (-1); + #endif + } + + char* + PerlStdIOGetPtr(struct IPerlStdIO* piPerl, FILE* pf) + { + #ifdef USE_STDIO_PTR + FILE *f = pf; + return FILE_ptr(f); + #else + return Nullch; + #endif + } + + char* + PerlStdIOGets(struct IPerlStdIO* piPerl, FILE* pf, char* s, int n) + { + return nw_fgets(s, n, pf); + } + + int + PerlStdIOPutc(struct IPerlStdIO* piPerl, FILE* pf, int c) + { + return nw_fputc(c, pf); + } + + int + PerlStdIOPuts(struct IPerlStdIO* piPerl, FILE* pf, const char *s) + { + return nw_fputs(s, pf); + } + + int + PerlStdIOFlush(struct IPerlStdIO* piPerl, FILE* pf) + { + return nw_fflush(pf); + } + + int + PerlStdIOUngetc(struct IPerlStdIO* piPerl, int c, FILE* pf) + { + return nw_ungetc(c, pf); + } + + int + PerlStdIOFileno(struct IPerlStdIO* piPerl, FILE* pf) + { + return nw_fileno(pf); + } + + FILE* + PerlStdIOFdopen(struct IPerlStdIO* piPerl, int fd, const char *mode) + { + return nw_fdopen(fd, mode); + } + + FILE* + PerlStdIOReopen(struct IPerlStdIO* piPerl, const char*path, const char*mode, FILE* pf) + { + return nw_freopen(path, mode, pf); + } + + SSize_t + PerlStdIORead(struct IPerlStdIO* piPerl, void *buffer, Size_t size, Size_t count, FILE* pf) + { + return nw_fread(buffer, size, count, pf); + } + + SSize_t + PerlStdIOWrite(struct IPerlStdIO* piPerl, const void *buffer, Size_t size, Size_t count, FILE* pf) + { + return nw_fwrite(buffer, size, count, pf); + } + + void + PerlStdIOSetBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer) + { + nw_setbuf(pf, buffer); + } + + int + PerlStdIOSetVBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer, int type, Size_t size) + { + return nw_setvbuf(pf, buffer, type, size); + } + + void + PerlStdIOSetCnt(struct IPerlStdIO* piPerl, FILE* pf, int n) + { + #ifdef STDIO_CNT_LVALUE + FILE *f = pf; + FILE_cnt(f) = n; + #endif + } + + void + PerlStdIOSetPtr(struct IPerlStdIO* piPerl, FILE* pf, char * ptr) + { + #ifdef STDIO_PTR_LVALUE + FILE *f = pf; + FILE_ptr(f) = ptr; + #endif + } + + void + PerlStdIOSetlinebuf(struct IPerlStdIO* piPerl, FILE* pf) + { + nw_setvbuf(pf, NULL, _IOLBF, 0); + } + + int + PerlStdIOPrintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format,...) + { + va_list(arglist); + va_start(arglist, format); + return nw_vfprintf(pf, format, arglist); + } + + int + PerlStdIOVprintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format, va_list arglist) + { + return nw_vfprintf(pf, format, arglist); + } + + long + PerlStdIOTell(struct IPerlStdIO* piPerl, FILE* pf) + { + return nw_ftell(pf); + } + + int + PerlStdIOSeek(struct IPerlStdIO* piPerl, FILE* pf, off_t offset, int origin) + { + return nw_fseek(pf, offset, origin); + } + + void + PerlStdIORewind(struct IPerlStdIO* piPerl, FILE* pf) + { + nw_rewind(pf); + } + + FILE* + PerlStdIOTmpfile(struct IPerlStdIO* piPerl) + { + return nw_tmpfile(); + } + + int + PerlStdIOGetpos(struct IPerlStdIO* piPerl, FILE* pf, Fpos_t *p) + { + return nw_fgetpos(pf, p); + } + + int + PerlStdIOSetpos(struct IPerlStdIO* piPerl, FILE* pf, const Fpos_t *p) + { + return nw_fsetpos(pf, p); + } + + void + PerlStdIOInit(struct IPerlStdIO* piPerl) + { + } + + void + PerlStdIOInitOSExtras(struct IPerlStdIO* piPerl) + { + Perl_init_os_extras(); + } + + + int + PerlStdIOOpenOSfhandle(struct IPerlStdIO* piPerl, long osfhandle, int flags) + { + return nw_open_osfhandle(osfhandle, flags); + } + + int + PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum) + { + return nw_get_osfhandle(filenum); + } + + FILE* + PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf) + { + FILE* pfdup=NULL; + fpos_t pos=0; + char mode[3]={'\0'}; + int fileno = nw_dup(nw_fileno(pf)); + + /* open the file in the same mode */ + if(((FILE*)pf)->_flag & _IOREAD) { + mode[0] = 'r'; + mode[1] = 0; + } + else if(((FILE*)pf)->_flag & _IOWRT) { + mode[0] = 'a'; + mode[1] = 0; + } + else if(((FILE*)pf)->_flag & _IORW) { + mode[0] = 'r'; + mode[1] = '+'; + mode[2] = 0; + } + + /* it appears that the binmode is attached to the + * file descriptor so binmode files will be handled + * correctly + */ + pfdup = nw_fdopen(fileno, mode); + + /* move the file pointer to the same position */ + if (!fgetpos(pf, &pos)) { + fsetpos(pfdup, &pos); + } + return pfdup; + } + + struct IPerlStdIO perlStdIO = + { + PerlStdIOStdin, + PerlStdIOStdout, + PerlStdIOStderr, + PerlStdIOOpen, + PerlStdIOClose, + PerlStdIOEof, + PerlStdIOError, + PerlStdIOClearerr, + PerlStdIOGetc, + PerlStdIOGetBase, + PerlStdIOGetBufsiz, + PerlStdIOGetCnt, + PerlStdIOGetPtr, + PerlStdIOGets, + PerlStdIOPutc, + PerlStdIOPuts, + PerlStdIOFlush, + PerlStdIOUngetc, + PerlStdIOFileno, + PerlStdIOFdopen, + PerlStdIOReopen, + PerlStdIORead, + PerlStdIOWrite, + PerlStdIOSetBuf, + PerlStdIOSetVBuf, + PerlStdIOSetCnt, + PerlStdIOSetPtr, + PerlStdIOSetlinebuf, + PerlStdIOPrintf, + PerlStdIOVprintf, + PerlStdIOTell, + PerlStdIOSeek, + PerlStdIORewind, + PerlStdIOTmpfile, + PerlStdIOGetpos, + PerlStdIOSetpos, + PerlStdIOInit, + PerlStdIOInitOSExtras, + PerlStdIOFdupopen, + }; + + /* IPerlStdio - Stdio functions - End ================================================*/ + + /* IPerlLIO - Low-level IO functions - Begin =============================================*/ + + int + PerlLIOAccess(struct IPerlLIO* piPerl, const char *path, int mode) + { + return nw_access(path, mode); + } + + int + PerlLIOChmod(struct IPerlLIO* piPerl, const char *filename, int pmode) + { + return nw_chmod(filename, pmode); + } + + int + PerlLIOChown(struct IPerlLIO* piPerl, const char *filename, uid_t owner, gid_t group) + { + dTHXo; + Perl_croak(aTHX_ "chown not implemented!\n"); + return 0; + } + + int + PerlLIOChsize(struct IPerlLIO* piPerl, int handle, long size) + { + return (nw_chsize(handle,size)); + } + + int + PerlLIOClose(struct IPerlLIO* piPerl, int handle) + { + return nw_close(handle); + } + + int + PerlLIODup(struct IPerlLIO* piPerl, int handle) + { + return nw_dup(handle); + } + + int + PerlLIODup2(struct IPerlLIO* piPerl, int handle1, int handle2) + { + return nw_dup2(handle1, handle2); + } + + int + PerlLIOFlock(struct IPerlLIO* piPerl, int fd, int oper) + { + //On NetWare simulate flock by locking a range on the file + return nw_flock(fd, oper); + } + + int + PerlLIOFileStat(struct IPerlLIO* piPerl, int handle, struct stat *buffer) + { + return fstat(handle, buffer); + } + + int + PerlLIOIOCtl(struct IPerlLIO* piPerl, int i, unsigned int u, char *data) + { + return 0; + } + + int + PerlLIOIsatty(struct IPerlLIO* piPerl, int fd) + { + return nw_isatty(fd); + } + + int + PerlLIOLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname) + { + return nw_link(oldname, newname); + } + + long + PerlLIOLseek(struct IPerlLIO* piPerl, int handle, long offset, int origin) + { + return nw_lseek(handle, offset, origin); + } + + int + PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer) + { + return nw_stat(path, buffer); + } + + char* + PerlLIOMktemp(struct IPerlLIO* piPerl, char *Template) + { + return(nw_mktemp(Template)); + } + + int + PerlLIOOpen(struct IPerlLIO* piPerl, const char *filename, int oflag) + { + return nw_open(filename, oflag); + } + + int + PerlLIOOpen3(struct IPerlLIO* piPerl, const char *filename, int oflag, int pmode) + { + return nw_open(filename, oflag, pmode); + } + + int + PerlLIORead(struct IPerlLIO* piPerl, int handle, void *buffer, unsigned int count) + { + return nw_read(handle, buffer, count); + } + + int + PerlLIORename(struct IPerlLIO* piPerl, const char *OldFileName, const char *newname) + { + return nw_rename(OldFileName, newname); + } + + int + PerlLIOSetmode(struct IPerlLIO* piPerl, FILE *fp, int mode) + { + return nw_setmode(fp, mode); + } + + int + PerlLIONameStat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer) + { + return nw_stat(path, buffer); + } + + char* + PerlLIOTmpnam(struct IPerlLIO* piPerl, char *string) + { + return tmpnam(string); + } + + int + PerlLIOUmask(struct IPerlLIO* piPerl, int pmode) + { + return umask(pmode); + } + + int + PerlLIOUnlink(struct IPerlLIO* piPerl, const char *filename) + { + return nw_unlink(filename); + } + + int + PerlLIOUtime(struct IPerlLIO* piPerl, char *filename, struct utimbuf *times) + { + return nw_utime(filename, times); + } + + int + PerlLIOWrite(struct IPerlLIO* piPerl, int handle, const void *buffer, unsigned int count) + { + return nw_write(handle, buffer, count); + } + + struct IPerlLIO perlLIO = + { + PerlLIOAccess, + PerlLIOChmod, + PerlLIOChown, + PerlLIOChsize, + PerlLIOClose, + PerlLIODup, + PerlLIODup2, + PerlLIOFlock, + PerlLIOFileStat, + PerlLIOIOCtl, + PerlLIOIsatty, + PerlLIOLink, + PerlLIOLseek, + PerlLIOLstat, + PerlLIOMktemp, + PerlLIOOpen, + PerlLIOOpen3, + PerlLIORead, + PerlLIORename, + PerlLIOSetmode, + PerlLIONameStat, + PerlLIOTmpnam, + PerlLIOUmask, + PerlLIOUnlink, + PerlLIOUtime, + PerlLIOWrite, + }; + + /* IPerlLIO - Low-level IO functions - End =============================================*/ + + /* IPerlProc - Process control functions - Begin =========================================*/ + + #define EXECF_EXEC 1 + #define EXECF_SPAWN 2 + + void + PerlProcAbort(struct IPerlProc* piPerl) + { + nw_abort(); + } + + char * + PerlProcCrypt(struct IPerlProc* piPerl, const char* clear, const char* salt) + { + return nw_crypt(clear, salt); + } + + void + PerlProcExit(struct IPerlProc* piPerl, int status) + { + // exit(status); + dTHX; + dJMPENV; + JMPENV_JUMP(2); + } + + void + PerlProc_Exit(struct IPerlProc* piPerl, int status) + { + // _exit(status); + dTHX; + dJMPENV; + JMPENV_JUMP(2); + } + + int + PerlProcExecl(struct IPerlProc* piPerl, const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3) + { + dTHXo; + Perl_croak(aTHX_ "execl not implemented!\n"); + return 0; + } + + int + PerlProcExecv(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) + { + return nw_execvp((char *)cmdname, (char **)argv); + } + + int + PerlProcExecvp(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) + { + return nw_execvp((char *)cmdname, (char **)argv); + } + + uid_t + PerlProcGetuid(struct IPerlProc* piPerl) + { + return 0; + } + + uid_t + PerlProcGeteuid(struct IPerlProc* piPerl) + { + return 0; + } + + gid_t + PerlProcGetgid(struct IPerlProc* piPerl) + { + return 0; + } + + gid_t + PerlProcGetegid(struct IPerlProc* piPerl) + { + return 0; + } + + char * + PerlProcGetlogin(struct IPerlProc* piPerl) + { + return NULL; + } + + int + PerlProcKill(struct IPerlProc* piPerl, int pid, int sig) + { + return nw_kill(pid, sig); + } + + int + PerlProcKillpg(struct IPerlProc* piPerl, int pid, int sig) + { + dTHXo; + Perl_croak(aTHX_ "killpg not implemented!\n"); + return 0; + } + + int + PerlProcPauseProc(struct IPerlProc* piPerl) + { + return nw_sleep((32767L << 16) + 32767); + } + + PerlIO* + PerlProcPopen(struct IPerlProc* piPerl, const char *command, const char *mode) + { + dTHXo; + PERL_FLUSHALL_FOR_CHILD; + + return (PerlIO*)nw_Popen((char *)command, (char *)mode, (int *)errno); + } + + int + PerlProcPclose(struct IPerlProc* piPerl, PerlIO *stream) + { + return nw_Pclose((FILE*)stream, (int *)errno); + } + + int + PerlProcPipe(struct IPerlProc* piPerl, int *phandles) + { + return nw_Pipe((int *)phandles, (int *)errno); + } + + int + PerlProcSetuid(struct IPerlProc* piPerl, uid_t u) + { + return 0; + } + + int + PerlProcSetgid(struct IPerlProc* piPerl, gid_t g) + { + return 0; + } + + int + PerlProcSleep(struct IPerlProc* piPerl, unsigned int s) + { + return nw_sleep(s); + } + + int + PerlProcTimes(struct IPerlProc* piPerl, struct tms *timebuf) + { + return nw_times(timebuf); + } + + int + PerlProcWait(struct IPerlProc* piPerl, int *status) + { + return nw_wait(status); + } + + int + PerlProcWaitpid(struct IPerlProc* piPerl, int pid, int *status, int flags) + { + return nw_waitpid(pid, status, flags); + } + + Sighandler_t + PerlProcSignal(struct IPerlProc* piPerl, int sig, Sighandler_t subcode) + { + return 0; + } + + int + PerlProcFork(struct IPerlProc* piPerl) + { + return 0; + } + + int + PerlProcGetpid(struct IPerlProc* piPerl) + { + return nw_getpid(); + } + + /*BOOL + PerlProcDoCmd(struct IPerlProc* piPerl, char *cmd) + { + do_spawn2(cmd, EXECF_EXEC); + return FALSE; + }*/ + + int + PerlProcSpawn(struct IPerlProc* piPerl, char* cmds) + { + return do_spawn2(cmds, EXECF_SPAWN); + } + + int + PerlProcSpawnvp(struct IPerlProc* piPerl, int mode, const char *cmdname, const char *const *argv) + { + return nw_spawnvp(mode, (char *)cmdname, (char **)argv); + } + + int + PerlProcASpawn(struct IPerlProc* piPerl, void *vreally, void **vmark, void **vsp) + { + return do_aspawn(vreally, vmark, vsp); + } + + struct IPerlProc perlProc = + { + PerlProcAbort, + PerlProcCrypt, + PerlProcExit, + PerlProc_Exit, + PerlProcExecl, + PerlProcExecv, + PerlProcExecvp, + PerlProcGetuid, + PerlProcGeteuid, + PerlProcGetgid, + PerlProcGetegid, + PerlProcGetlogin, + PerlProcKill, + PerlProcKillpg, + PerlProcPauseProc, + PerlProcPopen, + PerlProcPclose, + PerlProcPipe, + PerlProcSetuid, + PerlProcSetgid, + PerlProcSleep, + PerlProcTimes, + PerlProcWait, + PerlProcWaitpid, + PerlProcSignal, + PerlProcFork, + PerlProcGetpid, + //PerlProcLastHost; + //PerlProcPopenList; + }; + + /* IPerlProc - Process control functions - End =========================================*/ + + /* IPerlSock - Socket functions - Begin ==================================================*/ + + u_long + PerlSockHtonl(struct IPerlSock* piPerl, u_long hostlong) + { + return(nw_htonl(hostlong)); + } + + u_short + PerlSockHtons(struct IPerlSock* piPerl, u_short hostshort) + { + return(nw_htons(hostshort)); + } + + u_long + PerlSockNtohl(struct IPerlSock* piPerl, u_long netlong) + { + return nw_ntohl(netlong); + } + + u_short + PerlSockNtohs(struct IPerlSock* piPerl, u_short netshort) + { + return nw_ntohs(netshort); + } + + SOCKET PerlSockAccept(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* addr, int* addrlen) + { + return nw_accept(s, addr, addrlen); + } + + int + PerlSockBind(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) + { + return nw_bind(s, name, namelen); + } + + int + PerlSockConnect(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) + { + return nw_connect(s, name, namelen); + } + + void + PerlSockEndhostent(struct IPerlSock* piPerl) + { + nw_endhostent(); + } + + void + PerlSockEndnetent(struct IPerlSock* piPerl) + { + nw_endnetent(); + } + + void + PerlSockEndprotoent(struct IPerlSock* piPerl) + { + nw_endprotoent(); + } + + void + PerlSockEndservent(struct IPerlSock* piPerl) + { + nw_endservent(); + } + + struct hostent* + PerlSockGethostbyaddr(struct IPerlSock* piPerl, const char* addr, int len, int type) + { + return(nw_gethostbyaddr(addr,len,type)); + } + + struct hostent* + PerlSockGethostbyname(struct IPerlSock* piPerl, const char* name) + { + return nw_gethostbyname(name); + } + + struct hostent* + PerlSockGethostent(struct IPerlSock* piPerl) + { + return(nw_gethostent()); + } + + int + PerlSockGethostname(struct IPerlSock* piPerl, char* name, int namelen) + { + return nw_gethostname(name,namelen); + } + + struct netent * + PerlSockGetnetbyaddr(struct IPerlSock* piPerl, long net, int type) + { + return nw_getnetbyaddr(net, type); + } + + struct netent * + PerlSockGetnetbyname(struct IPerlSock* piPerl, const char *name) + { + return nw_getnetbyname((char*)name); + } + + struct netent * + PerlSockGetnetent(struct IPerlSock* piPerl) + { + return nw_getnetent(); + } + + int PerlSockGetpeername(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) + { + return nw_getpeername(s, name, namelen); + } + + struct protoent* + PerlSockGetprotobyname(struct IPerlSock* piPerl, const char* name) + { + return nw_getprotobyname(name); + } + + struct protoent* + PerlSockGetprotobynumber(struct IPerlSock* piPerl, int number) + { + return nw_getprotobynumber(number); + } + + struct protoent* + PerlSockGetprotoent(struct IPerlSock* piPerl) + { + return nw_getprotoent(); + } + + struct servent* + PerlSockGetservbyname(struct IPerlSock* piPerl, const char* name, const char* proto) + { + return nw_getservbyname((char*)name, (char*)proto); + } + + struct servent* + PerlSockGetservbyport(struct IPerlSock* piPerl, int port, const char* proto) + { + return nw_getservbyport(port, proto); + } + + struct servent* + PerlSockGetservent(struct IPerlSock* piPerl) + { + return nw_getservent(); + } + + int + PerlSockGetsockname(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) + { + return nw_getsockname(s, name, namelen); + } + + int + PerlSockGetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, char* optval, int* optlen) + { + return nw_getsockopt(s, level, optname, optval, optlen); + } + + unsigned long + PerlSockInetAddr(struct IPerlSock* piPerl, const char* cp) + { + return(nw_inet_addr(cp)); + } + + char* + PerlSockInetNtoa(struct IPerlSock* piPerl, struct in_addr in) + { + return NULL; + } + + int + PerlSockListen(struct IPerlSock* piPerl, SOCKET s, int backlog) + { + return (nw_listen(s, backlog)); + } + + int + PerlSockRecv(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags) + { + return (nw_recv(s, buffer, len, flags)); + } + + int + PerlSockRecvfrom(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags, struct sockaddr* from, int* fromlen) + { + return nw_recvfrom(s, buffer, len, flags, from, fromlen); + } + + int + PerlSockSelect(struct IPerlSock* piPerl, int nfds, char* readfds, char* writefds, char* exceptfds, const struct timeval* timeout) + { + return nw_select(nfds, (fd_set*) readfds, (fd_set*) writefds, (fd_set*) exceptfds, timeout); + } + + int + PerlSockSend(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags) + { + return (nw_send(s, buffer, len, flags)); + } + + int + PerlSockSendto(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags, const struct sockaddr* to, int tolen) + { + return(nw_sendto(s, buffer, len, flags, to, tolen)); + } + + void + PerlSockSethostent(struct IPerlSock* piPerl, int stayopen) + { + nw_sethostent(stayopen); + } + + void + PerlSockSetnetent(struct IPerlSock* piPerl, int stayopen) + { + nw_setnetent(stayopen); + } + + void + PerlSockSetprotoent(struct IPerlSock* piPerl, int stayopen) + { + nw_setprotoent(stayopen); + } + + void + PerlSockSetservent(struct IPerlSock* piPerl, int stayopen) + { + nw_setservent(stayopen); + } + + int + PerlSockSetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, const char* optval, int optlen) + { + dTHXo; + Perl_croak(aTHX_ "setsockopt not implemented!\n"); + return 0; + } + + int + PerlSockShutdown(struct IPerlSock* piPerl, SOCKET s, int how) + { + return nw_shutdown(s, how); + } + + SOCKET + PerlSockSocket(struct IPerlSock* piPerl, int af, int type, int protocol) + { + return nw_socket(af, type, protocol); + } + + int + PerlSockSocketpair(struct IPerlSock* piPerl, int domain, int type, int protocol, int* fds) + { + dTHXo; + Perl_croak(aTHX_ "socketpair not implemented!\n"); + return 0; + } + + int + PerlSockIoctlsocket(struct IPerlSock* piPerl, SOCKET s, long cmd, u_long *argp) + { + dTHXo; + Perl_croak(aTHX_ "ioctlsocket not implemented!\n"); + return 0; + } + + struct IPerlSock perlSock = + { + PerlSockHtonl, + PerlSockHtons, + PerlSockNtohl, + PerlSockNtohs, + PerlSockAccept, + PerlSockBind, + PerlSockConnect, + PerlSockEndhostent, + PerlSockEndnetent, + PerlSockEndprotoent, + PerlSockEndservent, + PerlSockGethostname, + PerlSockGetpeername, + PerlSockGethostbyaddr, + PerlSockGethostbyname, + PerlSockGethostent, + PerlSockGetnetbyaddr, + PerlSockGetnetbyname, + PerlSockGetnetent, + PerlSockGetprotobyname, + PerlSockGetprotobynumber, + PerlSockGetprotoent, + PerlSockGetservbyname, + PerlSockGetservbyport, + PerlSockGetservent, + PerlSockGetsockname, + PerlSockGetsockopt, + PerlSockInetAddr, + PerlSockInetNtoa, + PerlSockListen, + PerlSockRecv, + PerlSockRecvfrom, + PerlSockSelect, + PerlSockSend, + PerlSockSendto, + PerlSockSethostent, + PerlSockSetnetent, + PerlSockSetprotoent, + PerlSockSetservent, + PerlSockSetsockopt, + PerlSockShutdown, + PerlSockSocket, + PerlSockSocketpair, + }; + + /* IPerlSock - Socket functions - End ==================================================*/ + + #endif /* ___NWPerlSys_H___ */ diff -c /dev/null 'perl-5.7.2/NetWare/nwpipe.h' Index: ./NetWare/nwpipe.h *** ./NetWare/nwpipe.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nwpipe.h Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,62 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : NWPipe.h + * DESCRIPTION : Functions to implement pipes on NetWare. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #ifndef __NWPipe_H__ + #define __NWPipe_H__ + + + #include "stdio.h" + #include "nwutil.h" + + #define MAX_PIPE_RECURSION 256 + + + typedef struct tagTempPipeFile + { + BOOL m_mode; // FALSE - Read mode ; TRUE - Write mode + BOOL m_launchPerl; + BOOL m_doPerlGlob; + + int m_argv_len; + + char * m_fileName; + char** m_argv; + char * m_redirect; + + #ifdef MPK_ON + SEMAPHORE m_perlSynchSemaphore; + #else + long m_perlSynchSemaphore; + #endif + + FILE* m_file; + PCOMMANDLINEPARSER m_pipeCommand; + + } TEMPPIPEFILE, *PTEMPPIPEFILE; + + + void fnPipeFileClose(PTEMPPIPEFILE ptpf); + void fnPipeFileDoPerlLaunch(PTEMPPIPEFILE ptpf); + BOOL fnPipeFileMakeArgv(PTEMPPIPEFILE ptpf); + FILE* fnPipeFileOpen(PTEMPPIPEFILE ptpf, char* command, char* mode); + void fnTempPipeFileReleaseMemory(PTEMPPIPEFILE ptpf); + + + #endif // __NWPipe_H__ + diff -c /dev/null 'perl-5.7.2/NetWare/nwplglob.c' Index: ./NetWare/nwplglob.c *** ./NetWare/nwplglob.c Thu Jan 1 02:00:00 1970 --- ./NetWare/nwplglob.c Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,90 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nwplglob.c + * DESCRIPTION : Perl globbing support for NetWare. Other platforms have usually lauched + * a separate executable for this in order to take advantage of their + * shell's capability for generating a list of files from a given + * wildcard file spec. On NetWare, we don't have that luxury. + * So we just hack the support into pipe open support (which we also had to hack). + * Author : HYAK + * Date : January 2001. + * + */ + + + + #include + #include "stdio.h" + #include + + #include "win32ish.h" + #include "nwplglob.h" + + + + /*============================================================================================ + + Function : fnDoPerlGlob + + Description : Perl globbing support: Takes an array of wildcard descriptors + and produces from it a list of files that the wildcards expand into. + The list of files is written to the temporary file named by fileName. + + Parameters : argv (IN) - Input argument vector. + fileName (IN) - Input file name for storing globed file names. + + Returns : Nothing. + + ==============================================================================================*/ + + void fnDoPerlGlob(char** argv, char* fileName) + { + FILE * redirOut = NULL; + + if (*argv) + argv++; + if (*argv == NULL) + return; + + redirOut = fopen((const char *)fileName, (const char *)"w"); + if (!redirOut) + return; + + do + { + DIR* dir = NULL; + DIR* fil = NULL; + char* pattern = NULL; + + pattern = *argv++; + + dir = opendir((const char *)pattern); + if (!dir) + continue; + + /* find the last separator in pattern, NetWare has three: /\: */ + while (fil = readdir(dir)) + { + // The below displays the files separated by tab character. + // Also, it displays only the file names and not directories. + // If any other format is desired, it needs to be done here. + fprintf(redirOut, "%s\t", fil->d_name); + } + + closedir(dir); + + } while (*argv); + + fclose(redirOut); + + return; + } + diff -c /dev/null 'perl-5.7.2/NetWare/nwplglob.h' Index: ./NetWare/nwplglob.h *** ./NetWare/nwplglob.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nwplglob.h Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,27 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nwplglob.h + * DESCRIPTION : Perl globbing support for NetWare. + * Author : HYAK + * Date : January 2001. + * + */ + + + #ifndef __NWplGlob_H__ + #define __NWplGlob_H__ + + + void fnDoPerlGlob(char** argv, char* fileName); + + + #endif // __NWplGlob_H__ + diff -c /dev/null 'perl-5.7.2/NetWare/nwstdio.h' Index: ./NetWare/nwstdio.h *** ./NetWare/nwstdio.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nwstdio.h Mon Jul 9 17:09:41 2001 *************** *** 0 **** --- 1,122 ---- + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : nwstdio.h + * DESCRIPTION : Making stdio calls go thro' the + * NetWare specific implementation. + * This gets included if PERLIO_IS_STDIO. Instead + * of directly calling stdio functions this goes + * thro' IPerlStdIO, this ensures that cgi2perl + * can call CGI functions and send the o/p to + * browser or console. + * Author : SGP + * Date Created : June 29th 2001. + * Date Modified: June 30th 2001. + */ + + #ifndef ___NWStdio_H___ + #define ___NWStdio_H___ + + #define PerlIO FILE + + #define PerlIO_putc(f,c) (*PL_StdIO->pPutc)(PL_StdIO, (f),(c)) + #define PerlIO_fileno(f) (*PL_StdIO->pFileno)(PL_StdIO, (f)) + #define PerlIO_close(f) (*PL_StdIO->pClose)(PL_StdIO, (f)) + #define PerlIO_stderr() (*PL_StdIO->pStderr)(PL_StdIO) + #define PerlIO_printf Perl_fprintf_nocontext + #define PerlIO_vprintf(f,fmt,a) (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a) + #define PerlIO_flush(f) (*PL_StdIO->pFlush)(PL_StdIO, (f)) + #define PerlIO_stdout() (*PL_StdIO->pStdout)(PL_StdIO) + #define PerlIO_stdin() (*PL_StdIO->pStdin)(PL_StdIO) + #define PerlIO_clearerr(f) (*PL_StdIO->pClearerr)(PL_StdIO, (f)) + #define PerlIO_fdopen(f,s) (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s)) + #define PerlIO_getc(f) (*PL_StdIO->pGetc)(PL_StdIO, (f)) + #define PerlIO_ungetc(f,c) (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f)) + #define PerlIO_tell(f) (*PL_StdIO->pTell)(PL_StdIO, (f)) + #define PerlIO_seek(f,o,w) (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w)) + #define PerlIO_error(f) (*PL_StdIO->pError)(PL_StdIO, (f)) + #define PerlIO_write(f,buf,size) (*PL_StdIO->pWrite)(PL_StdIO, (buf), (size),1, (f)) + #define PerlIO_puts(f,s) (*PL_StdIO->pPuts)(PL_StdIO, (f),(s)) + #define PerlIO_read(f,buf,size) (*PL_StdIO->pRead)(PL_StdIO, (buf), (size), 1, (f)) + #define PerlIO_eof(f) (*PL_StdIO->pEof)(PL_StdIO, (f)) + #define PerlIO_fdupopen(f) (*PL_StdIO->pFdupopen)(PL_StdIO, (f)) + #define PerlIO_reopen(p,m,f) (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f)) + #define PerlIO_open(x,y) (*PL_StdIO->pOpen)(PL_StdIO, (x),(y)) + + #ifdef HAS_SETLINEBUF + #define PerlIO_setlinebuf(f) (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f)) + #else + #define PerlIO_setlinebuf(f) setvbuf(f, Nullch, _IOLBF, 0) + #endif + + #define PerlIO_isutf8(f) 0 + + #ifdef USE_STDIO_PTR + #define PerlIO_has_cntptr(f) 1 + #define PerlIO_get_ptr(f) FILE_ptr(f) + #define PerlIO_get_cnt(f) FILE_cnt(f) + + #ifdef STDIO_CNT_LVALUE + #define PerlIO_canset_cnt(f) 1 + #define PerlIO_set_cnt(f,c) (FILE_cnt(f) = (c)) + #ifdef STDIO_PTR_LVALUE + #ifdef STDIO_PTR_LVAL_NOCHANGE_CNT + #define PerlIO_fast_gets(f) 1 + #endif + #endif /* STDIO_PTR_LVALUE */ + #else /* STDIO_CNT_LVALUE */ + #define PerlIO_canset_cnt(f) 0 + #define PerlIO_set_cnt(f,c) abort() + #endif + + #ifdef STDIO_PTR_LVALUE + #ifdef STDIO_PTR_LVAL_NOCHANGE_CNT + #define PerlIO_set_ptrcnt(f,p,c) STMT_START {FILE_ptr(f) = (p), PerlIO_set_cnt(f,c);} STMT_END + #else + #ifdef STDIO_PTR_LVAL_SETS_CNT + /* assert() may pre-process to ""; potential syntax error (FILE_ptr(), ) */ + #define PerlIO_set_ptrcnt(f,p,c) STMT_START {FILE_ptr(f) = (p); assert(FILE_cnt(f) == (c));} STMT_END + #define PerlIO_fast_gets(f) 1 + #else + #define PerlIO_set_ptrcnt(f,p,c) abort() + #endif + #endif + #endif + + #else /* USE_STDIO_PTR */ + + #define PerlIO_has_cntptr(f) 0 + #define PerlIO_canset_cnt(f) 0 + #define PerlIO_get_cnt(f) (abort(),0) + #define PerlIO_get_ptr(f) (abort(),(void *)0) + #define PerlIO_set_cnt(f,c) abort() + #define PerlIO_set_ptrcnt(f,p,c) abort() + + #endif /* USE_STDIO_PTR */ + + #ifndef PerlIO_fast_gets + #define PerlIO_fast_gets(f) 0 + #endif + + #ifdef FILE_base + #define PerlIO_has_base(f) 1 + #define PerlIO_get_bufsiz(f) (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f)) + #define PerlIO_get_base(f) (*PL_StdIO->pGetBase)(PL_StdIO, (f)) + #else + #define PerlIO_has_base(f) 0 + #define PerlIO_get_base(f) (abort(),(void *)0) + #define PerlIO_get_bufsiz(f) (abort(),0) + #endif + + #define PerlIO_importFILE(f,fl) (f) + #define PerlIO_exportFILE(f,fl) (f) + #define PerlIO_findFILE(f) (f) + #define PerlIO_releaseFILE(p,f) ((void) 0) + + #endif /* ___NWStdio_H___ */ diff -c /dev/null 'perl-5.7.2/NetWare/nwtinfo.h' Index: ./NetWare/nwtinfo.h *** ./NetWare/nwtinfo.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nwtinfo.h Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,73 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : NWTInfo.h + * DESCRIPTION : Thread-local storage for Perl. + * Author : SGP, HYAK + * Date Created : January 2001. + * Date Modified: July 2nd 2001. + */ + + + + #ifndef __NWTInfo_H__ + #define __NWTInfo_H__ + + + #include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" + + typedef struct tagThreadInfo + { + int tid; + struct tagThreadInfo *next; + BOOL m_dontTouchHashLists; + void* m_allocList; + }ThreadInfo; + + void fnInitializeThreadInfo(void); + BOOL fnTerminateThreadInfo(void); + + ThreadInfo* fnAddThreadInfo(int tid); + BOOL fnRemoveThreadInfo(int tid); + ThreadInfo* fnGetThreadInfo(int tid); + + #ifdef __cplusplus + //For storing and retrieving Watcom Hash list address + extern "C" BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList); + //Registering with the Thread table + extern "C" BOOL fnRegisterWithThreadTable(void); + extern "C" BOOL fnUnregisterWithThreadTable(void); + #else + //For storing and retrieving Watcom Hash list address + BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList); + //Registering with the Thread table + BOOL fnRegisterWithThreadTable(void); + BOOL fnUnregisterWithThreadTable(void); + #endif + + BOOL fnGetHashListAddrs(void **addrs, BOOL *dontTouchHashList); + + //New TLS to set and get the thread contex - may be redundant, + //or see if the above portion can be removed once this works properly + typedef struct tagThreadCtx + { + long tid; + void *tInfo; + struct tagThreadCtx *next; + }ThreadContext; + + + long fnInitializeThreadCtx(void); + ThreadContext* fnAddThreadCtx(long lTLSIndex, void *t); + BOOL fnRemoveThreadCtx(long lTLSIndex); + void* fnGetThreadCtx(long lTLSIndex); + + #endif // __NWTInfo_H__ + diff -c /dev/null 'perl-5.7.2/NetWare/nwutil.h' Index: ./NetWare/nwutil.h *** ./NetWare/nwutil.h Thu Jan 1 02:00:00 1970 --- ./NetWare/nwutil.h Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,99 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : NWUtil.h + * DESCRIPTION : Utility functions for NetWare implementation of Perl. + * Author : HYAK, SGP + * Date : January 2001. + * + */ + + + + #ifndef __NWUtil_H__ + #define __NWUtil_H__ + + + #include "stdio.h" + #include + #include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" + + + #ifdef MPK_ON + #include + #include + #else + #include + #endif //MPK_ON + + + // Name of console command to invoke perl + #define PERL_COMMAND_NAME "perl" + + // Name of console command to load an NLM + #define LOAD_COMMAND "load" + + + typedef struct tagCommandLineParser + { + BOOL m_noScreen; + BOOL m_AutoDestroy; + BOOL m_isValid; + + int m_argc; + int m_argv_len; + + #ifdef MPK_ON + SEMAPHORE m_qSemaphore; + #else + long m_qSemaphore; + #endif + + char* m_redirInName; + char* m_redirOutName; + char* m_redirErrName; + char* m_redirBothName; + char* nextarg; + char* sSkippedToken; + + char** m_argv; + char** new_argv; + + }COMMANDLINEPARSER, *PCOMMANDLINEPARSER; + + + + char* fnSkipWhite(char* cptr); + char* fnNwGetEnvironmentStr(char *name, char *defaultvalue); + char* fnSkipToken(char *s, char *r); + char* fnScanToken(char* x, char *r); + char* fnStashString(char *s, char *r, int length); + void fnAppendArgument(PCOMMANDLINEPARSER pclp, char * new_arg); + void fnDeleteArgument(PCOMMANDLINEPARSER pclp, int index); + void fnCommandLineParser(PCOMMANDLINEPARSER pclp, char * commandLine, BOOL preserveQuotes); + void fnSystemCommand (char** argv, int argc); + void fnInternalPerlLaunchHandler(char* cmdLine); + char* fnMy_MkTemp(char* templatestr); + + + /* DEFPERLROOT: + * This symbol contains the name of the starting default directory to search + * for scripts to run. + */ + #define DEFPERLROOT "sys:\\perl\\scripts" + + /* DEFTEMP: + * This symbol contains the name of the default temp files directory. + */ + #define DEFTEMP "sys:\\perl\\temp" + + + #endif // __NWUtil_H__ + diff -c /dev/null 'perl-5.7.2/NetWare/t/NWModify.pl' Index: ./NetWare/t/NWModify.pl *** ./NetWare/t/NWModify.pl Thu Jan 1 02:00:00 1970 --- ./NetWare/t/NWModify.pl Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,130 ---- + + + print "\nModifying the '.t' files...\n\n"; + + use File::Basename; + use File::Copy; + + ## Change the below line to the folder you want to process + $DirName = "/perl/scripts/t"; + + $FilesTotal = 0; + $FilesRead = 0; + $FilesModified = 0; + + opendir(DIR, $DirName); + @Dirs = readdir(DIR); + + foreach $DirItem(@Dirs) + { + $DirItem = $DirName."/".$DirItem; + push @DirNames, $DirItem; # All items under $DirName folder is copied into an array. + } + + foreach $FileName(@DirNames) + { + if(-d $FileName) + { # If an item is a folder, then open it further. + + opendir(SUBDIR, $FileName); + @SubDirs = readdir(SUBDIR); + close(SUBDIR); + + foreach $SubFileName(@SubDirs) + { + if(-f $SubFileName) + { + &Process_File($SubFileName); # If file, process it. + } + else + { + $SubFileName = $FileName."/".$SubFileName; + push @DirNames, $SubFileName; # If sub-folder, push it into the array. + } + } + } + else + { + if(-f $FileName) + { + &Process_File($FileName); # If file, process it. + } + } + } + + close(DIR); + + print "\n\n\nTotal number of files present = $FilesTotal\n"; + print "Total number of '.t' files read = $FilesRead\n"; + print "Total number of '.t' files modified = $FilesModified\n\n"; + + + + + # Process the file. + sub Process_File + { + local($FileToProcess) = @_; # File name. + local($Modified) = 0; + + if(!(-w $FileToProcess)) { + # If the file is a read-only file, then change its mode to read-write. + chmod(0777, $FileToProcess); + } + + ## For example: + ## If the value of $FileToProcess is '/perl/scripts/t/pragma/warnings.t', then + ## $dir = '/perl/scripts/t/pragma/' + ## $base = 'warnings' + ## $ext = '.t' + $dir = dirname($FileToProcess); # Get the folder name + $base = basename($FileToProcess); # Get the base name + ($base, $dir, $ext) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. + + + # Do the processing only if the file has '.t' extension. + if($ext eq '.t') { + + open(FH, "+< $FileToProcess") or die "Unable to open the file, $FileToProcess for reading and writing.\n"; + @ARRAY = ; # Get the contents of the file into an array. + + flock(FH, LOCK_EX); # Lock the file for safety purposes. + foreach $Line(@ARRAY) # Get each line of the file. + { + if($Line =~ m/\@INC = /) + { # If the line contains the string (@INC = ), then replace it + + # Replace "@INC = " with "unshift @INC, " + $Line =~ s/\@INC = /unshift \@INC, /; + + $Modified = 1; + } + + if($Line =~ m/push \@INC, /) + { # If the line contains the string (push @INC, ), then replace it + + # Replace "push @INC, " with "unshift @INC, " + $Line =~ s/push \@INC, /unshift \@INC, /; + + $Modified = 1; + } + } + + seek(FH, 0, 0); # Seek to the beginning. + print FH @ARRAY; # Write the changed array into the file. + flock(FH, LOCK_UN); # unlock the file. + close FH; # close the file. + + $FilesRead++; # One more file read. + + if($Modified) { + print "Modified the file, $FileToProcess\n"; + $Modified = 0; + + $FilesModified++; # One more file modified. + } + } + + $FilesTotal++; # One more file present. + } + diff -c /dev/null 'perl-5.7.2/NetWare/t/NWScripts.pl' Index: ./NetWare/t/NWScripts.pl *** ./NetWare/t/NWScripts.pl Thu Jan 1 02:00:00 1970 --- ./NetWare/t/NWScripts.pl Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,249 ---- + + + print "\nGenerating automated scripts for NetWare...\n\n\n"; + + + use File::Basename; + use File::Copy; + + chdir '/perl/scripts/'; + $DirName = "t"; + + # These scripts have problems (either abend or hang) as of now (11 May 2001). + # So, they are commented out in the corresponding auto scripts, io.pl and lib.pl + @ScriptsNotUsed = ("t/io/argv.t", "t/io/openpid.t", "t/lib/filehandle.t", "t/lib/warnings.t"); + + opendir(DIR, $DirName); + @Dirs = readdir(DIR); + close(DIR); + foreach $DirItem(@Dirs) + { + $DirItem1 = $DirName."/".$DirItem; + push @DirNames, $DirItem1; # All items under $DirName folder is copied into an array. + + if(-d $DirItem1) + { # If an item is a folder, then open it further. + + # Intemediary automated script like base.pl, lib.pl, cmd.pl etc. + $IntAutoScript = "t/".$DirItem.".pl"; + + # Open once in write mode since later files are opened in append mode, + # and if there already exists a file with the same name, all further opens + # will append to that file!! + open(FHW, "> $IntAutoScript") or die "Unable to open the file, $IntAutoScript for writing.\n"; + seek(FHW, 0, 0); # seek to the beginning of the file. + close FHW; # close the file. + } + } + + + print "Generating t/nwauto.pl ...\n\n\n"; + + open(FHWA, "> t/nwauto.pl") or die "Unable to open the file, t/nwauto.pl for writing.\n"; + seek(FHWA, 0, 0); # seek to the beginning of the file. + flock(FHWA, LOCK_EX); # Lock the file for safety purposes. + + $version = sprintf("%vd",$^V); + print FHWA "\n\nprint \"Automated Unit Testing of Perl$version for NetWare\\n\\n\\n\"\;\n\n\n"; + + + foreach $FileName(@DirNames) + { + $index = 0; + if(-d $FileName) + { # If an item is a folder, then open it further. + + $dir = dirname($FileName); # Get the folder name + + foreach $DirItem1(@Dirs) + { + $DirItem2 = $DirItem1; + if($FileName =~ m/$DirItem2/) + { + $DirItem = $DirItem1; + + # Intemediary automated script like base.pl, lib.pl, cmd.pl etc. + $IntAutoScript = "t/".$DirItem.".pl"; + } + } + + # Write into the intermediary auto script. + open(FHW, ">> $IntAutoScript") or die "Unable to open the file, $IntAutoScript for appending.\n"; + seek(FHW, 0, 2); # seek to the end of the file. + flock(FHW, LOCK_EX); # Lock the file for safety purposes. + + $pos = tell(FHW); + if($pos <= 0) + { + print "Generating $IntAutoScript...\n"; + print FHW "\n\nprint \"Testing $DirItem folder:\\n\\n\\n\"\;\n\n\n"; + } + + opendir(SUBDIR, $FileName); + @SubDirs = readdir(SUBDIR); + close(SUBDIR); + foreach $SubFileName(@SubDirs) + { + $SubFileName = $FileName."/".$SubFileName; + if(-d $SubFileName) + { + push @DirNames, $SubFileName; # If sub-folder, push it into the array. + } + else + { + &Process_File($SubFileName); # If file, process it. + } + + $index++; + } + + flock(FHW, LOCK_UN); # unlock the file. + close FHW; # close the file. + + if($index <= 0) + { + # The folder is empty and delete the corresponding '.pl' file. + unlink($IntAutoScript); + print "Deleted $IntAutoScript since it corresponded to an empty folder.\n"; + } + else + { + if($pos <= 0) + { # This logic to make sure that it is written only once. + # Only if something is written into the intermediary auto script, + # only then make an entry of the intermediary auto script in nwauto.pl + print FHWA "print \`perl $IntAutoScript\`\;\n"; + print FHWA "print \"\\n\\n\\n\"\;\n\n"; + } + } + } + else + { + if(-f $FileName) + { + $dir = dirname($FileName); # Get the folder name + $base = basename($FileName); # Get the base name + ($base, $dir, $ext) = fileparse($FileName, '\..*'); # Get the extension of the file passed. + + # Do the processing only if the file has '.t' extension. + if($ext eq '.t') + { + print FHWA "print \`perl $FileName\`\;\n"; + print FHWA "print \"\\n\\n\\n\"\;\n\n"; + } + } + } + } + + + ## Below adds the ending comments into all the intermediary auto scripts: + + opendir(DIR, $DirName); + @Dirs = readdir(DIR); + close(DIR); + foreach $DirItem(@Dirs) + { + $index = 0; + + $FileName = $DirName."/".$DirItem; + if(-d $FileName) + { # If an item is a folder, then open it further. + + opendir(SUBDIR, $FileName); + @SubDirs = readdir(SUBDIR); + close(SUBDIR); + + # To not to write into the file if the corresponding folder was empty. + foreach $SubDir(@SubDirs) + { + $index++; + } + + if($index > 0) + { + # The folder not empty. + + # Intemediary automated script like base.pl, lib.pl, cmd.pl etc. + $IntAutoScript = "t/".$DirItem.".pl"; + + # Write into the intermediary auto script. + open(FHW, ">> $IntAutoScript") or die "Unable to open the file, $IntAutoScript for appending.\n"; + seek(FHW, 0, 2); # seek to the end of the file. + flock(FHW, LOCK_EX); # Lock the file for safety purposes. + + # Write into the intermediary auto script. + print FHW "\nprint \"Testing of $DirItem folder done!\\n\\n\"\;\n\n"; + + flock(FHW, LOCK_UN); # unlock the file. + close FHW; # close the file. + } + } + } + + + # Write into nwauto.pl + print FHWA "\nprint \"Automated Unit Testing of Perl$version for NetWare done!\\n\\n\"\;\n\n"; + + flock(FHWA, LOCK_UN); # unlock the file. + close FHWA; # close the file. + + print "\n\nGeneration of t/nwauto.pl Done!\n\n"; + + print "\nGeneration of automated scripts for NetWare DONE!\n"; + + + + + # Process the file. + sub Process_File + { + local($FileToProcess) = @_; # File name. + local($Script) = 0; + local($HeadCut) = 0; + + ## For example: + ## If the value of $FileToProcess is '/perl/scripts/t/pragma/warnings.t', then + ## $dir1 = '/perl/scripts/t/pragma/' + ## $base1 = 'warnings' + ## $ext1 = '.t' + $dir1 = dirname($FileToProcess); # Get the folder name + $base1 = basename($FileToProcess); # Get the base name + ($base1, $dir1, $ext1) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. + + # Do the processing only if the file has '.t' extension. + if($ext1 eq '.t') + { + foreach $Script(@ScriptsNotUsed) + { + # The variables are converted to lower case before they are compared. + # This is done to remove the case-sensitive comparison done by 'eq'. + $Script1 = lc($Script); + $FileToProcess1 = lc($FileToProcess); + if($Script1 eq $FileToProcess1) + { + $HeadCut = 1; + } + } + + if($HeadCut) + { + # Write into the intermediary auto script. + print FHW "=head\n"; + } + + # Write into the intermediary auto script. + print FHW "print \"Testing $base1"."$ext1:\\n\\n\"\;\n"; + print FHW "print \`perl $FileToProcess\`\;\n"; # Write the changed array into the file. + print FHW "print \"\\n\\n\\n\"\;\n"; + + if($HeadCut) + { + # Write into the intermediary auto script. + print FHW "=cut\n"; + } + + $HeadCut = 0; + print FHW "\n"; + } + } + diff -c /dev/null 'perl-5.7.2/NetWare/t/Readme.txt' Index: ./NetWare/t/Readme.txt *** ./NetWare/t/Readme.txt Thu Jan 1 02:00:00 1970 --- ./NetWare/t/Readme.txt Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,99 ---- + + + Automated Testing of Perl5 Interpreter for NetWare. + + + + A set of Standard Unit Test Scripts to test all the functionalities of + Perl5 Interpreter are available along with the CPAN download. They are + all located under 't' folder. These include sub-folders under 't' such + as: 'base', 'cmd', 'comp', 'io', lib', 'op', 'pod', 'pragma' and 'run'. + Each of these sub-folders contain few test scripts ('.t' files) under + them. + + Executing these test scripts on NetWare can be automated as per the + following: + + 1. Generate automated scripts like 'base.pl', 'cmd.pl', 'comp.pl', 'io.pl', + 'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' that execute all the + test scripts ('.t' files) under the corresponding folder. + + For example, 'base.pl' to test all the scripts + under 'sys:\perl\scripts\t\base' folder, + 'comp.pl' to test all the scripts + under 'sys:\perl\scripts\t\comp' folder and so on. + + 2. Generate an automated script, 'nwauto.pl' that executes all the above + mentioned '.pl' automated scripts, thus in turn executing all the '.t' + scripts. + + The script, 'NWScripts.pl' available under the 'NetWare\t' folder of the + CPAN download, is written to generate these automated scripts when + executed on a NetWare server. It generates 'base.pl', 'cmd.pl', 'comp.pl', + 'io.pl', 'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' and also + 'nwauto.pl' by including all the corresponding '.t' scripts in them in + backtick operators. + + For example, all the scripts that are under 't\base' folder will be + entered in 'base.pl' and so on. 'nwauto.pl' includes all these '.pl' + scripts like 'base.pl', 'comp.pl' etc. + + Perform the following steps to execute the automated scripts: + + 1. Make sure that your NetWare server is mapped to "i:". + + 2. Execute "nmake nwinstall" (after building interpreter and extensions) + in the 'NetWare' folder of the CPAN download. This installs all the + library files, perl modules and all the 't' scripts in appropriate + folders onto your server. + + 3. Execute the command "perl t\NWModify.pl" on the console command + prompt of your server. This script replaces + + "@INC = " with "unshift @INC, " and + "push @INC, " with "unshift @INC, " + + from all the scripts under 'sys:\perl\scripts\t' folder. + + This is done to include the correct path for libraries into the scripts + when executed on NetWare. If this is not done, some of the scripts will + not get executed since they cannot locate the corresponding libraries. + + 4. Execute the command "perl t\NWScripts.pl" on the console command + prompt to generate the automated scripts mentioned above + under the 'sys:\perl\scripts\t' folder. + + 5. Execute the command "perl t\nwauto.pl" on the server console command + prompt. This runs all the standard test scripts. If you desire to + redirect or save the results into a file, say 'nwauto.txt', then the + console command to execute is: "perl t\nwauto.pl > nwauto.txt". + + 6. If you wish to execute only a certain set of scripts, then run the + corresponding '.pl' file. For example, if you wish to execute only the + 'lib' scripts, then execute 'lib.pl' through the server console command, + "perl t\lib.pl'. To redirect the results into a file, the console command + is, "perl t\lib.pl > lib.txt". + + + + Known Issues: + + The following scripts are commented out in the corresponding autoscript: + + 1. 'openpid.t' in 'sys:\perl\scripts\t\io.pl' script + Reason: + This either hangs or abends the server when executing through auto + scripts. When run individually, the script execution goes through + fine. + + 2. 'argv.t' in 'sys:\perl\scripts\t\io.pl' script + Reason: + This either hangs or abends the server when executing through auto + scripts. When run individually, the script execution goes through + fine. + + 3. 'filehandle.t' in 'sys:\perl\scripts\t\lib.pl' script + Reason: + This hangs in the last test case where it uses FileHandle::Pipe + whether run individually or through an auto script. + diff -c /dev/null 'perl-5.7.2/NetWare/testnlm/echo/echo.c' Index: ./NetWare/testnlm/echo/echo.c *** ./NetWare/testnlm/echo/echo.c Thu Jan 1 02:00:00 1970 --- ./NetWare/testnlm/echo/echo.c Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,31 ---- + /********************************************************************** + * + * C Source: echo.c + * Instance: idc_rads_2 + * Description: DOS echo Emulation + * %created_by: smscm % + * %date_created: Fri Apr 20 19:05:31 2001 % + * + **********************************************************************/ + #ifndef lint + static char *_csrc = "@(#) %filespec: echo.c~1 % (%full_filespec: echo.c~1:csrc:idc_rads#3 %)"; + #endif + + #include + //#include + #include "clibstuf.h" + + void main (int argc, char** argv) + { + fnInitGpfGlobals(); + if (argc>1 && argv[1]!=NULL && strcmp(argv[1],"-d")==0) { + int n; + for (n=0; n < argc; n++) { + printf("%2d: '%s'\n", n, argv[n]); + } + } else { + while (--argc) { + printf("%s%c", *++argv, argc==1 ? '\n' : ' '); + } + } + } diff -c /dev/null 'perl-5.7.2/NetWare/testnlm/type/type.c' Index: ./NetWare/testnlm/type/type.c *** ./NetWare/testnlm/type/type.c Thu Jan 1 02:00:00 1970 --- ./NetWare/testnlm/type/type.c Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,48 ---- + /********************************************************************** + * + * C Source: type.c + * Instance: idc_rads_2 + * Description: DOS type Emulation + * %created_by: smscm % + * %date_created: Fri Apr 20 19:05:34 2001 % + * + **********************************************************************/ + #ifndef lint + static char *_csrc = "@(#) %filespec: type.c~1 % (%full_filespec: type.c~1:csrc:idc_rads#3 %)"; + #endif + + #include + #include + #include "clibstuf.h" + + void main (int argc, char** argv) + { + FILE* pfile = NULL; + int k; + int thechar; + char* defaultDir; + + fnInitGpfGlobals(); + SetCurrentNameSpace(NWOS2_NAME_SPACE); + defaultDir = getenv("PERL_ROOT"); + if (!defaultDir || (strlen(defaultDir) == 0)) + defaultDir = "sys:\\perl\\scripts"; + chdir(defaultDir); + + k = 1; + while (k < argc) + { + // open the next file and print it out + pfile = fopen(argv[k],"r"); + if (pfile) + { + while ((thechar = getc(pfile)) != EOF) + { + if (thechar != 0x0d) + printf("%c",thechar); + } + fclose (pfile); + } + k++; + } + } diff -c /dev/null 'perl-5.7.2/NetWare/win32ish.h' Index: ./NetWare/win32ish.h *** ./NetWare/win32ish.h Thu Jan 1 02:00:00 1970 --- ./NetWare/win32ish.h Mon Jul 9 17:09:42 2001 *************** *** 0 **** --- 1,46 ---- + + /* + * Copyright © 2001 Novell, Inc. All Rights Reserved. + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + + /* + * FILENAME : Win32ish.h + * DESCRIPTION : For Win32 type definitions like BOOL. + * Author : HYAK + * Date : January 2001. + * + */ + + + + #ifndef __Win32ish_H__ + #define __Win32ish_H__ + + + #ifndef BOOL + typedef unsigned int BOOL; + #endif + + #ifndef DWORD + typedef unsigned long DWORD; + #endif + + typedef DWORD LCID; + typedef long HRESULT; + typedef void* LPVOID; + + #ifndef TRUE + #define TRUE 1 + #endif + + #ifndef FALSE + #define FALSE 0 + #endif + + + #endif // __Win32ish_H__ + diff -c 'perl-5.7.1/Policy_sh.SH' 'perl-5.7.2/Policy_sh.SH' Index: ./Policy_sh.SH *** ./Policy_sh.SH Tue Mar 6 04:04:16 2001 --- ./Policy_sh.SH Mon Jul 9 17:09:42 2001 *************** *** 1,4 **** ! case $CONFIGDOTSH in '') . ./config.sh ;; esac echo "Extracting Policy.sh (with variable substitutions)" --- 1,4 ---- ! case $PERL_CONFIG_SH in '') . ./config.sh ;; esac echo "Extracting Policy.sh (with variable substitutions)" diff -c 'perl-5.7.1/Porting/Glossary' 'perl-5.7.2/Porting/Glossary' Index: ./Porting/Glossary *** ./Porting/Glossary Sun Apr 8 02:08:32 2001 --- ./Porting/Glossary Fri Jul 13 03:18:58 2001 *************** *** 24,29 **** --- 24,35 ---- with a hint value or command line option, but you'd better know what you are doing. + afsroot (afs.U): + This variable is by default set to '/afs'. In the unlikely case + this is not the correct root, it is possible to override this with + a hint value or command line option. This will be used in subsequent + tests for AFSness in the Perl configure and test process. + alignbytes (alignbytes.U): This variable holds the number of bytes required to align a double-- or a long double when applicable. Usual values are *************** *** 237,244 **** The value is a plain '' and is not useful. chmod (Loc.U): ! This variable is defined but not used by Configure. ! The value is a plain '' and is not useful. chown (Loc.U): This variable is defined but not used by Configure. --- 243,251 ---- The value is a plain '' and is not useful. chmod (Loc.U): ! This variable is used internally by Configure to determine the ! full pathname (if any) of the chmod program. After Configure runs, ! the value is reset to a plain "chmod" and is not useful. chown (Loc.U): This variable is defined but not used by Configure. *************** *** 258,267 **** This variable is defined but not used by Configure. The value is a plain '' and is not useful. - CONFIGDOTSH (Oldsyms.U): - This is set to 'true' in config.sh so that a shell script - sourcing config.sh can tell if it has been sourced already. - contains (contains.U): This variable holds the command to do a grep with a proper return status. On most sane systems it is simply "grep". On insane systems --- 265,270 ---- *************** *** 326,336 **** not in this list, see ccsymbols and cppccsymbols. The list is a space-separated list of symbol=value tokens. - crosscompile (crosscompile.U): - This variable conditionally defines the CROSSCOMPILE symbol - which signifies that the build process is be a cross-compilation. - This is normally set by hints files or from Configure command line. - cryptlib (d_crypt.U): This variable holds -lcrypt or the path to a libcrypt.a archive if the crypt() function is not defined in the standard C library. It is --- 329,334 ---- *************** *** 465,470 **** --- 463,474 ---- header files provide DBL_DIG, which is the number of significant digits in a double precision number. + d_dbminitproto (d_dbminitproto.U): + This variable conditionally defines the HAS_DBMINIT_PROTO symbol, + which indicates to the C program that the system provides + a prototype for the dbminit() function. Otherwise, it is + up to the program to supply one. + d_difftime (d_difftime.U): This variable conditionally defines the HAS_DIFFTIME symbol, which indicates to the C program that the difftime() routine is available. *************** *** 540,545 **** --- 544,553 ---- This variable conditionally defines the symbols EUNICE and VAX, which alerts the C program that it must deal with ideosyncracies of VMS. + d_fchdir (d_fchdir.U): + This variable conditionally defines the HAS_FCHDIR symbol, which + indicates to the C program that the fchdir() routine is available. + d_fchmod (d_fchmod.U): This variable conditionally defines the HAS_FCHMOD symbol, which indicates to the C program that the fchmod() routine is available *************** *** 586,591 **** --- 594,605 ---- This variable conditionally defines HAS_FLOCK if flock() is available to do file locking. + d_flockproto (d_flockproto.U): + This variable conditionally defines the HAS_FLOCK_PROTO symbol, + which indicates to the C program that the system provides + a prototype for the flock() function. Otherwise, it is + up to the program to supply one. + d_fork (d_fork.U): This variable conditionally defines the HAS_FORK symbol, which indicates to the C program that the fork() routine is available. *************** *** 991,996 **** --- 1005,1017 ---- This variable conditionally defines the HAS_MODFL symbol, which indicates to the C program that the modfl() routine is available. + d_modfl_pow32_bug (d_modfl.U): + This variable conditionally defines the HAS_MODFL_POW32_BUG symbol, + which indicates that modfl() is broken for long doubles >= pow(2, 32). + For example from 4294967303.150000 one would get 4294967302.000000 + and 1.150000. The bug has been seen in certain versions of glibc, + release 2.2.2 is known to be okay. + d_mprotect (d_mprotect.U): This variable conditionally defines HAS_MPROTECT if mprotect() is available to modify the access protection of a memory mapped file. *************** *** 1061,1066 **** --- 1082,1091 ---- This variable conditionally defines the HAS_NICE symbol, which indicates to the C program that the nice() routine is available. + d_nl_langinfo (d_nl_langinfo.U): + This variable conditionally defines the HAS_NL_LANGINFO symbol, which + indicates to the C program that the nl_langinfo() routine is available. + d_nv_preserves_uv (perlxv.U): This variable indicates whether a variable of type nvtype can preserve all the bits a variable of type uvtype. *************** *** 1184,1189 **** --- 1209,1219 ---- The 'U' in the name is to separate this from d_PRIx64 so that even case-blind systems can see the difference. + d_pthread_atfork (d_pthread_atfork.U): + This variable conditionally defines the HAS_PTHREAD_ATFORK symbol, + which indicates to the C program that the pthread_atfork() + routine is available. + d_pthread_yield (d_pthread_y.U): This variable conditionally defines the HAS_PTHREAD_YIELD symbol if the pthread_yield routine is available to yield *************** *** 1261,1271 **** d_safebcpy (d_safebcpy.U): This variable conditionally defines the HAS_SAFE_BCOPY symbol if ! the bcopy() routine can do overlapping copies. d_safemcpy (d_safemcpy.U): This variable conditionally defines the HAS_SAFE_MEMCPY symbol if the memcpy() routine can do overlapping copies. d_sanemcmp (d_sanemcmp.U): This variable conditionally defines the HAS_SANE_MEMCMP symbol if --- 1291,1303 ---- d_safebcpy (d_safebcpy.U): This variable conditionally defines the HAS_SAFE_BCOPY symbol if ! the bcopy() routine can do overlapping copies. Normally, you ! should probably use memmove(). d_safemcpy (d_safemcpy.U): This variable conditionally defines the HAS_SAFE_MEMCPY symbol if the memcpy() routine can do overlapping copies. + For overlapping copies, memmove() should be used, if available. d_sanemcmp (d_sanemcmp.U): This variable conditionally defines the HAS_SANE_MEMCMP symbol if *************** *** 1492,1497 **** --- 1524,1535 ---- This variable conditionally defines the HAS_SOCKATMARK symbol, which indicates to the C program that the sockatmark() routine is available. + d_sockatmarkproto (d_sockatmarkproto.U): + This variable conditionally defines the HAS_SOCKATMARK_PROTO symbol, + which indicates to the C program that the system provides + a prototype for the sockatmark() function. Otherwise, it is + up to the program to supply one. + d_socket (d_socket.U): This variable conditionally defines HAS_SOCKET, which indicates that the BSD socket interface is supported. *************** *** 1511,1516 **** --- 1549,1566 ---- This variable conditionally defines the HAS_SQRTL symbol, which indicates to the C program that the sqrtl() routine is available. + d_sresgproto (d_sresgproto.U): + This variable conditionally defines the HAS_SETRESGID_PROTO symbol, + which indicates to the C program that the system provides + a prototype for the setresgid() function. Otherwise, it is + up to the program to supply one. + + d_sresuproto (d_sresuproto.U): + This variable conditionally defines the HAS_SETRESUID_PROTO symbol, + which indicates to the C program that the system provides + a prototype for the setresuid() function. Otherwise, it is + up to the program to supply one. + d_statblks (d_statblks.U): This variable conditionally defines USE_STAT_BLOCKS if this system has a stat structure declaring *************** *** 1584,1589 **** --- 1634,1643 ---- This variable conditionally defines HAS_STRERROR if strerror() is available to translate error numbers to strings. + d_strftime (d_strftime.U): + This variable conditionally defines the HAS_STRFTIME symbol, which + indicates to the C program that the strftime() routine is available. + d_strtod (d_strtod.U): This variable conditionally defines the HAS_STRTOD symbol, which indicates to the C program that the strtod() routine is available *************** *** 1636,1641 **** --- 1690,1701 ---- This variable conditionally defines HAS_SYSCALL if syscall() is available call arbitrary system calls. + d_syscallproto (d_syscallproto.U): + This variable conditionally defines the HAS_SYSCALL_PROTO symbol, + which indicates to the C program that the system provides + a prototype for the syscall() function. Otherwise, it is + up to the program to supply one. + d_sysconf (d_sysconf.U): This variable conditionally defines the HAS_SYSCONF symbol, which indicates to the C program that the sysconf() routine is available *************** *** 1717,1722 **** --- 1777,1788 ---- This variable conditionally defines HAS_USLEEP if usleep() is available to do high granularity sleeps. + d_usleepproto (d_usleepproto.U): + This variable conditionally defines the HAS_USLEEP_PROTO symbol, + which indicates to the C program that the system provides + a prototype for the usleep() function. Otherwise, it is + up to the program to supply one. + d_ustat (d_ustat.U): This variable conditionally defines HAS_USTAT if ustat() is available to query file system statistics by dev_t. *************** *** 1800,1805 **** --- 1866,1885 ---- in the header file. In older versions of DB, it was int, while in newer ones it is size_t. + db_version_major (i_db.U): + This variable contains the major version number of + Berkeley DB found in the header file. + + db_version_minor (i_db.U): + This variable contains the minor version number of + Berkeley DB found in the header file. + For DB version 1 this is always 0. + + db_version_patch (i_db.U): + This variable contains the patch version number of + Berkeley DB found in the header file. + For DB version 1 this is always 0. + defvoidused (voidflags.U): This variable contains the default value of the VOIDUSED symbol (15). *************** *** 1911,1916 **** --- 1991,2002 ---- This variable contains the return type of free(). It is usually void, but occasionally int. + from (Cross.U): + This variable contains the command used by Configure + to copy files from the target host. Useful and available + only during Perl build. + The string ':' if not cross-compiling. + full_ar (Loc_ar.U): This variable contains the full pathname to 'ar', whether or not the user has specified 'portability'. This is only used *************** *** 2088,2093 **** --- 2174,2183 ---- This variable conditionally defines the I_INTTYPES symbol, and indicates whether a C program should include . + i_langinfo (i_langinfo.U): + This variable conditionally defines the I_LANGINFO symbol, + and indicates whether a C program should include . + i_libutil (i_libutil.U): This variable conditionally defines the I_LIBUTIL symbol, and indicates whether a C program should include . *************** *** 2972,2977 **** --- 3062,3075 ---- This variable is defined but not used by Configure. The value is a plain '' and is not useful. + perl_patchlevel (patchlevel.U): + This is the Perl patch level, a numeric change identifier, + as defined by whichever source code maintenance system + is used to maintain the patches; currently Perforce. + It does not correlate with the Perl version numbers or + the maintenance versus development dichotomy except + by also being increasing. + PERL_REVISION (Oldsyms.U): In a Perl version number such as 5.6.2, this is the 5. This value is manually set in patchlevel.h *************** *** 3116,3121 **** --- 3214,3225 ---- This variable is defined but not used by Configure. The value is a plain '' and is not useful. + run (Cross.U): + This variable contains the command used by Configure + to copy and execute a cross-compiled executable in the + target host. Useful and available only during Perl build. + Empty string '' if not cross-compiling. + runnm (usenm.U): This variable contains 'true' or 'false' depending whether the nm extraction should be performed or not, according to the value *************** *** 3460,3466 **** stdio_filbuf (d_stdstdio.U): This variable defines how, given a FILE pointer, fp, to tell ! stdio to refill it's internal buffers (?). This will be used to define the macro FILE_filbuf(fp). stdio_ptr (d_stdstdio.U): --- 3564,3570 ---- stdio_filbuf (d_stdstdio.U): This variable defines how, given a FILE pointer, fp, to tell ! stdio to refill its internal buffers (?). This will be used to define the macro FILE_filbuf(fp). stdio_ptr (d_stdstdio.U): *************** *** 3501,3506 **** --- 3605,3614 ---- This variable is defined but not used by Configure. The value is a plain '' and is not useful. + targetarch (Cross.U): + If cross-compiling, this variable contains the target architecture. + If not, this will be empty. + tbl (Loc.U): This variable is defined but not used by Configure. The value is a plain '' and is not useful. *************** *** 3522,3527 **** --- 3630,3641 ---- or time_t on BSD sites (in which case should be included). Anyway, the type Time_t should be used. + to (Cross.U): + This variable contains the command used by Configure + to copy to from the target host. Useful and available + only during Perl build. + The string ':' if not cross-compiling. + touch (Loc.U): This variable is used internally by Configure to determine the full pathname (if any) of the touch program. After Configure runs, *************** *** 3618,3623 **** --- 3732,3741 ---- This may mean using for example "long longs", while your memory may still be limited to 2 gigabytes. + usecrosscompile (Cross.U): + This variable conditionally defines the USE_CROSS_COMPILE symbol, + and indicates that Perl has been cross-compiled. + usedl (dlsrc.U): This variable indicates if the system supports dynamic loading of some sort. See also dlsrc and dlobj. *************** *** 3675,3680 **** --- 3793,3805 ---- for hints files to indicate that POSIX will not compile on a particular system. + usereentrant (usethreads.U): + This variable conditionally defines the USE_REENTRANT_API symbol, + which indicates that the thread code may try to use the various + _r versions of library functions. This is only potentially + meaningful if usethreads is set and is very experimental, it is + not even prompted for. + usesfio (d_sfio.U): This variable is set to true when the user agrees to use sfio. It is set to false when sfio is not available or when the user *************** *** 3792,3797 **** --- 3917,3931 ---- full version number, including any possible subversions. This is suitable for use as a directory name, and hence is filesystem dependent. + + version_patchlevel_string (patchlevel.U): + This is a string combining version, subversion and + perl_patchlevel (if perl_patchlevel is non-zero). + It is typically something like + 'version 7 subversion 1' or + 'version 7 subversion 1 patchlevel 11224' + It is computed here to avoid duplication of code in myconfig.SH + and lib/Config.pm. versiononly (versiononly.U): If set, this symbol indicates that only the version-specific diff -c 'perl-5.7.1/Porting/config.sh' 'perl-5.7.2/Porting/config.sh' Index: ./Porting/config.sh *** ./Porting/config.sh Sun Apr 8 02:08:13 2001 --- ./Porting/config.sh Fri Jul 13 17:08:57 2001 *************** *** 8,14 **** # Package name : perl5 # Source directory : . ! # Configuration time: Sun Apr 8 02:05:27 EET DST 2001 # Configured by : jhi # Target system : osf1 alpha.hut.fi v4.0 878 alpha --- 8,14 ---- # Package name : perl5 # Source directory : . ! # Configuration time: Fri Jul 13 03:15:46 EET DST 2001 # Configured by : jhi # Target system : osf1 alpha.hut.fi v4.0 878 alpha *************** *** 27,32 **** --- 27,33 ---- _exe='' _o='.o' afs='false' + afsroot='/afs' alignbytes='8' ansi2knr='' aphostname='' *************** *** 35,42 **** api_version='5' api_versionstring='5.005' ar='ar' ! archlib='/opt/perl/lib/5.7.1/alpha-dec_osf-thread' ! archlibexp='/opt/perl/lib/5.7.1/alpha-dec_osf-thread' archname64='' archname='alpha-dec_osf-thread' archobjs='' --- 36,43 ---- api_version='5' api_versionstring='5.005' ar='ar' ! archlib='/opt/perl/lib/5.7.2/alpha-dec_osf-thread' ! archlibexp='/opt/perl/lib/5.7.2/alpha-dec_osf-thread' archname64='' archname='alpha-dec_osf-thread' archobjs='' *************** *** 54,60 **** cat='cat' cc='cc' cccdlflags=' ' ! ccdlflags=' -Wl,-rpath,/opt/perl/lib/5.7.1/alpha-dec_osf-thread/CORE' ccflags='-pthread -std -DLANGUAGE_C' ccflags_uselargefiles='' ccname='cc' --- 55,61 ---- cat='cat' cc='cc' cccdlflags=' ' ! ccdlflags=' -Wl,-rpath,/opt/perl/lib/5.7.2/alpha-dec_osf-thread/CORE' ccflags='-pthread -std -DLANGUAGE_C' ccflags_uselargefiles='' ccname='cc' *************** *** 62,71 **** ccversion='V5.6-082' cf_by='jhi' cf_email='yourname@yourhost.yourplace.com' ! cf_time='Sun Apr 8 02:05:27 EET DST 2001' charsize='1' chgrp='' ! chmod='' chown='' clocktype='clock_t' comm='comm' --- 63,72 ---- ccversion='V5.6-082' cf_by='jhi' cf_email='yourname@yourhost.yourplace.com' ! cf_time='Fri Jul 13 03:15:46 EET DST 2001' charsize='1' chgrp='' ! chmod='chmod' chown='' clocktype='clock_t' comm='comm' *************** *** 82,91 **** cpprun='/usr/bin/cpp' cppstdin='cppstdin' cppsymbols='_AES_SOURCE=1 __alpha=1 __ALPHA=1 _ANSI_C_SOURCE=1 __LANGUAGE_C__=1 _LONGLONG=1 __osf__=1 _OSF_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 _SYSTYPE_BSD=1 __unix__=1 _XOPEN_SOURCE=1' - crosscompile='undef' cryptlib='' csh='csh' ! d_Gconvert='gcvt((x),(n),(b))' d_PRIEUldbl='define' d_PRIFUldbl='define' d_PRIGUldbl='define' --- 83,91 ---- cpprun='/usr/bin/cpp' cppstdin='cppstdin' cppsymbols='_AES_SOURCE=1 __alpha=1 __ALPHA=1 _ANSI_C_SOURCE=1 __LANGUAGE_C__=1 _LONGLONG=1 __osf__=1 _OSF_SOURCE=1 _POSIX_C_SOURCE=199506 _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 _SYSTYPE_BSD=1 __unix__=1 _XOPEN_SOURCE=1' cryptlib='' csh='csh' ! d_Gconvert='sprintf((b),"%.*g",(n),(x))' d_PRIEUldbl='define' d_PRIFUldbl='define' d_PRIGUldbl='define' *************** *** 127,132 **** --- 127,133 ---- d_csh='define' d_cuserid='define' d_dbl_dig='define' + d_dbminitproto='undef' d_difftime='define' d_dirnamlen='define' d_dlerror='define' *************** *** 144,149 **** --- 145,151 ---- d_endsent='define' d_eofnblk='define' d_eunice='undef' + d_fchdir='define' d_fchmod='define' d_fchown='define' d_fcntl='define' *************** *** 154,159 **** --- 156,162 ---- d_fgetpos='define' d_flexfnam='define' d_flock='define' + d_flockproto='undef' d_fork='define' d_fpathconf='define' d_fpos64_t='undef' *************** *** 239,245 **** d_mkstemps='undef' d_mktime='define' d_mmap='define' ! d_modfl='define' d_mprotect='define' d_msg='define' d_msg_ctrunc='define' --- 242,249 ---- d_mkstemps='undef' d_mktime='define' d_mmap='define' ! d_modfl='undef' ! d_modfl_pow32_bug='undef' d_mprotect='define' d_msg='define' d_msg_ctrunc='define' *************** *** 256,261 **** --- 260,266 ---- d_munmap='define' d_mymalloc='undef' d_nice='define' + d_nl_langinfo='define' d_nv_preserves_uv='undef' d_nv_preserves_uv_bits='53' d_off64_t='undef' *************** *** 270,275 **** --- 275,281 ---- d_pipe='define' d_poll='define' d_portable='define' + d_pthread_atfork='define' d_pthread_yield='undef' d_pwage='undef' d_pwchange='undef' *************** *** 288,294 **** d_rename='define' d_rewinddir='define' d_rmdir='define' ! d_safebcpy='define' d_safemcpy='undef' d_sanemcmp='define' d_sbrkproto='define' --- 294,300 ---- d_rename='define' d_rewinddir='define' d_rmdir='define' ! d_safebcpy='undef' d_safemcpy='undef' d_sanemcmp='define' d_sbrkproto='define' *************** *** 339,349 **** --- 345,358 ---- d_sigprocmask='define' d_sigsetjmp='define' d_sockatmark='undef' + d_sockatmarkproto='undef' d_socket='define' d_socklen_t='undef' d_sockpair='define' d_socks5_init='undef' d_sqrtl='define' + d_sresgproto='undef' + d_sresuproto='undef' d_statblks='define' d_statfs_f_flags='define' d_statfs_s='define' *************** *** 360,365 **** --- 369,375 ---- d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' + d_strftime='define' d_strtod='define' d_strtol='define' d_strtold='undef' *************** *** 372,377 **** --- 382,388 ---- d_suidsafe='undef' d_symlink='define' d_syscall='define' + d_syscallproto='undef' d_sysconf='define' d_sysernlst='' d_syserrlst='define' *************** *** 390,395 **** --- 401,407 ---- d_uname='define' d_union_semun='undef' d_usleep='define' + d_usleepproto='undef' d_ustat='define' d_vendorarch='undef' d_vendorbin='undef' *************** *** 409,414 **** --- 421,429 ---- date='date' db_hashtype='u_int32_t' db_prefixtype='size_t' + db_version_major='1' + db_version_minor='0' + db_version_patch='0' defvoidused='15' direntrytype='struct dirent' dlext='so' *************** *** 415,421 **** dlsrc='dl_dlopen.xs' doublesize='8' drand01='drand48()' ! dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread XS/Typemap attrs re' eagain='EAGAIN' ebcdic='undef' echo='echo' --- 430,436 ---- dlsrc='dl_dlopen.xs' doublesize='8' drand01='drand48()' ! dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re' eagain='EAGAIN' ebcdic='undef' echo='echo' *************** *** 424,430 **** eunicefix=':' exe_ext='' expr='expr' ! extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread XS/Typemap attrs re Errno' fflushNULL='define' fflushall='undef' find='' --- 439,445 ---- eunicefix=':' exe_ext='' expr='expr' ! extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re Errno' fflushNULL='define' fflushall='undef' find='' *************** *** 433,438 **** --- 448,454 ---- fpossize='8' fpostype='fpos_t' freetype='void' + from=':' full_ar='/usr/bin/ar' full_csh='/usr/bin/csh' full_sed='/usr/bin/sed' *************** *** 473,478 **** --- 489,495 ---- i_iconv='define' i_ieeefp='undef' i_inttypes='undef' + i_langinfo='define' i_libutil='undef' i_limits='define' i_locale='define' *************** *** 543,559 **** inc_version_list_init='0' incpath='' inews='' ! installarchlib='/opt/perl/lib/5.7.1/alpha-dec_osf-thread' installbin='/opt/perl/bin' installman1dir='/opt/perl/man/man1' installman3dir='/opt/perl/man/man3' installprefix='/opt/perl' installprefixexp='/opt/perl' ! installprivlib='/opt/perl/lib/5.7.1' installscript='/opt/perl/bin' ! installsitearch='/opt/perl/lib/site_perl/5.7.1/alpha-dec_osf-thread' installsitebin='/opt/perl/bin' ! installsitelib='/opt/perl/lib/site_perl/5.7.1' installstyle='lib' installusrbinperl='undef' installvendorarch='' --- 560,576 ---- inc_version_list_init='0' incpath='' inews='' ! installarchlib='/opt/perl/lib/5.7.2/alpha-dec_osf-thread' installbin='/opt/perl/bin' installman1dir='/opt/perl/man/man1' installman3dir='/opt/perl/man/man3' installprefix='/opt/perl' installprefixexp='/opt/perl' ! installprivlib='/opt/perl/lib/5.7.2' installscript='/opt/perl/bin' ! installsitearch='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread' installsitebin='/opt/perl/bin' ! installsitelib='/opt/perl/lib/site_perl/5.7.2' installstyle='lib' installusrbinperl='undef' installvendorarch='' *************** *** 564,570 **** ivdformat='"ld"' ivsize='8' ivtype='long' ! known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File IO IPC/SysV MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread XS/Typemap attrs re' ksh='' ld='ld' lddlflags='-shared -expect_unresolved "*" -msym -std -s' --- 581,587 ---- ivdformat='"ld"' ivsize='8' ivtype='long' ! known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/Scalar PerlIO/Via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Time/Piece XS/Typemap attrs re' ksh='' ld='ld' lddlflags='-shared -expect_unresolved "*" -msym -std -s' *************** *** 654,661 **** passcat='cat /etc/passwd' patchlevel='7' path_sep=':' ! perl5='/u/vieraat/vieraat/jhi/Perl/bin/perl' perl='' perladmin='yourname@yourhost.yourplace.com' perllibs='-lm -liconv -lutil -lpthread -lexc' perlpath='/opt/perl/bin/perl' --- 671,679 ---- passcat='cat /etc/passwd' patchlevel='7' path_sep=':' ! perl5='perl' perl='' + perl_patchlevel='11326' perladmin='yourname@yourhost.yourplace.com' perllibs='-lm -liconv -lutil -lpthread -lexc' perlpath='/opt/perl/bin/perl' *************** *** 668,675 **** pr='' prefix='/opt/perl' prefixexp='/opt/perl' ! privlib='/opt/perl/lib/5.7.1' ! privlibexp='/opt/perl/lib/5.7.1' prototype='define' ptrsize='8' quadkind='2' --- 686,693 ---- pr='' prefix='/opt/perl' prefixexp='/opt/perl' ! privlib='/opt/perl/lib/5.7.2' ! privlibexp='/opt/perl/lib/5.7.2' prototype='define' ptrsize='8' quadkind='2' *************** *** 682,687 **** --- 700,706 ---- revision='5' rm='rm' rmail='' + run='' runnm='true' sPRIEUldbl='"E"' sPRIFUldbl='"F"' *************** *** 718,730 **** sig_num_init='0, 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, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0' sig_size='58' signal_t='void' ! sitearch='/opt/perl/lib/site_perl/5.7.1/alpha-dec_osf-thread' ! sitearchexp='/opt/perl/lib/site_perl/5.7.1/alpha-dec_osf-thread' sitebin='/opt/perl/bin' sitebinexp='/opt/perl/bin' ! sitelib='/opt/perl/lib/site_perl/5.7.1' sitelib_stem='/opt/perl/lib/site_perl' ! sitelibexp='/opt/perl/lib/site_perl/5.7.1' siteprefix='/opt/perl' siteprefixexp='/opt/perl' sizesize='8' --- 737,749 ---- sig_num_init='0, 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, 6, 6, 16, 20, 23, 23, 23, 29, 48, 0' sig_size='58' signal_t='void' ! sitearch='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread' ! sitearchexp='/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread' sitebin='/opt/perl/bin' sitebinexp='/opt/perl/bin' ! sitelib='/opt/perl/lib/site_perl/5.7.2' sitelib_stem='/opt/perl/lib/site_perl' ! sitelibexp='/opt/perl/lib/site_perl/5.7.2' siteprefix='/opt/perl' siteprefixexp='/opt/perl' sizesize='8' *************** *** 740,746 **** spitshell='cat' src='.' ssizetype='ssize_t' ! startperl='#!/opt/perl/bin/perl5.7.1' startsh='#!/bin/sh' static_ext=' ' stdchar='unsigned char' --- 759,765 ---- spitshell='cat' src='.' ssizetype='ssize_t' ! startperl='#!/opt/perl/bin/perl5.7.2' startsh='#!/bin/sh' static_ext=' ' stdchar='unsigned char' *************** *** 756,766 **** --- 775,787 ---- sysman='/usr/man/man1' tail='' tar='' + targetarch='' tbl='' tee='' test='test' timeincl='/usr/include/sys/time.h ' timetype='time_t' + to=':' touch='touch' tr='tr' trnl='\n' *************** *** 783,788 **** --- 804,810 ---- use5005threads='define' use64bitall='define' use64bitint='define' + usecrosscompile='undef' usedl='define' useithreads='undef' uselargefiles='define' *************** *** 794,799 **** --- 816,822 ---- useopcode='true' useperlio='define' useposix='true' + usereentrant='undef' usesfio='false' useshrplib='true' usesocks='undef' *************** *** 817,829 **** vendorlibexp='' vendorprefix='' vendorprefixexp='' ! version='5.7.1' versiononly='define' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' ! xs_apiversion='5.7.1' ! yacc='/u/vieraat/vieraat/jhi/Perl/bin/byacc' yaccflags='' zcat='' zip='zip' --- 840,853 ---- vendorlibexp='' vendorprefix='' vendorprefixexp='' ! version='5.7.2' ! version_patchlevel_string='version 7 subversion 1 patch 11326' versiononly='define' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' ! xs_apiversion='5.7.2' ! yacc='byacc' yaccflags='' zcat='' zip='zip' *************** *** 850,855 **** PERL_API_REVISION=5 PERL_API_VERSION=5 PERL_API_SUBVERSION=0 ! CONFIGDOTSH=true # Variables propagated from previous config.sh file. pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"' --- 874,880 ---- PERL_API_REVISION=5 PERL_API_VERSION=5 PERL_API_SUBVERSION=0 ! PERL_PATCHLEVEL=11326 ! PERL_CONFIG_SH=true # Variables propagated from previous config.sh file. pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"' diff -c 'perl-5.7.1/Porting/config_H' 'perl-5.7.2/Porting/config_H' Index: ./Porting/config_H Prereq: 3.0.1.5 *** ./Porting/config_H Sun Apr 8 02:08:13 2001 --- ./Porting/config_H Fri Jul 13 17:07:18 2001 *************** *** 17,23 **** /* * Package name : perl5 * Source directory : . ! * Configuration time: Sun Apr 8 02:05:27 EET DST 2001 * Configured by : jhi * Target system : osf1 alpha.hut.fi v4.0 878 alpha */ --- 17,23 ---- /* * Package name : perl5 * Source directory : . ! * Configuration time: Fri Jul 13 03:15:46 EET DST 2001 * Configured by : jhi * Target system : osf1 alpha.hut.fi v4.0 878 alpha */ *************** *** 125,150 **** */ #define HAS_DLERROR /**/ - /* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ - /* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ - /*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/ - /*#define DOSUID / **/ - /* HAS_DUP2: * This symbol, if defined, indicates that the dup2 routine is * available to duplicate file descriptors. --- 125,130 ---- *************** *** 922,938 **** */ #define I_VALUES /**/ - /* I_STDARG: - * This symbol, if defined, indicates that exists and should - * be included. - */ - /* I_VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ - #define I_STDARG /**/ - /*#define I_VARARGS / **/ - /* I_VFORK: * This symbol, if defined, indicates to the C program that it should * include vfork.h. --- 902,907 ---- *************** *** 966,977 **** */ #define SH_PATH "/bin/sh" /**/ - /* CROSSCOMPILE: - * This symbol, if defined, signifies that we our - * build process is a cross-compilation. - */ - /*#define CROSSCOMPILE / **/ - /* INTSIZE: * This symbol contains the value of sizeof(int) so that the C * preprocessor can make decisions based on it. --- 935,940 ---- *************** *** 1042,1048 **** --- 1005,1017 ---- * by Configure. You shouldn't rely on it too much; the specific * feature tests from Configure are generally more reliable. */ + /* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ #define OSNAME "dec_osf" /**/ + #define OSVERS "4.0d" /**/ /* MEM_ALIGNBYTES: * This symbol contains the number of bytes required to align a *************** *** 1049,1055 **** * double, or a long double when applicable. Usual values are 2, * 4 and 8. The default is eight, for safety. */ ! #if defined(CROSSCOMPILE) || defined(MULTIARCH) # define MEM_ALIGNBYTES 8 #else #define MEM_ALIGNBYTES 8 --- 1018,1024 ---- * double, or a long double when applicable. Usual values are 2, * 4 and 8. The default is eight, for safety. */ ! #if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) # define MEM_ALIGNBYTES 8 #else #define MEM_ALIGNBYTES 8 *************** *** 1068,1075 **** * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ ! #define ARCHLIB "/opt/perl/lib/5.7.1/alpha-dec_osf-thread" /**/ ! #define ARCHLIB_EXP "/opt/perl/lib/5.7.1/alpha-dec_osf-thread" /**/ /* ARCHNAME: * This symbol holds a string representing the architecture name. --- 1037,1044 ---- * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ ! #define ARCHLIB "/opt/perl/lib/5.7.2/alpha-dec_osf-thread" /**/ ! #define ARCHLIB_EXP "/opt/perl/lib/5.7.2/alpha-dec_osf-thread" /**/ /* ARCHNAME: * This symbol holds a string representing the architecture name. *************** *** 1126,1132 **** * so the default case (for NeXT) is big endian to catch them. * This might matter for NeXT 3.0. */ ! #if defined(CROSSCOMPILE) || defined(MULTIARCH) # ifdef __LITTLE_ENDIAN__ # if LONGSIZE == 4 # define BYTEORDER 0x1234 --- 1095,1101 ---- * so the default case (for NeXT) is big endian to catch them. * This might matter for NeXT 3.0. */ ! #if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) # ifdef __LITTLE_ENDIAN__ # if LONGSIZE == 4 # define BYTEORDER 0x1234 *************** *** 1316,1321 **** --- 1285,1296 ---- */ #define HAS_ENDSERVENT /**/ + /* HAS_FCHDIR: + * This symbol, if defined, indicates that the fchdir routine is + * available to change directory using a file descriptor. + */ + #define HAS_FCHDIR /**/ + /* FCNTL_CAN_LOCK: * This symbol, if defined, indicates that fcntl() can be used * for file locking. Normally on Unix systems this is defined. *************** *** 1393,1399 **** * d_Gconvert='sprintf((b),"%.*g",(n),(x))' * The last two assume trailing zeros should not be kept. */ ! #define Gconvert(x,n,t,b) gcvt((x),(n),(b)) /* HAS_GETCWD: * This symbol, if defined, indicates that the getcwd routine is --- 1368,1374 ---- * d_Gconvert='sprintf((b),"%.*g",(n),(x))' * The last two assume trailing zeros should not be kept. */ ! #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) /* HAS_GETCWD: * This symbol, if defined, indicates that the getcwd routine is *************** *** 1774,1780 **** * available to split a long double x into a fractional part f and * an integer part i such that |f| < 1.0 and (f + i) = x. */ ! #define HAS_MODFL /**/ /* HAS_MPROTECT: * This symbol, if defined, indicates that the mprotect system call is --- 1749,1763 ---- * available to split a long double x into a fractional part f and * an integer part i such that |f| < 1.0 and (f + i) = x. */ ! /* HAS_MODFL_POW32_BUG: ! * This symbol, if defined, indicates that the modfl routine is ! * broken for long doubles >= pow(2, 32). ! * For example from 4294967303.150000 one would get 4294967302.000000 ! * and 1.150000. The bug has been seen in certain versions of glibc, ! * release 2.2.2 is known to be okay. ! */ ! /*#define HAS_MODFL / **/ ! /*#define HAS_MODFL_POW32_BUG / **/ /* HAS_MPROTECT: * This symbol, if defined, indicates that the mprotect system call is *************** *** 1849,1865 **** /* HAS_SAFE_BCOPY: * This symbol, if defined, indicates that the bcopy routine is available ! * to copy potentially overlapping memory blocks. Otherwise you should * probably use memmove() or memcpy(). If neither is defined, roll your * own version. */ ! #define HAS_SAFE_BCOPY /**/ /* HAS_SAFE_MEMCPY: * This symbol, if defined, indicates that the memcpy routine is available ! * to copy potentially overlapping memory blocks. Otherwise you should ! * probably use memmove() or memcpy(). If neither is defined, roll your ! * own version. */ /*#define HAS_SAFE_MEMCPY / **/ --- 1832,1848 ---- /* HAS_SAFE_BCOPY: * This symbol, if defined, indicates that the bcopy routine is available ! * to copy potentially overlapping memory blocks. Normally, you should * probably use memmove() or memcpy(). If neither is defined, roll your * own version. */ ! /*#define HAS_SAFE_BCOPY / **/ /* HAS_SAFE_MEMCPY: * This symbol, if defined, indicates that the memcpy routine is available ! * to copy potentially overlapping memory blocks. If you need to ! * copy overlapping memory blocks, you should check HAS_MEMMOVE and ! * use memmove() instead, if available. */ /*#define HAS_SAFE_MEMCPY / **/ *************** *** 2405,2412 **** --- 2388,2412 ---- * in the header file. In older versions of DB, it was * int, while in newer ones it is size_t. */ + /* DB_VERSION_MAJOR_CFG: + * This symbol, if defined, defines the major version number of + * Berkeley DB found in the header when Perl was configured. + */ + /* DB_VERSION_MINOR_CFG: + * This symbol, if defined, defines the minor version number of + * Berkeley DB found in the header when Perl was configured. + * For DB version 1 this is always 0. + */ + /* DB_VERSION_PATCH_CFG: + * This symbol, if defined, defines the patch version number of + * Berkeley DB found in the header when Perl was configured. + * For DB version 1 this is always 0. + */ #define DB_Hash_t u_int32_t /**/ #define DB_Prefix_t size_t /**/ + #define DB_VERSION_MAJOR_CFG 1 /**/ + #define DB_VERSION_MINOR_CFG 0 /**/ + #define DB_VERSION_PATCH_CFG 0 /**/ /* I_GRP: * This symbol, if defined, indicates to the C program that it should *************** *** 2922,2929 **** * This symbol contains the ~name expanded version of PRIVLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ ! #define PRIVLIB "/opt/perl/lib/5.7.1" /**/ ! #define PRIVLIB_EXP "/opt/perl/lib/5.7.1" /**/ /* PTRSIZE: * This symbol contains the size of a pointer, so that the C preprocessor --- 2922,2929 ---- * This symbol contains the ~name expanded version of PRIVLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ ! #define PRIVLIB "/opt/perl/lib/5.7.2" /**/ ! #define PRIVLIB_EXP "/opt/perl/lib/5.7.2" /**/ /* PTRSIZE: * This symbol contains the size of a pointer, so that the C preprocessor *************** *** 2937,2943 **** * This macro is to be used to generate uniformly distributed * random numbers over the range [0., 1.[. You may have to supply * an 'extern double drand48();' in your program since SunOS 4.1.3 ! * doesn't provide you with anything relevant in it's headers. * See HAS_DRAND48_PROTO. */ /* Rand_seed_t: --- 2937,2943 ---- * This macro is to be used to generate uniformly distributed * random numbers over the range [0., 1.[. You may have to supply * an 'extern double drand48();' in your program since SunOS 4.1.3 ! * doesn't provide you with anything relevant in its headers. * See HAS_DRAND48_PROTO. */ /* Rand_seed_t: *************** *** 3026,3033 **** * This symbol contains the ~name expanded version of SITEARCH, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ ! #define SITEARCH "/opt/perl/lib/site_perl/5.7.1/alpha-dec_osf-thread" /**/ ! #define SITEARCH_EXP "/opt/perl/lib/site_perl/5.7.1/alpha-dec_osf-thread" /**/ /* SITELIB: * This symbol contains the name of the private library for this package. --- 3026,3033 ---- * This symbol contains the ~name expanded version of SITEARCH, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ ! #define SITEARCH "/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread" /**/ ! #define SITEARCH_EXP "/opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread" /**/ /* SITELIB: * This symbol contains the name of the private library for this package. *************** *** 3049,3056 **** * removed. The elements in inc_version_list (inc_version_list.U) can * be tacked onto this variable to generate a list of directories to search. */ ! #define SITELIB "/opt/perl/lib/site_perl/5.7.1" /**/ ! #define SITELIB_EXP "/opt/perl/lib/site_perl/5.7.1" /**/ #define SITELIB_STEM "/opt/perl/lib/site_perl" /**/ /* Size_t_size: --- 3049,3056 ---- * removed. The elements in inc_version_list (inc_version_list.U) can * be tacked onto this variable to generate a list of directories to search. */ ! #define SITELIB "/opt/perl/lib/site_perl/5.7.2" /**/ ! #define SITELIB_EXP "/opt/perl/lib/site_perl/5.7.2" /**/ #define SITELIB_STEM "/opt/perl/lib/site_perl" /**/ /* Size_t_size: *************** *** 3087,3093 **** * script to make sure (one hopes) that it runs with perl and not * some shell. */ ! #define STARTPERL "#!/opt/perl/bin/perl5.7.1" /**/ /* STDCHAR: * This symbol is defined to be the type of char used in stdio.h. --- 3087,3093 ---- * script to make sure (one hopes) that it runs with perl and not * some shell. */ ! #define STARTPERL "#!/opt/perl/bin/perl5.7.2" /**/ /* STDCHAR: * This symbol is defined to be the type of char used in stdio.h. *************** *** 3216,3221 **** --- 3216,3226 ---- * This symbol, if defined, indicates that Perl should * be built to use the old draft POSIX threads API. */ + /* USE_REENTRANT_API: + * This symbol, if defined, indicates that Perl should + * try to use the various _r versions of library functions. + * This is extremely experimental. + */ #define USE_5005THREADS /**/ /*#define USE_ITHREADS / **/ #if defined(USE_5005THREADS) && !defined(USE_ITHREADS) *************** *** 3222,3227 **** --- 3227,3233 ---- #define USE_THREADS /* until src is revised*/ #endif /*#define OLD_PTHREADS_API / **/ + /*#define USE_REENTRANT_API / **/ /* PERL_VENDORARCH: * If defined, this symbol contains the name of a private library. *************** *** 3281,3287 **** /* PERL_XS_APIVERSION: * This variable contains the version of the oldest perl binary * compatible with the present perl. perl.c:incpush() and ! * lib/lib.pm will automatically search in /opt/perl/lib/site_perl/5.7.1/alpha-dec_osf-thread for older * directories across major versions back to xs_apiversion. * This is only useful if you have a perl library directory tree * structured like the default one. --- 3287,3293 ---- /* PERL_XS_APIVERSION: * This variable contains the version of the oldest perl binary * compatible with the present perl. perl.c:incpush() and ! * lib/lib.pm will automatically search in /opt/perl/lib/site_perl/5.7.2/alpha-dec_osf-thread for older * directories across major versions back to xs_apiversion. * This is only useful if you have a perl library directory tree * structured like the default one. *************** *** 3300,3306 **** * compatible with the present perl. (That is, pure perl modules * written for pm_apiversion will still work for the current * version). perl.c:incpush() and lib/lib.pm will automatically ! * search in /opt/perl/lib/site_perl/5.7.1 for older directories across major versions * back to pm_apiversion. This is only useful if you have a perl * library directory tree structured like the default one. The * versioned site_perl library was introduced in 5.005, so that's --- 3306,3312 ---- * compatible with the present perl. (That is, pure perl modules * written for pm_apiversion will still work for the current * version). perl.c:incpush() and lib/lib.pm will automatically ! * search in /opt/perl/lib/site_perl/5.7.2 for older directories across major versions * back to pm_apiversion. This is only useful if you have a perl * library directory tree structured like the default one. The * versioned site_perl library was introduced in 5.005, so that's *************** *** 3310,3318 **** * (presumably) be similar. * See the INSTALL file for how this works. */ ! #define PERL_XS_APIVERSION "5.7.1" #define PERL_PM_APIVERSION "5.005" /* HAS_SIGPROCMASK: * This symbol, if defined, indicates that the sigprocmask * system call is available to examine or change the signal mask --- 3316,3390 ---- * (presumably) be similar. * See the INSTALL file for how this works. */ ! #define PERL_XS_APIVERSION "5.7.2" #define PERL_PM_APIVERSION "5.005" + /* SETUID_SCRIPTS_ARE_SECURE_NOW: + * This symbol, if defined, indicates that the bug that prevents + * setuid scripts from being secure is not present in this kernel. + */ + /* DOSUID: + * This symbol, if defined, indicates that the C program should + * check the script that it is executing for setuid/setgid bits, and + * attempt to emulate setuid/setgid on systems that have disabled + * setuid #! scripts because the kernel can't do it securely. + * It is up to the package designer to make sure that this emulation + * is done securely. Among other things, it should do an fstat on + * the script it just opened to make sure it really is a setuid/setgid + * script, it should make sure the arguments passed correspond exactly + * to the argument on the #! line, and it should not trust any + * subprocesses to which it must pass the filename rather than the + * file descriptor of the script to be executed. + */ + /*#define SETUID_SCRIPTS_ARE_SECURE_NOW / **/ + /*#define DOSUID / **/ + + /* I_STDARG: + * This symbol, if defined, indicates that exists and should + * be included. + */ + /* I_VARARGS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #define I_STDARG /**/ + /*#define I_VARARGS / **/ + + /* USE_CROSS_COMPILE: + * This symbol, if defined, indicates that Perl is being cross-compiled. + */ + /* PERL_TARGETARCH: + * This symbol, if defined, indicates the target architecture + * Perl has been cross-compiled to. Undefined if not a cross-compile. + */ + #ifndef USE_CROSS_COMPILE + /*#define USE_CROSS_COMPILE / **/ + #define PERL_TARGETARCH "" /**/ + #endif + + /* HAS_DBMINIT_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the dbminit() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int dbminit(char *); + */ + /*#define HAS_DBMINIT_PROTO / **/ + + /* HAS_FLOCK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the flock() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int flock(int, int); + */ + /*#define HAS_FLOCK_PROTO / **/ + + /* HAS_NL_LANGINFO: + * This symbol, if defined, indicates that the nl_langinfo routine is + * available to return local data. You will also need + * and therefore I_LANGINFO. + */ + #define HAS_NL_LANGINFO /**/ + /* HAS_SIGPROCMASK: * This symbol, if defined, indicates that the sigprocmask * system call is available to examine or change the signal mask *************** *** 3326,3335 **** --- 3398,3466 ---- */ /*#define HAS_SOCKATMARK / **/ + /* HAS_SOCKATMARK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the sockatmark() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int sockatmark _((int)); + */ + /*#define HAS_SOCKATMARK_PROTO / **/ + + /* HAS_SETRESGID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresgid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); + */ + /*#define HAS_SETRESGID_PROTO / **/ + + /* HAS_SETRESUID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresuid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); + */ + /*#define HAS_SETRESUID_PROTO / **/ + + /* HAS_STRFTIME: + * This symbol, if defined, indicates that the strftime routine is + * available to do time formatting. + */ + #define HAS_STRFTIME /**/ + + /* HAS_SYSCALL_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the syscall() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int syscall(int, ...); + * extern int syscall(long, ...); + */ + /*#define HAS_SYSCALL_PROTO / **/ + /* U32_ALIGNMENT_REQUIRED: * This symbol, if defined, indicates that you must access * character data through U32-aligned pointers. */ #define U32_ALIGNMENT_REQUIRED /**/ + + /* HAS_USLEEP_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the usleep() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int usleep(useconds_t); + */ + /*#define HAS_USLEEP_PROTO / **/ + + /* I_LANGINFO: + * This symbol, if defined, indicates that exists and + * should be included. + */ + #define I_LANGINFO /**/ + + /* HAS_PTHREAD_ATFORK: + * This symbol, if defined, indicates that the pthread_atfork routine + * is available setup fork handlers. + */ + #define HAS_PTHREAD_ATFORK /**/ #endif diff -c 'perl-5.7.1/Porting/makerel' 'perl-5.7.2/Porting/makerel' Index: ./Porting/makerel *** ./Porting/makerel Tue Mar 6 04:04:17 2001 --- ./Porting/makerel Mon Jul 9 17:09:44 2001 *************** *** 141,147 **** win32/Makefile win32/makefile.mk ); ! system("perl -pi -e 's/\$/\\r/' @crlf"); print "\n"; chdir ".." or die $!; --- 141,147 ---- win32/Makefile win32/makefile.mk ); ! system("perl -pi -e 's/\015*\012/\015\012/' @crlf"); print "\n"; chdir ".." or die $!; diff -c 'perl-5.7.1/Porting/patching.pod' 'perl-5.7.2/Porting/patching.pod' Index: ./Porting/patching.pod *** ./Porting/patching.pod Tue Mar 6 04:04:17 2001 --- ./Porting/patching.pod Mon Jul 9 17:09:44 2001 *************** *** 256,268 **** emacs MANIFEST (make changes) cd .. ! diff -c perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST > mypatch (testing the patch:) ! mv perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new ! cp perl5.008_42/MANIFEST.old perl5.008_42/MANIFEST patch -p < mypatch (should succeed) ! diff perl5.008_42/MANIFEST perl5.008_42/MANIFEST.new (should produce no output) =head2 Submitting your patch --- 256,268 ---- emacs MANIFEST (make changes) cd .. ! diff -c perl5.7.42/MANIFEST.old perl5.7.42/MANIFEST > mypatch (testing the patch:) ! mv perl5.7.42/MANIFEST perl5.7.42/MANIFEST.new ! cp perl5.7.42/MANIFEST.old perl5.7.42/MANIFEST patch -p < mypatch (should succeed) ! diff perl5.7.42/MANIFEST perl5.7.42/MANIFEST.new (should produce no output) =head2 Submitting your patch *************** *** 288,294 **** The subject line on your patch should read ! [PATCH 5.xxx_xx AREA] Description where the x's are replaced by the appropriate version number. The description should be a very brief but accurate summary of the --- 288,294 ---- The subject line on your patch should read ! [PATCH 5.x.x AREA] Description where the x's are replaced by the appropriate version number. The description should be a very brief but accurate summary of the *************** *** 296,306 **** Examples: ! [PATCH 5.004_04 DOC] fix minor typos ! [PATCH 5.004_99 CORE] New warning for foo() when frobbing ! [PATCH 5.005_42 CONFIG] Added support for fribnatz 1.5 The name of the file being patched makes for a poor subject line if no other descriptive text accompanies it. --- 296,306 ---- Examples: ! [PATCH 5.6.4 DOC] fix minor typos ! [PATCH 5.7.9 CORE] New warning for foo() when frobbing ! [PATCH 5.7.16 CONFIG] Added support for fribnatz 1.5 The name of the file being patched makes for a poor subject line if no other descriptive text accompanies it. *************** *** 384,390 **** =head1 Author and Copyright Information ! Copyright (c) 1998 Daniel Grisinger Adapted from a posting to perl5-porters by Tim Bunce (Tim.Bunce@ig.co.uk). --- 384,390 ---- =head1 Author and Copyright Information ! Copyright (c) 1998, 1999 Daniel Grisinger Adapted from a posting to perl5-porters by Tim Bunce (Tim.Bunce@ig.co.uk). diff -c 'perl-5.7.1/Porting/repository.pod' 'perl-5.7.2/Porting/repository.pod' Index: ./Porting/repository.pod *** ./Porting/repository.pod Tue Mar 6 04:04:18 2001 --- ./Porting/repository.pod Fri Jul 13 03:39:08 2001 *************** *** 191,210 **** =item P4CLIENT The value of this is the name by which Perforce knows your ! host's workspace. You need to pick a name (for example, your ! hostname unless that clashes with someone else's client name) when you first start using the perl repository and then ! stick with it. If you connect from multiple hosts (with ! different workspaces) then maybe you could have multiple ! clients. There is a licence limit on the number of perforce ! clients which can be created. Although we have been told that ! Perforce will raise our licence limits within reason, it's ! probably best not to use additional clients unless needed. ! Note that perforce only needs the client name so that it can ! find the directory under which your client files are stored. If you have multiple hosts sharing the same directory structure ! via NFS then only one client name is necessary. The C command lists all currently known clients. --- 191,218 ---- =item P4CLIENT The value of this is the name by which Perforce knows your ! host's workspace. You need to pick a name (normally, your ! Perforce username, a dash, and your hostname) when you first start using the perl repository and then ! stick with it. ! Perforce keeps track of the files you have on your machine. It ! does this through your client. When you first sync a version of a ! file, the file comes from the server to your machine. If you sync ! the same file again the server does nothing because it ! knows you already have the file. ! ! You should NOT use the same client on different machines. If you do ! you probably won't get the files you expect, and may end up with ! nasty corruption. Perforce allows you to have as many clients as ! you want. For example, sally-home, sally-openbsd, sally-laptop. ! ! Also, never change the client's root and view at the same time. ! See C ! If you have multiple hosts sharing the same directory structure ! via NFS then you may be able to get away with only one client name, ! but be careful. The C command lists all currently known clients. *************** *** 213,223 **** This is the username by which perforce knows you. Use your username if you have a well known or obvious one or else pick a new one which other perl5-porters will recognise. There is ! a licence limit on the number of these usernames. Perforce ! doesn't enforce security between usernames. If you set P4USER ! to be somebody else's username then perforce will believe you ! completely with regard to access control, logging and so on. The C command lists all currently known users. =back --- 221,249 ---- This is the username by which perforce knows you. Use your username if you have a well known or obvious one or else pick a new one which other perl5-porters will recognise. There is ! a licence limit on the number of these usernames, so be sure not ! to use more than one. + It is very important to set a password for your Perforce username, + or else anyone can impersonate you. Use the C command + to do this. Once a password is set for your account, you'll need + to tell Perforce what it is. You can do this by setting the + environment variable P4PASSWD, or you can use the C<-P> flag + with the C command. + + There are a few techniques you can use to avoid having to either + set an environment variable or type the password on every command. + One is to create a shell alias, for example, in bash, add something like + alias p4='p4 -P secret' + to your F<.bash_profile> file. Another way is to create a small shell + script, for example + #!/bin/bash + p4 -P secret $@ + And use this instead of running C directly. + + With either of these, be sure the file containing your password + (the F<.bash_profile> or shell script file) is only readable by you. + The C command lists all currently known users. =back *************** *** 254,264 **** Here is the current structure of the repository: /----+-----perl - Mainline development (bleadperl) ! +-----cfgperl - Configure Pumpkin's Perl +-----vmsperl - VMS Pumpkin's Perl +-----maint-5.004------perl - Maintainance branches +-----maint-5.005------perl +-----maint-5.6------perl Perforce uses a branching model that simply tracks relationships between files. It does not care about directories at all, so --- 280,291 ---- Here is the current structure of the repository: /----+-----perl - Mainline development (bleadperl) ! +-----perlio - PerlIO Pumpkin's Perl +-----vmsperl - VMS Pumpkin's Perl +-----maint-5.004------perl - Maintainance branches +-----maint-5.005------perl +-----maint-5.6------perl + +-----maint-5.6------pureperl Perforce uses a branching model that simply tracks relationships between files. It does not care about directories at all, so *************** *** 275,282 **** The mainline (aka "trunk") code in the Perl repository is under "//depot/perl/...". Most branches typically map its entire contents under a directory that goes by the same name as the branch ! name. Thus the contents of the cfgperl branch are to be found ! in //depot/cfgperl. Run `p4 client` to specify how the repository contents should map to your local disk. Most users will typically have a client map that --- 302,309 ---- The mainline (aka "trunk") code in the Perl repository is under "//depot/perl/...". Most branches typically map its entire contents under a directory that goes by the same name as the branch ! name. Thus the contents of the perlio branch are to be found ! in //depot/perlio. Run `p4 client` to specify how the repository contents should map to your local disk. Most users will typically have a client map that *************** *** 288,303 **** if there are any changes in the mainline that you need to merge into your own branch. A typical merging session looks like this: ! % cd ~/p4view/cfgperl ! % p4 integrate -b cfgperl # to bring parent changes into cfgperl ! % p4 resolve -a ./... # auto merge the changes % p4 resolve ./... # manual merge conflicting changes % p4 submit ./... # check in ! If the owner of the mainline wants to bring the changes in cfgperl back into the mainline, they do: ! % p4 integrate -r -b cfgperl ... Generating a patch for change#42 is done as follows: --- 315,330 ---- if there are any changes in the mainline that you need to merge into your own branch. A typical merging session looks like this: ! % cd ~/p4view/perlio ! % p4 integrate -b perlio # to bring parent changes into perlio ! % p4 resolve -am ./... # auto merge the changes % p4 resolve ./... # manual merge conflicting changes % p4 submit ./... # check in ! If the owner of the mainline wants to bring the changes in perlio back into the mainline, they do: ! % p4 integrate -r -b perlio ... Generating a patch for change#42 is done as follows: *************** *** 304,311 **** % p4 describe -du 42 | p4desc | p4d2p > change-42.patch ! p4desc and p4d2p are to be found in //depot/perl/Porting/. =head1 Contact Information The mail alias can be used to reach --- 331,390 ---- % p4 describe -du 42 | p4desc | p4d2p > change-42.patch ! F and F<>p4d2p> are to be found in //depot/perl/Porting/. + The usual routine to apply a patch is + + % p4 edit file.c file.h + % patch < patch.txt + + (any necessary, re-Configure, make regen_headers, make clean, etc, here) + + % make all test + + (preferably make all test in several platforms and under several + different Configurations) + + % while unhappy + do + $EDITOR + make all test + done + % p4 submit + + Other useful Perforce commands + + % p4 describe -du 12345 # show change 12345 + + Note: the output of "p4 describe" is not in proper diff format, use + the F to convert. + + % p4 diff -se ./... # have I modified something but forgotten + # to "p4 edit", easy faux pas with autogenerated + # files like proto.h, or if one forgets to + # look carefully which files a patch modifies + % p4 sync file.h # if someone else has modified file.h + % p4 opened # which files are opened (p4 edit) by me + % p4 opened -a # which files are opened by anybody + % p4 diff -du file.c # what changes have I done + % p4 revert file.h # never mind my changes + % p4 sync -f argh.c # forcibly synchronize your file + # from the repository + % p4 diff -sr | p4 -x - revert + # throw away (opened but) unchanged files + # (in Perforce it's a little bit too easy + # to checkin unchanged files) + + Integrate patch 12345 from the mainline to the maint-5.6 branch: + (you have to in the directory that has both the mainline and + the maint-5.6/perl as subdirectories) + + % p4 integrate -d perl/...@12345,12345 maint-5.6/perl/... + + Integrate patches 12347-12350 from the perlio branch to the mainline: + + % p4 integrate -d perlio/...@12347,12350 perl/... + =head1 Contact Information The mail alias can be used to reach *************** *** 320,326 **** Gurusamy Sarathy, gsar@activestate.com, 8 May 1999. ! Slightly updated by Simon Cozens, simon@brecon.co.uk, 3 July 2000 =cut --- 399,409 ---- Gurusamy Sarathy, gsar@activestate.com, 8 May 1999. ! Slightly updated by Simon Cozens, simon@brecon.co.uk, 3 July 2000. ! ! More updates by Jarkko Hietaniemi, jhi@iki.fi, 28 June 2001. ! ! Perforce clarifications by Randall Gellens, rcg@users.sourceforge.net, 12 July 2001. =cut diff -c /dev/null 'perl-5.7.2/Porting/testall.atom' Index: ./Porting/testall.atom *** ./Porting/testall.atom Thu Jan 1 02:00:00 1970 --- ./Porting/testall.atom Mon Jul 9 17:09:44 2001 *************** *** 0 **** --- 1,80 ---- + #!/bin/sh + + # + # testall.atom + # + # This script creates all.Counts file that can be fed to prof(1) + # to produce various basic block counting profiles. + # + # This script needs to be run at the top level of the Perl build + # directory after the "make all" and "make test" targets have been run. + # + # You will also need to have perl.pixie built, + # which means that you will also have Configured with -Doptimize=-g. + # + # After the script has been run (this will take several minutes) + # you will have a file called all.Counts, which contains the cumulative + # basic block counting results over the whole Perl test suite. + # You can produce various reports using prof(1); + # + # prof -pixie -all -L. perl all.Counts + # prof -pixie -heavy -all -L. perl all.Counts + # prof -pixie -invocations -all -L. perl all.Counts + # prof -pixie -lines -all -L. perl all.Counts + # prof -pixie -testcoverage -all -L. perl all.Counts + # prof -pixie -zero -all -L. perl all.Counts + # + # io/openpid and op/fork core on me, I don't know why and haven't + # taken a look yet. + # + # jhi@iki.fi + # + + if test ! -f /usr/bin/atom + then + echo "$0: no /usr/bin/atom" + exit 1 + fi + + if test ! -f perl; then echo "$0: no perl"; exit 1; fi + if test ! -f perl.pixie; then echo "$0: no perl.pixie; exit 1; fi + if test ! -f t/perl; then echo "$0: no t/perl; exit 1; fi + + LD_LIBRARY_PATH=`pwd` + export LD_LIBRARY_PATH + + cd t || exit 1 + + ln -sf ../perl.pixie . + + the_t=`echo base/*.t comp/*.t cmd/*.t run/*.t io/*.t; echo op/*.t pragma/*.t lib/*.t pod/*.t camel-III/*.t` + + PERL_DESTRUCT_LEVEL=2 + export PERL_DESTRUCT_LEVEL + + rm -f all.Counts + + for t in $the_t + do + echo `echo $t|sed s:\.t$::`" \c" + case "$t" in + *taint*|pragma/locale.t|lib/basename.t) + T=-T ;; + *) + T='' ;; + esac + ./perl.pixie $T $t > /dev/null + if cd .. + then + if test -f all.Counts + then + prof -pixie -merge new.Counts -L. -incobj libperl.so perl t/perl.Counts all.Counts + mv new.Counts all.Counts + else + mv t/perl.Counts all.Counts + fi + cd t + fi + done + + exit 0 diff -c 'perl-5.7.1/README.aix' 'perl-5.7.2/README.aix' Index: ./README.aix *** ./README.aix Tue Mar 6 04:04:18 2001 --- ./README.aix Thu Jul 12 20:59:37 2001 *************** *** 24,30 **** upgrade to the latest available patch level. Currently: xlC.C 3.1.4.0 ! vac.C 4.4.0.3 (5.0 is already available) Perl can be compiled with either IBM's ANSI C compiler or with gcc. The former is recommended, as not only can it compile Perl with no --- 24,30 ---- upgrade to the latest available patch level. Currently: xlC.C 3.1.4.0 ! vac.C 4.4.0.3 or 5.0.2.0 Perl can be compiled with either IBM's ANSI C compiler or with gcc. The former is recommended, as not only can it compile Perl with no *************** *** 31,39 **** difficulty, but also can take advantage of features listed later that require the use of IBM compiler-specific command-line flags. If you decide to use gcc, make sure your installation is recent and complete, and be sure to read the Perl README file for more gcc-specific ! details. =head2 OS level --- 31,46 ---- difficulty, but also can take advantage of features listed later that require the use of IBM compiler-specific command-line flags. + The IBM's compiler patch levels 5.0.0.0 and 5.0.1.0 have compiler + optimization bugs that affect compiling perl.c and regcomp.c, + respectively. If Perl's configuration detects those compiler patch + levels, optimization is turned off for the said source code files. + Upgrading to at least 5.0.2.0 is recommended. + If you decide to use gcc, make sure your installation is recent and complete, and be sure to read the Perl README file for more gcc-specific ! details. Please report any hoops you had to jump through to the development ! team. =head2 OS level *************** *** 54,65 **** Shared libraries end with the suffix .a, which is a bit misleading, because *all* libraries are shared ;-). =head2 The IBM ANSI C Compiler All defaults for Configure can be used. If you've chosen to use vac 4, be sure to run 4.4.0.3. Older versions ! will turn up nasty later on. Here's a brief lead of how to upgrade the compiler to the latest level. Of course this is subject to changes. You can only upgrade --- 61,80 ---- Shared libraries end with the suffix .a, which is a bit misleading, because *all* libraries are shared ;-). + Note that starting from Perl 5.7.2 (and consequently 5.8.0) and AIX + 4.3 or newer Perl uses the AIX native dynamic loading interface + instead of the emulated interface that was used in Perl releases 5.6.1 + and earlier or, for AIX releases 4.2 and earlier. This change will + probably break backward compatibility with compiled modules. + The change was made to make Perl more compliant with other applications + like modperl which are using the AIX native interface. + =head2 The IBM ANSI C Compiler All defaults for Configure can be used. If you've chosen to use vac 4, be sure to run 4.4.0.3. Older versions ! will turn up nasty later on. For vac 5 be sure to run at least 5.0.1.0. Here's a brief lead of how to upgrade the compiler to the latest level. Of course this is subject to changes. You can only upgrade *************** *** 139,166 **** =head2 Using GNU's gcc for building perl ! ... ? =head2 Using Large Files with Perl ! ... ? =head2 Threaded Perl ! ... ? =head2 64-bit Perl ! ... ? ! =head2 GDBM and Threads ! ... ? - =head2 NFS filesystems and utime(2) - - ... ? - =head1 AUTHOR H.Merijn Brand --- 154,186 ---- =head2 Using GNU's gcc for building perl ! We're woking on this using gcc-3.0 ... (any input highly appreciated) =head2 Using Large Files with Perl ! Should yield no problems. =head2 Threaded Perl ! Threads seem to work OK, though at the moment not all tests pass when ! threads are used in combination with 64bit configurations. =head2 64-bit Perl ! If your AIX is installed with 64-bit support, you can expect 64bit ! configurations to work. In combination with threads some tests might ! still fail. ! =head2 AIX 4.2 and extensions using C++ with statics ! In AIX 4.2 Perl extensions that use C++ functions that use statics ! may have problems in that the statics are not getting initialized. ! In newer AIX releases this has been solved by linking Perl with ! the libC_r library, but unfortunately in AIX 4.2 the said library ! has an obscure bug where the various functions related to time ! (such as time() and gettimeofday()) return broken values, and ! therefore in AIX 4.2 Perl is not linked against the libC_r. =head1 AUTHOR H.Merijn Brand *************** *** 169,174 **** =head1 DATE ! Version 0.0.1: 16-10-2000 =cut --- 189,194 ---- =head1 DATE ! Version 0.0.3: 12 Jul 2001 =cut diff -c 'perl-5.7.1/README.amiga' 'perl-5.7.2/README.amiga' Index: ./README.amiga *** ./README.amiga Tue Mar 6 04:04:18 2001 --- ./README.amiga Mon Jul 9 17:09:45 2001 *************** *** 18,24 **** A recent version of perl for the Amiga can be found at the Geek Gadgets section of the Aminet: ! http://www.aminet.net/~aminet/dirs/dev_gg.html =cut --- 18,24 ---- A recent version of perl for the Amiga can be found at the Geek Gadgets section of the Aminet: ! http://www.aminet.net/~aminet/dirs/dev_gg.html =cut *************** *** 40,46 **** - GNU info files - LaTeX docs BUILD ! - Prerequisites - Getting the perl source - Application of the patches - Making --- 40,46 ---- - GNU info files - LaTeX docs BUILD ! - Build Prerequisites - Getting the perl source - Application of the patches - Making *************** *** 51,57 **** =head1 DESCRIPTION ! =head2 Prerequisites =over 6 --- 51,57 ---- =head1 DESCRIPTION ! =head2 Prerequisites for Compiling Perl on AmigaOS =over 6 *************** *** 101,113 **** Perl under AmigaOS lacks some features of perl under UNIX because of deficiencies in the UNIX-emulation, most notably: ! =over 4 ! =item * fork() ! =item * some features of the UNIX filesystem regarding link count and file dates --- 101,113 ---- Perl under AmigaOS lacks some features of perl under UNIX because of deficiencies in the UNIX-emulation, most notably: ! =over 6 ! =item * fork() ! =item * some features of the UNIX filesystem regarding link count and file dates *************** *** 139,145 **** =head1 Accessing documentation ! =head2 Manpages If you have C installed on your system, and you installed perl manpages, use something like this: --- 139,145 ---- =head1 Accessing documentation ! =head2 Manpages for Perl on AmigaOS If you have C installed on your system, and you installed perl manpages, use something like this: *************** *** 161,167 **** above - to avoid shadowing by the I. ! =head2 B If you have some WWW browser available, you can build B docs. Cd to directory with F<.pod> files, and do like this --- 161,167 ---- above - to avoid shadowing by the I. ! =head2 Perl HTML Documentation on AmigaOS If you have some WWW browser available, you can build B docs. Cd to directory with F<.pod> files, and do like this *************** *** 174,199 **** Alternatively you may be able to get these docs prebuilt from C. ! =head2 B C files Users of C would appreciate it very much, especially with C mode loaded. You need to get latest C from C, or, alternately, prebuilt info pages. ! =head2 C docs ! can be constructed using C. ! =head1 BUILD Here we discuss how to build Perl under AmigaOS. ! =head2 Prerequisites You need to have the latest B (Unix emulation for Amiga) from Aminet. ! =head2 Getting the perl source You can either get the latest perl-for-amiga source from Ninemoons and extract it with: --- 174,199 ---- Alternatively you may be able to get these docs prebuilt from C. ! =head2 Perl GNU Info Files on AmigaOS Users of C would appreciate it very much, especially with C mode loaded. You need to get latest C from C, or, alternately, prebuilt info pages. ! =head2 Perl LaTeX Documentation on AmigaOS ! Can be constructed using C. ! =head1 BUILDING PERL ON AMIGAOS Here we discuss how to build Perl under AmigaOS. ! =head2 Build Prerequisites for Perl on AmigaOS You need to have the latest B (Unix emulation for Amiga) from Aminet. ! =head2 Getting the Perl Source for AmigaOS You can either get the latest perl-for-amiga source from Ninemoons and extract it with: *************** *** 212,275 **** is normal and expected. (There is a conflict with a similarly-named file F, but it causes no harm.) ! =head2 Making ! =over 4 ! =item * ! remember to use a healthy sized stack (I used 2000000) ! =item * - your PATH environment variable must include /bin (e.g. ".:/bin" is good) - (or, more precisely, it must include the directory where you have your - basic UNIX utilities like test, cat, sed, and so on) - - =item * - - sh Configure -Dprefix=/ade -Dloclibpth=/ade/lib - - =item * - - fix makedepend - - In the file 'makedepend' there are three spots like this `$cat ...`: - a for loop near line 75, an egrep near line 161, and a for loop near - line 175. In all those spots using an editor change the $cat to - /bin/cat. - - =item * - - now type make depend - - When the make depend has ended load the gnumakefile into - an editor and go to the end of the file. - - Move upwards in the file until you reach av.o: EXTERN.h - and delete all lines down to # WARNING: Put.... - - =item * - - now go to the x2p directory - - Load the gnumakefile into an editor. - - Go to the end moveup until you reach hash.o: EXTERN.h - and delete all lines dowonwards until you reach a line saying - - # WARNING: Put nothing.... - - =item * - Now! make ! =back - =head2 Testing - Now run make test --- 212,233 ---- is normal and expected. (There is a conflict with a similarly-named file F, but it causes no harm.) ! =head2 Making Perl on AmigaOS ! Remember to use a hefty wad of stack (I use 2000000) ! sh configure.gnu --prefix=/gg ! Now type ! make depend Now! make ! =head2 Testing Perl on AmigaOS Now run make test *************** *** 279,285 **** F, F, F, F, F, F, F ! =head2 Installing the built perl Run --- 237,243 ---- F, F, F, F, F, F, F ! =head2 Installing the built Perl on AmigaOS Run diff -c 'perl-5.7.1/README.apollo' 'perl-5.7.2/README.apollo' Index: ./README.apollo *** ./README.apollo Tue Mar 6 04:04:19 2001 --- ./README.apollo Mon Jul 9 17:09:45 2001 *************** *** 1,3 **** --- 1,13 ---- + If you read this file _as_is_, just ignore the funny characters you see. + It is written in the POD format (see pod/perlpod.pod) which is specially + designed to be readable as is. + + =head1 NAME + + README.apollo - Perl version 5 on Apollo DomainOS + + =head1 DESCRIPTION + The following tests are known to fail as of Perl 5.005_03: comp/decl..........FAILED at test 0 *************** *** 7,11 **** --- 17,23 ---- lib/findbin........stat(/ressel/ABT/USER/vta/jk/proj.local/perl/perl5.005_03-MAINT_TRIAL_5/t/lib/): No such file or directory at ../lib/FindBin.pm line 162 stat(/ressel/ABT/USER/vta/jk/proj.local/perl/perl5.005_03-MAINT_TRIAL_5/t/lib/): No such file or directory at ../lib/FindBin.pm line 163 FAILED at test 1 + + =head1 AUTHOR Johann Klasek diff -c 'perl-5.7.1/README.beos' 'perl-5.7.2/README.beos' Index: ./README.beos *** ./README.beos Tue Mar 6 04:04:19 2001 --- ./README.beos Mon Jul 9 17:09:45 2001 *************** *** 1,39 **** ! Notes on building perl under BeOS: ! GENERAL ISSUES ! -------------- ! how to compile perl: To compile perl under BeOS R4 x86: ! `./Configure -d` and hit ^C when it asks you if you want to make changes ! to config.sh; edit config.sh and do the following: change d_socket='define' to ='undef'; remove SDBM, Errno, and Socket from dynamic_ext= and nonxs_ext=; - add '#define bool short' to x2p/a2p.h; ! ../Configure -S; make; make install ! cd ~/config/lib; ln -s 5.00502/BeOS-BePC/CORE/libperl.so . (substitute 5.00502 with the appropriate filename) ! OS RELEASE-SPECIFIC NOTES ! ------------------------- ! R4 x86 - dynamic loading finally works! Yay! This means you can compile ! your own modules into perl. However, Sockets and Errno still don't work. (Hopefully, sockets will at least work by R5, if not sooner.) ! R4 PPC - I have not tested this. I rather severely doubt that dynamic ! loading will work. (My BeBox is in pieces right now, following a nasty ! disk crash.) You may have to disable dynamic loading to get the thing ! to compile at all. (use `./Configure` without -d, and say 'no' to ! 'Build a shared libperl.so'.) ! CONTACT INFORMATION ! ------------------- If you have comments, problem reports, or even patches or bugfixes (gasp!) please email me. --- 1,55 ---- ! If you read this file _as_is_, just ignore the funny characters you see. ! It is written in the POD format (see pod/perlpod.pod) which is specially ! designed to be readable as is. ! =head1 NAME + README.beos - Perl version 5 on BeOS + + =head1 DESCRIPTION + + Notes for building Perl under BeOS. + + =head2 General Issues with Perl on BeOS + To compile perl under BeOS R4 x86: ! ./Configure -d + and hit ^C when it asks you if you want to make changes to config.sh; edit config.sh and do the following: change d_socket='define' to ='undef'; remove SDBM, Errno, and Socket from dynamic_ext= and nonxs_ext=; add '#define bool short' to x2p/a2p.h; ! ../Configure -S; make; make install ! cd ~/config/lib; ln -s 5.00502/BeOS-BePC/CORE/libperl.so . ! (substitute 5.00502 with the appropriate filename) ! =head2 BeOS Release-specific Notes ! ! =over 4 ! ! =item R4 x86 ! ! Dynamic loading finally works! Yay! This means you can compile your ! own modules into perl. However, Sockets and Errno still don't work. (Hopefully, sockets will at least work by R5, if not sooner.) ! =item R4 PPC ! I have not tested this. I rather severely doubt that dynamic loading ! will work. (My BeBox is in pieces right now, following a nasty disk ! crash.) You may have to disable dynamic loading to get the thing to ! compile at all. (use `./Configure` without -d, and say 'no' to 'Build ! a shared libperl.so'.) ! ! =back ! ! =head2 Contact Information ! If you have comments, problem reports, or even patches or bugfixes (gasp!) please email me. diff -c 'perl-5.7.1/README.bs2000' 'perl-5.7.2/README.bs2000' Index: ./README.bs2000 *** ./README.bs2000 Tue Mar 6 04:04:19 2001 --- ./README.bs2000 Mon Jul 9 17:09:45 2001 *************** *** 20,31 **** You may need the following GNU programs in order to install perl: ! =head2 gzip We used version 1.2.4, which could be installed out of the box with one failure during 'make check'. ! =head2 bison The yacc coming with BS2000 POSIX didn't work for us. So we had to use bison. We had to make a few changes to perl in order to use the --- 20,31 ---- You may need the following GNU programs in order to install perl: ! =head2 gzip on BS2000 We used version 1.2.4, which could be installed out of the box with one failure during 'make check'. ! =head2 bison on BS2000 The yacc coming with BS2000 POSIX didn't work for us. So we had to use bison. We had to make a few changes to perl in order to use the *************** *** 33,39 **** add a few changes due to EBCDIC. See below for more details concerning yacc. ! =head2 Unpacking To extract an ASCII tar archive on BS2000 POSIX you need an ASCII filesystem (we used the mountpoint /usr/local/ascii for this). Now --- 33,39 ---- add a few changes due to EBCDIC. See below for more details concerning yacc. ! =head2 Unpacking Perl Distribution on BS2000 To extract an ASCII tar archive on BS2000 POSIX you need an ASCII filesystem (we used the mountpoint /usr/local/ascii for this). Now *************** *** 55,61 **** IO_CONVERSION=YES cp -r /usr/local/ascii/perl5.005_02 ./ ! =head2 Compiling There is a "hints" file for BS2000 called hints.posix-bc (because posix-bc is the OS name given by `uname`) that specifies the correct --- 55,61 ---- IO_CONVERSION=YES cp -r /usr/local/ascii/perl5.005_02 ./ ! =head2 Compiling Perl on BS2000 There is a "hints" file for BS2000 called hints.posix-bc (because posix-bc is the OS name given by `uname`) that specifies the correct *************** *** 102,108 **** We build perl using GNU make. We tried the native make once and it worked too. ! =head2 Testing We still got a few errors during C. Some of them are the result of using bison. Bison prints I instead of I. Some of them are the result of using bison. Bison prints I instead of I), so you have to use the following lines --- 120,132 ---- lib/dumper..........FAILED tests 43, 45 Failed 11/231 test scripts, 95.24% okay. 57/10595 subtests failed, 99.46% okay. ! =head2 Installing Perl on BS2000 We have no nroff on BS2000 POSIX (yet), so we ignored any errors while installing the documentation. ! =head2 Using Perl in the Posix-Shell of BS2000 BS2000 POSIX doesn't support the shebang notation (C<#!/usr/local/bin/perl>), so you have to use the following lines *************** *** 158,164 **** possibilities of the commandline prompt (look for PARAMETER-PROMPTING). ! =head2 Floating point anomalies There appears to be a bug in the floating point implementation on BS2000 POSIX systems such that calling int() on the product of a number and a small --- 158,164 ---- possibilities of the commandline prompt (look for PARAMETER-PROMPTING). ! =head2 Floating point anomalies on BS2000 There appears to be a bug in the floating point implementation on BS2000 POSIX systems such that calling int() on the product of a number and a small diff -c 'perl-5.7.1/README.cygwin' 'perl-5.7.2/README.cygwin' Index: ./README.cygwin *** ./README.cygwin Tue Mar 6 04:04:19 2001 --- ./README.cygwin Mon Jul 9 17:09:45 2001 *************** *** 18,24 **** http://cygutils.netpedia.net/ ! =head1 PREREQUISITES =head2 Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it) --- 18,24 ---- http://cygutils.netpedia.net/ ! =head1 PREREQUISITES FOR COMPILING PERL ON CYGWIN =head2 Cygwin = GNU+Cygnus+Windows (Don't leave UNIX without it) *************** *** 84,90 **** =back ! =head1 CONFIGURE The default options gathered by Configure with the assistance of F will build a Perl that supports dynamic loading --- 84,90 ---- =back ! =head1 CONFIGURE PERL ON CYGWIN The default options gathered by Configure with the assistance of F will build a Perl that supports dynamic loading *************** *** 97,103 **** If you are willing to accept all the defaults run Configure with B<-de>. However, several useful customizations are available. ! =head2 Strip Binaries It is possible to strip the EXEs and DLLs created by the build process. The resulting binaries will be significantly smaller. If you want the --- 97,103 ---- If you are willing to accept all the defaults run Configure with B<-de>. However, several useful customizations are available. ! =head2 Stripping Perl Binaries on Cygwin It is possible to strip the EXEs and DLLs created by the build process. The resulting binaries will be significantly smaller. If you want the *************** *** 112,118 **** or you can edit F and uncomment the relevant variables near the end of the file. ! =head2 Optional Libraries Several Perl functions and modules depend on the existence of some optional libraries. Configure will find them if they are --- 112,118 ---- or you can edit F and uncomment the relevant variables near the end of the file. ! =head2 Optional Libraries for Perl on Cygwin Several Perl functions and modules depend on the existence of some optional libraries. Configure will find them if they are *************** *** 168,174 **** =back ! =head2 Configure-time Options The F document describes several Configure-time options. Some of these will work with Cygwin, others are not yet possible. Also, some of --- 168,174 ---- =back ! =head2 Configure-time Options for Perl on Cygwin The F document describes several Configure-time options. Some of these will work with Cygwin, others are not yet possible. Also, some of *************** *** 219,225 **** =back ! =head2 Suspicious Warnings You may see some messages during Configure that seem suspicious. --- 219,225 ---- =back ! =head2 Suspicious Warnings on Cygwin You may see some messages during Configure that seem suspicious. *************** *** 265,277 **** =back ! =head1 MAKE Simply run I and wait: make 2>&1 | tee log.make ! =head2 Warnings Warnings like these are normal: --- 265,277 ---- =back ! =head1 MAKE ON CYGWIN Simply run I and wait: make 2>&1 | tee log.make ! =head2 Warnings on Cygwin Warnings like these are normal: *************** *** 281,287 **** dllwrap: no export definition file provided dllwrap: creating one, but that may not be what you want ! =head2 ld2 During `C', I will be created and installed in your $installbin directory (where you said to put public executables). It does not --- 281,287 ---- dllwrap: no export definition file provided dllwrap: creating one, but that may not be what you want ! =head2 ld2 on Cygwin During `C', I will be created and installed in your $installbin directory (where you said to put public executables). It does not *************** *** 293,299 **** just manually copy I from the source directory to somewhere in your C. ! =head1 TEST There are two steps to running the test suite: --- 293,299 ---- just manually copy I from the source directory to somewhere in your C. ! =head1 TEST ON CYGWIN There are two steps to running the test suite: *************** *** 310,316 **** for Perl to pass all the tests, but it is more likely that some tests will fail for one of the reasons listed below. ! =head2 File Permissions UNIX file permissions are based on sets of mode bits for {read,write,execute} for each {user,group,other}. By default Cygwin --- 310,316 ---- for Perl to pass all the tests, but it is more likely that some tests will fail for one of the reasons listed below. ! =head2 File Permissions on Cygwin UNIX file permissions are based on sets of mode bits for {read,write,execute} for each {user,group,other}. By default Cygwin *************** *** 336,342 **** lib/sdbm.t 2 op/stat.t 9, 20 (.tmp not an executable extension) ! =head2 Hard Links FAT partitions do not support hard links (whereas NTFS does), in which case Cygwin implements link() by copying the file. On remote (network) --- 336,342 ---- lib/sdbm.t 2 op/stat.t 9, 20 (.tmp not an executable extension) ! =head2 Hard Links on Cygwin FAT partitions do not support hard links (whereas NTFS does), in which case Cygwin implements link() by copying the file. On remote (network) *************** *** 349,355 **** io/fs.t 4 op/stat.t 3 ! =head2 Filetime Granularity On FAT partitions the filetime granularity is 2 seconds. The following test will fail: --- 349,355 ---- io/fs.t 4 op/stat.t 3 ! =head2 Filetime Granularity on Cygwin On FAT partitions the filetime granularity is 2 seconds. The following test will fail: *************** *** 358,364 **** ------------------------------------ io/fs.t 18 ! =head2 Tainting Checks When Perl is running in taint mode, C<$ENV{PATH}> is considered tainted and not used, so DLLs not in the default system directories will not --- 358,364 ---- ------------------------------------ io/fs.t 18 ! =head2 Tainting Checks on Cygwin When Perl is running in taint mode, C<$ENV{PATH}> is considered tainted and not used, so DLLs not in the default system directories will not *************** *** 390,396 **** or one of the Windows system directories (although, this is B recommended). ! =head2 /etc/group Cygwin does not require F, in which case the F test will be skipped. The check performed by F expects to --- 390,396 ---- or one of the Windows system directories (although, this is B recommended). ! =head2 /etc/group on Cygwin Cygwin does not require F, in which case the F test will be skipped. The check performed by F expects to *************** *** 400,406 **** ------------------------------------ op/grent.t 1 ! =head2 Script Portability Cygwin does an outstanding job of providing UNIX-like semantics on top of Win32 systems. However, in addition to the items noted above, there are --- 400,406 ---- ------------------------------------ op/grent.t 1 ! =head2 Script Portability on Cygwin Cygwin does an outstanding job of providing UNIX-like semantics on top of Win32 systems. However, in addition to the items noted above, there are *************** *** 466,472 **** =back ! =head1 INSTALL This will install Perl, including I pages. --- 466,472 ---- =back ! =head1 INSTALL PERL ON CYGWIN This will install Perl, including I pages. *************** *** 481,487 **** Information on installing the Perl documentation in HTML format can be found in the F document. ! =head1 MANIFEST These are the files in the Perl release that contain references to Cygwin. These very brief notes attempt to explain the reason for all conditional --- 481,487 ---- Information on installing the Perl documentation in HTML format can be found in the F document. ! =head1 MANIFEST ON CYGWIN These are the files in the Perl release that contain references to Cygwin. These very brief notes attempt to explain the reason for all conditional *************** *** 559,565 **** =back ! =head1 BUGS When I starts, it warns about overriding commands for F. --- 559,565 ---- =back ! =head1 BUGS ON CYGWIN When I starts, it warns about overriding commands for F. diff -c /dev/null 'perl-5.7.2/README.dgux' Index: ./README.dgux *** ./README.dgux Thu Jan 1 02:00:00 1970 --- ./README.dgux Mon Jul 9 17:09:45 2001 *************** *** 0 **** --- 1,117 ---- + If you read this file _as_is_, just ignore the funny characters you + see. It is written in the POD format (see perlpod manpage) which is + specially designed to be readable as is. + + =head1 NAME + + perldgux - Perl under DG/UX. + + =head1 SYNOPSIS + + One can read this document in the following formats: + + man perldgux + view perl perldgux + explorer perldgux.html + info perldgux + + to list some (not all may be available simultaneously), or it may + be read I: as F. + + =cut + + Contents + + perldgux - Perl under DG/UX. + + NAME + SYNOPSIS + DESCRIPTION + BUILD + - Non-threaded Case + - Threaded Case + - Testing + - Installing the built perl + AUTHOR + SEE ALSO + + =head1 DESCRIPTION + + Perl 5.7/8.x for DG/UX ix86 R4.20MU0x + + =head1 BUILDING PERL ON DG/UX + + =head2 Non-threaded Perl on DG/UX + + Just run ./Configure script from the top directory. + Then give "make" to compile. + + =head2 Threaded Perl on DG/UX + + If you are using as compiler GCC-2.95.x rev(DG/UX) + an easy solution for configuring perl in your DG/UX + machine is to run the command: + + ./Configure -Dusethreads -Duse5005threads -des + + This will automatically accept all the defaults and + in particular /usr/local/ as installation directory. + Note that GCC-2.95.x rev(DG/UX) knows the switch + -pthread whcih allows it to link correctly DG/UX's + -lthread library. + + If you want to change the installtion directory or + have a standard DG/UX with C compiler GCC-2.7.2.x + then you have no choice than to do an interactive + build by issuing the command: + + ./Configure -Dusethreads -Duse5005threads + + In particular with GCC-2.7.2.x accept all the defaults + and *watch* out for the message: + + Any additional ld flags (NOT including libraries)? [ -pthread] + + Instead of -pthread put here -lthread. CGCC-2.7.2.x + that comes with the DG/UX OS does NOT know the -pthread + switch. So your build will fail if you choose the defaults. + After configuration is done correctly give "make" to compile. + + =head2 Testing Perl on DG/UX + + Issuing a "make test" will run all the tests. + If the test lib/ftmp-security gives you as a result + something like + + lib/ftmp-security....File::Temp::_gettemp: + Parent directory (/tmp/) is not safe (sticky bit not set + when world writable?) at lib/ftmp-security.t line 100 + + don't panic and just set the sticky bit in your /tmp + directory by doing the following as root: + + cd / + chmod +t /tmp (=set the sticky bit to /tmp). + + Then rerun the tests. This time all must be OK. + + =head2 Installing the built perl on DG/UX + + Run the command "make install" + + =head1 AUTHOR + + Takis Psarogiannakopoulos + Universirty of Cambridge + Centre for Mathematical Sciences + Department of Pure Mathematics + Wilberforce road + Cambridge CB3 0WB , UK + email + + =head1 SEE ALSO + + perl(1). + + =cut + diff -c 'perl-5.7.1/README.dos' 'perl-5.7.2/README.dos' Index: ./README.dos *** ./README.dos Tue Apr 10 05:29:17 2001 --- ./README.dos Fri Jul 13 17:18:32 2001 *************** *** 1,333 **** ! If you read this file _as_is_, just ignore the funny characters you ! see. It is written in the POD format (see perlpod manpage) which is ! specially designed to be readable as is. ! ! =head1 NAME ! ! perldos - Perl under DOS, W31, W95. ! ! =head1 SYNOPSIS ! ! These are instructions for building Perl under DOS (or w??), using ! DJGPP v2.03 or later. Under w95 long filenames are supported. ! ! =head1 DESCRIPTION ! ! Before you start, you should glance through the README file ! found in the top-level directory where the Perl distribution ! was extracted. Make sure you read and understand the terms under ! which this software is being distributed. ! ! This port currently supports MakeMaker (the set of modules that ! is used to build extensions to perl). Therefore, you should be ! able to build and install most extensions found in the CPAN sites. ! ! Detailed instructions on how to build and install perl extension ! modules, including XS-type modules, is included. See 'BUILDING AND ! INSTALLING MODULES'. ! ! =head2 Prerequisites ! ! =over 4 ! ! =item DJGPP ! ! DJGPP is a port of GNU C/C++ compiler and development tools to 32-bit, ! protected-mode environment on Intel 32-bit CPUs running MS-DOS and compatible ! operating systems, by DJ Delorie and friends. ! ! For more details (FAQ), check out the home of DJGPP at: ! ! http://www.delorie.com/djgpp/ ! ! If you have questions about DJGPP, try posting to the DJGPP newsgroup: ! comp.os.msdos.djgpp, or use the email gateway djgpp@delorie.com. ! ! You can find the full DJGPP distribution on any SimTel.Net mirror all over ! the world. Like: ! ! ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2* ! ! You need the following files to build perl (or add new modules): ! ! v2/djdev203.zip ! v2/bnu2951b.zip ! v2gnu/gcc2952b.zip ! v2gnu/bsh204b.zip ! v2gnu/mak3791b.zip ! v2gnu/fil316b.zip ! v2gnu/sed302b.zip ! v2gnu/txt20b.zip ! v2gnu/dif272b.zip ! v2gnu/grep24b.zip ! v2gnu/shl112b.zip ! v2gnu/gawk303b.zip ! v2misc/csdpmi4b.zip ! ! or possibly any newer version. ! ! =item Pthreads ! ! Thread support is not tested in this version of the djgpp perl. ! ! =back ! ! =head2 Shortcomings of Perl under DOS ! ! Perl under DOS lacks some features of perl under UNIX because of ! deficiencies in the UNIX-emulation, most notably: ! ! =over 4 ! ! =item * ! ! fork() and pipe() ! ! =item * ! ! some features of the UNIX filesystem regarding link count and file dates ! ! =item * ! ! in-place operation is a little bit broken with short filenames ! ! =item * ! ! sockets ! ! =back ! ! =head2 Building ! ! =over 4 ! ! =item * ! ! Unpack the source package F with djtarx. If you want ! to use long file names under w95 and also to get Perl to pass all its ! tests, don't forget to use ! ! set LFN=y ! set FNCASE=y ! ! before unpacking the archive. ! ! =item * ! ! Create a "symlink" or copy your bash.exe to sh.exe in your C<($DJDIR)/bin> ! directory. ! ! ln -s bash.exe sh.exe ! ! [If you have the recommended version of bash for DJGPP, this is already ! done for you.] ! ! And make the C environment variable point to this F: ! ! set SHELL=c:/djgpp/bin/sh.exe (use full path name!) ! ! You can do this in F too. Add this line BEFORE any section ! definition: ! ! +SHELL=%DJDIR%/bin/sh.exe ! ! =item * ! ! If you have F and F in your path, then rename ! F to F, and F to F. ! Copy or link F to F if you don't have F. ! Copy or link F to F if you don't have F. ! ! [If you have the recommended versions of djdev, shell utilities and ! gawk, all these are already done for you, and you will not need to do ! anything.] ! ! =item * ! ! Chdir to the djgpp subdirectory of perl toplevel and type the following ! commands: ! ! set FNCASE=y ! configure.bat ! ! This will do some preprocessing then run the Configure script for you. ! The Configure script is interactive, but in most cases you just need to ! press ENTER. The "set" command ensures that DJGPP preserves the letter ! case of file names when reading directories. If you already issued this ! set command when unpacking the archive, and you are in the same DOS ! session as when you unpacked the archive, you don't have to issue the ! set command again. This command is necessary *before* you start to ! (re)configure or (re)build perl in order to ensure both that perl builds ! correctly and that building XS-type modules can succeed. See the DJGPP ! info entry for "_preserve_fncase" for more information: ! ! info libc alphabetical _preserve_fncase ! ! If the script says that your package is incomplete, and asks whether ! to continue, just answer with Y (this can only happen if you don't use ! long filenames or forget to issue "set FNCASE=y" first). ! ! When Configure asks about the extensions, I suggest IO and Fcntl, ! and if you want database handling then SDBM_File or GDBM_File ! (you need to install gdbm for this one). If you want to use the ! POSIX extension (this is the default), make sure that the stack ! size of your F is at least 512kbyte (you can check this ! with: C). ! ! You can use the Configure script in non-interactive mode too. ! When I built my F, I used something like this: ! ! configure.bat -des ! ! You can find more info about Configure's command line switches in ! the F file. ! ! When the script ends, and you want to change some values in the ! generated F file, then run ! ! sh Configure -S ! ! after you made your modifications. ! ! IMPORTANT: if you use this C<-S> switch, be sure to delete the CONFIG ! environment variable before running the script: ! ! set CONFIG= ! ! =item * ! ! Now you can compile Perl. Type: ! ! make ! ! =back ! ! =head2 Testing ! ! Type: ! ! make test ! ! If you're lucky you should see "All tests successful". But there can be ! a few failed subtests (less than 5 hopefully) depending on some external ! conditions (e.g. some subtests fail under linux/dosemu or plain dos ! with short filenames only). ! ! =head2 Installation ! ! Type: ! ! make install ! ! This will copy the newly compiled perl and libraries into your DJGPP ! directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>, ! and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation ! goes under C<($DJDIR)/lib/perl5/pod>. ! ! =head1 BUILDING AND INSTALLING MODULES ! ! ! =head2 Prerequisites ! ! For building and installing non-XS modules, all you need is a working ! perl under DJGPP. Non-XS modules do not require re-linking the perl ! binary, and so are simpler to build and install. ! ! XS-type modules do require re-linking the perl binary, because part of ! an XS module is written in "C", and has to be linked together with the ! perl binary to be executed. This is required because perl under DJGPP ! is built with the "static link" option, due to the lack of "dynamic ! linking" in the DJGPP environment. ! ! Because XS modules require re-linking of the perl binary, you need both ! the perl binary distribution and the perl source distribution to build ! an XS extension module. In addition, you will have to have built your ! perl binary from the source distribution so that all of the components ! of the perl binary are available for the required link step. ! ! =head2 Unpacking CPAN Modules ! ! First, download the module package from CPAN (e.g., the "Comma Separated ! Value" text package, Text-CSV-0.01.tar.gz). Then expand the contents of ! the package into some location on your disk. Most CPAN modules are ! built with an internal directory structure, so it is usually safe to ! expand it in the root of your DJGPP installation. Some people prefer to ! locate source trees under /usr/src (i.e., C<($DJDIR)/usr/src>), but you may ! put it wherever seems most logical to you, *EXCEPT* under the same ! directory as your perl source code. There are special rules that apply ! to modules which live in the perl source tree that do not apply to most ! of the modules in CPAN. ! ! Unlike other DJGPP packages, which are normal "zip" files, most CPAN ! module packages are "gzipped tarballs". Recent versions of WinZip will ! safely unpack and expand them, *UNLESS* they have zero-length files. It ! is a known WinZip bug (as of v7.0) that it will not extract zero-length ! files. ! ! From the command line, you can use the djtar utility provided with DJGPP ! to unpack and expand these files. For example: ! ! C:\djgpp>djtarx -v Text-CSV-0.01.tar.gz ! ! This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling ! it with the source for this module. ! ! =head2 Building Non-XS Modules ! ! To build a non-XS module, you can use the standard module-building ! instructions distributed with perl modules. ! ! perl Makefile.PL ! make ! make test ! make install ! ! This is sufficient because non-XS modules install only ".pm" files and ! (sometimes) pod and/or man documentation. No re-linking of the perl ! binary is needed to build, install or use non-XS modules. ! ! =head2 Building XS Modules ! ! To build an XS module, you must use the standard module-building ! instructions distributed with perl modules *PLUS* three extra ! instructions specific to the DJGPP "static link" build environment. ! ! set FNCASE=y ! perl Makefile.PL ! make ! make perl ! make test ! make -f Makefile.aperl inst_perl MAP_TARGET=perl.exe ! make install ! ! The first extra instruction sets DJGPP's FNCASE environment variable so ! that the new perl binary which you must build for an XS-type module will ! build correctly. The second extra instruction re-builds the perl binary ! in your module directory before you run "make test", so that you are ! testing with the new module code you built with "make". The third extra ! instruction installs the perl binary from your module directory into the ! standard DJGPP binary directory, C<($DJDIR)/bin>, replacing your ! previous perl binary. ! ! Note that the MAP_TARGET value *must* have the ".exe" extension or you ! will not create a "perl.exe" to replace the one in C<($DJDIR)/bin>. ! ! When you are done, the XS-module install process will have added information ! to yout "perllocal" information telling that the perl binary has been replaced, ! and what module was installed. you can view this information at any time ! by using the command: ! ! perl -S perldoc perllocal ! ! =head1 AUTHOR ! ! Laszlo Molnar, F [Installing/building perl] ! ! Peter J. Farley III F [Building/installing modules] ! ! =head1 SEE ALSO ! ! perl(1). ! ! =cut ! --- 1,332 ---- ! If you read this file _as_is_, just ignore the funny characters you ! see. It is written in the POD format (see perlpod manpage) which is ! specially designed to be readable as is. ! ! =head1 NAME ! ! perldos - Perl under DOS, W31, W95. ! ! =head1 SYNOPSIS ! ! These are instructions for building Perl under DOS (or w??), using ! DJGPP v2.03 or later. Under w95 long filenames are supported. ! ! =head1 DESCRIPTION ! ! Before you start, you should glance through the README file ! found in the top-level directory where the Perl distribution ! was extracted. Make sure you read and understand the terms under ! which this software is being distributed. ! ! This port currently supports MakeMaker (the set of modules that ! is used to build extensions to perl). Therefore, you should be ! able to build and install most extensions found in the CPAN sites. ! ! Detailed instructions on how to build and install perl extension ! modules, including XS-type modules, is included. See 'BUILDING AND ! INSTALLING MODULES'. ! ! =head2 Prerequisites for Compiling Perl on DOS ! ! =over 4 ! ! =item DJGPP ! ! DJGPP is a port of GNU C/C++ compiler and development tools to 32-bit, ! protected-mode environment on Intel 32-bit CPUs running MS-DOS and compatible ! operating systems, by DJ Delorie and friends. ! ! For more details (FAQ), check out the home of DJGPP at: ! ! http://www.delorie.com/djgpp/ ! ! If you have questions about DJGPP, try posting to the DJGPP newsgroup: ! comp.os.msdos.djgpp, or use the email gateway djgpp@delorie.com. ! ! You can find the full DJGPP distribution on any SimTel.Net mirror all over ! the world. Like: ! ! ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2* ! ! You need the following files to build perl (or add new modules): ! ! v2/djdev203.zip ! v2/bnu2951b.zip ! v2gnu/gcc2952b.zip ! v2gnu/bsh204b.zip ! v2gnu/mak3791b.zip ! v2gnu/fil316b.zip ! v2gnu/sed302b.zip ! v2gnu/txt20b.zip ! v2gnu/dif272b.zip ! v2gnu/grep24b.zip ! v2gnu/shl112b.zip ! v2gnu/gawk303b.zip ! v2misc/csdpmi4b.zip ! ! or possibly any newer version. ! ! =item Pthreads ! ! Thread support is not tested in this version of the djgpp perl. ! ! =back ! ! =head2 Shortcomings of Perl under DOS ! ! Perl under DOS lacks some features of perl under UNIX because of ! deficiencies in the UNIX-emulation, most notably: ! ! =over 4 ! ! =item * ! ! fork() and pipe() ! ! =item * ! ! some features of the UNIX filesystem regarding link count and file dates ! ! =item * ! ! in-place operation is a little bit broken with short filenames ! ! =item * ! ! sockets ! ! =back ! ! =head2 Building Perl on DOS ! ! =over 4 ! ! =item * ! ! Unpack the source package F with djtarx. If you want ! to use long file names under w95 and also to get Perl to pass all its ! tests, don't forget to use ! ! set LFN=y ! set FNCASE=y ! ! before unpacking the archive. ! ! =item * ! ! Create a "symlink" or copy your bash.exe to sh.exe in your C<($DJDIR)/bin> ! directory. ! ! ln -s bash.exe sh.exe ! ! [If you have the recommended version of bash for DJGPP, this is already ! done for you.] ! ! And make the C environment variable point to this F: ! ! set SHELL=c:/djgpp/bin/sh.exe (use full path name!) ! ! You can do this in F too. Add this line BEFORE any section ! definition: ! ! +SHELL=%DJDIR%/bin/sh.exe ! ! =item * ! ! If you have F and F in your path, then rename ! F to F, and F to F. ! Copy or link F to F if you don't have F. ! Copy or link F to F if you don't have F. ! ! [If you have the recommended versions of djdev, shell utilities and ! gawk, all these are already done for you, and you will not need to do ! anything.] ! ! =item * ! ! Chdir to the djgpp subdirectory of perl toplevel and type the following ! commands: ! ! set FNCASE=y ! configure.bat ! ! This will do some preprocessing then run the Configure script for you. ! The Configure script is interactive, but in most cases you just need to ! press ENTER. The "set" command ensures that DJGPP preserves the letter ! case of file names when reading directories. If you already issued this ! set command when unpacking the archive, and you are in the same DOS ! session as when you unpacked the archive, you don't have to issue the ! set command again. This command is necessary *before* you start to ! (re)configure or (re)build perl in order to ensure both that perl builds ! correctly and that building XS-type modules can succeed. See the DJGPP ! info entry for "_preserve_fncase" for more information: ! ! info libc alphabetical _preserve_fncase ! ! If the script says that your package is incomplete, and asks whether ! to continue, just answer with Y (this can only happen if you don't use ! long filenames or forget to issue "set FNCASE=y" first). ! ! When Configure asks about the extensions, I suggest IO and Fcntl, ! and if you want database handling then SDBM_File or GDBM_File ! (you need to install gdbm for this one). If you want to use the ! POSIX extension (this is the default), make sure that the stack ! size of your F is at least 512kbyte (you can check this ! with: C). ! ! You can use the Configure script in non-interactive mode too. ! When I built my F, I used something like this: ! ! configure.bat -des ! ! You can find more info about Configure's command line switches in ! the F file. ! ! When the script ends, and you want to change some values in the ! generated F file, then run ! ! sh Configure -S ! ! after you made your modifications. ! ! IMPORTANT: if you use this C<-S> switch, be sure to delete the CONFIG ! environment variable before running the script: ! ! set CONFIG= ! ! =item * ! ! Now you can compile Perl. Type: ! ! make ! ! =back ! ! =head2 Testing Perl on DOS ! ! Type: ! ! make test ! ! If you're lucky you should see "All tests successful". But there can be ! a few failed subtests (less than 5 hopefully) depending on some external ! conditions (e.g. some subtests fail under linux/dosemu or plain dos ! with short filenames only). ! ! =head2 Installation of Perl on DOS ! ! Type: ! ! make install ! ! This will copy the newly compiled perl and libraries into your DJGPP ! directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>, ! and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation ! goes under C<($DJDIR)/lib/perl5/pod>. ! ! =head1 BUILDING AND INSTALLING MODULES ON DOS ! ! =head2 Building Prerequisites for Perl on DOS ! ! For building and installing non-XS modules, all you need is a working ! perl under DJGPP. Non-XS modules do not require re-linking the perl ! binary, and so are simpler to build and install. ! ! XS-type modules do require re-linking the perl binary, because part of ! an XS module is written in "C", and has to be linked together with the ! perl binary to be executed. This is required because perl under DJGPP ! is built with the "static link" option, due to the lack of "dynamic ! linking" in the DJGPP environment. ! ! Because XS modules require re-linking of the perl binary, you need both ! the perl binary distribution and the perl source distribution to build ! an XS extension module. In addition, you will have to have built your ! perl binary from the source distribution so that all of the components ! of the perl binary are available for the required link step. ! ! =head2 Unpacking CPAN Modules on DOS ! ! First, download the module package from CPAN (e.g., the "Comma Separated ! Value" text package, Text-CSV-0.01.tar.gz). Then expand the contents of ! the package into some location on your disk. Most CPAN modules are ! built with an internal directory structure, so it is usually safe to ! expand it in the root of your DJGPP installation. Some people prefer to ! locate source trees under /usr/src (i.e., C<($DJDIR)/usr/src>), but you may ! put it wherever seems most logical to you, *EXCEPT* under the same ! directory as your perl source code. There are special rules that apply ! to modules which live in the perl source tree that do not apply to most ! of the modules in CPAN. ! ! Unlike other DJGPP packages, which are normal "zip" files, most CPAN ! module packages are "gzipped tarballs". Recent versions of WinZip will ! safely unpack and expand them, *UNLESS* they have zero-length files. It ! is a known WinZip bug (as of v7.0) that it will not extract zero-length ! files. ! ! From the command line, you can use the djtar utility provided with DJGPP ! to unpack and expand these files. For example: ! ! C:\djgpp>djtarx -v Text-CSV-0.01.tar.gz ! ! This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling ! it with the source for this module. ! ! =head2 Building Non-XS Modules on DOS ! ! To build a non-XS module, you can use the standard module-building ! instructions distributed with perl modules. ! ! perl Makefile.PL ! make ! make test ! make install ! ! This is sufficient because non-XS modules install only ".pm" files and ! (sometimes) pod and/or man documentation. No re-linking of the perl ! binary is needed to build, install or use non-XS modules. ! ! =head2 Building XS Modules on DOS ! ! To build an XS module, you must use the standard module-building ! instructions distributed with perl modules *PLUS* three extra ! instructions specific to the DJGPP "static link" build environment. ! ! set FNCASE=y ! perl Makefile.PL ! make ! make perl ! make test ! make -f Makefile.aperl inst_perl MAP_TARGET=perl.exe ! make install ! ! The first extra instruction sets DJGPP's FNCASE environment variable so ! that the new perl binary which you must build for an XS-type module will ! build correctly. The second extra instruction re-builds the perl binary ! in your module directory before you run "make test", so that you are ! testing with the new module code you built with "make". The third extra ! instruction installs the perl binary from your module directory into the ! standard DJGPP binary directory, C<($DJDIR)/bin>, replacing your ! previous perl binary. ! ! Note that the MAP_TARGET value *must* have the ".exe" extension or you ! will not create a "perl.exe" to replace the one in C<($DJDIR)/bin>. ! ! When you are done, the XS-module install process will have added information ! to yout "perllocal" information telling that the perl binary has been replaced, ! and what module was installed. you can view this information at any time ! by using the command: ! ! perl -S perldoc perllocal ! ! =head1 AUTHOR ! ! Laszlo Molnar, F [Installing/building perl] ! ! Peter J. Farley III F [Building/installing modules] ! ! =head1 SEE ALSO ! ! perl(1). ! ! =cut ! diff -c 'perl-5.7.1/README.epoc' 'perl-5.7.2/README.epoc' Index: ./README.epoc *** ./README.epoc Tue Mar 6 04:04:19 2001 --- ./README.epoc Mon Jul 9 17:09:45 2001 *************** *** 73,79 **** =head1 USING PERL ON EPOC ! =head2 I/O Redirection You can redirect the output with the UNIX bourne shell syntax (this is built into perl rather then eshell) For instance the following command --- 73,79 ---- =head1 USING PERL ON EPOC ! =head2 I/O Redirection on Epoc You can redirect the output with the UNIX bourne shell syntax (this is built into perl rather then eshell) For instance the following command *************** *** 85,91 **** Alternatively you can use 2>&1 in order to add the standard error output to stdout. ! =head2 PATH Names ESHELL looks for executables in ?:/System/Programs. The SIS file installs perl in this special folder directory. The default drive and --- 85,91 ---- Alternatively you can use 2>&1 in order to add the standard error output to stdout. ! =head2 PATH Names on Epoc ESHELL looks for executables in ?:/System/Programs. The SIS file installs perl in this special folder directory. The default drive and *************** *** 107,122 **** perl.exe C:/test.pl >C:/output.txt ! =head2 Editors A suitable text editor can be downloaded from symbian http://developer.epocworld.com/downloads/progs/Editor.zip ! =head2 Features The built-in function EPOC::getcwd returns the current directory. ! =head2 Restrictions Features are left out, because of restrictions of the POSIX support in EPOC: --- 107,122 ---- perl.exe C:/test.pl >C:/output.txt ! =head2 Editors on Epoc A suitable text editor can be downloaded from symbian http://developer.epocworld.com/downloads/progs/Editor.zip ! =head2 Features of Perl on Epoc The built-in function EPOC::getcwd returns the current directory. ! =head2 Restrictions of Perl on Epoc Features are left out, because of restrictions of the POSIX support in EPOC: *************** *** 214,220 **** =back ! =head1 SUPPORT STATUS I'm offering this port "as is". You can ask me questions, but I can't guarantee I'll be able to answer them. --- 214,220 ---- =back ! =head1 SUPPORT STATUS OF PERL ON EPOC I'm offering this port "as is". You can ask me questions, but I can't guarantee I'll be able to answer them. diff -c 'perl-5.7.1/README.hpux' 'perl-5.7.2/README.hpux' Index: ./README.hpux *** ./README.hpux Tue Mar 6 04:04:19 2001 --- ./README.hpux Mon Jul 9 17:09:45 2001 *************** *** 42,48 **** The original version of PA-RISC, HP no longer sells any system with this chip. ! The following systems contain PA-RISC 1.0 chips: 600, 635, 645, 808, 815, 822, 825, 832, 834, 835, 840, 842, 845, 850, 852, 855, 860, 865, 870, 890 --- 42,48 ---- The original version of PA-RISC, HP no longer sells any system with this chip. ! The following systems contained PA-RISC 1.0 chips: 600, 635, 645, 808, 815, 822, 825, 832, 834, 835, 840, 842, 845, 850, 852, 855, 860, 865, 870, 890 *************** *** 83,89 **** /opt/langtools/lib/sched.models. The first column corresponds to the output of the "uname -m" command (without the leading "9000/"). The second column is the PA-RISC version and the third column is the exact ! chip type used. =head2 Portability Between PA-RISC Versions --- 83,89 ---- /opt/langtools/lib/sched.models. The first column corresponds to the output of the "uname -m" command (without the leading "9000/"). The second column is the PA-RISC version and the third column is the exact ! chip type used. (Start browsing at the bottom to prevent confusion ;-) =head2 Portability Between PA-RISC Versions *************** *** 94,105 **** +DS32 should be used. It is no longer possible to compile PA-RISC 1.0 executables on either ! the PA-RISC 1.1 or 2.0 platforms. =head2 Building Dynamic Extensions on HP-UX HP-UX supports dynamically loadable libraries (shared libraries). ! Shared libraries end with the suffix .sl. Shared libraries created on a platform using a particular PA-RISC version are not usable on platforms using an earlier PA-RISC version by --- 94,120 ---- +DS32 should be used. It is no longer possible to compile PA-RISC 1.0 executables on either ! the PA-RISC 1.1 or 2.0 platforms. The command-line flags are accepted, ! but the resulting executable will not run when transferred to a PA-RISC ! 1.0 system. + =head2 Itanium Processor Family and HP-UX + + HP-UX also runs on the new Itanium processor. This requires the use + of a different version of HP-UX (currently 11.20), and with the exception + of a few differences detailed below and in later sections, Perl should + compile with no problems. + + Although PA-RISC binaries can run on Itanium systems, you should not + attempt to use a PA-RISC version of Perl on an Itanium system. This is + because shared libraries created on an Itanium system cannot be loaded + while running a PA-RISC executable. + =head2 Building Dynamic Extensions on HP-UX HP-UX supports dynamically loadable libraries (shared libraries). ! Shared libraries end with the suffix .sl. On Itanium systems, ! they end with the suffix .so. Shared libraries created on a platform using a particular PA-RISC version are not usable on platforms using an earlier PA-RISC version by *************** *** 107,112 **** --- 122,133 ---- same +DAportable compiler flag (with the same PA-RISC 1.0 caveat mentioned above). + Shared libraries created on an Itanium platform cannot be loaded on + a PA-RISC platform. Shared libraries created on a PA-RISC platform + can only be loaded on an Itanium platform if it is a PA-RISC executable + that is attempting to load the PA-RISC library. A PA-RISC shared + library cannot be loaded into an Itanium executable nor vice-versa. + To create a shared library, the following steps must be performed: 1. Compile source modules with +z or +Z flag to create a .o module *************** *** 140,154 **** Note that it is okay to create a library which contains a dependent library that is already linked into perl. ! It is no longer possible to link PA-RISC 1.0 shared libraries. =head2 The HP ANSI C Compiler When using this compiler to build Perl, you should make sure that the flag -Aa is added to the cpprun and cppstdin variables in the config.sh ! file (though see the section on 64-bit perl below). ! =head2 Using Large Files with Perl Beginning with HP-UX version 10.20, files larger than 2GB (2^31 bytes) may be created and manipulated. Three separate methods of doing this --- 161,219 ---- Note that it is okay to create a library which contains a dependent library that is already linked into perl. ! Some extensions, like DB_File and Compress::Zlib use/require prebuilt ! libraries for the perl extensions/modules to work. If these libraries ! are built using the default configuration, it might happen that you run ! into an error like "invalid loader fixup" during load phase. HP is aware ! of this problem and address it at ! http://devresource.hp.com/devresource/Docs/TechTips/cxxTips.html#tip13 + A more general approach is to intervene manually, as with an example for + the DB_File module, which requires SleepyCat's libdb.sl: + + # cd .../db-3.2.9/build_unix + # vi Makefile + ... add +Z to all cflags to create shared objects + CFLAGS= -c $(CPPFLAGS) +Z -Ae +O2 +Onolimit \ + -I/usr/local/include -I/usr/include/X11R6 + CXXFLAGS= -c $(CPPFLAGS) +Z -Ae +O2 +Onolimit \ + -I/usr/local/include -I/usr/include/X11R6 + + # make clean + # make + # mkdir tmp + # cd tmp + # ar x ../libdb.a + # ld -b -o libdb-3.2.sl *.o + # mv libdb-3.2.sl /usr/local/lib + # rm *.o + # cd /usr/local/lib + # rm -f libdb.sl + # ln -s libdb-3.2.sl libdb.sl + + # cd .../DB_File-1.76 + # make distclean + # perl Makefile.PL + # make + # make test + # make install + + It is no longer possible to link PA-RISC 1.0 shared libraries (even + though the command-line flags are still present). + + PA-RISC and Itanium object files are not interchangeable. Although + you may be able to use ar to create an archive library of PA-RISC + object files on an Itanium system, you cannot link against it using + an Itanium link editor. + =head2 The HP ANSI C Compiler When using this compiler to build Perl, you should make sure that the flag -Aa is added to the cpprun and cppstdin variables in the config.sh ! file (though see the section on 64-bit perl below). If you are using a ! recent version of the Perl distribution, these flags are set automatically. ! =head2 Using Large Files with Perl on HP-UX Beginning with HP-UX version 10.20, files larger than 2GB (2^31 bytes) may be created and manipulated. Three separate methods of doing this *************** *** 183,189 **** large files when Configure asks you, you may get a configuration that cannot be compiled, or that does not function as expected. ! =head2 Threaded Perl It is possible to compile a version of threaded Perl on any version of HP-UX before 10.30, but it is strongly suggested that you be running on --- 248,254 ---- large files when Configure asks you, you may get a configuration that cannot be compiled, or that does not function as expected. ! =head2 Threaded Perl on HP-UX It is possible to compile a version of threaded Perl on any version of HP-UX before 10.30, but it is strongly suggested that you be running on *************** *** 192,202 **** To compile Perl with threads, add -Dusethreads to the arguments of Configure. Verify that the -D_POSIX_C_SOURCE=199506L compiler flag is automatically added to the list of flags. Also make sure that -lpthread ! is listed before -lc in the list of libraries to link Perl with. - As of the date of this document, Perl threads are not fully supported on - HP-UX. - HP-UX versions before 10.30 require a seperate installation of a POSIX threads library package. Two examples are the HP DCE package, available on "HP-UX Hardware Extensions 3.0, Install and Core OS, Release 10.20, --- 257,266 ---- To compile Perl with threads, add -Dusethreads to the arguments of Configure. Verify that the -D_POSIX_C_SOURCE=199506L compiler flag is automatically added to the list of flags. Also make sure that -lpthread ! is listed before -lc in the list of libraries to link Perl with. The ! hints provided for HP-UX during Configure will try very hard to get ! this right for you. HP-UX versions before 10.30 require a seperate installation of a POSIX threads library package. Two examples are the HP DCE package, available on "HP-UX Hardware Extensions 3.0, Install and Core OS, Release 10.20, *************** *** 204,210 **** though worldwide HP-UX mirrors of precompiled packages (e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html) ! =head2 64-bit Perl Beginning with HP-UX 11.00, programs compiled under HP-UX can take advantage of the LP64 programming environment (LP64 means Longs and --- 268,274 ---- though worldwide HP-UX mirrors of precompiled packages (e.g. http://hpux.tn.tudelft.nl/hppd/hpux/alpha.html) ! =head2 64-bit Perl on HP-UX Beginning with HP-UX 11.00, programs compiled under HP-UX can take advantage of the LP64 programming environment (LP64 means Longs and *************** *** 235,241 **** compiler. If you want to compile Perl using gcc, you will have to get a version of the compiler that support 64-bit operations.) ! =head2 GDBM and Threads If you attempt to compile Perl with threads on an 11.X system and also link in the GDBM library, then Perl will immediately core dump when it --- 299,305 ---- compiler. If you want to compile Perl using gcc, you will have to get a version of the compiler that support 64-bit operations.) ! =head2 GDBM and Threads on HP-UX If you attempt to compile Perl with threads on an 11.X system and also link in the GDBM library, then Perl will immediately core dump when it *************** *** 242,254 **** starts up. The only workaround at this point is to relink the GDBM library under 11.X, then relink it into Perl. ! =head2 NFS filesystems and utime(2) If you are compiling Perl on a remotely-mounted NFS filesystem, the test io/fs.t may fail on test #18. This appears to be a bug in HP-UX and no fix is currently available. ! =head2 perl -P and // In HP-UX Perl is compiled with flags that will cause problems if the -P flag of Perl (preprocess Perl code with the C preprocessor before --- 306,318 ---- starts up. The only workaround at this point is to relink the GDBM library under 11.X, then relink it into Perl. ! =head2 NFS filesystems and utime(2) on HP-UX If you are compiling Perl on a remotely-mounted NFS filesystem, the test io/fs.t may fail on test #18. This appears to be a bug in HP-UX and no fix is currently available. ! =head2 perl -P and // and HP-UX In HP-UX Perl is compiled with flags that will cause problems if the -P flag of Perl (preprocess Perl code with the C preprocessor before *************** *** 267,272 **** --- 331,353 ---- s!foo!!; + =head2 HP-UX Kernel Parameters (maxdsiz) for Compiling Perl + + By default, HP-UX comes configured with a maximum data segment size of + 64MB. This is too small to correctly compile Perl with the maximum + optimization levels. You can increase the size of the maxdsiz kernel + parameter through the use of SAM. + + When using the GUI version of SAM, click on the Kernel Configuration + icon, then the Configurable Parameters icon. Scroll down and select + the maxdsiz line. From the Actions menu, select the Modify Configurable + Parameter item. Insert the new formula into the Formula/Value box. + Then follow the instructions to rebuild your kernel and reboot your + system. + + In general, a value of 256MB (or "256*1024*1024") is sufficient for + Perl to compile at maximum optimization. + =head1 AUTHOR Jeff Okamoto *************** *** 275,280 **** =head1 DATE ! Version 0.6.2: 2001-02-02 =cut --- 356,361 ---- =head1 DATE ! Version 0.6.3: 2001-05-16 =cut diff -c 'perl-5.7.1/README.hurd' 'perl-5.7.2/README.hurd' Index: ./README.hurd *** ./README.hurd Tue Mar 6 04:04:19 2001 --- ./README.hurd Mon Jul 9 17:09:45 2001 *************** *** 1,13 **** ! Notes on Perl on the Hurd ! Last Updated: Fri, 29 Oct 1999 22:50:30 +0200 ! Written by: Mark Kettenis If you want to use Perl on the Hurd, I recommend using the Debian GNU/Hurd distribution (see http://www.debian.org), even if an official, stable release has not yet been made. The old `gnu-0.2' binary distribution will most certainly have additional problems. ! * Known Problems The Perl test suite may still report some errors on the Hurd. The `lib/anydbm' and `pragma/warnings' tests will almost certainly fail. --- 1,19 ---- ! If you read this file _as_is_, just ignore the funny characters you see. ! It is written in the POD format (see pod/perlpod.pod) which is specially ! designed to be readable as is. + =head1 NAME + + README.hurd - Perl version 5 on Hurd + + =head1 DESCRIPTION + If you want to use Perl on the Hurd, I recommend using the Debian GNU/Hurd distribution (see http://www.debian.org), even if an official, stable release has not yet been made. The old `gnu-0.2' binary distribution will most certainly have additional problems. ! =head2 Known Problems with Perl on Hurd The Perl test suite may still report some errors on the Hurd. The `lib/anydbm' and `pragma/warnings' tests will almost certainly fail. *************** *** 21,33 **** Here are the statistics for Perl 5.005_62 on my system: ! Failed Test Status Wstat Total Fail Failed List of failed ! ------------------------------------------------------------------------------- ! lib/anydbm.t 12 1 8.33% 12 ! pragma/warnings 333 1 0.30% 215 ! 8 tests and 24 subtests skipped. ! Failed 2/229 test scripts, 99.13% okay. 2/10850 subtests failed, 99.98% okay. There are quite a few systems out there that do worse! However, since I am running a very recent Hurd snapshot, in which a lot of --- 27,40 ---- Here are the statistics for Perl 5.005_62 on my system: ! Failed Test Status Wstat Total Fail Failed List of failed ! ------------------------------------------------------------------------- ! lib/anydbm.t 12 1 8.33% 12 ! pragma/warnings 333 1 0.30% 215 + 8 tests and 24 subtests skipped. + Failed 2/229 test scripts, 99.13% okay. 2/10850 subtests failed, 99.98% okay. + There are quite a few systems out there that do worse! However, since I am running a very recent Hurd snapshot, in which a lot of *************** *** 38,40 **** --- 45,54 ---- In any way, if you're seeing failures beyond those mentioned in this document, please consider upgrading to the latest Hurd before reporting the failure as a bug. + + =head1 AUTHOR + + Mark Kettenis + + Last Updated: Fri, 29 Oct 1999 22:50:30 +0200 + diff -c 'perl-5.7.1/README.machten' 'perl-5.7.2/README.machten' Index: ./README.machten *** ./README.machten Tue Mar 6 04:04:19 2001 --- ./README.machten Mon Jul 9 17:09:45 2001 *************** *** 31,37 **** For much more information on building perl -- for example, on how to change the default installation directory -- see F. ! =head2 Failures during C =over 4 --- 31,37 ---- For much more information on building perl -- for example, on how to change the default installation directory -- see F. ! =head2 Failures during C on MachTen =over 4 *************** *** 57,63 **** =back ! =head2 Building external modules To add an external module to perl, build in the normal way, which is documented in L, or which can be driven --- 57,63 ---- =back ! =head2 Building external modules on MachTen To add an external module to perl, build in the normal way, which is documented in L, or which can be driven diff -c 'perl-5.7.1/README.macos' 'perl-5.7.2/README.macos' Index: ./README.macos *** ./README.macos Fri Apr 6 16:18:30 2001 --- ./README.macos Mon Jul 9 17:09:45 2001 *************** *** 6,12 **** README.macos - Perl under Mac OS (Classic) - =head1 SYNOPSIS This document briefly describes perl under Mac OS (Classic). --- 6,11 ---- *************** *** 16,22 **** When we say "Mac OS" below, we mean pre-Mac OS X, which includes Mac OS 7, 8, and 9. - =head1 DESCRIPTION The perl 5.6.1 source itself builds on Mac OS, with some additional --- 15,20 ---- *************** *** 47,59 **** MacPerl 5.2.0r4 is available on the CPAN and on SourceForge. It is based on perl 5.004. - =head1 AUTHOR perl was ported to Mac OS by Matthias Neeracher Eneeracher@mac.comE. It is currently maintained by Chris Nandor Epudge@pobox.comE. - =head1 DATE --- 45,55 ---- diff -c 'perl-5.7.1/README.micro' 'perl-5.7.2/README.micro' Index: ./README.micro *** ./README.micro Tue Mar 6 04:04:19 2001 --- ./README.micro Mon Jul 9 17:09:45 2001 *************** *** 4,9 **** operating system are left very -- minimal. All this is experimental. If you don't know what to do with microperl ! you probably shouldn't. --- 4,15 ---- operating system are left very -- minimal. All this is experimental. If you don't know what to do with microperl ! you probably shouldn't. Do not report bugs in microperl; fix the bugs. ! ! If you are still reading this and you are itching to try out microperl: ! ! make -f Makefile.micro ! ! diff -c 'perl-5.7.1/README.mint' 'perl-5.7.2/README.mint' Index: ./README.mint *** ./README.mint Tue Mar 6 04:04:19 2001 --- ./README.mint Mon Jul 9 17:09:45 2001 *************** *** 1,7 **** ! ########################################################################## ! # *** README.mint ! ########################################################################## If you want to build perl yourself on MiNT (or maybe on an Atari without MiNT) you may want to accept some advice from somebody who already did it... --- 1,13 ---- ! If you read this file _as_is_, just ignore the funny characters you see. ! It is written in the POD format (see pod/perlpod.pod) which is specially ! designed to be readable as is. + =head1 NAME + + README.mint - Perl version 5 on Atari MiNT + + =head1 DESCRIPTION + If you want to build perl yourself on MiNT (or maybe on an Atari without MiNT) you may want to accept some advice from somebody who already did it... *************** *** 23,30 **** standard envariables like $PATH, $HOME, ... are set, there is a POSIX compliant shell in /bin/sh, and...) ! Known problems ! ============== The problems you may encounter when building perl on your machine are most probably due to deficiencies in MiNT resp. the Atari --- 29,35 ---- standard envariables like $PATH, $HOME, ... are set, there is a POSIX compliant shell in /bin/sh, and...) ! =head1 Known problems with Perl on MiNT The problems you may encounter when building perl on your machine are most probably due to deficiencies in MiNT resp. the Atari *************** *** 210,216 **** Have fun with Perl! Guido Flohr ! -- ! mailto:gufl0000@stud.uni-sb.de ! http://stud.uni-sb.de/~gufl0000 --- 215,224 ---- Have fun with Perl! + =head1 AUTHOR + Guido Flohr ! ! mailto:gufl0000@stud.uni-sb.de ! http://stud.uni-sb.de/~gufl0000 ! diff -c 'perl-5.7.1/README.mpeix' 'perl-5.7.2/README.mpeix' Index: ./README.mpeix *** ./README.mpeix Tue Mar 6 04:04:19 2001 --- ./README.mpeix Mon Jul 9 17:09:45 2001 *************** *** 5,26 **** =head1 NAME README.mpeix - Perl/iX for HP e3000 MPE ! =head1 SYNOPSIS http://www.bixby.org/mark/perlix.html Perl language for MPE Last updated June 2, 2000 @ 0400 UTC ! =head1 NOTE This is a podified version of the above-mentioned web page, podified by Jarkko Hietaniemi 2001-Jan-01. ! =head1 What's New June 1, 2000 ! =over 4 =item * --- 5,26 ---- =head1 NAME README.mpeix - Perl/iX for HP e3000 MPE ! =head1 SYNOPSIS http://www.bixby.org/mark/perlix.html Perl language for MPE Last updated June 2, 2000 @ 0400 UTC ! =head1 NOTE This is a podified version of the above-mentioned web page, podified by Jarkko Hietaniemi 2001-Jan-01. ! =head1 What's New in Perl ffor MPE/iX June 1, 2000 ! =over 4 =item * *************** *** 27,33 **** Rebuilt to be compatible with mod_perl. If you plan on using mod_perl, you MUST download and install this version of Perl/iX! ! =item * bincompat5005="undef": sorry, but you will have to recompile any --- 27,33 ---- Rebuilt to be compatible with mod_perl. If you plan on using mod_perl, you MUST download and install this version of Perl/iX! ! =item * bincompat5005="undef": sorry, but you will have to recompile any *************** *** 34,40 **** binary 5.005 extensions that you may be using (if any; there is no 5.005 code in what you download from bixby.org) uselargefiles="undef": not available in MPE for POSIX files yet. ! =item * Now bundled with various add-on packages: --- 34,40 ---- binary 5.005 extensions that you may be using (if any; there is no 5.005 code in what you download from bixby.org) uselargefiles="undef": not available in MPE for POSIX files yet. ! =item * Now bundled with various add-on packages: *************** *** 48,59 **** =item * libwww-perl (LWP) which lets Perl programs behave like web browsers: ! 1. #!/PERL/PUB/perl 2. use LWP::Simple; 3. $doc = get('http://www.bixby.org/mark/perlix.html'); # reads the web page into variable $doc ! (http://www.bixby.org/mark/perlix.html) =item * --- 48,59 ---- =item * libwww-perl (LWP) which lets Perl programs behave like web browsers: ! 1. #!/PERL/PUB/perl 2. use LWP::Simple; 3. $doc = get('http://www.bixby.org/mark/perlix.html'); # reads the web page into variable $doc ! (http://www.bixby.org/mark/perlix.html) =item * *************** *** 62,70 **** soon with Apache/iX 1.3.12 from bixby.org). This module allows you to write high performance persistent Perl CGI scripts and all sorts of cool things. (http://perl.apache.org/) ! and much much more hiding under /PERL/PUB/.cpan/ ! =item * The CPAN module now works for automatic downloading and --- 62,70 ---- soon with Apache/iX 1.3.12 from bixby.org). This module allows you to write high performance persistent Perl CGI scripts and all sorts of cool things. (http://perl.apache.org/) ! and much much more hiding under /PERL/PUB/.cpan/ ! =item * The CPAN module now works for automatic downloading and *************** *** 73,79 **** 1. export FTP_PASSIVE=1 2. perl -MCPAN -e shell 3. Ignore any terminal I/O related complaints! ! (http://theoryx5.uwinnipeg.ca/CPAN/data/perl/CPAN.html) =back --- 73,79 ---- 1. export FTP_PASSIVE=1 2. perl -MCPAN -e shell 3. Ignore any terminal I/O related complaints! ! (http://theoryx5.uwinnipeg.ca/CPAN/data/perl/CPAN.html) =back *************** *** 92,98 **** Perl's getpwnam() function which had regressed to being unimplemented on MPE is now implemented once again. ! =back September 17, 1999 --- 92,98 ---- Perl's getpwnam() function which had regressed to being unimplemented on MPE is now implemented once again. ! =back September 17, 1999 *************** *** 104,112 **** Migrated from cccd.edu to bixby.org. =back - - =head1 Welcome This is the official home page for the HP e3000 MPE/iX (http://www.businessservers.hp.com/) port of the Perl scripting language (http://www.perl.com/) which gives you all of the power of C, --- 104,112 ---- Migrated from cccd.edu to bixby.org. =back + =head1 Welcome to Perl/iX + This is the official home page for the HP e3000 MPE/iX (http://www.businessservers.hp.com/) port of the Perl scripting language (http://www.perl.com/) which gives you all of the power of C, *************** *** 115,141 **** about major milestones will also be posted to the HP3000-L mailing list (http://www.lsoft.com/scripts/wl.exe?SL1=HP3000-L&H=RAVEN.UTC.EDU) and its associated gatewayed newsgroup comp.sys.hp.mpe. ! I'm doing this port because I can't live without Perl on the Unix machines that I administer, and I want to have the same power available to me on MPE. ! Please send your comments, questions, and bug reports directly to me, Mark Bixby (http://www.bixby.org/mark/), by e-mailing to mark@bixby.org. Or just post them to HP3000-L. ! The platform I'm using to do this port is an HP 3000 957RX running MPE/iX 6.0 and using the GNU gcc C compiler (http://jazz.external.hp.com/src/gnu/gnuframe.html). ! The combined porting wisdom from all of my ports can be found in my MPE/iX Porting Guide (http://www.bixby.org/mark/porting.html). ! IMPORTANT NOTICE: Yes, I do work for the HP CSY R&D lab, but ALL of the software you download from bixby.org is my personal freeware that is NOT supported by HP. ! =head1 System Requirements =over 4 --- 115,141 ---- about major milestones will also be posted to the HP3000-L mailing list (http://www.lsoft.com/scripts/wl.exe?SL1=HP3000-L&H=RAVEN.UTC.EDU) and its associated gatewayed newsgroup comp.sys.hp.mpe. ! I'm doing this port because I can't live without Perl on the Unix machines that I administer, and I want to have the same power available to me on MPE. ! Please send your comments, questions, and bug reports directly to me, Mark Bixby (http://www.bixby.org/mark/), by e-mailing to mark@bixby.org. Or just post them to HP3000-L. ! The platform I'm using to do this port is an HP 3000 957RX running MPE/iX 6.0 and using the GNU gcc C compiler (http://jazz.external.hp.com/src/gnu/gnuframe.html). ! The combined porting wisdom from all of my ports can be found in my MPE/iX Porting Guide (http://www.bixby.org/mark/porting.html). ! IMPORTANT NOTICE: Yes, I do work for the HP CSY R&D lab, but ALL of the software you download from bixby.org is my personal freeware that is NOT supported by HP. ! =head1 System Requirements for Perl/iX =over 4 *************** *** 192,203 **** =item 5. Convert your *.a system archive libraries to *.sl shared libraries ! =back Download Perl using FTP.ARPA.SYS from your HP 3000 (the preferred method)..... ! :HELLO MANAGER.SYS :XEQ FTP.ARPA.SYS open ftp.bixby.org --- 192,203 ---- =item 5. Convert your *.a system archive libraries to *.sl shared libraries ! =back Download Perl using FTP.ARPA.SYS from your HP 3000 (the preferred method)..... ! :HELLO MANAGER.SYS :XEQ FTP.ARPA.SYS open ftp.bixby.org *************** *** 210,216 **** .....Or download using some other generic web or ftp client (the alternate method) ! Download the following files (make sure that you use "binary mode" or whatever client feature that is 8-bit clean): --- 210,216 ---- .....Or download using some other generic web or ftp client (the alternate method) ! Download the following files (make sure that you use "binary mode" or whatever client feature that is 8-bit clean): *************** *** 225,241 **** or ftp://ftp.bixby.org/pub/mpe/perl-5.6.0-mpe.tar.Z ! =item * Upload those files to your HP 3000 in an 8-bit clean bytestream manner to: /tmp/perl.tar.Z ! =item * Then extract the installation script (after both download methods) ! :CHDIR /tmp :XEQ TAR.HPBIN.SYS 'xvfopz /tmp/perl.tar.Z INSTALL' --- 225,241 ---- or ftp://ftp.bixby.org/pub/mpe/perl-5.6.0-mpe.tar.Z ! =item * Upload those files to your HP 3000 in an 8-bit clean bytestream manner to: /tmp/perl.tar.Z ! =item * Then extract the installation script (after both download methods) ! :CHDIR /tmp :XEQ TAR.HPBIN.SYS 'xvfopz /tmp/perl.tar.Z INSTALL' *************** *** 242,248 **** =item * Edit the installation script ! Examine the accounting structure creation commands and modify if necessary (adding additional capabilities, choosing a non-system volume set, etc). --- 242,248 ---- =item * Edit the installation script ! Examine the accounting structure creation commands and modify if necessary (adding additional capabilities, choosing a non-system volume set, etc). *************** *** 252,258 **** =item * Run the installation script. ! The accounting structure will be created and then all files will be extracted from the archive. --- 252,258 ---- =item * Run the installation script. ! The accounting structure will be created and then all files will be extracted from the archive. *************** *** 261,267 **** =item * Convert your *.a system archive libraries to *.sl shared libraries ! You only have to do this ONCE on your MPE/iX 5.5 machine in order to convert /lib/lib*.a and /usr/lib/lib*.a libraries to their *.sl equivalents. This step should not be necessary on MPE/iX 6.0 or later --- 261,267 ---- =item * Convert your *.a system archive libraries to *.sl shared libraries ! You only have to do this ONCE on your MPE/iX 5.5 machine in order to convert /lib/lib*.a and /usr/lib/lib*.a libraries to their *.sl equivalents. This step should not be necessary on MPE/iX 6.0 or later *************** *** 271,277 **** =back ! =head1 Distribution Contents Highlights =over 4 --- 271,277 ---- =back ! =head1 Perl/iX Distribution Contents Highlights =over 4 *************** *** 278,305 **** =item README The file you're reading now. ! =item INSTALL Perl/iX Installation script. ! =item LIBSHP3K Script to convert *.a system archive libraries to *.sl shared libraries. ! =item PERL Perl NMPRG executable. A version-numbered backup copy also exists. You might wish to "ln -s /PERL/PUB/PERL /usr/local/bin/perl". ! =item .cpan/ Much add-on source code downloaded with the CPAN module. ! =item lib/ Perl libraries, both core and add-on. ! =item man/ Perl man page documentation. --- 278,305 ---- =item README The file you're reading now. ! =item INSTALL Perl/iX Installation script. ! =item LIBSHP3K Script to convert *.a system archive libraries to *.sl shared libraries. ! =item PERL Perl NMPRG executable. A version-numbered backup copy also exists. You might wish to "ln -s /PERL/PUB/PERL /usr/local/bin/perl". ! =item .cpan/ Much add-on source code downloaded with the CPAN module. ! =item lib/ Perl libraries, both core and add-on. ! =item man/ Perl man page documentation. *************** *** 307,319 **** =item public_html/feedback.cgi Sample feedback CGI form written in Perl. ! =item src/perl-5.6.0-mpe Source code. =back ! =head1 How to Compile Perl/iX =over 4 --- 307,319 ---- =item public_html/feedback.cgi Sample feedback CGI form written in Perl. ! =item src/perl-5.6.0-mpe Source code. =back ! =head1 How to Compile Perl/iX =over 4 *************** *** 352,358 **** Optionally create symbolic links that point to the Perl executable, i.e. ln -s /PERL/PUB/PERL /usr/local/bin/perl ! =back The summary test results from "cd t; ./perl -I../lib harness": --- 352,358 ---- Optionally create symbolic links that point to the Perl executable, i.e. ln -s /PERL/PUB/PERL /usr/local/bin/perl ! =back The summary test results from "cd t; ./perl -I../lib harness": *************** *** 374,380 **** Create your Perl script files with "#!/PERL/PUB/perl" (or an equivalent symbolic link) as the first line. Use the chmod command to make sure that your script has execute permission. Run your script! ! Be sure to take a look at the CPAN module list (http://www.cpan.org/CPAN.html). A wide variety of free Perl software is available. You can automatically download these packages by using --- 374,380 ---- Create your Perl script files with "#!/PERL/PUB/perl" (or an equivalent symbolic link) as the first line. Use the chmod command to make sure that your script has execute permission. Run your script! ! Be sure to take a look at the CPAN module list (http://www.cpan.org/CPAN.html). A wide variety of free Perl software is available. You can automatically download these packages by using *************** *** 435,447 **** GETPRIVMODE() solution similar to bind(). =back - - =head1 Known Bugs Under Investigation None. - - =head1 To-Do List =over 4 =item * --- 435,447 ---- GETPRIVMODE() solution similar to bind(). =back + =head1 Known Perl/iX Bugs Under Investigation + None. + =head1 Perl/iX To-Do List + =over 4 =item * *************** *** 460,472 **** Write an MPE XS extension library containing miscellaneous important MPE functions like GETPRIVMODE(), GETUSERMODE(), and sfcntl(). ! =back ! =head1 Change History May 6, 1999 ! =over 4 =item * --- 460,472 ---- Write an MPE XS extension library containing miscellaneous important MPE functions like GETPRIVMODE(), GETUSERMODE(), and sfcntl(). ! =back ! =head1 Perl/iX Change History May 6, 1999 ! =over 4 =item * *************** *** 473,479 **** Patch LBCJXT6A is required on MPE/iX 5.5 machines in order to prevent Perl/iX from dying with an unresolved external reference to _getenv_libc. ! =back April 7, 1999 --- 473,479 ---- Patch LBCJXT6A is required on MPE/iX 5.5 machines in order to prevent Perl/iX from dying with an unresolved external reference to _getenv_libc. ! =back April 7, 1999 *************** *** 498,504 **** The LIBSHP3K *.a -> *.sl library conversion script is now included as /PERL/PUB/LIBSHP3K. ! =back November 20, 1998 --- 498,504 ---- The LIBSHP3K *.a -> *.sl library conversion script is now included as /PERL/PUB/LIBSHP3K. ! =back November 20, 1998 *************** *** 527,535 **** The current incarnation of the POSIX filename extended characters patch is now MPEKXJ3A. ! =back ! August 14, 1998 =over 4 --- 527,535 ---- The current incarnation of the POSIX filename extended characters patch is now MPEKXJ3A. ! =back ! August 14, 1998 =over 4 *************** *** 538,546 **** The previous POSIX filename extended characters patch MPEKX44C has been superseded by MPEKXB5A. ! =back ! August 7, 1998 =over 4 --- 538,546 ---- The previous POSIX filename extended characters patch MPEKX44C has been superseded by MPEKXB5A. ! =back ! August 7, 1998 =over 4 *************** *** 549,567 **** The previous POSIX filename extended characters patch MPEKX76A has been superseded by MPEKX44C. - - =over 4 =back ! July 28, 1998 =item * Updated to version 5.005_01. ! =back ! July 23, 1998 =over 4 --- 549,567 ---- The previous POSIX filename extended characters patch MPEKX76A has been superseded by MPEKX44C. =back ! July 28, 1998 + =over 4 + =item * Updated to version 5.005_01. ! =back ! July 23, 1998 =over 4 *************** *** 570,578 **** Updated to version 5.005 (production release). The public freeware sources are now 100% MPE-ready "straight out of the box". ! =back ! July 17, 1998 =over 4 --- 570,578 ---- Updated to version 5.005 (production release). The public freeware sources are now 100% MPE-ready "straight out of the box". ! =back ! July 17, 1998 =over 4 *************** *** 588,596 **** =item * My MPE binary release is now extracted using my standard INSTALL script. ! =back ! July 15, 1998 =over 4 --- 588,596 ---- =item * My MPE binary release is now extracted using my standard INSTALL script. ! =back ! July 15, 1998 =over 4 *************** *** 599,607 **** Changed startperl to #!/PERL/PUB/perl so that Perl will recognize scripts more easily and efficiently. ! =back ! July 8, 1998 =over 4 --- 599,607 ---- Changed startperl to #!/PERL/PUB/perl so that Perl will recognize scripts more easily and efficiently. ! =back ! July 8, 1998 =over 4 *************** *** 614,622 **** was strictly internal to me and never publicly released. Note that [21]BIND/iX is now required (well, the include files and libbind.a) if you wish to compile Perl/iX. ! =back ! November 6, 1997 =over 4 --- 614,622 ---- was strictly internal to me and never publicly released. Note that [21]BIND/iX is now required (well, the include files and libbind.a) if you wish to compile Perl/iX. ! =back ! November 6, 1997 =over 4 *************** *** 624,632 **** =item * Updated to version 5.004_04. No changes in MPE-specific functionality. ! =back ! October 16, 1997 =over 4 --- 624,632 ---- =item * Updated to version 5.004_04. No changes in MPE-specific functionality. ! =back ! October 16, 1997 =over 4 *************** *** 635,643 **** Added Demos section to the Perl/iX home page so you can see some sample Perl applications running on my 3000. ! =back ! October 3, 1997 =over 4 --- 635,643 ---- Added Demos section to the Perl/iX home page so you can see some sample Perl applications running on my 3000. ! =back ! October 3, 1997 =over 4 *************** *** 646,654 **** Added System Requirements section to the Perl/iX home page just so the prerequisites stand out more. Various other home page tweaks. ! =back ! October 2, 1997 =over 4 --- 646,654 ---- Added System Requirements section to the Perl/iX home page just so the prerequisites stand out more. Various other home page tweaks. ! =back ! October 2, 1997 =over 4 *************** *** 656,664 **** =item * Initial public release. ! =back ! September 1997 =over 4 --- 656,664 ---- =item * Initial public release. ! =back ! September 1997 =over 4 *************** *** 668,675 **** Porting begins. =back ! ! =head1 Author ! Mark Bixby, mark@bixby.org --- 668,675 ---- Porting begins. =back ! ! =head1 AUTHOR ! Mark Bixby, mark@bixby.org diff -c /dev/null 'perl-5.7.2/README.netware' Index: ./README.netware *** ./README.netware Thu Jan 1 02:00:00 1970 --- ./README.netware Fri Jul 13 15:40:40 2001 *************** *** 0 **** --- 1,187 ---- + If you read this file _as_is_, just ignore the funny characters you + see. It is written in the POD format (see pod/perlpod.pod) which is + specifically designed to be readable as is. + + =head1 Name + + Perl for NetWare5.x + + =head1 Description + + This file gives the instructions for building Perl5.6 and above for + NetWare5.x. Please read and understand the terms under which this + software is distributed. + + =head1 Build + + This section describes the steps to be performed to build a Perl NLM + and other associated NLMs. + + =head2 Tools & SDK + + The build requires Watcom 11.x compiler and linker. In addition, + the "NetWare SDK", "NLM & NetWare Libraries for C" and + "NetWare Server Protocol Libraries for C", all available at + L, are also required. + Microsoft Visual C++ version 4.2 or later is also required. + + Currently the interpreter builds only with Watcom and we do have plans of + making this work with CodeWarrior as well. + + =head2 Setup + + The build process is dependent on the location of the NetWare SDK. + Once the required software is installed, the build environment has to + be setup. The following batch files setup the environment. + + =over 4 + + =item Buildtype.bat + + This sets the build type to release or debug. + + =item SetNWBld.bat + + This sets the NetWare SDK path, Compiler & other tools path & MPK SDK path. + + =item MPKBuild.bat + + This is required only it we are building multi-processor enabled NLMs. + + These batch files are under NetWare\bat folder. These batch files + call a couple of other batch files to setup the environment. Invoking + the batch file with I will show the current settings and I + or I gives the usage help. + + =back + + =head2 Make + + The make process runs only under WinNT shell. + The NetWare makefile is located under the NetWare folder. + The makefile for NetWare makes use of miniperl.exe to run some of + the Perl scripts. To create miniperl.exe, run nmake from + win32 folder through WinNT commond prompt. The build process + can be stopped after miniperl.exe is created. Then run nmake + from NetWare folder through WinNT command prompt. + + Currently the follwing two build types are tested on NetWare + + =over 4 + + =item * + + USE_MULTI, USE_ITHREADS & USE_IMP_SYS defined + + =item * + + USE_MULTI & USE_IMP_SYS defined and USE_ITHREADS not defined + + =back + + =head2 Interpreter + + Once miniperl.exe creation is over, run nmake from the NetWare folder. + This will build the Perl interpreter for NetWare as I. + This is copied under the I folder if you are doing + a release build, else will be copied under I folder for debug builds. + + =head2 Extensions + + The make process also creates the Perl extensions which are called + NLPs (NetWare Loadable Perl). + + =head1 Install + + To install NetWare Perl onto a NetWare server, first map the Sys volume + of a NetWare server to I. This is because the makefile by default + sets the drive letter to I. Type I from NetWare folder + on a WinNT command prompt. This will copy the binaries and module files + onto the NetWare server. The Perl interpreter, I, is copied under + I folder. Copy I to I folder. + + =head1 Build new extensions + + To build extensions other than standard extensions, NetWare Perl has + to be installed on Windows as well. This can be done by invoking + I from the NetWare folder on a WinNT command prompt. + This will copy all the *.pm files and other required files. + Documentation files are not copied. This has to be done after + installing Perl for Windows. Once this is done, do the following + to build any extension: + + =over 4 + + =item * + + perl -II -II Makefile.pl + + For example: + + perl -Ic:/perl/5.6.1/lib/NetWare-multi-thread -Ic:\perl\5.6.1\lib MakeFile.pl + + =item * + + nmake + + =item * + + nmake install + + Install will copy the files into the Windows machine where NetWare + Perl is installed, these files have to be copied to the NetWare server + manually. Alternatively, pass I as an + input to makefile.pl above. Where I is the mapped drive to the + sys: volume of the server where Perl on NetWare is installed. Now + saying I, will copy the files to the server. + + =back + + =head1 Known Issues + + =over 4 + + =item * + + With USE_ITHREADS not defined, backtick seems to be having some problems. + + =item * + + The utility scripts (pod2html.pl, pod2man.pl, perldoc.pl etc.) are not + yet ported to work on NetWare. + + =item * + + Also fork() is not currently implemented. + + =back + + =head1 Acknowledgements + + The makefile for Win32 is used as a reference to create the makefile + for NetWare build. Also, the make process for NetWare port uses + miniperl.exe to run scripts during the make and installation process. + + =head1 Authors + + Guruprasad S (sguruprasad@novell.com) + Anantha Kesari H Y (hyanantha@novell.com) + + =head1 Date + + =over 4 + + =item * + + Created - 18th Jan 2001 + + =item * + + Modified - 25th June 2001 + + =item * + + Modified - 13 July 2001 + + =back + diff -c 'perl-5.7.1/README.os2' 'perl-5.7.2/README.os2' Index: ./README.os2 *** ./README.os2 Tue Mar 13 03:50:47 2001 --- ./README.os2 Mon Jul 9 17:09:46 2001 *************** *** 1053,1060 **** ports of '94 - 95. The priorities are absolute, go from 32 to -95, lower is quicker. 0 is the default priority. ! B. Calling C on a non-existing process can lock the ! system before Warp3 fixpak22. =head2 C --- 1053,1063 ---- ports of '94 - 95. The priorities are absolute, go from 32 to -95, lower is quicker. 0 is the default priority. ! B. Calling C on a non-existing process could lock ! the system before Warp3 fixpak22. Starting with Warp3, Perl will use ! a workaround: it aborts getpriority() if the process is not present. ! This is not possible on older versions C<2.*>, and has a race ! condition anyway. =head2 C *************** *** 1063,1069 **** L. When finding a program to run, Perl first asks the OS to look for executables ! on C. If not found, it looks for a script with possible extensions added in this order: no extension, F<.cmd>, F<.btm>, F<.bat>, F<.pl>. If found, Perl checks the start of the file for magic strings C<"#!"> and C<"extproc ">. If found, Perl uses the rest of the --- 1066,1073 ---- L. When finding a program to run, Perl first asks the OS to look for executables ! on C (OS/2 adds extension F<.exe> if no extension is present). ! If not found, it looks for a script with possible extensions added in this order: no extension, F<.cmd>, F<.btm>, F<.bat>, F<.pl>. If found, Perl checks the start of the file for magic strings C<"#!"> and C<"extproc ">. If found, Perl uses the rest of the *************** *** 1077,1084 **** extproc /bin/bash -x -c ! If F is not found, and appending of executable extensions to ! F does not help either, then Perl looks for an executable F on C. If found in F, then the above system() is translated to --- 1081,1087 ---- extproc /bin/bash -x -c ! If F is not found, then Perl looks for an executable F on C. If found in F, then the above system() is translated to *************** *** 1098,1103 **** --- 1101,1111 ---- current session, it will start the new process in a separate session of necessary type. Call via C to disable this magic. + B. Due to the described logic, you need to explicitly + specify F<.com> extension if needed. Moreover, if the executable + F is requested, Perl will not look for F. + [This may change in the future.] + =head2 C on the first line If the first chars of a Perl script are C<"extproc ">, this line is treated *************** *** 1748,1754 **** C and C are not compatible with earlier ports by Andreas Kaiser. See C<"setpriority, getpriority">. ! =head2 DLL name mangling With the release 5.003_01 the dynamically loadable libraries should be rebuilt when a different version of Perl is compiled. In particular, --- 1756,1762 ---- C and C are not compatible with earlier ports by Andreas Kaiser. See C<"setpriority, getpriority">. ! =head2 DLL name mangling: pre 5.6.2 With the release 5.003_01 the dynamically loadable libraries should be rebuilt when a different version of Perl is compiled. In particular, *************** *** 1782,1787 **** --- 1790,1925 ---- =back + =head2 DLL name mangling: 5.6.2 and beyond + + In fact mangling of I DLLs was done due to misunderstanding + of the OS/2 dynaloading model. OS/2 (effectively) maintains two + different tables of loaded DLL: + + =over + + =item Global DLLs + + those loaded by the base name from C; including those + associated at link time; + + =item specific DLLs + + loaded by the full name. + + =back + + When resolving a request for a global DLL, the table of already-loaded + specific DLLs is (effectively) ignored; moreover, specific DLLs are + I loaded from the prescribed path. + + There is/was a minor twist which makes this scheme fragile: what to do + with DLLs loaded from + + =over + + =item C and C + + (which depend on the process) + + =item F<.> from C + + which I depends on the process (although C is the + same for all the processes). + + =back + + Unless C is set to C (and the kernel is after + 2000/09/01), such DLLs are considered to be global. When loading a + global DLL it is first looked in the table of already-loaded global + DLLs. Because of this the fact that one executable loaded a DLL from + C and C, or F<.> from C may affect + I DLL is loaded when I executable requests a DLL with + the same name. I is the reason for version-specific mangling of + the DLL name for perl DLL. + + Since the Perl extension DLLs are always loaded with the full path, + there is no need to mangle their names in a version-specific ways: + their directory already reflects the corresponding version of perl, + and @INC takes into account binary compatibility with older version. + Starting from C<5.6.2> the name mangling scheme is fixed to be the + same as for Perl 5.005_53 (same as in a popular binary release). Thus + new Perls will be able to I of old extension DLLs + if @INC allows finding their directories. + + However, this still does not guarantie that these DLL may be loaded. + The reason is the mangling of the name of the I. And since + the extension DLLs link with the Perl DLL, extension DLLs for older + versions would load an older Perl DLL, and would most probably + segfault (since the data in this DLL is not properly initialized). + + There is a partial workaround (which can be made complete with newer + OS/2 kernels): create a forwarder DLL with the same name as the DLL of + the older version of Perl, which forwards the entry points to the + newer Perl's DLL. Make this DLL accessible on (say) the C of + the new Perl executable. When the new executable accesses old Perl's + extension DLLs, they would request the old Perl's DLL by name, get the + forwarder instead, so effectively will link with the currently running + (new) Perl DLL. + + This may break in two ways: + + =over + + =item * + + Old perl executable is started when a new executable is running has + loaded an extension compiled for the old executable (ouph!). In this + case the old executable will get a forwarder DLL instead of the old + perl DLL, so would link with the new perl DLL. While not directly + fatal, it will behave the same as new excutable. This beats the whole + purpose of explicitly starting an old executable. + + =item * + + A new executable loads an extension compiled for the old executable + when an old perl executable is running. In this case the extension + will not pick up the forwarder - with fatal results. + + =back + + With support for C this may be circumvented - unless + one of DLLs is started from F<.> from C (I do not know + whether C affects this case). + + B. Unless newer kernels allow F<.> in C (older + do not), this mess cannot be completely cleaned. + + + B. C, C and C are + not environment variables, although F emulates them on C lines. From Perl they may be accessed by L and + L. + + =head2 DLL forwarder generation + + Assume that the old DLL is named F (as is one for + 5.005_53), and the new version is 5.6.1. Create a file + F with + + LIBRARY 'perlE0AC' INITINSTANCE TERMINSTANCE + DESCRIPTION '@#perl5-porters@perl.org:5.006001#@ Perl module for 5.00553 -> Perl 5.6.1 forwarder' + CODE LOADONCALL + DATA LOADONCALL NONSHARED MULTIPLE + EXPORTS + + modifying the versions/names as needed. Run + + perl -wnle "next if 0../EXPORTS/; print qq( \"$1\") if /\"(\w+)\"/" perl5.def >lst + + in the Perl build directory (to make the DLL smaller replace perl5.def + with the definition file for the older version of Perl if present). + + cat perl5shim.def-leader lst >perl5shim.def + gcc -Zomf -Zdll -o perlE0AC.dll perl5shim.def -s -llibperl + + (ignore multiple C). + =head2 Threading As of release 5.003_01 perl is linked to multithreaded C RTL *************** *** 1901,1906 **** --- 2039,2049 ---- Note that these problems should not discourage experimenting, since they have a low probability of affecting small programs. + + =head1 BUGS + + This description was not updated since 5.6.1, see F for + more info. =cut diff -c 'perl-5.7.1/README.os390' 'perl-5.7.2/README.os390' Index: ./README.os390 *** ./README.os390 Mon Mar 26 21:35:04 2001 --- ./README.os390 Mon Jul 9 17:09:46 2001 *************** *** 1,9 **** - This document is written in pod format hence there are punctuation ! characters in odd places. Do not worry, you've apparently got ! the ASCII->EBCDIC translation worked out correctly. You can read ! more about pod in pod/perlpod.pod or the short summary in the ! INSTALL file. =head1 NAME --- 1,7 ---- This document is written in pod format hence there are punctuation ! characters in odd places. Do not worry, you've apparently got the ! ASCII->EBCDIC translation worked out correctly. You can read more ! about pod in pod/perlpod.pod or the short summary in the INSTALL file. =head1 NAME *************** *** 23,29 **** You may need to carry out some system configuration tasks before running the Configure script for Perl. ! =head2 Unpacking Gunzip/gzip for OS/390 is discussed at: --- 21,27 ---- You may need to carry out some system configuration tasks before running the Configure script for Perl. ! =head2 Unpacking Perl distribution on OS/390 Gunzip/gzip for OS/390 is discussed at: *************** *** 33,39 **** pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar ! =head2 Setup and utilities Be sure that your yacc installation is in place including any necessary parser template files. If you have not already done so then be sure to: --- 31,37 ---- pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar ! =head2 Setup and utilities for Perl on OS/390 Be sure that your yacc installation is in place including any necessary parser template files. If you have not already done so then be sure to: *************** *** 87,93 **** For successful testing you may need to turn on the sticky bit for your world readable /tmp directory if you have not already done so (see man chmod). ! =head2 Configure Once you've unpacked the distribution, run "sh Configure" (see INSTALL for a full discussion of the Configure options). There is a "hints" file --- 85,91 ---- For successful testing you may need to turn on the sticky bit for your world readable /tmp directory if you have not already done so (see man chmod). ! =head2 Configure Perl on OS/390 Once you've unpacked the distribution, run "sh Configure" (see INSTALL for a full discussion of the Configure options). There is a "hints" file *************** *** 156,162 **** =back ! =head2 Build, test, install Simply put: --- 154,160 ---- =back ! =head2 Build, Test, Install Perl on OS/390 Simply put: *************** *** 172,178 **** on how you answered the questions that Configure asked and whether or not you have write access to the directories you specified. ! =head2 build anomalies "Out of memory!" messages during the build of Perl are most often fixed by re building the GNU make utility for OS/390 from a source code kit. --- 170,176 ---- on how you answered the questions that Configure asked and whether or not you have write access to the directories you specified. ! =head2 Build Anomalies with Perl on OS/390 "Out of memory!" messages during the build of Perl are most often fixed by re building the GNU make utility for OS/390 from a source code kit. *************** *** 196,202 **** Socket extension then be sure to fix the syntax error in the system header /usr/include/sys/socket.h. ! =head2 testing anomalies The `make test` step runs a Perl Verification Procedure, usually before installation. You might encounter STDERR messages even during a successful --- 194,200 ---- Socket extension then be sure to fix the syntax error in the system header /usr/include/sys/socket.h. ! =head2 Testing Anomalies with Perl on OS/390 The `make test` step runs a Perl Verification Procedure, usually before installation. You might encounter STDERR messages even during a successful *************** *** 279,291 **** =back ! =head2 installation anomalies The installman script will try to run on OS/390. There will be fewer errors if you have a roff utility installed. You can obtain GNU groff from the Redbook SG24-5944-00 ftp site. ! =head2 Usage Hints When using perl on OS/390 please keep in mind that the EBCDIC and ASCII character sets are different. See perlebcdic.pod for more on such character --- 277,289 ---- =back ! =head2 Installation Anomalies with Perl on OS/390 The installman script will try to run on OS/390. There will be fewer errors if you have a roff utility installed. You can obtain GNU groff from the Redbook SG24-5944-00 ftp site. ! =head2 Usage Hints for Perl on OS/390 When using perl on OS/390 please keep in mind that the EBCDIC and ASCII character sets are different. See perlebcdic.pod for more on such character *************** *** 307,313 **** rlogin or telnet client. Try to avoid older 3270 emulators and ISHELL for working with Perl on USS. ! =head2 Floating point anomalies There appears to be a bug in the floating point implementation on S/390 systems such that calling int() on the product of a number and a small --- 305,311 ---- rlogin or telnet client. Try to avoid older 3270 emulators and ISHELL for working with Perl on USS. ! =head2 Floating Point Anomalies with Perl on OS/390 There appears to be a bug in the floating point implementation on S/390 systems such that calling int() on the product of a number and a small *************** *** 341,347 **** /* y is 0.000000e+00 and z is 1.000000e+05 (with c89) */ } ! =head2 Modules and Extensions Pure pure (that is non xs) modules may be installed via the usual: --- 339,345 ---- /* y is 0.000000e+00 and z is 1.000000e+05 (with c89) */ } ! =head2 Modules and Extensions for Perl on OS/390 Pure pure (that is non xs) modules may be installed via the usual: *************** *** 402,408 **** http://publibz.boulder.ibm.com:80/cgi-bin/bookmgr_OS390/BOOKS/CBCUG030/ ! =head2 Mailing list The Perl Institute (http://www.perl.org/) maintains a perl-mvs mailing list of interest to all folks building and/or --- 400,406 ---- http://publibz.boulder.ibm.com:80/cgi-bin/bookmgr_OS390/BOOKS/CBCUG030/ ! =head2 Mailing list for Perl on OS/390 The Perl Institute (http://www.perl.org/) maintains a perl-mvs mailing list of interest to all folks building and/or diff -c 'perl-5.7.1/README.plan9' 'perl-5.7.2/README.plan9' Index: ./README.plan9 *** ./README.plan9 Tue Mar 6 04:04:20 2001 --- ./README.plan9 Mon Jul 9 17:09:46 2001 *************** *** 1,27 **** WELCOME to Plan 9 Perl, brave soul! - This is a preliminary alpha version of Plan 9 Perl. Still to be implemented are MakeMaker and DynaLoader. Many perl commands are missing or currently behave in an inscrutable manner. These gaps will, with perserverance and a modicum of luck, be remedied in the near future.To install this software: ! 1. Create the source directories and libraries for perl by running the plan9/setup.rc command (i.e., located in the plan9 subdirectory). Note: the setup routine assumes that you haven't dearchived these files into /sys/src/cmd/perl. After running setup.rc you may delete the copy of the source you originally detarred, as source code has now been installed in /sys/src/cmd/perl. If you plan on installing perl binaries for all architectures, run "setup.rc -a". ! After ! 2. Making sure that you have adequate privileges to build system software, from /sys/src/cmd/perl/5.00301 run: ! mk install ! If you wish to install perl versions for all architectures (68020, mips, sparc and 386) run: ! mk installall ! 3. Wait. The build process will take a *long* time because perl bootstraps itself. A 75MHz Pentium, 16MB RAM machine takes roughly 30 minutes to build the distribution from scratch. ! INSTALLING DOCUMENTATION ! This perl distribution comes with a tremendous amount of documentation. To add these to the built-in manuals that come with Plan 9, from /sys/src/cmd/perl/5.00301 run: ! mk man To begin your reading, start with: - man perl - This is a good introduction and will direct you towards other man pages that may interest you. For information specific to Plan 9 Perl, try: - man perlplan9 (Note: "mk man" may produce some extraneous noise. Fear not.) ! Direct questions, comments, and the unlikely bug report (ahem) direct comments toward: ! lutherh@stratcom.com ! Luther Huffman Strategic Computer Solutions, Inc. --- 1,146 ---- + If you read this file _as_is_, just ignore the funny characters you see. + It is written in the POD format (see pod/perlpod.pod) which is specially + designed to be readable as is. + + =head1 NAME + + perlplan9 - Plan 9-specific documentation for Perl + + =head1 DESCRIPTION + + These are a few notes describing features peculiar to + Plan 9 Perl. As such, it is not intended to be a replacement + for the rest of the Perl 5 documentation (which is both + copious and excellent). If you have any questions to + which you can't find answers in these man pages, contact + Luther Huffman at lutherh@stratcom.com and we'll try to + answer them. + + =head2 Invoking Perl + + Perl is invoked from the command line as described in + L. Most perl scripts, however, do have a first line + such as "#!/usr/local/bin/perl". This is known as a shebang + (shell-bang) statement and tells the OS shell where to find + the perl interpreter. In Plan 9 Perl this statement should be + "#!/bin/perl" if you wish to be able to directly invoke the + script by its name. + Alternatively, you may invoke perl with the command "Perl" + instead of "perl". This will produce Acme-friendly error + messages of the form "filename:18". + + Some scripts, usually identified with a *.PL extension, are + self-configuring and are able to correctly create their own + shebang path from config information located in Plan 9 + Perl. These you won't need to be worried about. + + =head2 What's in Plan 9 Perl + + Although Plan 9 Perl currently only provides static + loading, it is built with a number of useful extensions. + These include Opcode, FileHandle, Fcntl, and POSIX. Expect + to see others (and DynaLoading!) in the future. + + =head2 What's not in Plan 9 Perl + + As mentioned previously, dynamic loading isn't currently + available nor is MakeMaker. Both are high-priority items. + + =head2 Perl5 Functions not currently supported in Plan 9 Perl + + Some, such as C and C aren't provided + because the concept does not exist within Plan 9. Others, + such as some of the socket-related functions, simply + haven't been written yet. Many in the latter category + may be supported in the future. + + The functions not currently implemented include: + + chown, chroot, dbmclose, dbmopen, getsockopt, + setsockopt, recvmsg, sendmsg, getnetbyname, + getnetbyaddr, getnetent, getprotoent, getservent, + sethostent, setnetent, setprotoent, setservent, + endservent, endnetent, endprotoent, umask + + There may be several other functions that have undefined + behavior so this list shouldn't be considered complete. + + =head2 Signals in Plan 9 Perl + + For compatibility with perl scripts written for the Unix + environment, Plan 9 Perl uses the POSIX signal emulation + provided in Plan 9's ANSI POSIX Environment (APE). Signal stacking + isn't supported. The signals provided are: + + SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGABRT, + SIGFPE, SIGKILL, SIGSEGV, SIGPIPE, SIGPIPE, SIGALRM, + SIGTERM, SIGUSR1, SIGUSR2, SIGCHLD, SIGCONT, + SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU + + =head1 COMPILING AND INSTALLING PERL ON PLAN 9 + WELCOME to Plan 9 Perl, brave soul! ! This is a preliminary alpha version of Plan 9 Perl. Still to be ! implemented are MakeMaker and DynaLoader. Many perl commands are ! missing or currently behave in an inscrutable manner. These gaps will, ! with perserverance and a modicum of luck, be remedied in the near ! future.To install this software: ! 1. Create the source directories and libraries for perl by running the ! plan9/setup.rc command (i.e., located in the plan9 subdirectory). ! Note: the setup routine assumes that you haven't dearchived these ! files into /sys/src/cmd/perl. After running setup.rc you may delete ! the copy of the source you originally detarred, as source code has now ! been installed in /sys/src/cmd/perl. If you plan on installing perl ! binaries for all architectures, run "setup.rc -a". ! 2. After making sure that you have adequate privileges to build system ! software, from /sys/src/cmd/perl/5.00301 (adjust version ! appropriately) run: ! ! mk install ! ! If you wish to install perl versions for all architectures (68020, ! mips, sparc and 386) run: ! ! mk installall ! ! 3. Wait. The build process will take a *long* time because perl ! bootstraps itself. A 75MHz Pentium, 16MB RAM machine takes roughly 30 ! minutes to build the distribution from scratch. ! ! =head2 Installing Perl Documentation on Plan 9 ! ! This perl distribution comes with a tremendous amount of ! documentation. To add these to the built-in manuals that come with ! Plan 9, from /sys/src/cmd/perl/5.00301 (adjust version appropriately) ! run: ! ! mk man ! To begin your reading, start with: + man perl + + This is a good introduction and will direct you towards other man + pages that may interest you. + (Note: "mk man" may produce some extraneous noise. Fear not.) ! =head1 BUGS ! "As many as there are grains of sand on all the beaches of the ! world . . ." - Carl Sagan ! ! =head1 Revision date ! ! This document was revised 09-October-1996 for Perl 5.003_7. ! ! =head1 AUTHOR ! ! Direct questions, comments, and the unlikely bug report (ahem) direct ! comments toward: ! ! Luther Huffman, lutherh@stratcom.com, Strategic Computer Solutions, Inc. diff -c 'perl-5.7.1/README.qnx' 'perl-5.7.2/README.qnx' Index: ./README.qnx *** ./README.qnx Tue Mar 6 04:04:20 2001 --- ./README.qnx Thu Jul 12 20:36:17 2001 *************** *** 1,22 **** ! README.qnx ! Please see hints/qnx.sh for more detailed information about compiling ! perl under QNX4. The files in the "qnx" directory are: ! * "qnx/ar" is a script that emulates the standard unix archive (aka ! library) utility. Under Watcom 10.6, ar is linked to wlib and ! provides the expected interface. With Watcom 9.5, a cover function ! is required. This one is fairly crude but has proved adequate for ! compiling perl. A more thorough version is available at: http://www.fdma.com/pub/qnx/porting/ar ! * "qnx/cpp" is a script that provides C preprocessing functionality. ! Configure can generate a similar cover, but it doesn't handle all ! the command-line options that perl throws at it. This might be ! reasonably placed in /usr/local/bin. ! -- Norton T. Allen (allen@huarp.harvard.edu) --- 1,126 ---- ! If you read this file _as_is_, just ignore the funny characters you see. ! It is written in the POD format (see pod/perlpod.pod) which is specially ! designed to be readable as is. ! =head1 NAME + README.qnx - Perl version 5 on QNX + + =head1 DESCRIPTION + + As of perl5.7.2 all tests pass under: + + QNX 4.24G + Watcom 10.6 with Beta/970211.wcc.update.tar.F + socket3r.lib Nov21 1996. + + Some tests may complain under known circumstances. See + below and hints/qnx.sh for more information. + + Under QNX 6.1.0 there are still a few tests which fail. + See below and hints/qnx.sh for more information. + + =head2 Required Software for Compiling Perl on QNX4 + + As with many unix ports, this one depends on a few "standard" + unix utilities which are not necessarily standard for QNX4. + + =over 4 + + =item /bin/sh + + This is used heavily by Configure and then by + perl itself. QNX4's version is fine, but Configure + will choke on the 16-bit version, so if you are + running QNX 4.22, link /bin/sh to /bin32/ksh + + =item ar + + This is the standard unix library builder. + We use wlib. With Watcom 10.6, when wlib is + linked as "ar", it behaves like ar and all is + fine. Under 9.5, a cover is required. One is + included in ../qnx + + =item nm + + This is used (optionally) by configure to list + the contents of libraries. I will generate + a cover function on the fly in the UU directory. + + =item cpp + + Configure and perl need a way to invoke a C + preprocessor. I have created a simple cover + for cc which does the right thing. Without this, + Configure will create its own wrapper which works, + but it doesn't handle some of the command line arguments + that perl will throw at it. + + =item make + + You really need GNU make to compile this. GNU make + ships by default with QNX 4.23, but you can get it + from quics for earlier versions. + + =back + + =head2 Outstanding Issues with Perl on QNX4 + + There is no support for dynamically linked libraries in QNX4. + + The following tests may report errors under QNX4: + + ext/Cwd/Cwd.t will complain if `pwd` and cwd don't give + the same results. cwd calls `fullpath -t`, so if you + cd `fullpath -t` before running the test, it will + pass. + + lib/File/Find/taint.t will complain if '.' is in your + PATH. The PATH test is triggered because cwd calls + `fullpath -t`. + + ext/IO/lib/IO/t/io_sock.t: Subtest 14 is skipped due to + the fact that the functionality to read back the non-blocking + status of a socket is not implemented in QNX's TCP/IP. This + has been reported to QNX and it may work with later versions + of TCP/IP. + + =head2 QNX auxiliary files + The files in the "qnx" directory are: ! =over 4 + =item qnx/ar + + A script that emulates the standard unix archive (aka library) + utility. Under Watcom 10.6, ar is linked to wlib and provides the + expected interface. With Watcom 9.5, a cover function is + required. This one is fairly crude but has proved adequate for + compiling perl. A more thorough version is available at: + http://www.fdma.com/pub/qnx/porting/ar ! =item qnx/cpp ! A script that provides C preprocessing functionality. Configure can ! generate a similar cover, but it doesn't handle all the command-line ! options that perl throws at it. This might be reasonably placed in ! /usr/local/bin. ! ! =head2 Outstanding issues with perl under QNX6 ! ! The following tests are still failing for Perl 5.7.1 under QNX 6.1.0: ! ! op/sprintf.........................FAILED at test 91 ! lib/1_compile......................FAILED at test 33 ! ext/IO/lib/IO/t/io_sock............FAILED at test 12 ! ext/IO/lib/IO/t/io_udp.............FAILED at test 4 ! ! =back ! ! =head1 AUTHOR ! Norton T. Allen (allen@huarp.harvard.edu) + diff -c 'perl-5.7.1/README.solaris' 'perl-5.7.2/README.solaris' Index: ./README.solaris Prereq: 1.4 *** ./README.solaris Tue Mar 6 04:04:20 2001 --- ./README.solaris Mon Jul 9 17:09:46 2001 *************** *** 47,53 **** =head1 RESOURCES ! There are many, many source for Solaris information. A few of the important ones for perl: =over 4 --- 47,53 ---- =head1 RESOURCES ! There are many, many sources for Solaris information. A few of the important ones for perl: =over 4 *************** *** 63,79 **** =item Precompiled Binaries Precompiled binaries, links to many sites, and much, much more is ! available at L. =item Solaris Documentation ! All Solaris documentation is available on-line at L. =back =head1 SETTING UP ! =head2 File Extraction Problems. Be sure to use a tar program compiled under Solaris (not SunOS 4.x) to extract the perl-5.x.x.tar.gz file. Do not use GNU tar compiled --- 63,79 ---- =item Precompiled Binaries Precompiled binaries, links to many sites, and much, much more is ! available at L. =item Solaris Documentation ! All Solaris documentation is available on-line at L. =back =head1 SETTING UP ! =head2 File Extraction Problems on Solaris. Be sure to use a tar program compiled under Solaris (not SunOS 4.x) to extract the perl-5.x.x.tar.gz file. Do not use GNU tar compiled *************** *** 81,91 **** When you run SunOS4 binaries on Solaris, the run-time system magically alters pathnames matching m#lib/locale# so that when tar tries to create lib/locale.pm, a file named lib/oldlocale.pm gets created instead. ! If you found this advice it too late and used a SunOS4-compiled tar anyway, you must find the incorrectly renamed file and move it back to lib/locale.pm. ! =head2 Compiler and Related Tools. You must use an ANSI C compiler to build perl. Perl can be compiled with either Sun's add-on C compiler or with gcc. The C compiler that --- 81,91 ---- When you run SunOS4 binaries on Solaris, the run-time system magically alters pathnames matching m#lib/locale# so that when tar tries to create lib/locale.pm, a file named lib/oldlocale.pm gets created instead. ! If you found this advice too late and used a SunOS4-compiled tar anyway, you must find the incorrectly renamed file and move it back to lib/locale.pm. ! =head2 Compiler and Related Tools on Solaris. You must use an ANSI C compiler to build perl. Perl can be compiled with either Sun's add-on C compiler or with gcc. The C compiler that *************** *** 197,203 **** Configure from even looking in /usr/ucblib for libraries, and also explicitly omits -lucb. ! =head2 Environment =head3 PATH --- 197,203 ---- Configure from even looking in /usr/ucblib for libraries, and also explicitly omits -lucb. ! =head2 Environment for Compiling Perl on Solaris =head3 PATH *************** *** 234,240 **** Only Solaris-specific issues are discussed here. Usually, the defaults should be fine. ! =head2 64-bit Issues. See the INSTALL file for general information regarding 64-bit compiles. In general, the defaults should be fine for most people. --- 234,240 ---- Only Solaris-specific issues are discussed here. Usually, the defaults should be fine. ! =head2 64-bit Issues with Perl on Solaris. See the INSTALL file for general information regarding 64-bit compiles. In general, the defaults should be fine for most people. *************** *** 258,264 **** and this is the default for perl-5.6.0. For a more complete explanation of 64-bit issues, see the Solaris 64-bit ! Developer's Guide at http://docs.sun.com:80/ab2/coll.45.13/SOL64TRANS/ You can detect the OS mode using "isainfo -v", e.g. --- 258,264 ---- and this is the default for perl-5.6.0. For a more complete explanation of 64-bit issues, see the Solaris 64-bit ! Developer's Guide at L You can detect the OS mode using "isainfo -v", e.g. *************** *** 270,276 **** want to allocate more than ~ 4GB of memory inside Perl, you probably don't need Perl to be a 64-bit app. ! =head3 Large File Suppprt For Solaris 2.6 and onwards, there are two different ways for 32-bit applications to manipulate large files (files whose size is > 2GByte). --- 270,276 ---- want to allocate more than ~ 4GB of memory inside Perl, you probably don't need Perl to be a 64-bit app. ! =head3 Large File Support For Solaris 2.6 and onwards, there are two different ways for 32-bit applications to manipulate large files (files whose size is > 2GByte). *************** *** 362,368 **** As of 5.6.0, long doubles are not working. ! =head2 Threads. It is possible to build a threaded version of perl on Solaris. The entire perl thread implementation is still experimental, however, so beware. --- 362,368 ---- As of 5.6.0, long doubles are not working. ! =head2 Threads in Perl on Solaris. It is possible to build a threaded version of perl on Solaris. The entire perl thread implementation is still experimental, however, so beware. *************** *** 370,376 **** to 2.6, that function is in -lposix4. Starting with Solaris 7, it is in -lrt. The hints file should handle adding this automatically. ! =head2 Malloc Issues. Starting from Perl 5.7.1 Perl uses the Solaris malloc, since the perl malloc breaks when dealing with more than 2GB of memory, and the Solaris --- 370,376 ---- to 2.6, that function is in -lposix4. Starting with Solaris 7, it is in -lrt. The hints file should handle adding this automatically. ! =head2 Malloc Issues with Perl on Solaris. Starting from Perl 5.7.1 Perl uses the Solaris malloc, since the perl malloc breaks when dealing with more than 2GB of memory, and the Solaris *************** *** 385,391 **** You should not use perl's malloc if you are building with gcc. There are reports of core dumps, especially in the PDL module. The problem appears to go away under -DDEBUGGING, so it has been difficult to ! track down. Sun's compiler appears to be ok with or without perl's malloc. [XXX further investigation is needed here.] =head1 MAKE PROBLEMS. --- 385,391 ---- You should not use perl's malloc if you are building with gcc. There are reports of core dumps, especially in the PDL module. The problem appears to go away under -DDEBUGGING, so it has been difficult to ! track down. Sun's compiler appears to be okay with or without perl's malloc. [XXX further investigation is needed here.] =head1 MAKE PROBLEMS. *************** *** 431,437 **** =head1 MAKE TEST ! =head2 op/stat.t test 4 op/stat.t test 4 may fail if you are on a tmpfs of some sort. Building in /tmp sometimes shows this behavior. The --- 431,437 ---- =head1 MAKE TEST ! =head2 op/stat.t test 4 in Solaris op/stat.t test 4 may fail if you are on a tmpfs of some sort. Building in /tmp sometimes shows this behavior. The *************** *** 438,444 **** test suite detects if you are building in /tmp, but it may not be able to catch all tmpfs situations. ! =head1 PREBUILT BINARIES. You can pick up prebuilt binaries for Solaris from L, ActiveState L, --- 438,444 ---- test suite detects if you are building in /tmp, but it may not be able to catch all tmpfs situations. ! =head1 PREBUILT BINARIES OF PERL FOR SOLARIS. You can pick up prebuilt binaries for Solaris from L, ActiveState L, *************** *** 446,454 **** There are probably other sources as well. Please note that these sites are under the control of their respective owners, not the perl developers. ! =head1 RUNTIME ISSUES. ! =head2 Limits on Numbers of Open Files. The stdio(3C) manpage notes that only 255 files may be opened using fopen(), and only file descriptors 0 through 255 can be used in a --- 446,454 ---- There are probably other sources as well. Please note that these sites are under the control of their respective owners, not the perl developers. ! =head1 RUNTIME ISSUES FOR PERL ON SOLARIS. ! =head2 Limits on Numbers of Open Files on Solaris. The stdio(3C) manpage notes that only 255 files may be opened using fopen(), and only file descriptors 0 through 255 can be used in a *************** *** 463,469 **** =head1 SOLARIS-SPECIFIC PROBLEMS WITH MODULES. ! =head2 Proc::ProcessTable Proc::ProcessTable does not compile on Solaris with perl5.6.0 and higher if you have LARGEFILES defined. Since largefile support is the --- 463,469 ---- =head1 SOLARIS-SPECIFIC PROBLEMS WITH MODULES. ! =head2 Proc::ProcessTable on Solaris Proc::ProcessTable does not compile on Solaris with perl5.6.0 and higher if you have LARGEFILES defined. Since largefile support is the *************** *** 483,495 **** Proc::ProcessTable doesn't try to share off_t's with the rest of perl, or if it does they should be explicitly specified as off64_t. ! =head2 BSD::Resource BSD::Resource versions earlier than 1.09 do not compile on Solaris with perl 5.6.0 and higher, for the same reasons as Proc::ProcessTable. BSD::Resource versions starting from 1.09 have a workaround for the problem. ! =head2 Net::SSLeay Net::SSLeay requires a /dev/urandom to be present. This device is not part of Solaris. You can either get the package SUNWski (packaged with --- 483,495 ---- Proc::ProcessTable doesn't try to share off_t's with the rest of perl, or if it does they should be explicitly specified as off64_t. ! =head2 BSD::Resource on Solaris BSD::Resource versions earlier than 1.09 do not compile on Solaris with perl 5.6.0 and higher, for the same reasons as Proc::ProcessTable. BSD::Resource versions starting from 1.09 have a workaround for the problem. ! =head2 Net::SSLeay on Solaris Net::SSLeay requires a /dev/urandom to be present. This device is not part of Solaris. You can either get the package SUNWski (packaged with diff -c /dev/null 'perl-5.7.2/README.tru64' Index: ./README.tru64 *** ./README.tru64 Thu Jan 1 02:00:00 1970 --- ./README.tru64 Mon Jul 9 17:09:46 2001 *************** *** 0 **** --- 1,90 ---- + If you read this file _as_is_, just ignore the funny characters you see. + It is written in the POD format (see pod/perlpod.pod) which is specially + designed to be readable as is. + + =head1 NAME + + README.tru64 - Perl version 5 on Tru64 (formerly known as Digital UNIX formerly known as DEC OSF/1) systems + + =head1 DESCRIPTION + + This document describes various features of Compaq's (formerly Digital's) + Unix operating system (Tru64) that will affect how Perl version 5 + is compiled and/or runs. + + =head2 Compiling Perl 5 on Tru64 + + The recommended compiler to use in Tru64 is the native C compiler. + The native compiler produces much faster code (the speed difference + is noticeable: several dozen percentages) and also more correct code: + if you are considering using the GNU C compiler you should use the + gcc 2.95.3 since all older gcc releases are known to produce broken + code when compiling Perl. One manifestation of this brokenness is + the lib/sdbm test dumping core; another is the op/regexp dumping core + (depending on the GCC release). + + =head2 Using Large Files with Perl on Tru64 + + In Tru64 Perl is automatically able to use large files, that is, files + larger than 2 gigabytes, there is no need to use the Configure + -Duselargefiles option as described in INSTALL. + + =head2 Threaded Perl on Tru64 + + To compile Perl to use the old Perl 5.005 threads model, run Configure + with the -Dusethreads -Duse5005threads options as described in INSTALL. + This will probably only work in Tru64 4.0 and newer releases, older + operating releases like 3.2 aren't probably going to work properly + with threads. + + Beware: the Perl 5.005 threads model is known to have bugs, for + example the regular expressions are not thread-safe. The bugs are + very hard to fix are and therefore the 5.005 threads model is still + classified as an experimental feature. + + =head2 Long Doubles on Tru64 + + You cannot Configure Perl to use long doubles unless you have at least + Tru64 V5.0, the long double support simply wasn't functional before + that. + + =head2 64-bit Perl on Tru64 + + In Tru64 Perl's integers are automatically 64-bit wide, there is + no need to use the Configure -Duse64bitint option as described + in INSTALL. Similarly, there is no need for -Duse64bitall. + + =head2 Warnings about floating-point overflow when compiling Perl on Tru64 + + When compiling Perl in Tru64 you may (depending on the compiler + release) see two warnings like this + + cc: Warning: numeric.c, line 104: In this statement, floating-point overflow occurs in evaluating the expression "1.8e308". (floatoverfl) + return HUGE_VAL; + -----------^ + + cc: Warning: POSIX.xs, line 1304: In this statement, floating-point overflow occurs in evaluating the expression "1.8e308". (floatoverfl) + return HUGE_VAL; + -------------------^ + + The exact line numbers may vary between Perl releases. + The warnings are benign and can be ignored. + + When the file F is being compiled you may (depending on the + operating system release) see an additional compiler flag being used: + C<-DNO_EFF_ONLY_OK>. This is normal and refers to a feature that is + relevant only if you use the C pragma. In older releases of + the operating system the feature was broken and the NO_EFF_ONLY_OK + instructs Perl not to use the feature. + + =head1 Testing Perl on Tru64 + + During "make test" the C will be skipped because on Tru64 it + cannot be tested before Perl has been installed. The test refers to + the use of the C<-P> option of Perl. + + =head1 AUTHOR + + Jarkko Hietaniemi + + =cut diff -c /dev/null 'perl-5.7.2/README.uts' Index: ./README.uts *** ./README.uts Thu Jan 1 02:00:00 1970 --- ./README.uts Thu Jul 12 21:55:51 2001 *************** *** 0 **** --- 1,107 ---- + If you read this file _as_is_, just ignore the funny characters you + see. It is written in the POD format (see perlpod manpage) which is + specially designed to be readable as is. + + =head1 NAME + + perluts - Perl under UTS + + =head1 SYNOPSIS + + This document can be read I: as F, or you + can read it after you build your package using "man perluts". + + The purpose is to help you build Perl for UTS, which, if you + follow these instructions, should be easy, and result in + a solidly working installation. + + =head1 DESCRIPTION + + Perl 5.7.2 (Developmental) or Perl 5.8.x (forthcoming) for UTS + + =head1 BUILDING PERL ON UTS + + NOTE: Some sites have redefined the way uname works, and if yours + does this, special steps must be taken so that Configure can + recognize your system as a UTS system. To see if you are in + this category, issue the command "uname -a". It should look + something like: + + uts juno 4 4.4 9672 370 + + At any rate, the first field should be "uts". If this is not + the case; supposing it is, say telcoUTS, create a script, uts/uname + (i.e. uname, in the subdirectory "uts" of the main Perl source dir): + # uname + /usr/bin/uname "$@" | sed -e 's/^telcoUTS/uts/' + + and when you execute Configure, do it as below, except for adding + PATH=uts:$PATH as a prefix. I.e. do: + + PATH=uts:$PATH ./Configure ... + + There is no need to do an interactive configure, just type + + ./Configure -de [-Dusedevel] [-Doptimize=-g ] 2>&1 | tee Conf.out + + "-Dusedevel" may be required to configure Perl 5.7.2 non-interactively. + Use -Doptimize=-g if you want to run Perl under sdb or gdb, OR + if you want to be able to use the -D command line flags to perl, + which are occasionally useful in debugging perl scripts. + + In this and the following steps, the "2>&1 | tee XXX.out" records all + output from the process, which will be useful if anything unexpected + goes wrong. + + Then do the compilation with + + make 2>&1 | tee make.out + + Finally, test using + + make test 2>&1 | tee make-test.out + + In the output, the only failures you should see should look like: + + lib/Math/BigInt/t/bigfltpm.........Use of uninitialized value ... + FAILED at test 57 + lib/Math/BigInt/t/bigintc..........ok + lib/Math/BigInt/t/bigintpm.........FAILED at test 204 + lib/Math/BigInt/t/mbimbf...........Use of uninitialized value ... + Illegal division by zero at ../lib/Math/BigInt/Calc.pm line 314. + FAILED at test 71 + lib/Math/Complex...................exp: OVERFLOW + FAILED at test 250 + lib/Math/Trig......................exp: OVERFLOW + ok + lib/Memoize/t/array................ok + ... + lib/Net/protoent...................ok + lib/Net/servent....................FAILED at test 0 + + This means that everything passes except for some problems in the + packages "Math::BigInt", "Math::Complex", and "Math::Trig". + The lib/Net/servent failure seems to be a bug in the test + program. To confirm this, from the main Perl source dir, do: + + LD_LIBRARY_PATH=`pwd` ./perl -Ilib lib/Net/servent.t + + and it should output + + 1..3 + ok 1 + ok 2 + ok 3 + + =head1 Installing the built perl on UTS + + Run the command "make install" + + =head1 AUTHOR + + Hal Morris + UTS Global LLC + email: hom00@utsglobal.com + + =cut + diff -c 'perl-5.7.1/README.vmesa' 'perl-5.7.2/README.vmesa' Index: ./README.vmesa *** ./README.vmesa Mon Mar 19 20:59:13 2001 --- ./README.vmesa Mon Jul 9 17:09:46 2001 *************** *** 26,38 **** installed by default). You may need to worry about the networking configuration files discussed in the last bullet below. ! =head2 Unpacking To extract an ASCII tar archive on VM/ESA, try this: pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar ! =head2 Setup and utilities GNU make for VM/ESA, which may be required for the build of perl, is available from: --- 26,38 ---- installed by default). You may need to worry about the networking configuration files discussed in the last bullet below. ! =head2 Unpacking Perl Distribution on VM/ESA To extract an ASCII tar archive on VM/ESA, try this: pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar ! =head2 Setup Perl and utilities on VM/ESA GNU make for VM/ESA, which may be required for the build of perl, is available from: *************** *** 39,45 **** http://pucc.princeton.edu/~neale/vmoe.html ! =head2 Configure Once you've unpacked the distribution, run Configure (see INSTALL for full discussion of the Configure options), and then run make, then --- 39,45 ---- http://pucc.princeton.edu/~neale/vmoe.html ! =head2 Configure Perl on VM/ESA Once you've unpacked the distribution, run Configure (see INSTALL for full discussion of the Configure options), and then run make, then *************** *** 56,68 **** this port does support dynamic loading but it's not had much testing =item * ! Don't turn on the compiler optimization flag "-O". There's a bug in the compiler (APAR PQ18812) that generates some bad code the optimizer is on. =item * ! As VM/ESA doesn't fully support the fork() API programs relying on this call will not work. I've replaced fork()/exec() with spawn() and the standalone exec() with spawn(). This has a side effect when --- 56,68 ---- this port does support dynamic loading but it's not had much testing =item * ! Don't turn on the compiler optimization flag "-O". There's a bug in the compiler (APAR PQ18812) that generates some bad code the optimizer is on. =item * ! As VM/ESA doesn't fully support the fork() API programs relying on this call will not work. I've replaced fork()/exec() with spawn() and the standalone exec() with spawn(). This has a side effect when *************** *** 79,85 **** =back ! =head2 testing anomalies The `make test` step runs a Perl Verification Procedure, usually before installation. As the 5.6.1 kit was was being assembled --- 79,85 ---- =back ! =head2 Testing Anomalies of Perl on VM/ESA The `make test` step runs a Perl Verification Procedure, usually before installation. As the 5.6.1 kit was was being assembled *************** *** 89,96 **** [the list of failures being compiled] ! =head2 Usage Hints ! When using perl on VM/ESA please keep in mind that the EBCDIC and ASCII character sets are different. Perl builtin functions that may behave differently under EBCDIC are mentioned in the perlport.pod document. --- 89,96 ---- [the list of failures being compiled] ! =head2 Usage Hints for Perl on VM/ESA ! When using perl on VM/ESA please keep in mind that the EBCDIC and ASCII character sets are different. Perl builtin functions that may behave differently under EBCDIC are mentioned in the perlport.pod document. *************** *** 112,123 **** L, L, L. ! =head2 Mailing list ! If you are interested in the VM and OS/390 ports of perl then see the ! perl-mvs mailing list: The Perl Institute (http://www.perl.org/) ! maintains a mailing list of interest to all folks building and/or ! using perl on EBCDIC platforms. To subscribe, send a message of: subscribe perl-mvs --- 112,124 ---- L, L, L. ! =head2 Mailing list for Perl on VM/ESA ! If you are interested in the VM/ESA, z/OS (formerly known as OS/390) ! and POSIX-BC (BS2000) ports of Perl then see the perl-mvs mailing list: ! The Perl Institute (http://www.perl.org/) maintains a mailing list of ! interest to all folks building and/or using perl on EBCDIC platforms. ! To subscribe, send a message of: subscribe perl-mvs diff -c 'perl-5.7.1/README.vms' 'perl-5.7.2/README.vms' Index: ./README.vms *** ./README.vms Fri Apr 6 01:51:37 2001 --- ./README.vms Mon Jul 9 17:09:46 2001 *************** *** 36,42 **** instead. ! =head2 Introduction The VMS port of Perl is as functionally complete as any other Perl port (and as complete as the ports on some Unix systems). The Perl binaries --- 36,42 ---- instead. ! =head2 Introduction to Perl on VMS The VMS port of Perl is as functionally complete as any other Perl port (and as complete as the ports on some Unix systems). The Perl binaries *************** *** 59,65 **** relatively modern version, check the "DEC C issues" section later on in this document. ! =head2 Other required software In addition to VMS and DCL you will need two things: --- 59,65 ---- relatively modern version, check the "DEC C issues" section later on in this document. ! =head2 Other required software for Compiling Perl on VMS In addition to VMS and DCL you will need two things: *************** *** 79,85 **** =back ! =head2 Additional software that is optional You may also want to have on hand: --- 79,85 ---- =back ! =head2 Additional software that is optional for Perl on VMS You may also want to have on hand: *************** *** 180,185 **** --- 180,187 ---- T "LOGICAL" FOO "LOGICAL" EXT "LOGICAL" + SOME_LOGICAL_NAME_NOT_LIKELY "LOGICAL" + DOWN_LOGICAL_NAME_NOT_LIKELY "LOGICAL" TEST "SYMBOL" As a handy shortcut, the command: *************** *** 205,211 **** fresh (optional)" and the checklist of items in the "CAVEATS" sections below. ! =head2 Changing compile-time options (optional) Most of the user definable features of Perl are enabled or disabled in [.VMS]CONFIG.VMS. There is code in there to Do The Right Thing, but that --- 207,213 ---- fresh (optional)" and the checklist of items in the "CAVEATS" sections below. ! =head2 Changing compile-time options (optional) for Perl on VMS Most of the user definable features of Perl are enabled or disabled in [.VMS]CONFIG.VMS. There is code in there to Do The Right Thing, but that *************** *** 222,228 **** requires changes in genconfig.pl as well. Be really careful if you need to change these, as they can cause some fairly subtle problems. ! =head2 Socket Support (optional) Perl includes a number of functions for IP sockets, which are available if you choose to compile Perl with socket support. Since IP networking is an --- 224,230 ---- requires changes in genconfig.pl as well. Be really careful if you need to change these, as they can cause some fairly subtle problems. ! =head2 Socket Support (optional) for Perl on VMS Perl includes a number of functions for IP sockets, which are available if you choose to compile Perl with socket support. Since IP networking is an *************** *** 320,326 **** MMK you are running try "MMS/ident" or "MMK /ident". The GNU make version can be identified with "make --version". ! =head2 Cleaning up and starting fresh (optional) If you need to recompile from scratch, you have to make sure you clean up first. There is a procedure to do it--enter the *exact* MMS line you used --- 322,328 ---- MMK you are running try "MMS/ident" or "MMK /ident". The GNU make version can be identified with "make --version". ! =head2 Cleaning up and starting fresh (optional) installing Perl on VMS If you need to recompile from scratch, you have to make sure you clean up first. There is a procedure to do it--enter the *exact* MMS line you used *************** *** 406,412 **** See also the "INSTALLing images (optional)" section. ! =head2 Installing Perl into DCLTABLES (optional) Execute the following command file to define PERL as a DCL command. You'll need CMKRNL privilege to install the new dcltables.exe. --- 408,414 ---- See also the "INSTALLing images (optional)" section. ! =head2 Installing Perl into DCLTABLES (optional) on VMS Execute the following command file to define PERL as a DCL command. You'll need CMKRNL privilege to install the new dcltables.exe. *************** *** 424,430 **** $ install replace sys$common:[syslib]dcltables.exe $ exit ! =head2 INSTALLing images (optional) On systems that are using perl quite a bit, and particularly those with minimal RAM, you can boost the performance of perl by INSTALLing it as --- 426,432 ---- $ install replace sys$common:[syslib]dcltables.exe $ exit ! =head2 INSTALLing Perl images (optional) on VMS On systems that are using perl quite a bit, and particularly those with minimal RAM, you can boost the performance of perl by INSTALLing it as *************** *** 492,498 **** build. If things go wrong make sure you do a "(MMK|MMS|make) realclean" before you rebuild. ! =head2 DEC C issues Note to DEC C users: Some early versions (pre-5.2, some pre-4. If you're DEC C 5.x or higher, with current patches if any, you're fine) of the DECCRTL --- 494,500 ---- build. If things go wrong make sure you do a "(MMK|MMS|make) realclean" before you rebuild. ! =head2 DEC C issues with Perl on VMS Note to DEC C users: Some early versions (pre-5.2, some pre-4. If you're DEC C 5.x or higher, with current patches if any, you're fine) of the DECCRTL *************** *** 529,535 **** Please note that in later versions "DEC C" may also be known as "Compaq C". ! =head2 GNU issues It has been a while since the GNU utilities such as GCC or GNU make were used to build perl on VMS. Hence they may require a great deal --- 531,537 ---- Please note that in later versions "DEC C" may also be known as "Compaq C". ! =head2 GNU issues with Perl on VMS It has been a while since the GNU utilities such as GCC or GNU make were used to build perl on VMS. Hence they may require a great deal *************** *** 553,563 **** on the web at: http://www.xray.mpe.mpg.de/mailing-lists/vmsperl/ ! To unsubscribe from VMSPERL send a message to VMSPERL-UNSUBSCRIBE@PERL.ORG. Be sure to do so from the subscribed account that you are canceling. ! =head2 Web sites Vmsperl pages on the web include: --- 555,565 ---- on the web at: http://www.xray.mpe.mpg.de/mailing-lists/vmsperl/ ! To unsubscribe from VMSPERL send a message to VMSPERL-UNSUBSCRIBE@PERL.ORG. Be sure to do so from the subscribed account that you are canceling. ! =head2 Web sites for Perl on VMS Vmsperl pages on the web include: diff -c 'perl-5.7.1/README.vos' 'perl-5.7.2/README.vos' Index: ./README.vos *** ./README.vos Tue Mar 6 04:04:20 2001 --- ./README.vos Mon Jul 9 17:09:46 2001 *************** *** 8,16 **** =head1 SYNOPSIS ! This is a port of Perl version 5, revision 7, to VOS. Perl is a ! scripting or macro language that is popular on many systems. See your ! local computer bookstore for a number of good books on Perl. =head2 Stratus POSIX Support --- 8,16 ---- =head1 SYNOPSIS ! This is a port of Perl version 5 to VOS. Perl is a scripting or ! macro language that is popular on many systems. See your local ! computer bookstore for a number of good books on Perl. =head2 Stratus POSIX Support *************** *** 17,26 **** Note that there are two different implementations of POSIX.1 support on VOS. There is an alpha version of POSIX that is available from the Stratus anonymous ftp site ! (ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html). There ! is a generally-available version of POSIX that comes with the ! VOS Standard C compiler and C runtime in VOS Release 14.3.0 or ! higher. This port of POSIX will compile and bind with either version of POSIX. Most of the Perl features should work on VOS regardless of which --- 17,26 ---- Note that there are two different implementations of POSIX.1 support on VOS. There is an alpha version of POSIX that is available from the Stratus anonymous ftp site ! (ftp://ftp.stratus.com/pub/vos/posix/alpha/alpha.html). There is ! a generally-available version of POSIX that comes with the VOS ! Standard C Compiler or VOS C runtime in VOS Release 14.3.0 or ! higher. This port of perl will compile and bind with either version of POSIX. Most of the Perl features should work on VOS regardless of which *************** *** 29,39 **** attempt by perl.pm to call the following unimplemented POSIX functions will result in an error message and an immediate and fatal call to the VOS debugger. They are "dup", "fork", and ! "waitpid". The lack of these functions pretty much prevents you ! from starting VOS commands and grabbing their output in perl. ! The workaround is to run the commands outside of perl, then have ! perl process the output file. These functions are all available ! in the generally-available version of POSIX. =head1 INSTALLING PERL IN VOS --- 29,39 ---- attempt by perl.pm to call the following unimplemented POSIX functions will result in an error message and an immediate and fatal call to the VOS debugger. They are "dup", "fork", and ! "waitpid". The lack of these functions prevents you from ! starting VOS commands and grabbing their output in perl. The ! workaround is to run the commands outside of perl, then have perl ! process the output file. These functions are all available in ! the generally-available version of POSIX. =head1 INSTALLING PERL IN VOS *************** *** 46,53 **** =item 1 ! The VOS Standard C Compiler and Runtime, or the VOS Standard C ! Cross-Compiler. This is a standard Stratus product. =item 2 --- 46,56 ---- =item 1 ! The VOS Standard C Compiler (or the VOS Standard C ! Cross-Compiler) and the VOS C Runtime. If you are using ! the generally-available version of POSIX support, you may ! instead use the the VOS GNU C/C++ Compiler. These are ! standard Stratus products. =item 2 *************** *** 72,81 **** are at ftp://ftp.stratus.com/pub/vos/utility/utility.html. This is not a standard Stratus product. ! The generally-available version of POSIX.1 support is ! bundled with the VOS Standard C compiler and Runtime (or ! Cross-Compiler) in VOS Release 14.3.0 or higher. This is a ! standard Stratus product. =item 4 --- 75,85 ---- are at ftp://ftp.stratus.com/pub/vos/utility/utility.html. This is not a standard Stratus product. ! In VOS Release 14.3.0, the generally-available version of ! POSIX.1 support is bundled with the VOS Standard C compiler ! (or Standard C Cross-Compiler). In VOS Release 14.4.0 or ! higher, it is also bundled with the VOS C Runtime. These ! are standard Stratus products. =item 4 *************** *** 85,90 **** --- 89,104 ---- release-compatibility rules, this port of perl may not execute on VOS Release 12 or earlier. + =item 5 + + If you are using the generally-available version of VOS POSIX + support, then you should also acquire the VOS GNU C/C++ Compiler + and GNU Tools product because it provides many common Unix or + POSIX commands. When perl is built with this version of POSIX + support, it assumes that it can find "bash", "sed" and other + POSIX-compatible commands in the directory + /system/gnu_library/bin. + =back To build perl 5, change to the "vos" subdirectory and type the *************** *** 93,98 **** --- 107,122 ---- Note that the generally-available version of POSIX.1 support is not available for the mc68020 or i80860 processors. + Use the "-version alpha" control argument to build perl with + the alpha version of POSIX support, and use the "-version + ga" control argument to build it with the + generally-available version of POSIX. The default is "ga". + + Use the "-compiler cc" control argument to build perl with + the VOS Standard C compiler. Use the "-compiler gcc" + control argument to build it with the GNU GCC compiler. The + default is "cc". + You must have purchased the VOS Standard C Cross Compiler in order to compile perl for a processor type that is different from the processor type of the module. *************** *** 172,178 **** =head1 USING PERL IN VOS ! =head2 Unimplemented Features If perl is built with the alpha version of VOS POSIX.1 support and if it attempts to call an unimplemented VOS POSIX.1 --- 196,202 ---- =head1 USING PERL IN VOS ! =head2 Unimplemented Features of Perl on VOS If perl is built with the alpha version of VOS POSIX.1 support and if it attempts to call an unimplemented VOS POSIX.1 *************** *** 182,188 **** functions are unimplemented and what the error message looks like, compile and execute "test_vos_dummies.c". ! =head2 Restrictions This port of Perl version 5 to VOS prefers Unix-style, slash-separated pathnames over VOS-style greater-than-separated --- 206,212 ---- functions are unimplemented and what the error message looks like, compile and execute "test_vos_dummies.c". ! =head2 Restrictions of Perl on VOS This port of Perl version 5 to VOS prefers Unix-style, slash-separated pathnames over VOS-style greater-than-separated *************** *** 213,218 **** =head1 LAST UPDATE ! October 24, 2000 =cut --- 237,242 ---- =head1 LAST UPDATE ! July 4, 2001 =cut diff -c 'perl-5.7.1/README.win32' 'perl-5.7.2/README.win32' Index: ./README.win32 *** ./README.win32 Tue Apr 10 05:29:17 2001 --- ./README.win32 Fri Jul 13 17:18:33 2001 *************** *** 1,716 **** ! If you read this file _as_is_, just ignore the funny characters you ! see. It is written in the POD format (see pod/perlpod.pod) which is ! specially designed to be readable as is. ! ! =head1 NAME ! ! perlwin32 - Perl under Win32 ! ! =head1 SYNOPSIS ! ! These are instructions for building Perl under Windows (9x, NT and ! 2000). ! ! =head1 DESCRIPTION ! ! Before you start, you should glance through the README file ! found in the top-level directory to which the Perl distribution ! was extracted. Make sure you read and understand the terms under ! which this software is being distributed. ! ! Also make sure you read L below for the ! known limitations of this port. ! ! The INSTALL file in the perl top-level has much information that is ! only relevant to people building Perl on Unix-like systems. In ! particular, you can safely ignore any information that talks about ! "Configure". ! ! You may also want to look at two other options for building ! a perl that will work on Windows NT: the README.cygwin and ! README.os2 files, each of which give a different set of rules to ! build a Perl that will work on Win32 platforms. Those two methods ! will probably enable you to build a more Unix-compatible perl, but ! you will also need to download and use various other build-time and ! run-time support software described in those files. ! ! This set of instructions is meant to describe a so-called "native" ! port of Perl to Win32 platforms. The resulting Perl requires no ! additional software to run (other than what came with your operating ! system). Currently, this port is capable of using one of the ! following compilers: ! ! Borland C++ version 5.02 or later ! Microsoft Visual C++ version 4.2 or later ! Mingw32 with GCC version 2.95.2 or better ! ! The last of these is a high quality freeware compiler. Support ! for it is still experimental. (Older versions of GCC are known ! not to work.) ! ! This port currently supports MakeMaker (the set of modules that ! is used to build extensions to perl). Therefore, you should be ! able to build and install most extensions found in the CPAN sites. ! See L below for general hints about this. ! ! =head2 Setting Up ! ! =over 4 ! ! =item Make ! ! You need a "make" program to build the sources. If you are using ! Visual C++ under Windows NT or 2000, nmake will work. All other ! builds need dmake. ! ! dmake is a freely available make that has very nice macro features ! and parallelability. ! ! A port of dmake for Windows is available from: ! ! http://www.cpan.org/authors/id/GSAR/dmake-4.1pl1-win32.zip ! ! (This is a fixed version of the original dmake sources obtained from ! http://www.wticorp.com/dmake/. As of version 4.1PL1, the original ! sources did not build as shipped and had various other problems. ! A patch is included in the above fixed version.) ! ! Fetch and install dmake somewhere on your path (follow the instructions ! in the README.NOW file). ! ! There exists a minor coexistence problem with dmake and Borland C++ ! compilers. Namely, if a distribution has C files named with mixed ! case letters, they will be compiled into appropriate .obj-files named ! with all lowercase letters, and every time dmake is invoked ! to bring files up to date, it will try to recompile such files again. ! For example, Tk distribution has a lot of such files, resulting in ! needless recompiles everytime dmake is invoked. To avoid this, you ! may use the script "sncfnmcs.pl" after a successful build. It is ! available in the win32 subdirectory of the Perl source distribution. ! ! =item Command Shell ! ! Use the default "cmd" shell that comes with NT. Some versions of the ! popular 4DOS/NT shell have incompatibilities that may cause you trouble. ! If the build fails under that shell, try building again with the cmd ! shell. ! ! The nmake Makefile also has known incompatibilities with the ! "command.com" shell that comes with Windows 9x. You will need to ! use dmake and makefile.mk to build under Windows 9x. ! ! The surest way to build it is on Windows NT, using the cmd shell. ! ! Make sure the path to the build directory does not contain spaces. The ! build usually works in this circumstance, but some tests will fail. ! ! =item Borland C++ ! ! If you are using the Borland compiler, you will need dmake. ! (The make that Borland supplies is seriously crippled and will not ! work for MakeMaker builds.) ! ! See L above. ! ! =item Microsoft Visual C++ ! ! The nmake that comes with Visual C++ will suffice for building. ! You will need to run the VCVARS32.BAT file, usually found somewhere ! like C:\MSDEV4.2\BIN. This will set your build environment. ! ! You can also use dmake to build using Visual C++; provided, however, ! you set OSRELEASE to "microsft" (or whatever the directory name ! under which the Visual C dmake configuration lives) in your environment ! and edit win32/config.vc to change "make=nmake" into "make=dmake". The ! latter step is only essential if you want to use dmake as your default ! make for building extensions using MakeMaker. ! ! =item Mingw32 with GCC ! ! GCC-2.95.2 binaries can be downloaded from: ! ! ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/ ! ! You also need dmake. See L above on how to get it. ! ! The GCC-2.95.2 bundle comes with Mingw32 libraries and headers. ! ! Make sure you install the binaries that work with MSVCRT.DLL as indicated ! in the README for the GCC bundle. You may need to set up a few environment ! variables (usually ran from a batch file). ! ! There are a couple of problems with the version of gcc-2.95.2-msvcrt.exe ! released 7 November 1999: ! ! =over ! ! =item * ! ! It left out a fix for certain command line quotes. To fix this, be sure ! to download and install the file fixes/quote-fix-msvcrt.exe from the above ! ftp location. ! ! =item * ! ! The definition of the fpos_t type in stdio.h may be wrong. If your ! stdio.h has this problem, you will see an exception when running the ! test t/lib/io_xs.t. To fix this, change the typedef for fpos_t from ! "long" to "long long" in the file i386-mingw32msvc/include/stdio.h, ! and rebuild. ! ! =back ! ! A potentially simpler to install (but probably soon-to-be-outdated) bundle ! of the above package with the mentioned fixes already applied is available ! here: ! ! http://downloads.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip ! ftp://ftp.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip ! ! =back ! ! =head2 Building ! ! =over 4 ! ! =item * ! ! Make sure you are in the "win32" subdirectory under the perl toplevel. ! This directory contains a "Makefile" that will work with ! versions of nmake that come with Visual C++, and a dmake "makefile.mk" ! that will work for all supported compilers. The defaults in the dmake ! makefile are setup to build using the GCC compiler. ! ! =item * ! ! Edit the makefile.mk (or Makefile, if you're using nmake) and change ! the values of INST_DRV and INST_TOP. You can also enable various ! build flags. These are explained in the makefiles. ! ! You will have to make sure that CCTYPE is set correctly and that ! CCHOME points to wherever you installed your compiler. ! ! The default value for CCHOME in the makefiles for Visual C++ ! may not be correct for some versions. Make sure the default exists ! and is valid. ! ! If you have either the source or a library that contains des_fcrypt(), ! enable the appropriate option in the makefile. des_fcrypt() is not ! bundled with the distribution due to US Government restrictions ! on the export of cryptographic software. Nevertheless, this routine ! is part of the "libdes" library (written by Eric Young) which is widely ! available worldwide, usually along with SSLeay (for example, ! "ftp://fractal.mta.ca/pub/crypto/SSLeay/DES/"). Set CRYPT_SRC to the ! name of the file that implements des_fcrypt(). Alternatively, if ! you have built a library that contains des_fcrypt(), you can set ! CRYPT_LIB to point to the library name. The location above contains ! many versions of the "libdes" library, all with slightly different ! implementations of des_fcrypt(). Older versions have a single, ! self-contained file (fcrypt.c) that implements crypt(), so they may be ! easier to use. A patch against the fcrypt.c found in libdes-3.06 is ! in des_fcrypt.patch. ! ! Perl will also build without des_fcrypt(), but the crypt() builtin will ! fail at run time. ! ! Be sure to read the instructions near the top of the makefiles carefully. ! ! =item * ! ! Type "dmake" (or "nmake" if you are using that make). ! ! This should build everything. Specifically, it will create perl.exe, ! perl56.dll at the perl toplevel, and various other extension dll's ! under the lib\auto directory. If the build fails for any reason, make ! sure you have done the previous steps correctly. ! ! =back ! ! =head2 Testing ! ! Type "dmake test" (or "nmake test"). This will run most of the tests from ! the testsuite (many tests will be skipped). ! ! There should be no test failures when running under Windows NT 4.0 or ! Windows 2000. Many tests I fail under Windows 9x due to the inferior ! command shell. ! ! Some test failures may occur if you use a command shell other than the ! native "cmd.exe", or if you are building from a path that contains ! spaces. So don't do that. ! ! If you are running the tests from a emacs shell window, you may see ! failures in op/stat.t. Run "dmake test-notty" in that case. ! ! If you're using the Borland compiler, you may see a failure in op/taint.t ! arising from the inability to find the Borland Runtime DLLs on the system ! default path. You will need to copy the DLLs reported by the messages ! from where Borland chose to install it, into the Windows system directory ! (usually somewhere like C:\WINNT\SYSTEM32) and rerun the test. ! ! If you're using Borland compiler versions 5.2 and below, you may run into ! problems finding the correct header files when building extensions. For ! example, building the "Tk" extension may fail because both perl and Tk ! contain a header file called "patchlevel.h". The latest Borland compiler ! (v5.5) is free of this misbehaviour, and it even supports an ! option -VI- for backward (bugward) compatibility for using the old Borland ! search algorithm to locate header files. ! ! Please report any other failures as described under L. ! ! =head2 Installation ! ! Type "dmake install" (or "nmake install"). This will put the newly ! built perl and the libraries under whatever C points to in the ! Makefile. It will also install the pod documentation under ! C<$INST_TOP\$VERSION\lib\pod> and HTML versions of the same under ! C<$INST_TOP\$VERSION\lib\pod\html>. To use the Perl you just installed, ! you will need to add two components to your PATH environment variable, ! C<$INST_TOP\$VERSION\bin> and C<$INST_TOP\$VERSION\bin\$ARCHNAME>. ! For example: ! ! set PATH c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH% ! ! If you opt to comment out INST_VER and INST_ARCH in the makefiles, the ! installation structure is much simpler. In that case, it will be ! sufficient to add a single entry to the path, for instance: ! ! set PATH c:\perl\bin;%PATH% ! ! =head2 Usage Hints ! ! =over 4 ! ! =item Environment Variables ! ! The installation paths that you set during the build get compiled ! into perl, so you don't have to do anything additional to start ! using that perl (except add its location to your PATH variable). ! ! If you put extensions in unusual places, you can set PERL5LIB ! to a list of paths separated by semicolons where you want perl ! to look for libraries. Look for descriptions of other environment ! variables you can set in L. ! ! You can also control the shell that perl uses to run system() and ! backtick commands via PERL5SHELL. See L. ! ! Perl does not depend on the registry, but it can look up certain default ! values if you choose to put them there. Perl attempts to read entries from ! C and C. ! Entries in the former override entries in the latter. One or more of the ! following entries (of type REG_SZ or REG_EXPAND_SZ) may be set: ! ! lib-$] version-specific standard library path to add to @INC ! lib standard library path to add to @INC ! sitelib-$] version-specific site library path to add to @INC ! sitelib site library path to add to @INC ! vendorlib-$] version-specific vendor library path to add to @INC ! vendorlib vendor library path to add to @INC ! PERL* fallback for all %ENV lookups that begin with "PERL" ! ! Note the C<$]> in the above is not literal. Substitute whatever version ! of perl you want to honor that entry, e.g. C<5.6.0>. Paths must be ! separated with semicolons, as usual on win32. ! ! =item File Globbing ! ! By default, perl handles file globbing using the File::Glob extension, ! which provides portable globbing. ! ! If you want perl to use globbing that emulates the quirks of DOS ! filename conventions, you might want to consider using File::DosGlob ! to override the internal glob() implementation. See L for ! details. ! ! =item Using perl from the command line ! ! If you are accustomed to using perl from various command-line ! shells found in UNIX environments, you will be less than pleased ! with what Windows offers by way of a command shell. ! ! The crucial thing to understand about the Windows environment is that ! the command line you type in is processed twice before Perl sees it. ! First, your command shell (usually CMD.EXE on Windows NT, and ! COMMAND.COM on Windows 9x) preprocesses the command line, to handle ! redirection, environment variable expansion, and location of the ! executable to run. Then, the perl executable splits the remaining ! command line into individual arguments, using the C runtime library ! upon which Perl was built. ! ! It is particularly important to note that neither the shell nor the C ! runtime do any wildcard expansions of command-line arguments (so ! wildcards need not be quoted). Also, the quoting behaviours of the ! shell and the C runtime are rudimentary at best (and may, if you are ! using a non-standard shell, be inconsistent). The only (useful) quote ! character is the double quote ("). It can be used to protect spaces ! and other special characters in arguments. ! ! The Windows NT documentation has almost no description of how the ! quoting rules are implemented, but here are some general observations ! based on experiments: The C runtime breaks arguments at spaces and ! passes them to programs in argc/argv. Double quotes can be used to ! prevent arguments with spaces in them from being split up. You can ! put a double quote in an argument by escaping it with a backslash and ! enclosing the whole argument within double quotes. The backslash and ! the pair of double quotes surrounding the argument will be stripped by ! the C runtime. ! ! The file redirection characters "<", ">", and "|" can be quoted by ! double quotes (although there are suggestions that this may not always ! be true). Single quotes are not treated as quotes by the shell or ! the C runtime, they don't get stripped by the shell (just to make ! this type of quoting completely useless). The caret "^" has also ! been observed to behave as a quoting character, but this appears ! to be a shell feature, and the caret is not stripped from the command ! line, so Perl still sees it (and the C runtime phase does not treat ! the caret as a quote character). ! ! Here are some examples of usage of the "cmd" shell: ! ! This prints two doublequotes: ! ! perl -e "print '\"\"' " ! ! This does the same: ! ! perl -e "print \"\\\"\\\"\" " ! ! This prints "bar" and writes "foo" to the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" > blurch ! ! This prints "foo" ("bar" disappears into nowhereland): ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> nul ! ! This prints "bar" and writes "foo" into the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 1> blurch ! ! This pipes "foo" to the "less" pager and prints "bar" on the console: ! ! perl -e "print 'foo'; print STDERR 'bar'" | less ! ! This pipes "foo\nbar\n" to the less pager: ! ! perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less ! ! This pipes "foo" to the pager and writes "bar" in the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less ! ! ! Discovering the usefulness of the "command.com" shell on Windows 9x ! is left as an exercise to the reader :) ! ! One particularly pernicious problem with the 4NT command shell for ! Windows NT is that it (nearly) always treats a % character as indicating ! that environment variable expansion is needed. Under this shell, it is ! therefore important to always double any % characters which you want ! Perl to see (for example, for hash variables), even when they are ! quoted. ! ! =item Building Extensions ! ! The Comprehensive Perl Archive Network (CPAN) offers a wealth ! of extensions, some of which require a C compiler to build. ! Look in http://www.cpan.org/ for more information on CPAN. ! ! Note that not all of the extensions available from CPAN may work ! in the Win32 environment; you should check the information at ! http://testers.cpan.org/ before investing too much effort into ! porting modules that don't readily build. ! ! Most extensions (whether they require a C compiler or not) can ! be built, tested and installed with the standard mantra: ! ! perl Makefile.PL ! $MAKE ! $MAKE test ! $MAKE install ! ! where $MAKE is whatever 'make' program you have configured perl to ! use. Use "perl -V:make" to find out what this is. Some extensions ! may not provide a testsuite (so "$MAKE test" may not do anything or ! fail), but most serious ones do. ! ! It is important that you use a supported 'make' program, and ! ensure Config.pm knows about it. If you don't have nmake, you can ! either get dmake from the location mentioned earlier or get an ! old version of nmake reportedly available from: ! ! ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe ! ! Another option is to use the make written in Perl, available from ! CPAN: ! ! http://www.cpan.org/authors/id/NI-S/Make-0.03.tar.gz ! ! You may also use dmake. See L above on how to get it. ! ! Note that MakeMaker actually emits makefiles with different syntax ! depending on what 'make' it thinks you are using. Therefore, it is ! important that one of the following values appears in Config.pm: ! ! make='nmake' # MakeMaker emits nmake syntax ! make='dmake' # MakeMaker emits dmake syntax ! any other value # MakeMaker emits generic make syntax ! (e.g GNU make, or Perl make) ! ! If the value doesn't match the 'make' program you want to use, ! edit Config.pm to fix it. ! ! If a module implements XSUBs, you will need one of the supported ! C compilers. You must make sure you have set up the environment for ! the compiler for command-line compilation. ! ! If a module does not build for some reason, look carefully for ! why it failed, and report problems to the module author. If ! it looks like the extension building support is at fault, report ! that with full details of how the build failed using the perlbug ! utility. ! ! =item Command-line Wildcard Expansion ! ! The default command shells on DOS descendant operating systems (such ! as they are) usually do not expand wildcard arguments supplied to ! programs. They consider it the application's job to handle that. ! This is commonly achieved by linking the application (in our case, ! perl) with startup code that the C runtime libraries usually provide. ! However, doing that results in incompatible perl versions (since the ! behavior of the argv expansion code differs depending on the ! compiler, and it is even buggy on some compilers). Besides, it may ! be a source of frustration if you use such a perl binary with an ! alternate shell that *does* expand wildcards. ! ! Instead, the following solution works rather well. The nice things ! about it are 1) you can start using it right away; 2) it is more ! powerful, because it will do the right thing with a pattern like ! */*/*.c; 3) you can decide whether you do/don't want to use it; and ! 4) you can extend the method to add any customizations (or even ! entirely different kinds of wildcard expansion). ! ! C:\> copy con c:\perl\lib\Wild.pm ! # Wild.pm - emulate shell @ARGV expansion on shells that don't ! use File::DosGlob; ! @ARGV = map { ! my @g = File::DosGlob::glob($_) if /[*?]/; ! @g ? @g : $_; ! } @ARGV; ! 1; ! ^Z ! C:\> set PERL5OPT=-MWild ! C:\> perl -le "for (@ARGV) { print }" */*/perl*.c ! p4view/perl/perl.c ! p4view/perl/perlio.c ! p4view/perl/perly.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! ! Note there are two distinct steps there: 1) You'll have to create ! Wild.pm and put it in your perl lib directory. 2) You'll need to ! set the PERL5OPT environment variable. If you want argv expansion ! to be the default, just set PERL5OPT in your default startup ! environment. ! ! If you are using the Visual C compiler, you can get the C runtime's ! command line wildcard expansion built into perl binary. The resulting ! binary will always expand unquoted command lines, which may not be ! what you want if you use a shell that does that for you. The expansion ! done is also somewhat less powerful than the approach suggested above. ! ! =item Win32 Specific Extensions ! ! A number of extensions specific to the Win32 platform are available ! from CPAN. You may find that many of these extensions are meant to ! be used under the Activeware port of Perl, which used to be the only ! native port for the Win32 platform. Since the Activeware port does not ! have adequate support for Perl's extension building tools, these ! extensions typically do not support those tools either and, therefore, ! cannot be built using the generic steps shown in the previous section. ! ! To ensure smooth transitioning of existing code that uses the ! ActiveState port, there is a bundle of Win32 extensions that contains ! all of the ActiveState extensions and most other Win32 extensions from ! CPAN in source form, along with many added bugfixes, and with MakeMaker ! support. This bundle is available at: ! ! http://www.cpan.org/authors/id/GSAR/libwin32-0.151.zip ! ! See the README in that distribution for building and installation ! instructions. Look for later versions that may be available at the ! same location. ! ! =item Running Perl Scripts ! ! Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to ! indicate to the OS that it should execute the file using perl. ! Win32 has no comparable means to indicate arbitrary files are ! executables. ! ! Instead, all available methods to execute plain text files on ! Win32 rely on the file "extension". There are three methods ! to use this to execute perl scripts: ! ! =over 8 ! ! =item 1 ! ! There is a facility called "file extension associations" that will ! work in Windows NT 4.0. This can be manipulated via the two ! commands "assoc" and "ftype" that come standard with Windows NT ! 4.0. Type "ftype /?" for a complete example of how to set this ! up for perl scripts (Say what? You thought Windows NT wasn't ! perl-ready? :). ! ! =item 2 ! ! Since file associations don't work everywhere, and there are ! reportedly bugs with file associations where it does work, the ! old method of wrapping the perl script to make it look like a ! regular batch file to the OS, may be used. The install process ! makes available the "pl2bat.bat" script which can be used to wrap ! perl scripts into batch files. For example: ! ! pl2bat foo.pl ! ! will create the file "FOO.BAT". Note "pl2bat" strips any ! .pl suffix and adds a .bat suffix to the generated file. ! ! If you use the 4DOS/NT or similar command shell, note that ! "pl2bat" uses the "%*" variable in the generated batch file to ! refer to all the command line arguments, so you may need to make ! sure that construct works in batch files. As of this writing, ! 4DOS/NT users will need a "ParameterChar = *" statement in their ! 4NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT ! startup file to enable this to work. ! ! =item 3 ! ! Using "pl2bat" has a few problems: the file name gets changed, ! so scripts that rely on C<$0> to find what they must do may not ! run properly; running "pl2bat" replicates the contents of the ! original script, and so this process can be maintenance intensive ! if the originals get updated often. A different approach that ! avoids both problems is possible. ! ! A script called "runperl.bat" is available that can be copied ! to any filename (along with the .bat suffix). For example, ! if you call it "foo.bat", it will run the file "foo" when it is ! executed. Since you can run batch files on Win32 platforms simply ! by typing the name (without the extension), this effectively ! runs the file "foo", when you type either "foo" or "foo.bat". ! With this method, "foo.bat" can even be in a different location ! than the file "foo", as long as "foo" is available somewhere on ! the PATH. If your scripts are on a filesystem that allows symbolic ! links, you can even avoid copying "runperl.bat". ! ! Here's a diversion: copy "runperl.bat" to "runperl", and type ! "runperl". Explain the observed behavior, or lack thereof. :) ! Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH ! ! =back ! ! =item Miscellaneous Things ! ! A full set of HTML documentation is installed, so you should be ! able to use it if you have a web browser installed on your ! system. ! ! C is also a useful tool for browsing information contained ! in the documentation, especially in conjunction with a pager ! like C (recent versions of which have Win32 support). You may ! have to set the PAGER environment variable to use a specific pager. ! "perldoc -f foo" will print information about the perl operator ! "foo". ! ! If you find bugs in perl, you can run C to create a ! bug report (you may have to send it manually if C cannot ! find a mailer on your system). ! ! =back ! ! =head1 BUGS AND CAVEATS ! ! Norton AntiVirus interferes with the build process, particularly if ! set to "AutoProtect, All Files, when Opened". Unlike large applications ! the perl build process opens and modifies a lot of files. Having the ! the AntiVirus scan each and every one slows build the process significantly. ! Worse, with PERLIO=stdio the build process fails with peculiar messages ! as the virus checker interacts badly with miniperl.exe writing configure ! files (it seems to either catch file part written and treat it as suspicious, ! or virus checker may have it "locked" in a way which inhibits miniperl ! updating it). The build does complete with ! ! set PERLIO=perlio ! ! but that may be just luck. Other AntiVirus software may have similar issues. ! ! Some of the built-in functions do not act exactly as documented in ! L, and a few are not implemented at all. To avoid ! surprises, particularly if you have had prior exposure to Perl ! in other operating environments or if you intend to write code ! that will be portable to other environments. See L ! for a reasonably definitive list of these differences. ! ! Not all extensions available from CPAN may build or work properly ! in the Win32 environment. See L. ! ! Most C related calls are supported, but they may not ! behave as on Unix platforms. See L for the full list. ! ! Signal handling may not behave as on Unix platforms (where it ! doesn't exactly "behave", either :). For instance, calling C ! or C from signal handlers will cause an exception, since most ! implementations of C on Win32 are severely crippled. ! Thus, signals may work only for simple things like setting a flag ! variable in the handler. Using signals under this port should ! currently be considered unsupported. ! ! Please send detailed descriptions of any problems and solutions that ! you may find to >, along with the output produced ! by C. ! ! =head1 AUTHORS ! ! =over 4 ! ! =item Gary Ng E71564.1743@CompuServe.COME ! ! =item Gurusamy Sarathy Egsar@activestate.comE ! ! =item Nick Ing-Simmons Enick@ing-simmons.netE ! ! =back ! ! This document is maintained by Gurusamy Sarathy. ! ! =head1 SEE ALSO ! ! L ! ! =head1 HISTORY ! ! This port was originally contributed by Gary Ng around 5.003_24, ! and borrowed from the Hip Communications port that was available ! at the time. Various people have made numerous and sundry hacks ! since then. ! ! Borland support was added in 5.004_01 (Gurusamy Sarathy). ! ! GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons). ! ! Support for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp). ! ! Support for fork() emulation was added in 5.6 (ActiveState Tool Corp). ! ! Win9x support was added in 5.6 (Benjamin Stuhl). ! ! Last updated: 1 April 2001 ! ! =cut --- 1,716 ---- ! If you read this file _as_is_, just ignore the funny characters you ! see. It is written in the POD format (see pod/perlpod.pod) which is ! specially designed to be readable as is. ! ! =head1 NAME ! ! perlwin32 - Perl under Win32 ! ! =head1 SYNOPSIS ! ! These are instructions for building Perl under Windows (9x, NT and ! 2000). ! ! =head1 DESCRIPTION ! ! Before you start, you should glance through the README file ! found in the top-level directory to which the Perl distribution ! was extracted. Make sure you read and understand the terms under ! which this software is being distributed. ! ! Also make sure you read L below for the ! known limitations of this port. ! ! The INSTALL file in the perl top-level has much information that is ! only relevant to people building Perl on Unix-like systems. In ! particular, you can safely ignore any information that talks about ! "Configure". ! ! You may also want to look at two other options for building ! a perl that will work on Windows NT: the README.cygwin and ! README.os2 files, each of which give a different set of rules to ! build a Perl that will work on Win32 platforms. Those two methods ! will probably enable you to build a more Unix-compatible perl, but ! you will also need to download and use various other build-time and ! run-time support software described in those files. ! ! This set of instructions is meant to describe a so-called "native" ! port of Perl to Win32 platforms. The resulting Perl requires no ! additional software to run (other than what came with your operating ! system). Currently, this port is capable of using one of the ! following compilers: ! ! Borland C++ version 5.02 or later ! Microsoft Visual C++ version 4.2 or later ! Mingw32 with GCC version 2.95.2 or better ! ! The last of these is a high quality freeware compiler. Support ! for it is still experimental. (Older versions of GCC are known ! not to work.) ! ! This port currently supports MakeMaker (the set of modules that ! is used to build extensions to perl). Therefore, you should be ! able to build and install most extensions found in the CPAN sites. ! See L below for general hints about this. ! ! =head2 Setting Up Perl on Win32 ! ! =over 4 ! ! =item Make ! ! You need a "make" program to build the sources. If you are using ! Visual C++ under Windows NT or 2000, nmake will work. All other ! builds need dmake. ! ! dmake is a freely available make that has very nice macro features ! and parallelability. ! ! A port of dmake for Windows is available from: ! ! http://www.cpan.org/authors/id/GSAR/dmake-4.1pl1-win32.zip ! ! (This is a fixed version of the original dmake sources obtained from ! http://www.wticorp.com/dmake/. As of version 4.1PL1, the original ! sources did not build as shipped and had various other problems. ! A patch is included in the above fixed version.) ! ! Fetch and install dmake somewhere on your path (follow the instructions ! in the README.NOW file). ! ! There exists a minor coexistence problem with dmake and Borland C++ ! compilers. Namely, if a distribution has C files named with mixed ! case letters, they will be compiled into appropriate .obj-files named ! with all lowercase letters, and every time dmake is invoked ! to bring files up to date, it will try to recompile such files again. ! For example, Tk distribution has a lot of such files, resulting in ! needless recompiles everytime dmake is invoked. To avoid this, you ! may use the script "sncfnmcs.pl" after a successful build. It is ! available in the win32 subdirectory of the Perl source distribution. ! ! =item Command Shell ! ! Use the default "cmd" shell that comes with NT. Some versions of the ! popular 4DOS/NT shell have incompatibilities that may cause you trouble. ! If the build fails under that shell, try building again with the cmd ! shell. ! ! The nmake Makefile also has known incompatibilities with the ! "command.com" shell that comes with Windows 9x. You will need to ! use dmake and makefile.mk to build under Windows 9x. ! ! The surest way to build it is on Windows NT, using the cmd shell. ! ! Make sure the path to the build directory does not contain spaces. The ! build usually works in this circumstance, but some tests will fail. ! ! =item Borland C++ ! ! If you are using the Borland compiler, you will need dmake. ! (The make that Borland supplies is seriously crippled and will not ! work for MakeMaker builds.) ! ! See L above. ! ! =item Microsoft Visual C++ ! ! The nmake that comes with Visual C++ will suffice for building. ! You will need to run the VCVARS32.BAT file, usually found somewhere ! like C:\MSDEV4.2\BIN. This will set your build environment. ! ! You can also use dmake to build using Visual C++; provided, however, ! you set OSRELEASE to "microsft" (or whatever the directory name ! under which the Visual C dmake configuration lives) in your environment ! and edit win32/config.vc to change "make=nmake" into "make=dmake". The ! latter step is only essential if you want to use dmake as your default ! make for building extensions using MakeMaker. ! ! =item Mingw32 with GCC ! ! GCC-2.95.2 binaries can be downloaded from: ! ! ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/ ! ! You also need dmake. See L above on how to get it. ! ! The GCC-2.95.2 bundle comes with Mingw32 libraries and headers. ! ! Make sure you install the binaries that work with MSVCRT.DLL as indicated ! in the README for the GCC bundle. You may need to set up a few environment ! variables (usually ran from a batch file). ! ! There are a couple of problems with the version of gcc-2.95.2-msvcrt.exe ! released 7 November 1999: ! ! =over ! ! =item * ! ! It left out a fix for certain command line quotes. To fix this, be sure ! to download and install the file fixes/quote-fix-msvcrt.exe from the above ! ftp location. ! ! =item * ! ! The definition of the fpos_t type in stdio.h may be wrong. If your ! stdio.h has this problem, you will see an exception when running the ! test t/lib/io_xs.t. To fix this, change the typedef for fpos_t from ! "long" to "long long" in the file i386-mingw32msvc/include/stdio.h, ! and rebuild. ! ! =back ! ! A potentially simpler to install (but probably soon-to-be-outdated) bundle ! of the above package with the mentioned fixes already applied is available ! here: ! ! http://downloads.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip ! ftp://ftp.ActiveState.com/pub/staff/gsar/gcc-2.95.2-msvcrt.zip ! ! =back ! ! =head2 Building ! ! =over 4 ! ! =item * ! ! Make sure you are in the "win32" subdirectory under the perl toplevel. ! This directory contains a "Makefile" that will work with ! versions of nmake that come with Visual C++, and a dmake "makefile.mk" ! that will work for all supported compilers. The defaults in the dmake ! makefile are setup to build using the GCC compiler. ! ! =item * ! ! Edit the makefile.mk (or Makefile, if you're using nmake) and change ! the values of INST_DRV and INST_TOP. You can also enable various ! build flags. These are explained in the makefiles. ! ! You will have to make sure that CCTYPE is set correctly and that ! CCHOME points to wherever you installed your compiler. ! ! The default value for CCHOME in the makefiles for Visual C++ ! may not be correct for some versions. Make sure the default exists ! and is valid. ! ! If you have either the source or a library that contains des_fcrypt(), ! enable the appropriate option in the makefile. des_fcrypt() is not ! bundled with the distribution due to US Government restrictions ! on the export of cryptographic software. Nevertheless, this routine ! is part of the "libdes" library (written by Eric Young) which is widely ! available worldwide, usually along with SSLeay (for example, ! "ftp://fractal.mta.ca/pub/crypto/SSLeay/DES/"). Set CRYPT_SRC to the ! name of the file that implements des_fcrypt(). Alternatively, if ! you have built a library that contains des_fcrypt(), you can set ! CRYPT_LIB to point to the library name. The location above contains ! many versions of the "libdes" library, all with slightly different ! implementations of des_fcrypt(). Older versions have a single, ! self-contained file (fcrypt.c) that implements crypt(), so they may be ! easier to use. A patch against the fcrypt.c found in libdes-3.06 is ! in des_fcrypt.patch. ! ! Perl will also build without des_fcrypt(), but the crypt() builtin will ! fail at run time. ! ! Be sure to read the instructions near the top of the makefiles carefully. ! ! =item * ! ! Type "dmake" (or "nmake" if you are using that make). ! ! This should build everything. Specifically, it will create perl.exe, ! perl56.dll at the perl toplevel, and various other extension dll's ! under the lib\auto directory. If the build fails for any reason, make ! sure you have done the previous steps correctly. ! ! =back ! ! =head2 Testing Perl on Win32 ! ! Type "dmake test" (or "nmake test"). This will run most of the tests from ! the testsuite (many tests will be skipped). ! ! There should be no test failures when running under Windows NT 4.0 or ! Windows 2000. Many tests I fail under Windows 9x due to the inferior ! command shell. ! ! Some test failures may occur if you use a command shell other than the ! native "cmd.exe", or if you are building from a path that contains ! spaces. So don't do that. ! ! If you are running the tests from a emacs shell window, you may see ! failures in op/stat.t. Run "dmake test-notty" in that case. ! ! If you're using the Borland compiler, you may see a failure in op/taint.t ! arising from the inability to find the Borland Runtime DLLs on the system ! default path. You will need to copy the DLLs reported by the messages ! from where Borland chose to install it, into the Windows system directory ! (usually somewhere like C:\WINNT\SYSTEM32) and rerun the test. ! ! If you're using Borland compiler versions 5.2 and below, you may run into ! problems finding the correct header files when building extensions. For ! example, building the "Tk" extension may fail because both perl and Tk ! contain a header file called "patchlevel.h". The latest Borland compiler ! (v5.5) is free of this misbehaviour, and it even supports an ! option -VI- for backward (bugward) compatibility for using the old Borland ! search algorithm to locate header files. ! ! Please report any other failures as described under L. ! ! =head2 Installation of Perl on Win32 ! ! Type "dmake install" (or "nmake install"). This will put the newly ! built perl and the libraries under whatever C points to in the ! Makefile. It will also install the pod documentation under ! C<$INST_TOP\$VERSION\lib\pod> and HTML versions of the same under ! C<$INST_TOP\$VERSION\lib\pod\html>. To use the Perl you just installed, ! you will need to add two components to your PATH environment variable, ! C<$INST_TOP\$VERSION\bin> and C<$INST_TOP\$VERSION\bin\$ARCHNAME>. ! For example: ! ! set PATH c:\perl\5.6.0\bin;c:\perl\5.6.0\bin\MSWin32-x86;%PATH% ! ! If you opt to comment out INST_VER and INST_ARCH in the makefiles, the ! installation structure is much simpler. In that case, it will be ! sufficient to add a single entry to the path, for instance: ! ! set PATH c:\perl\bin;%PATH% ! ! =head2 Usage Hints for Perl on Win32 ! ! =over 4 ! ! =item Environment Variables ! ! The installation paths that you set during the build get compiled ! into perl, so you don't have to do anything additional to start ! using that perl (except add its location to your PATH variable). ! ! If you put extensions in unusual places, you can set PERL5LIB ! to a list of paths separated by semicolons where you want perl ! to look for libraries. Look for descriptions of other environment ! variables you can set in L. ! ! You can also control the shell that perl uses to run system() and ! backtick commands via PERL5SHELL. See L. ! ! Perl does not depend on the registry, but it can look up certain default ! values if you choose to put them there. Perl attempts to read entries from ! C and C. ! Entries in the former override entries in the latter. One or more of the ! following entries (of type REG_SZ or REG_EXPAND_SZ) may be set: ! ! lib-$] version-specific standard library path to add to @INC ! lib standard library path to add to @INC ! sitelib-$] version-specific site library path to add to @INC ! sitelib site library path to add to @INC ! vendorlib-$] version-specific vendor library path to add to @INC ! vendorlib vendor library path to add to @INC ! PERL* fallback for all %ENV lookups that begin with "PERL" ! ! Note the C<$]> in the above is not literal. Substitute whatever version ! of perl you want to honor that entry, e.g. C<5.6.0>. Paths must be ! separated with semicolons, as usual on win32. ! ! =item File Globbing ! ! By default, perl handles file globbing using the File::Glob extension, ! which provides portable globbing. ! ! If you want perl to use globbing that emulates the quirks of DOS ! filename conventions, you might want to consider using File::DosGlob ! to override the internal glob() implementation. See L for ! details. ! ! =item Using perl from the command line ! ! If you are accustomed to using perl from various command-line ! shells found in UNIX environments, you will be less than pleased ! with what Windows offers by way of a command shell. ! ! The crucial thing to understand about the Windows environment is that ! the command line you type in is processed twice before Perl sees it. ! First, your command shell (usually CMD.EXE on Windows NT, and ! COMMAND.COM on Windows 9x) preprocesses the command line, to handle ! redirection, environment variable expansion, and location of the ! executable to run. Then, the perl executable splits the remaining ! command line into individual arguments, using the C runtime library ! upon which Perl was built. ! ! It is particularly important to note that neither the shell nor the C ! runtime do any wildcard expansions of command-line arguments (so ! wildcards need not be quoted). Also, the quoting behaviours of the ! shell and the C runtime are rudimentary at best (and may, if you are ! using a non-standard shell, be inconsistent). The only (useful) quote ! character is the double quote ("). It can be used to protect spaces ! and other special characters in arguments. ! ! The Windows NT documentation has almost no description of how the ! quoting rules are implemented, but here are some general observations ! based on experiments: The C runtime breaks arguments at spaces and ! passes them to programs in argc/argv. Double quotes can be used to ! prevent arguments with spaces in them from being split up. You can ! put a double quote in an argument by escaping it with a backslash and ! enclosing the whole argument within double quotes. The backslash and ! the pair of double quotes surrounding the argument will be stripped by ! the C runtime. ! ! The file redirection characters "<", ">", and "|" can be quoted by ! double quotes (although there are suggestions that this may not always ! be true). Single quotes are not treated as quotes by the shell or ! the C runtime, they don't get stripped by the shell (just to make ! this type of quoting completely useless). The caret "^" has also ! been observed to behave as a quoting character, but this appears ! to be a shell feature, and the caret is not stripped from the command ! line, so Perl still sees it (and the C runtime phase does not treat ! the caret as a quote character). ! ! Here are some examples of usage of the "cmd" shell: ! ! This prints two doublequotes: ! ! perl -e "print '\"\"' " ! ! This does the same: ! ! perl -e "print \"\\\"\\\"\" " ! ! This prints "bar" and writes "foo" to the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" > blurch ! ! This prints "foo" ("bar" disappears into nowhereland): ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> nul ! ! This prints "bar" and writes "foo" into the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 1> blurch ! ! This pipes "foo" to the "less" pager and prints "bar" on the console: ! ! perl -e "print 'foo'; print STDERR 'bar'" | less ! ! This pipes "foo\nbar\n" to the less pager: ! ! perl -le "print 'foo'; print STDERR 'bar'" 2>&1 | less ! ! This pipes "foo" to the pager and writes "bar" in the file "blurch": ! ! perl -e "print 'foo'; print STDERR 'bar'" 2> blurch | less ! ! ! Discovering the usefulness of the "command.com" shell on Windows 9x ! is left as an exercise to the reader :) ! ! One particularly pernicious problem with the 4NT command shell for ! Windows NT is that it (nearly) always treats a % character as indicating ! that environment variable expansion is needed. Under this shell, it is ! therefore important to always double any % characters which you want ! Perl to see (for example, for hash variables), even when they are ! quoted. ! ! =item Building Extensions ! ! The Comprehensive Perl Archive Network (CPAN) offers a wealth ! of extensions, some of which require a C compiler to build. ! Look in http://www.cpan.org/ for more information on CPAN. ! ! Note that not all of the extensions available from CPAN may work ! in the Win32 environment; you should check the information at ! http://testers.cpan.org/ before investing too much effort into ! porting modules that don't readily build. ! ! Most extensions (whether they require a C compiler or not) can ! be built, tested and installed with the standard mantra: ! ! perl Makefile.PL ! $MAKE ! $MAKE test ! $MAKE install ! ! where $MAKE is whatever 'make' program you have configured perl to ! use. Use "perl -V:make" to find out what this is. Some extensions ! may not provide a testsuite (so "$MAKE test" may not do anything or ! fail), but most serious ones do. ! ! It is important that you use a supported 'make' program, and ! ensure Config.pm knows about it. If you don't have nmake, you can ! either get dmake from the location mentioned earlier or get an ! old version of nmake reportedly available from: ! ! ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe ! ! Another option is to use the make written in Perl, available from ! CPAN: ! ! http://www.cpan.org/authors/id/NI-S/Make-0.03.tar.gz ! ! You may also use dmake. See L above on how to get it. ! ! Note that MakeMaker actually emits makefiles with different syntax ! depending on what 'make' it thinks you are using. Therefore, it is ! important that one of the following values appears in Config.pm: ! ! make='nmake' # MakeMaker emits nmake syntax ! make='dmake' # MakeMaker emits dmake syntax ! any other value # MakeMaker emits generic make syntax ! (e.g GNU make, or Perl make) ! ! If the value doesn't match the 'make' program you want to use, ! edit Config.pm to fix it. ! ! If a module implements XSUBs, you will need one of the supported ! C compilers. You must make sure you have set up the environment for ! the compiler for command-line compilation. ! ! If a module does not build for some reason, look carefully for ! why it failed, and report problems to the module author. If ! it looks like the extension building support is at fault, report ! that with full details of how the build failed using the perlbug ! utility. ! ! =item Command-line Wildcard Expansion ! ! The default command shells on DOS descendant operating systems (such ! as they are) usually do not expand wildcard arguments supplied to ! programs. They consider it the application's job to handle that. ! This is commonly achieved by linking the application (in our case, ! perl) with startup code that the C runtime libraries usually provide. ! However, doing that results in incompatible perl versions (since the ! behavior of the argv expansion code differs depending on the ! compiler, and it is even buggy on some compilers). Besides, it may ! be a source of frustration if you use such a perl binary with an ! alternate shell that *does* expand wildcards. ! ! Instead, the following solution works rather well. The nice things ! about it are 1) you can start using it right away; 2) it is more ! powerful, because it will do the right thing with a pattern like ! */*/*.c; 3) you can decide whether you do/don't want to use it; and ! 4) you can extend the method to add any customizations (or even ! entirely different kinds of wildcard expansion). ! ! C:\> copy con c:\perl\lib\Wild.pm ! # Wild.pm - emulate shell @ARGV expansion on shells that don't ! use File::DosGlob; ! @ARGV = map { ! my @g = File::DosGlob::glob($_) if /[*?]/; ! @g ? @g : $_; ! } @ARGV; ! 1; ! ^Z ! C:\> set PERL5OPT=-MWild ! C:\> perl -le "for (@ARGV) { print }" */*/perl*.c ! p4view/perl/perl.c ! p4view/perl/perlio.c ! p4view/perl/perly.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! perl5.005/win32/perlglob.c ! perl5.005/win32/perllib.c ! ! Note there are two distinct steps there: 1) You'll have to create ! Wild.pm and put it in your perl lib directory. 2) You'll need to ! set the PERL5OPT environment variable. If you want argv expansion ! to be the default, just set PERL5OPT in your default startup ! environment. ! ! If you are using the Visual C compiler, you can get the C runtime's ! command line wildcard expansion built into perl binary. The resulting ! binary will always expand unquoted command lines, which may not be ! what you want if you use a shell that does that for you. The expansion ! done is also somewhat less powerful than the approach suggested above. ! ! =item Win32 Specific Extensions ! ! A number of extensions specific to the Win32 platform are available ! from CPAN. You may find that many of these extensions are meant to ! be used under the Activeware port of Perl, which used to be the only ! native port for the Win32 platform. Since the Activeware port does not ! have adequate support for Perl's extension building tools, these ! extensions typically do not support those tools either and, therefore, ! cannot be built using the generic steps shown in the previous section. ! ! To ensure smooth transitioning of existing code that uses the ! ActiveState port, there is a bundle of Win32 extensions that contains ! all of the ActiveState extensions and most other Win32 extensions from ! CPAN in source form, along with many added bugfixes, and with MakeMaker ! support. This bundle is available at: ! ! http://www.cpan.org/authors/id/GSAR/libwin32-0.151.zip ! ! See the README in that distribution for building and installation ! instructions. Look for later versions that may be available at the ! same location. ! ! =item Running Perl Scripts ! ! Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to ! indicate to the OS that it should execute the file using perl. ! Win32 has no comparable means to indicate arbitrary files are ! executables. ! ! Instead, all available methods to execute plain text files on ! Win32 rely on the file "extension". There are three methods ! to use this to execute perl scripts: ! ! =over 8 ! ! =item 1 ! ! There is a facility called "file extension associations" that will ! work in Windows NT 4.0. This can be manipulated via the two ! commands "assoc" and "ftype" that come standard with Windows NT ! 4.0. Type "ftype /?" for a complete example of how to set this ! up for perl scripts (Say what? You thought Windows NT wasn't ! perl-ready? :). ! ! =item 2 ! ! Since file associations don't work everywhere, and there are ! reportedly bugs with file associations where it does work, the ! old method of wrapping the perl script to make it look like a ! regular batch file to the OS, may be used. The install process ! makes available the "pl2bat.bat" script which can be used to wrap ! perl scripts into batch files. For example: ! ! pl2bat foo.pl ! ! will create the file "FOO.BAT". Note "pl2bat" strips any ! .pl suffix and adds a .bat suffix to the generated file. ! ! If you use the 4DOS/NT or similar command shell, note that ! "pl2bat" uses the "%*" variable in the generated batch file to ! refer to all the command line arguments, so you may need to make ! sure that construct works in batch files. As of this writing, ! 4DOS/NT users will need a "ParameterChar = *" statement in their ! 4NT.INI file or will need to execute "setdos /p*" in the 4DOS/NT ! startup file to enable this to work. ! ! =item 3 ! ! Using "pl2bat" has a few problems: the file name gets changed, ! so scripts that rely on C<$0> to find what they must do may not ! run properly; running "pl2bat" replicates the contents of the ! original script, and so this process can be maintenance intensive ! if the originals get updated often. A different approach that ! avoids both problems is possible. ! ! A script called "runperl.bat" is available that can be copied ! to any filename (along with the .bat suffix). For example, ! if you call it "foo.bat", it will run the file "foo" when it is ! executed. Since you can run batch files on Win32 platforms simply ! by typing the name (without the extension), this effectively ! runs the file "foo", when you type either "foo" or "foo.bat". ! With this method, "foo.bat" can even be in a different location ! than the file "foo", as long as "foo" is available somewhere on ! the PATH. If your scripts are on a filesystem that allows symbolic ! links, you can even avoid copying "runperl.bat". ! ! Here's a diversion: copy "runperl.bat" to "runperl", and type ! "runperl". Explain the observed behavior, or lack thereof. :) ! Hint: .gnidnats llits er'uoy fi ,"lrepnur" eteled :tniH ! ! =back ! ! =item Miscellaneous Things ! ! A full set of HTML documentation is installed, so you should be ! able to use it if you have a web browser installed on your ! system. ! ! C is also a useful tool for browsing information contained ! in the documentation, especially in conjunction with a pager ! like C (recent versions of which have Win32 support). You may ! have to set the PAGER environment variable to use a specific pager. ! "perldoc -f foo" will print information about the perl operator ! "foo". ! ! If you find bugs in perl, you can run C to create a ! bug report (you may have to send it manually if C cannot ! find a mailer on your system). ! ! =back ! ! =head1 BUGS AND CAVEATS ! ! Norton AntiVirus interferes with the build process, particularly if ! set to "AutoProtect, All Files, when Opened". Unlike large applications ! the perl build process opens and modifies a lot of files. Having the ! the AntiVirus scan each and every one slows build the process significantly. ! Worse, with PERLIO=stdio the build process fails with peculiar messages ! as the virus checker interacts badly with miniperl.exe writing configure ! files (it seems to either catch file part written and treat it as suspicious, ! or virus checker may have it "locked" in a way which inhibits miniperl ! updating it). The build does complete with ! ! set PERLIO=perlio ! ! but that may be just luck. Other AntiVirus software may have similar issues. ! ! Some of the built-in functions do not act exactly as documented in ! L, and a few are not implemented at all. To avoid ! surprises, particularly if you have had prior exposure to Perl ! in other operating environments or if you intend to write code ! that will be portable to other environments. See L ! for a reasonably definitive list of these differences. ! ! Not all extensions available from CPAN may build or work properly ! in the Win32 environment. See L. ! ! Most C related calls are supported, but they may not ! behave as on Unix platforms. See L for the full list. ! ! Signal handling may not behave as on Unix platforms (where it ! doesn't exactly "behave", either :). For instance, calling C ! or C from signal handlers will cause an exception, since most ! implementations of C on Win32 are severely crippled. ! Thus, signals may work only for simple things like setting a flag ! variable in the handler. Using signals under this port should ! currently be considered unsupported. ! ! Please send detailed descriptions of any problems and solutions that ! you may find to >, along with the output produced ! by C. ! ! =head1 AUTHORS ! ! =over 4 ! ! =item Gary Ng E71564.1743@CompuServe.COME ! ! =item Gurusamy Sarathy Egsar@activestate.comE ! ! =item Nick Ing-Simmons Enick@ing-simmons.netE ! ! =back ! ! This document is maintained by Gurusamy Sarathy. ! ! =head1 SEE ALSO ! ! L ! ! =head1 HISTORY ! ! This port was originally contributed by Gary Ng around 5.003_24, ! and borrowed from the Hip Communications port that was available ! at the time. Various people have made numerous and sundry hacks ! since then. ! ! Borland support was added in 5.004_01 (Gurusamy Sarathy). ! ! GCC/mingw32 support was added in 5.005 (Nick Ing-Simmons). ! ! Support for PERL_OBJECT was added in 5.005 (ActiveState Tool Corp). ! ! Support for fork() emulation was added in 5.6 (ActiveState Tool Corp). ! ! Win9x support was added in 5.6 (Benjamin Stuhl). ! ! Last updated: 1 April 2001 ! ! =cut diff -c 'perl-5.7.1/XSUB.h' 'perl-5.7.2/XSUB.h' Index: ./XSUB.h *** ./XSUB.h Tue Mar 6 04:04:21 2001 --- ./XSUB.h Mon Jul 9 17:09:46 2001 *************** *** 18,23 **** --- 18,28 ---- XSUB. This is always the proper type for the C++ object. See C and L. + =for apidoc Amn|I32|ax + Variable which is setup by C to indicate the stack base offset, + used by the C, C and C macros. The C macro + must be called prior to setup the C variable. + =for apidoc Amn|I32|items Variable which is setup by C to indicate the number of items on the stack. See L. *************** *** 33,42 **** Macro to declare an XSUB and its C parameter list. This is handled by C. =for apidoc Ams||dXSARGS ! Sets up stack and mark pointers for an XSUB, calling dSP and dMARK. This ! is usually handled automatically by C. Declares the C ! variable to indicate the number of items on the stack. =for apidoc Ams||dXSI32 Sets up the C variable for an XSUB which has aliases. This is usually --- 38,55 ---- Macro to declare an XSUB and its C parameter list. This is handled by C. + =for apidoc Ams||dAX + Sets up the C variable. + This is usually handled automatically by C by calling C. + + =for apidoc Ams||dITEMS + Sets up the C variable. + This is usually handled automatically by C by calling C. + =for apidoc Ams||dXSARGS ! Sets up stack and mark pointers for an XSUB, calling dSP and dMARK. ! Sets up the C and C variables by calling C and C. ! This is usually handled automatically by C. =for apidoc Ams||dXSI32 Sets up the C variable for an XSUB which has aliases. This is usually *************** *** 53,62 **** # define XS(name) void name(pTHXo_ CV* cv) #endif #define dXSARGS \ dSP; dMARK; \ ! I32 ax = mark - PL_stack_base + 1; \ ! I32 items = sp - mark #define dXSTARG SV * targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \ ? PAD_SV(PL_op->op_targ) : sv_newmortal()) --- 66,78 ---- # define XS(name) void name(pTHXo_ CV* cv) #endif + #define dAX I32 ax = MARK - PL_stack_base + 1 + + #define dITEMS I32 items = SP - MARK + #define dXSARGS \ dSP; dMARK; \ ! dAX; dITEMS #define dXSTARG SV * targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \ ? PAD_SV(PL_op->op_targ) : sv_newmortal()) *************** *** 74,80 **** # define XSINTERFACE_CVT(ret,name) ret (*name)() #endif #define dXSFUNCTION(ret) XSINTERFACE_CVT(ret,XSFUNCTION) ! #define XSINTERFACE_FUNC(ret,cv,f) ((XSINTERFACE_CVT(ret,cv))(f)) #define XSINTERFACE_FUNC_SET(cv,f) \ CvXSUBANY(cv).any_dptr = (void (*) (pTHXo_ void*))(f) --- 90,96 ---- # define XSINTERFACE_CVT(ret,name) ret (*name)() #endif #define dXSFUNCTION(ret) XSINTERFACE_CVT(ret,XSFUNCTION) ! #define XSINTERFACE_FUNC(ret,cv,f) ((XSINTERFACE_CVT(ret,))(f)) #define XSINTERFACE_FUNC_SET(cv,f) \ CvXSUBANY(cv).any_dptr = (void (*) (pTHXo_ void*))(f) *************** *** 242,247 **** --- 258,272 ---- #if (defined(PERL_CAPI) || defined(PERL_IMPLICIT_SYS)) && !defined(PERL_CORE) # ifndef NO_XSLOCKS + # if defined (NETWARE) && defined (USE_STDIO) + # define times PerlProc_times + # define setuid PerlProc_setuid + # define setgid PerlProc_setgid + # define getpid PerlProc_getpid + # define pause PerlProc_pause + # define exit PerlProc_exit + # define _exit PerlProc__exit + # else # undef closedir # undef opendir # undef stdin *************** *** 257,262 **** --- 282,316 ---- # undef ungetc # undef fileno + //Following symbols were giving redefinition errors while building extensions - sgp 17th Oct 2000 + #ifdef NETWARE + # undef readdir + # undef fstat + # undef stat + # undef longjmp + # undef endhostent + # undef endnetent + # undef endprotoent + # undef endservent + # undef gethostbyaddr + # undef gethostbyname + # undef gethostent + # undef getnetbyaddr + # undef getnetbyname + # undef getnetent + # undef getprotobyname + # undef getprotobynumber + # undef getprotoent + # undef getservbyname + # undef getservbyport + # undef getservent + # undef inet_ntoa + # undef sethostent + # undef setnetent + # undef setprotoent + # undef setservent + #endif /* NETWARE */ + # define mkdir PerlDir_mkdir # define chdir PerlDir_chdir # define rmdir PerlDir_rmdir *************** *** 394,399 **** --- 448,454 ---- # define shutdown PerlSock_shutdown # define socket PerlSock_socket # define socketpair PerlSock_socketpair + # endif /* NETWARE && USE_STDIO */ # endif /* NO_XSLOCKS */ #endif /* PERL_CAPI */ diff -c 'perl-5.7.1/av.c' 'perl-5.7.2/av.c' Index: ./av.c *** ./av.c Tue Mar 6 04:04:21 2001 --- ./av.c Fri Jul 13 02:55:59 2001 *************** *** 25,31 **** if (AvREAL(av)) return; #ifdef DEBUGGING ! if (SvTIED_mg((SV*)av, 'P') && ckWARN_d(WARN_DEBUGGING)) Perl_warner(aTHX_ WARN_DEBUGGING, "av_reify called on tied array"); #endif key = AvMAX(av) + 1; --- 25,31 ---- if (AvREAL(av)) return; #ifdef DEBUGGING ! if (SvTIED_mg((SV*)av, PERL_MAGIC_tied) && ckWARN_d(WARN_DEBUGGING)) Perl_warner(aTHX_ WARN_DEBUGGING, "av_reify called on tied array"); #endif key = AvMAX(av) + 1; *************** *** 57,63 **** Perl_av_extend(pTHX_ AV *av, I32 key) { MAGIC *mg; ! if ((mg = SvTIED_mg((SV*)av, 'P'))) { dSP; ENTER; SAVETMPS; --- 57,63 ---- Perl_av_extend(pTHX_ AV *av, I32 key) { MAGIC *mg; ! if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { dSP; ENTER; SAVETMPS; *************** *** 96,102 **** } else { if (AvALLOC(av)) { ! #ifndef STRANGE_MALLOC MEM_SIZE bytes; IV itmp; #endif --- 96,102 ---- } else { if (AvALLOC(av)) { ! #if !defined(STRANGE_MALLOC) && !defined(MYMALLOC) MEM_SIZE bytes; IV itmp; #endif *************** *** 130,136 **** --- 130,138 ---- Safefree(AvALLOC(av)); AvALLOC(av) = ary; #endif + #if defined(MYMALLOC) && !defined(LEAKTEST) resized: + #endif ary = AvALLOC(av) + AvMAX(av) + 1; tmp = newmax - AvMAX(av); if (av == PL_curstack) { /* Oops, grew stack (via av_store()?) */ *************** *** 185,191 **** } if (SvRMAGICAL(av)) { ! if (mg_find((SV*)av,'P') || mg_find((SV*)av,'D')) { sv = sv_newmortal(); mg_copy((SV*)av, sv, 0, key); PL_av_fetch_sv = sv; --- 187,195 ---- } if (SvRMAGICAL(av)) { ! if (mg_find((SV*)av, PERL_MAGIC_tied) || ! mg_find((SV*)av, PERL_MAGIC_regdata)) ! { sv = sv_newmortal(); mg_copy((SV*)av, sv, 0, key); PL_av_fetch_sv = sv; *************** *** 253,259 **** Perl_croak(aTHX_ PL_no_modify); if (SvRMAGICAL(av)) { ! if (mg_find((SV*)av,'P')) { if (val != &PL_sv_undef) { mg_copy((SV*)av, val, 0, key); } --- 257,263 ---- Perl_croak(aTHX_ PL_no_modify); if (SvRMAGICAL(av)) { ! if (mg_find((SV*)av, PERL_MAGIC_tied)) { if (val != &PL_sv_undef) { mg_copy((SV*)av, val, 0, key); } *************** *** 438,444 **** /*SUPPRESS 560*/ /* Give any tie a chance to cleanup first */ ! if (SvTIED_mg((SV*)av, 'P')) av_fill(av, -1); /* mg_clear() ? */ if (AvREAL(av)) { --- 442,448 ---- /*SUPPRESS 560*/ /* Give any tie a chance to cleanup first */ ! if (SvTIED_mg((SV*)av, PERL_MAGIC_tied)) av_fill(av, -1); /* mg_clear() ? */ if (AvREAL(av)) { *************** *** 474,480 **** if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, 'P'))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); --- 478,484 ---- if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); *************** *** 510,516 **** return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, 'P'))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); --- 514,520 ---- return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); *************** *** 556,562 **** if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, 'P'))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); --- 560,566 ---- if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); *************** *** 622,628 **** return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, 'P'))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); --- 626,632 ---- return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); ! if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { dSP; PUSHSTACKi(PERLSI_MAGIC); PUSHMARK(SP); *************** *** 680,686 **** Perl_croak(aTHX_ "panic: null array"); if (fill < 0) fill = -1; ! if ((mg = SvTIED_mg((SV*)av, 'P'))) { dSP; ENTER; SAVETMPS; --- 684,690 ---- Perl_croak(aTHX_ "panic: null array"); if (fill < 0) fill = -1; ! if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { dSP; ENTER; SAVETMPS; *************** *** 743,755 **** } if (SvRMAGICAL(av)) { SV **svp; ! if ((mg_find((SV*)av,'P') || mg_find((SV*)av,'D')) && (svp = av_fetch(av, key, TRUE))) { sv = *svp; mg_clear(sv); ! if (mg_find(sv, 'p')) { ! sv_unmagic(sv, 'p'); /* No longer an element */ return sv; } return Nullsv; /* element cannot be deleted */ --- 747,760 ---- } if (SvRMAGICAL(av)) { SV **svp; ! if ((mg_find((SV*)av, PERL_MAGIC_tied) || ! mg_find((SV*)av, PERL_MAGIC_regdata)) && (svp = av_fetch(av, key, TRUE))) { sv = *svp; mg_clear(sv); ! if (mg_find(sv, PERL_MAGIC_tiedelem)) { ! sv_unmagic(sv, PERL_MAGIC_tiedelem); /* No longer an element */ return sv; } return Nullsv; /* element cannot be deleted */ *************** *** 760,765 **** --- 765,771 ---- else { sv = AvARRAY(av)[key]; if (key == AvFILLp(av)) { + AvARRAY(av)[key] = &PL_sv_undef; do { AvFILLp(av)--; } while (--key >= 0 && AvARRAY(av)[key] == &PL_sv_undef); *************** *** 797,808 **** return FALSE; } if (SvRMAGICAL(av)) { ! if (mg_find((SV*)av,'P') || mg_find((SV*)av,'D')) { SV *sv = sv_newmortal(); MAGIC *mg; mg_copy((SV*)av, sv, 0, key); ! mg = mg_find(sv, 'p'); if (mg) { magic_existspack(sv, mg); return SvTRUE(sv); --- 803,816 ---- return FALSE; } if (SvRMAGICAL(av)) { ! if (mg_find((SV*)av, PERL_MAGIC_tied) || ! mg_find((SV*)av, PERL_MAGIC_regdata)) ! { SV *sv = sv_newmortal(); MAGIC *mg; mg_copy((SV*)av, sv, 0, key); ! mg = mg_find(sv, PERL_MAGIC_tiedelem); if (mg) { magic_existspack(sv, mg); return SvTRUE(sv); diff -c 'perl-5.7.1/cc_runtime.h' 'perl-5.7.2/cc_runtime.h' Index: ./cc_runtime.h *** ./cc_runtime.h Tue Mar 6 04:04:21 2001 --- ./cc_runtime.h Mon Jul 9 17:09:46 2001 *************** *** 14,20 **** #define MAYBE_TAINT_SASSIGN_SRC(sv) \ if (PL_tainting && PL_tainted && (!SvGMAGICAL(left) || !SvSMAGICAL(left) || \ ! !((mg=mg_find(left, 't')) && mg->mg_len & 1)))\ TAINT_NOT #define PP_PREINC(sv) do { \ --- 14,20 ---- #define MAYBE_TAINT_SASSIGN_SRC(sv) \ if (PL_tainting && PL_tainted && (!SvGMAGICAL(left) || !SvSMAGICAL(left) || \ ! !((mg=mg_find(left, PERL_MAGIC_taint)) && mg->mg_len & 1)))\ TAINT_NOT #define PP_PREINC(sv) do { \ diff -c 'perl-5.7.1/cflags.SH' 'perl-5.7.2/cflags.SH' Index: ./cflags.SH *** ./cflags.SH Tue Mar 6 04:04:21 2001 --- ./cflags.SH Mon Jul 9 17:09:47 2001 *************** *** 1,4 **** ! case $CONFIG in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; --- 1,4 ---- ! case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; *************** *** 28,34 **** : In the following dollars and backticks do not need the extra backslash. $spitshell >>cflags <<'!NO!SUBS!' ! case $CONFIGDOTSH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; --- 28,34 ---- : In the following dollars and backticks do not need the extra backslash. $spitshell >>cflags <<'!NO!SUBS!' ! case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; *************** *** 99,108 **** --- 99,110 ---- dump) ;; gv) ;; hv) ;; + locale) ;; main) ;; malloc) ;; mg) ;; miniperlmain) ;; + numeric) ;; op) ;; perl) ;; perlapi) ;; *************** *** 111,116 **** --- 113,119 ---- pp) ;; pp_ctl) ;; pp_hot) ;; + pp_pack) ;; pp_sys) ;; regcomp) ;; regexec) ;; diff -c 'perl-5.7.1/config_h.SH' 'perl-5.7.2/config_h.SH' Index: ./config_h.SH Prereq: 3.0.1.5 *** ./config_h.SH Sun Apr 8 02:04:56 2001 --- ./config_h.SH Fri Jul 13 03:14:40 2001 *************** *** 4,10 **** case "$CONFIG_H" in '') CONFIG_H=config.h ;; esac ! case $CONFIG in '') if test -f $CONFIG_SH; then TOP=.; elif test -f ../$CONFIG_SH; then TOP=..; --- 4,10 ---- case "$CONFIG_H" in '') CONFIG_H=config.h ;; esac ! case $PERL_CONFIG_SH in '') if test -f $CONFIG_SH; then TOP=.; elif test -f ../$CONFIG_SH; then TOP=..; *************** *** 145,170 **** */ #$d_dlerror HAS_DLERROR /**/ - /* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ - /* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ - #$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/ - #$d_dosuid DOSUID /**/ - /* HAS_DUP2: * This symbol, if defined, indicates that the dup2 routine is * available to duplicate file descriptors. --- 145,150 ---- *************** *** 942,958 **** */ #$i_values I_VALUES /**/ - /* I_STDARG: - * This symbol, if defined, indicates that exists and should - * be included. - */ - /* I_VARARGS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ - #$i_stdarg I_STDARG /**/ - #$i_varargs I_VARARGS /**/ - /* I_VFORK: * This symbol, if defined, indicates to the C program that it should * include vfork.h. --- 922,927 ---- *************** *** 986,997 **** */ #define SH_PATH "$sh" /**/ - /* CROSSCOMPILE: - * This symbol, if defined, signifies that we our - * build process is a cross-compilation. - */ - #$crosscompile CROSSCOMPILE /**/ - /* INTSIZE: * This symbol contains the value of sizeof(int) so that the C * preprocessor can make decisions based on it. --- 955,960 ---- *************** *** 1062,1068 **** --- 1025,1037 ---- * by Configure. You shouldn't rely on it too much; the specific * feature tests from Configure are generally more reliable. */ + /* OSVERS: + * This symbol contains the version of the operating system, as determined + * by Configure. You shouldn't rely on it too much; the specific + * feature tests from Configure are generally more reliable. + */ #define OSNAME "$osname" /**/ + #define OSVERS "$osvers" /**/ /* MEM_ALIGNBYTES: * This symbol contains the number of bytes required to align a *************** *** 1069,1075 **** * double, or a long double when applicable. Usual values are 2, * 4 and 8. The default is eight, for safety. */ ! #if defined(CROSSCOMPILE) || defined(MULTIARCH) # define MEM_ALIGNBYTES 8 #else #define MEM_ALIGNBYTES $alignbytes --- 1038,1044 ---- * double, or a long double when applicable. Usual values are 2, * 4 and 8. The default is eight, for safety. */ ! #if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) # define MEM_ALIGNBYTES 8 #else #define MEM_ALIGNBYTES $alignbytes *************** *** 1146,1152 **** * so the default case (for NeXT) is big endian to catch them. * This might matter for NeXT 3.0. */ ! #if defined(CROSSCOMPILE) || defined(MULTIARCH) # ifdef __LITTLE_ENDIAN__ # if LONGSIZE == 4 # define BYTEORDER 0x1234 --- 1115,1121 ---- * so the default case (for NeXT) is big endian to catch them. * This might matter for NeXT 3.0. */ ! #if defined(USE_CROSS_COMPILE) || defined(MULTIARCH) # ifdef __LITTLE_ENDIAN__ # if LONGSIZE == 4 # define BYTEORDER 0x1234 *************** *** 1336,1341 **** --- 1305,1316 ---- */ #$d_endsent HAS_ENDSERVENT /**/ + /* HAS_FCHDIR: + * This symbol, if defined, indicates that the fchdir routine is + * available to change directory using a file descriptor. + */ + #$d_fchdir HAS_FCHDIR /**/ + /* FCNTL_CAN_LOCK: * This symbol, if defined, indicates that fcntl() can be used * for file locking. Normally on Unix systems this is defined. *************** *** 1794,1800 **** --- 1769,1783 ---- * available to split a long double x into a fractional part f and * an integer part i such that |f| < 1.0 and (f + i) = x. */ + /* HAS_MODFL_POW32_BUG: + * This symbol, if defined, indicates that the modfl routine is + * broken for long doubles >= pow(2, 32). + * For example from 4294967303.150000 one would get 4294967302.000000 + * and 1.150000. The bug has been seen in certain versions of glibc, + * release 2.2.2 is known to be okay. + */ #$d_modfl HAS_MODFL /**/ + #$d_modfl_pow32_bug HAS_MODFL_POW32_BUG /**/ /* HAS_MPROTECT: * This symbol, if defined, indicates that the mprotect system call is *************** *** 1869,1875 **** /* HAS_SAFE_BCOPY: * This symbol, if defined, indicates that the bcopy routine is available ! * to copy potentially overlapping memory blocks. Otherwise you should * probably use memmove() or memcpy(). If neither is defined, roll your * own version. */ --- 1852,1858 ---- /* HAS_SAFE_BCOPY: * This symbol, if defined, indicates that the bcopy routine is available ! * to copy potentially overlapping memory blocks. Normally, you should * probably use memmove() or memcpy(). If neither is defined, roll your * own version. */ *************** *** 1877,1885 **** /* HAS_SAFE_MEMCPY: * This symbol, if defined, indicates that the memcpy routine is available ! * to copy potentially overlapping memory blocks. Otherwise you should ! * probably use memmove() or memcpy(). If neither is defined, roll your ! * own version. */ #$d_safemcpy HAS_SAFE_MEMCPY /**/ --- 1860,1868 ---- /* HAS_SAFE_MEMCPY: * This symbol, if defined, indicates that the memcpy routine is available ! * to copy potentially overlapping memory blocks. If you need to ! * copy overlapping memory blocks, you should check HAS_MEMMOVE and ! * use memmove() instead, if available. */ #$d_safemcpy HAS_SAFE_MEMCPY /**/ *************** *** 2425,2432 **** --- 2408,2432 ---- * in the header file. In older versions of DB, it was * int, while in newer ones it is size_t. */ + /* DB_VERSION_MAJOR_CFG: + * This symbol, if defined, defines the major version number of + * Berkeley DB found in the header when Perl was configured. + */ + /* DB_VERSION_MINOR_CFG: + * This symbol, if defined, defines the minor version number of + * Berkeley DB found in the header when Perl was configured. + * For DB version 1 this is always 0. + */ + /* DB_VERSION_PATCH_CFG: + * This symbol, if defined, defines the patch version number of + * Berkeley DB found in the header when Perl was configured. + * For DB version 1 this is always 0. + */ #define DB_Hash_t $db_hashtype /**/ #define DB_Prefix_t $db_prefixtype /**/ + #define DB_VERSION_MAJOR_CFG $db_version_major /**/ + #define DB_VERSION_MINOR_CFG $db_version_minor /**/ + #define DB_VERSION_PATCH_CFG $db_version_patch /**/ /* I_GRP: * This symbol, if defined, indicates to the C program that it should *************** *** 2957,2963 **** * This macro is to be used to generate uniformly distributed * random numbers over the range [0., 1.[. You may have to supply * an 'extern double drand48();' in your program since SunOS 4.1.3 ! * doesn't provide you with anything relevant in it's headers. * See HAS_DRAND48_PROTO. */ /* Rand_seed_t: --- 2957,2963 ---- * This macro is to be used to generate uniformly distributed * random numbers over the range [0., 1.[. You may have to supply * an 'extern double drand48();' in your program since SunOS 4.1.3 ! * doesn't provide you with anything relevant in its headers. * See HAS_DRAND48_PROTO. */ /* Rand_seed_t: *************** *** 3236,3241 **** --- 3236,3246 ---- * This symbol, if defined, indicates that Perl should * be built to use the old draft POSIX threads API. */ + /* USE_REENTRANT_API: + * This symbol, if defined, indicates that Perl should + * try to use the various _r versions of library functions. + * This is extremely experimental. + */ #$use5005threads USE_5005THREADS /**/ #$useithreads USE_ITHREADS /**/ #if defined(USE_5005THREADS) && !defined(USE_ITHREADS) *************** *** 3242,3247 **** --- 3247,3253 ---- #define USE_THREADS /* until src is revised*/ #endif #$d_oldpthreads OLD_PTHREADS_API /**/ + #$usereentrant USE_REENTRANT_API /**/ /* PERL_VENDORARCH: * If defined, this symbol contains the name of a private library. *************** *** 3333,3338 **** --- 3339,3410 ---- #define PERL_XS_APIVERSION "$xs_apiversion" #define PERL_PM_APIVERSION "$pm_apiversion" + /* SETUID_SCRIPTS_ARE_SECURE_NOW: + * This symbol, if defined, indicates that the bug that prevents + * setuid scripts from being secure is not present in this kernel. + */ + /* DOSUID: + * This symbol, if defined, indicates that the C program should + * check the script that it is executing for setuid/setgid bits, and + * attempt to emulate setuid/setgid on systems that have disabled + * setuid #! scripts because the kernel can't do it securely. + * It is up to the package designer to make sure that this emulation + * is done securely. Among other things, it should do an fstat on + * the script it just opened to make sure it really is a setuid/setgid + * script, it should make sure the arguments passed correspond exactly + * to the argument on the #! line, and it should not trust any + * subprocesses to which it must pass the filename rather than the + * file descriptor of the script to be executed. + */ + #$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/ + #$d_dosuid DOSUID /**/ + + /* I_STDARG: + * This symbol, if defined, indicates that exists and should + * be included. + */ + /* I_VARARGS: + * This symbol, if defined, indicates to the C program that it should + * include . + */ + #$i_stdarg I_STDARG /**/ + #$i_varargs I_VARARGS /**/ + + /* USE_CROSS_COMPILE: + * This symbol, if defined, indicates that Perl is being cross-compiled. + */ + /* PERL_TARGETARCH: + * This symbol, if defined, indicates the target architecture + * Perl has been cross-compiled to. Undefined if not a cross-compile. + */ + #ifndef USE_CROSS_COMPILE + #$usecrosscompile USE_CROSS_COMPILE /**/ + #define PERL_TARGETARCH "$targetarch" /**/ + #endif + + /* HAS_DBMINIT_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the dbminit() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int dbminit(char *); + */ + #$d_dbminitproto HAS_DBMINIT_PROTO /**/ + + /* HAS_FLOCK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the flock() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int flock(int, int); + */ + #$d_flockproto HAS_FLOCK_PROTO /**/ + + /* HAS_NL_LANGINFO: + * This symbol, if defined, indicates that the nl_langinfo routine is + * available to return local data. You will also need + * and therefore I_LANGINFO. + */ + #$d_nl_langinfo HAS_NL_LANGINFO /**/ + /* HAS_SIGPROCMASK: * This symbol, if defined, indicates that the sigprocmask * system call is available to examine or change the signal mask *************** *** 3346,3356 **** --- 3418,3487 ---- */ #$d_sockatmark HAS_SOCKATMARK /**/ + /* HAS_SOCKATMARK_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the sockatmark() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int sockatmark _((int)); + */ + #$d_sockatmarkproto HAS_SOCKATMARK_PROTO /**/ + + /* HAS_SETRESGID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresgid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); + */ + #$d_sresgproto HAS_SETRESGID_PROTO /**/ + + /* HAS_SETRESUID_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the setresuid() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); + */ + #$d_sresuproto HAS_SETRESUID_PROTO /**/ + + /* HAS_STRFTIME: + * This symbol, if defined, indicates that the strftime routine is + * available to do time formatting. + */ + #$d_strftime HAS_STRFTIME /**/ + + /* HAS_SYSCALL_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the syscall() function. Otherwise, it is up + * to the program to supply one. Good guesses are + * extern int syscall(int, ...); + * extern int syscall(long, ...); + */ + #$d_syscallproto HAS_SYSCALL_PROTO /**/ + /* U32_ALIGNMENT_REQUIRED: * This symbol, if defined, indicates that you must access * character data through U32-aligned pointers. */ #$d_u32align U32_ALIGNMENT_REQUIRED /**/ + + /* HAS_USLEEP_PROTO: + * This symbol, if defined, indicates that the system provides + * a prototype for the usleep() function. Otherwise, it is up + * to the program to supply one. A good guess is + * extern int usleep(useconds_t); + */ + #$d_usleepproto HAS_USLEEP_PROTO /**/ + + /* I_LANGINFO: + * This symbol, if defined, indicates that exists and + * should be included. + */ + #$i_langinfo I_LANGINFO /**/ + + /* HAS_PTHREAD_ATFORK: + * This symbol, if defined, indicates that the pthread_atfork routine + * is available setup fork handlers. + */ + #$d_pthread_atfork HAS_PTHREAD_ATFORK /**/ #endif !GROK!THIS! diff -c 'perl-5.7.1/configpm' 'perl-5.7.2/configpm' Index: ./configpm *** ./configpm Fri Mar 16 04:54:46 2001 --- ./configpm Mon Jul 9 17:09:47 2001 *************** *** 60,66 **** while (<>) { next if m:^#!/bin/sh:; ! # Catch CONFIGDOTSH=true and PERL_VERSION=n line from Configure. s/^(\w+)=(true|\d+)\s*$/$1='$2'\n/; my ($k,$v) = ($1,$2); # grandfather PATCHLEVEL and SUBVERSION and CONFIG --- 60,66 ---- while (<>) { next if m:^#!/bin/sh:; ! # Catch PERL_CONFIG_SH=true and PERL_VERSION=n line from Configure. s/^(\w+)=(true|\d+)\s*$/$1='$2'\n/; my ($k,$v) = ($1,$2); # grandfather PATCHLEVEL and SUBVERSION and CONFIG *************** *** 71,77 **** elsif ($k eq 'PERL_SUBVERSION') { push @v_others, "SUBVERSION='$v'\n"; } ! elsif ($k eq 'CONFIGDOTSH') { push @v_others, "CONFIG='$v'\n"; } } --- 71,77 ---- elsif ($k eq 'PERL_SUBVERSION') { push @v_others, "SUBVERSION='$v'\n"; } ! elsif ($k eq 'PERL_CONFIG_SH') { push @v_others, "CONFIG='$v'\n"; } } *************** *** 474,484 **** import Config; die "$0: $config_pm not valid" ! unless $Config{'CONFIGDOTSH'} eq 'true'; die "$0: error processing $config_pm" if defined($Config{'an impossible name'}) ! or $Config{'CONFIGDOTSH'} ne 'true' # test cache ; die "$0: error processing $config_pm" --- 474,484 ---- import Config; die "$0: $config_pm not valid" ! unless $Config{'PERL_CONFIG_SH'} eq 'true'; die "$0: error processing $config_pm" if defined($Config{'an impossible name'}) ! or $Config{'PERL_CONFIG_SH'} ne 'true' # test cache ; die "$0: error processing $config_pm" diff -c 'perl-5.7.1/configure.com' 'perl-5.7.2/configure.com' Index: ./configure.com *** ./configure.com Thu Apr 5 20:00:19 2001 --- ./configure.com Fri Jul 13 03:16:13 2001 *************** *** 1,3 **** --- 1,4 ---- + $! OpenVMS configuration procedure for Perl -- do not attempt to run under DOS $ sav_ver = 'F$VERIFY(0)' $! SET VERIFY $! *************** *** 583,607 **** $!: Configure runs within the UU subdirectory $! $!: compute the number of columns on the terminal for proper question formatting ! $! (sfn, will assume 80-ish) $! $!: set up the echo used in my read !sfn $!: now set up to do reads with possible shell escape and default assignment !sfn $ GOTO Beyond_myread $! $myread: $ ans = "" $ If (fastread) $ Then ! $ echo4 "''rp'" $ Else $ If (.NOT. silent) Then echo "" ! $ READ SYS$COMMAND/PROMPT="''rp'" ans $ IF (ans .EQS. "&-d") $ THEN $ echo4 "(OK, I will run with -d after this question.)" $ IF (.NOT. silent) THEN echo "" ! $ READ SYS$COMMAND/PROMPT="''rp'" ans $ fastread := yes $ ENDIF $ IF (ans .EQS. "&-s") --- 584,652 ---- $!: Configure runs within the UU subdirectory $! $!: compute the number of columns on the terminal for proper question formatting ! $ IF F$MODE() .EQS. "BATCH" ! $! else it winds up being 512 in batch ! $ THEN COLUMNS = 80 ! $ ELSE COLUMNS = F$GETDVI("SYS$OUTPUT","DEVBUFSIZ") ! $ ENDIF ! $! "-des" sets SYS$OUTPUT to NL: with a DEVBUFSIZ too large (512 again) ! $ IF COLUMNS .GT. 210 THEN COLUMNS = 80 ! $! not sure if this would actually be needed - it hopefully will not hurt ! $ IF COLUMNS .LT. 40 THEN COLUMNS = 40 $! $!: set up the echo used in my read !sfn $!: now set up to do reads with possible shell escape and default assignment !sfn $ GOTO Beyond_myread $! + $! The sub_rp splitting is intended to handle long symbols such as the dflt for + $! extensions. + $! $myread: $ ans = "" + $ len_rp = F$LENGTH(rp) $ If (fastread) $ Then ! $ IF len_rp .GT. 210 ! $ THEN ! $ i_rp = 0 ! $ fastread_rp_loop: ! $ sub_rp = F$EXTRACT(i_rp,COLUMNS,rp) ! $ echo4 "''sub_rp'" ! $ i_rp = i_rp + COLUMNS ! $ IF i_rp .LT. len_rp THEN GOTO fastread_rp_loop ! $ ELSE ! $ echo4 "''rp'" ! $ ENDIF $ Else $ If (.NOT. silent) Then echo "" ! $ IF len_rp .GT. 210 ! $ THEN ! $ i_rp = 0 ! $ firstread_rp_loop: ! $ sub_rp = F$EXTRACT(i_rp,COLUMNS,rp) ! $ echo4 "''sub_rp'" ! $ i_rp = i_rp + COLUMNS ! $ IF i_rp .LT. len_rp THEN GOTO firstread_rp_loop ! $ READ SYS$COMMAND/PROMPT="''sub_rp'" ans ! $ ELSE ! $ READ SYS$COMMAND/PROMPT="''rp'" ans ! $ ENDIF $ IF (ans .EQS. "&-d") $ THEN $ echo4 "(OK, I will run with -d after this question.)" $ IF (.NOT. silent) THEN echo "" ! $ IF len_rp .GT. 210 ! $ THEN ! $ i_rp = 0 ! $ secondread_rp_loop: ! $ sub_rp = F$EXTRACT(i_rp,COLUMNS,rp) ! $ echo4 "''sub_rp'" ! $ i_rp = i_rp + COLUMNS ! $ IF i_rp .LT. len_rp THEN GOTO secondread_rp_loop ! $ READ SYS$COMMAND/PROMPT="''sub_rp'" ans ! $ ELSE ! $ READ SYS$COMMAND/PROMPT="''rp'" ans ! $ ENDIF $ fastread := yes $ ENDIF $ IF (ans .EQS. "&-s") *************** *** 608,614 **** $ THEN $ echo4 "(OK, I will run with -s after this question.)" $ echo "" ! $ READ SYS$COMMAND/PROMPT="''rp'" ans $ silent := true $ GOSUB Shut_up $ ENDIF --- 653,670 ---- $ THEN $ echo4 "(OK, I will run with -s after this question.)" $ echo "" ! $ IF len_rp .GT. 210 ! $ THEN ! $ i_rp = 0 ! $ thirdread_rp_loop: ! $ sub_rp = F$EXTRACT(i_rp,COLUMNS,rp) ! $ echo4 "''sub_rp'" ! $ i_rp = i_rp + COLUMNS ! $ IF i_rp .LT. len_rp THEN GOTO thirdread_rp_loop ! $ READ SYS$COMMAND/PROMPT="''sub_rp'" ans ! $ ELSE ! $ READ SYS$COMMAND/PROMPT="''rp'" ans ! $ ENDIF $ silent := true $ GOSUB Shut_up $ ENDIF *************** *** 1020,1025 **** --- 1076,1084 ---- $! genconfig.pl has either archname='VMS_AXP' or 'VMS_VAX' $! Note that DCL in VMS V5.4 does not have F$GETSYI("ARCH_NAME") $! but does have F$GETSYI("HW_MODEL"). + $! Please try to use either archname .EQS. "VMS_VAX" or archname .EQS. + $! "VMS_AXP" from here on to allow cross-platform configuration (e.g. + $! configure a VAX build on an Alpha). $! $ IF (F$GETSYI("HW_MODEL") .LT. 1024) $ THEN *************** *** 1048,1059 **** $ vms_prefixup = F$EDIT(vms_prefix,"UPCASE") $ rp = "Will you be sharing your ''vms_prefixup' with ''otherarch'? [''dflt'] " $ GOSUB myread ! $ if ans.NES."" $ THEN - $ ans = F$EXTRACT(0,1,F$EDIT(ans,"COLLAPSE, UPCASE")) - $ ENDIF - $ IF (ans.NES."Y") - $ THEN $ sharedperl = "N" $ ELSE $ sharedperl = "Y" --- 1107,1115 ---- $ vms_prefixup = F$EDIT(vms_prefix,"UPCASE") $ rp = "Will you be sharing your ''vms_prefixup' with ''otherarch'? [''dflt'] " $ GOSUB myread ! $ if ans .EQS. "" THEN ans = dflt ! $ IF .NOT. ans $ THEN $ sharedperl = "N" $ ELSE $ sharedperl = "Y" *************** *** 1141,1149 **** $! $ ENDIF !%Config-I-VMS, skip remaining "where install" questions $! ! $ perl_symbol = "true" ! $ perl_verb = "" ! $ dflt = "y" $ IF .NOT.silent $ THEN $ echo "" --- 1197,1208 ---- $! $ ENDIF !%Config-I-VMS, skip remaining "where install" questions $! ! $ IF F$TYPE(perl_symbol) .EQS. "" THEN perl_symbol := true ! $ IF F$TYPE(perl_verb) .EQS. "" THEN perl_verb = "" ! $ IF perl_symbol ! $ THEN dflt = "y" ! $ ELSE dflt = "n" ! $ ENDIF $ IF .NOT.silent $ THEN $ echo "" *************** *** 1154,1164 **** $ ENDIF $ rp = "Invoke perl as a global symbol foreign command? [''dflt'] " $ GOSUB myread ! $ IF (.NOT.ans).AND.(ans.NES."") THEN perl_symbol = "false" $! $ IF (.NOT.perl_symbol) $ THEN ! $ dflt = "y" $ IF .NOT.silent $ THEN $ echo "" --- 1213,1227 ---- $ ENDIF $ rp = "Invoke perl as a global symbol foreign command? [''dflt'] " $ GOSUB myread ! $ IF (ans.EQS."") THEN ans = dflt ! $ IF (.NOT.ans) THEN perl_symbol = "false" $! $ IF (.NOT.perl_symbol) $ THEN ! $ IF perl_verb .EQS. "DCLTABLES" ! $ THEN dflt = "n" ! $ ELSE dflt = "y" ! $ ENDIF $ IF .NOT.silent $ THEN $ echo "" *************** *** 1168,1174 **** $ ENDIF $ rp = "Invoke perl as a per process command verb? [ ''dflt' ] " $ GOSUB myread ! $ IF (.NOT.ans).AND.(ans.NES."") $ THEN perl_verb = "DCLTABLES" $ ELSE perl_verb = "PROCESS" $ ENDIF --- 1231,1238 ---- $ ENDIF $ rp = "Invoke perl as a per process command verb? [ ''dflt' ] " $ GOSUB myread ! $ IF (ans.EQS."") THEN ans = dflt ! $ IF (.NOT.ans) $ THEN perl_verb = "DCLTABLES" $ ELSE perl_verb = "PROCESS" $ ENDIF *************** *** 1889,1895 **** $List_Parse: $ OPEN/READ CONFIG ccvms.lis $ READ CONFIG line ! $ IF (F$GETSYI("HW_MODEL") .LT. 1024) $ THEN $ read CONFIG line $ archsufx = "VAX" --- 1953,1959 ---- $List_Parse: $ OPEN/READ CONFIG ccvms.lis $ READ CONFIG line ! $ IF archname .EQS. "VMS_VAX" $ THEN $ read CONFIG line $ archsufx = "VAX" *************** *** 2085,2094 **** $ IF ans.eqs."decc" then Has_Dec_C_Sockets = "T" $ IF ans.eqs."socketshr" then Has_socketshr = "T" $ ENDIF - $ IF Has_Dec_C_Sockets .or. Has_socketshr - $ THEN - $ static_ext = f$edit(static_ext+" "+"Socket","trim,compress") - $ ENDIF $! $! $! Ask if they want to build with VMS_DEBUG perl --- 2149,2154 ---- *************** *** 2387,2392 **** --- 2447,2492 ---- $ if ans.eqs."PACK_MALLOC" then use_pack_malloc = "Y" $ ENDIF $! + $ known_extensions = "" + $ xxx = "" + $ OPEN/READ CONFIG 'manifestfound' + $ext_loop: + $ READ/END_OF_FILE=end_ext/ERROR=end_ext CONFIG line + $ IF F$EXTRACT(0,4,line) .NES. "ext/" .AND. - + F$EXTRACT(0,8,line) .NES. "vms/ext/" THEN goto ext_loop + $ line = F$EDIT(line,"COMPRESS") + $ line = F$ELEMENT(0," ",line) + $ line_len = F$LENGTH(line) + $ IF F$EXTRACT(line_len - 12,12,line) .NES. "/Makefile.PL" THEN goto ext_loop + $ IF F$EXTRACT(0,4,line) .EQS. "ext/" THEN - + xxx = F$EXTRACT(4,line_len - 16,line) + $ IF xxx .EQS. "DynaLoader" THEN goto ext_loop ! omit + $ IF xxx .EQS. "SDBM_File/sdbm" THEN goto ext_loop ! sub extension - omit + $ IF F$EXTRACT(0,8,line) .EQS. "vms/ext/" THEN - + xxx = "VMS/" + F$EXTRACT(8,line_len - 20,line) + $ known_extensions = known_extensions + " ''xxx'" + $ goto ext_loop + $end_ext: + $ close CONFIG + $ DELETE/SYMBOL xxx + $ known_extensions = F$EDIT(known_extensions,"TRIM,COMPRESS") + $ dflt = known_extensions + $ IF ccname .NES. "DEC" .AND. ccname .NES. "CXX" + $ THEN + $ dflt = dflt - "POSIX" ! not with VAX C or GCC + $ ENDIF + $ dflt = dflt - "ByteLoader" ! needs to be ported + $ dflt = dflt - "DB_File" ! needs to be ported + $ dflt = dflt - "GDBM_File" ! needs porting/special library + $ dflt = dflt - "IPC/SysV" ! needs to be ported + $ dflt = dflt - "NDBM_File" ! needs porting/special library + $ dflt = dflt - "ODBM_File" ! needs porting/special library + $ IF .NOT. Has_socketshr .AND. .NOT. Has_Dec_C_Sockets + $ THEN + $ dflt = dflt - "Socket" ! optional on VMS + $ ENDIF + $ dflt = F$EDIT(dflt,"TRIM,COMPRESS") + $! $! Ask for their default list of extensions to build $ echo "" $ echo "It is time to specify which modules you want to build into" *************** *** 2395,2446 **** $ echo "SDBM_File if you have the GDBM library built on your machine." $ echo "" $ echo "Which modules do you want to build into perl?" - $! we need to add Byteloader to this list: - $ dflt = "re Fcntl Encode Errno File::Glob Filter::Util::Call IO Opcode Devel::Peek Devel::DProf Data::Dumper attrs VMS::Stdio VMS::DCLsym B SDBM_File Storable Thread Sys::Hostname Digest::MD5 PerlIO::Scalar MIME::Base64 XS::Typemap" - $ IF ccname .EQS. "DEC" .OR. ccname .EQS. "CXX" - $ THEN - $ dflt = dflt + " POSIX" - $ ENDIF $ rp = "[''dflt'] " $ GOSUB myread ! $ if ans.eqs."" then ans = "''dflt'" ! $ a = "" ! $ j = 0 ! $ xloop1: ! $ x = f$elem(j," ",ans) ! $ j = j + 1 ! $ if x .eqs. " " then goto exloop1 ! $ xloop2: ! $ k = f$locate("::",x) ! $ if k .ge. f$len(x) then goto exloop2 ! $ x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x) ! $ goto xloop2 ! $ exloop2: ! $ a = a + " " + x ! $ goto xloop1 ! $ exloop1: ! $ ans = f$edit(a,"trim") $! - $ a = "" - $ j = 0 - $ xloop3: - $ x = f$elem(j," ",dflt) - $ j = j + 1 - $ if x .eqs. " " then goto exloop3 - $ xloop4: - $ k = f$locate("::",x) - $ if k .ge. f$len(x) then goto exloop4 - $ x = f$extract(0,k,x) + "/" + f$extract(k+2,f$len(x)-2,x) - $ goto xloop4 - $ exloop4: - $ a = a + " " + x - $ goto xloop3 - $ exloop3: - $ dflt = f$edit(a,"trim") - $! - $ extensions = "''ans'" - $ known_extensions = "''dflt'" - $! $! %Config-I-VMS, determine build/make utility here (make gmake mmk mms) $ echo "" $ echo "Checking your ""make"" utilities..." --- 2495,2505 ---- $ echo "SDBM_File if you have the GDBM library built on your machine." $ echo "" $ echo "Which modules do you want to build into perl?" $ rp = "[''dflt'] " $ GOSUB myread ! $ if ans .eqs. "" then ans = "''dflt'" ! $ extensions = F$EDIT(ans,"TRIM,COMPRESS") $! $! %Config-I-VMS, determine build/make utility here (make gmake mmk mms) $ echo "" $ echo "Checking your ""make"" utilities..." *************** *** 2665,2671 **** $! - also take vms/descrip_mms.template -> descrip.mms (VMS Makefile) $! vms/Makefile.in -> Makefile. (VMS GNU Makefile?) $! vms/Makefile.SH -> Makefile. (VMS GNU Makefile?) - $! - build make_ext.com extension builder procedure. $! $! Note for folks from other platforms changing things in here: $! --- 2724,2729 ---- *************** *** 2764,2770 **** $! $ perl_cc=Mcc $! ! $ IF (sharedperl .AND. F$GETSYI("HW_MODEL") .GE. 1024) $ THEN $ obj_ext=".abj" $ so="axe" --- 2822,2828 ---- $! $ perl_cc=Mcc $! ! $ IF (sharedperl .AND. archname .EQS. "VMS_AXP") $ THEN $ obj_ext=".abj" $ so="axe" *************** *** 3596,3602 **** $ WS "int main()" $ WS "{" $ WS "char * place;" ! $ WS "place = memchr(""foo"", 47, 3)" $ WS "exit(0);" $ WS "}" $ CS --- 3654,3660 ---- $ WS "int main()" $ WS "{" $ WS "char * place;" ! $ WS "place = memchr(""foo"", 47, 3);" $ WS "exit(0);" $ WS "}" $ CS *************** *** 4553,4558 **** --- 4611,4632 ---- $ d_sysconf="undef" $ d_sigsetjmp="undef" $ ENDIF + $!: see if tzname[] exists + $ OS + $ WS "#include " + $ WS "#include " + $ WS "int main() { extern short tzname[]; printf(""%hd"", tzname[0]); }" + $ CS + $ GOSUB compile_ok + $ IF compile_status .EQ. good_compile + $ THEN + $ d_tzname = "undef" + $ echo4 "tzname[] NOT found." + $ ELSE + $ d_tzname = "define" + $ echo4 "tzname[] found." + $ ENDIF + $ IF F$SEARCH("try.obj") .NES. "" THEN DELETE/NOLOG/NOCONFIRM try.obj; $! $ IF d_gethname .EQS. "undef" .AND. d_uname .EQS. "undef" $ THEN *************** *** 4577,4583 **** --- 4651,4659 ---- $ d_strxfrm="define" $ d_wctomb="define" $ i_locale="define" + $ i_langinfo="define" $ d_locconv="define" + $ d_nl_langinfo="define" $ d_setlocale="define" $ vms_cc_type="decc" $ ELSE *************** *** 4594,4604 **** $ d_strxfrm="undef" $ d_wctomb="undef" $ i_locale="undef" $ d_locconv="undef" $ d_setlocale="undef" $ ENDIF $ d_stdio_ptr_lval_sets_cnt="undef" ! $ d_stdio_ptr_lval_nochange_cnt="undef" $! $! Sockets? $ if Has_Socketshr .OR. Has_Dec_C_Sockets --- 4670,4682 ---- $ d_strxfrm="undef" $ d_wctomb="undef" $ i_locale="undef" + $ i_langinfo="undef" $ d_locconv="undef" + $ d_nl_langinfo="undef" $ d_setlocale="undef" $ ENDIF $ d_stdio_ptr_lval_sets_cnt="undef" ! $ d_stdio_ptr_lval_nochange_cnt="define" $! $! Sockets? $ if Has_Socketshr .OR. Has_Dec_C_Sockets *************** *** 4895,4908 **** $ WC "cppminus='" + cppminus + "'" $ WC "cpprun='" + cpprun + "'" $ WC "cppstdin='" + cppstdin + "'" - $ WC "crosscompile='undef'" - $ WC "d__fwalk='undef'" $ WC "d_Gconvert='my_gconvert(x,n,t,b)'" - $ WC "d_PRId64='" + d_PRId64 + "'" $ WC "d_PRIEldbl='" + d_PRIEUldbl + "'" $ WC "d_PRIFldbl='" + d_PRIFUldbl + "'" $ WC "d_PRIGldbl='" + d_PRIGUldbl + "'" $ WC "d_PRIX64='" + d_PRIXU64 + "'" $ WC "d_PRIeldbl='" + d_PRIeldbl + "'" $ WC "d_PRIfldbl='" + d_PRIfldbl + "'" $ WC "d_PRIgldbl='" + d_PRIgldbl + "'" --- 4973,4984 ---- $ WC "cppminus='" + cppminus + "'" $ WC "cpprun='" + cpprun + "'" $ WC "cppstdin='" + cppstdin + "'" $ WC "d_Gconvert='my_gconvert(x,n,t,b)'" $ WC "d_PRIEldbl='" + d_PRIEUldbl + "'" $ WC "d_PRIFldbl='" + d_PRIFUldbl + "'" $ WC "d_PRIGldbl='" + d_PRIGUldbl + "'" $ WC "d_PRIX64='" + d_PRIXU64 + "'" + $ WC "d_PRId64='" + d_PRId64 + "'" $ WC "d_PRIeldbl='" + d_PRIeldbl + "'" $ WC "d_PRIfldbl='" + d_PRIfldbl + "'" $ WC "d_PRIgldbl='" + d_PRIgldbl + "'" *************** *** 4910,4915 **** --- 4986,4992 ---- $ WC "d_PRIu64='" + d_PRIu64 + "'" $ WC "d_PRIx64='" + d_PRIx64 + "'" $ WC "d_SCNfldbl='" + d_SCNfldbl + "'" + $ WC "d__fwalk='undef'" $ WC "d_access='" + d_access + "'" $ WC "d_accessx='undef'" $ WC "d_alarm='define'" *************** *** 4921,4928 **** $ WC "d_bcopy='" + d_bcopy + "'" $ WC "d_bincompat3='undef'" $ WC "d_bincompat5005='undef'" - $ WC "d_bsdgetpgrp='undef'" $! WC "d_bsdpgrp='undef'" $ WC "d_bsdsetpgrp='undef'" $ WC "d_bzero='" + d_bzero + "'" $ WC "d_casti32='define'" --- 4998,5005 ---- $ WC "d_bcopy='" + d_bcopy + "'" $ WC "d_bincompat3='undef'" $ WC "d_bincompat5005='undef'" $! WC "d_bsdpgrp='undef'" + $ WC "d_bsdgetpgrp='undef'" $ WC "d_bsdsetpgrp='undef'" $ WC "d_bzero='" + d_bzero + "'" $ WC "d_casti32='define'" *************** *** 4937,4942 **** --- 5014,5020 ---- $ WC "d_csh='undef'" $ WC "d_cuserid='define'" $ WC "d_dbl_dig='define'" + $ WC "d_dbminitproto='undef'" $ WC "d_difftime='define'" $ WC "d_dirnamlen='define'" $ WC "d_dlerror='undef'" *************** *** 4954,4959 **** --- 5032,5038 ---- $ WC "d_eofnblk='undef'" $ WC "d_eunice='undef'" $ WC "d_fchmod='undef'" + $ WC "d_fchdir='undef'" $ WC "d_fchown='undef'" $ WC "d_fcntl='" + d_fcntl + "'" $ WC "d_fcntl_can_lock='" + d_fcntl_can_lock + "'" *************** *** 4961,4966 **** --- 5040,5046 ---- $ WC "d_fgetpos='define'" $ WC "d_flexfnam='define'" $ WC "d_flock='undef'" + $ WC "d_flockproto='undef'" $ WC "d_fork='undef'" $ WC "d_fpathconf='" + d_fpathconf + "'" $ WC "d_fpos64_t='" + d_fpos64_t + "'" *************** *** 4972,4978 **** $ WC "d_fstatvfs='undef'" $ WC "d_fsync='undef'" $ WC "d_ftello='undef'" ! $ WC "d_getcwd='undef'" $ WC "d_getespwnam='undef'" $ WC "d_getfsstat='undef'" $ WC "d_getgrent='define'" --- 5052,5058 ---- $ WC "d_fstatvfs='undef'" $ WC "d_fsync='undef'" $ WC "d_ftello='undef'" ! $ WC "d_getcwd='define'" $ WC "d_getespwnam='undef'" $ WC "d_getfsstat='undef'" $ WC "d_getgrent='define'" *************** *** 5048,5053 **** --- 5128,5134 ---- $ WC "d_mktime='" + d_mktime + "'" $ WC "d_mmap='undef'" $ WC "d_modfl='" + d_modfl + "'" + $ WC "d_modfl_pow32_bug='undef'" $ WC "d_mprotect='undef'" $ WC "d_msg='undef'" $ WC "d_msg_ctrunc='undef'" *************** *** 5060,5065 **** --- 5141,5147 ---- $ WC "d_munmap='undef'" $ WC "d_mymalloc='" + d_mymalloc + "'" $ WC "d_nice='define'" + $ WC "d_nl_langinfo='" + d_nl_langinfo + "'" $ WC "d_nv_preserves_uv='" + d_nv_preserves_uv + "'" $ WC "d_nv_preserves_uv_bits='" + d_nv_preserves_uv_bits + "'" $ WC "d_off64_t='" + d_off64_t + "'" *************** *** 5073,5078 **** --- 5155,5161 ---- $ WC "d_phostname='" + d_phostname + "'" $ WC "d_pipe='define'" $ WC "d_poll='undef'" + $ WC "d_pthread_atfork='undef'" $ WC "d_pthread_yield='" + d_pthread_yield + "'" $ WC "d_pthreads_created_joinable='" + d_pthreads_created_joinable + "'" $ WC "d_pwage='undef'" *************** *** 5088,5093 **** --- 5171,5177 ---- $ WC "d_readdir='define'" $ WC "d_readlink='undef'" $ WC "d_readv='undef'" + $ WC "d_realpath='undef'" $ WC "d_recvmsg='undef'" $ WC "d_rename='define'" $ WC "d_rewinddir='define'" *************** *** 5137,5147 **** --- 5221,5236 ---- $ WC "d_sigprocmask='" + d_sigprocmask + "'" $ WC "d_sigsetjmp='" + d_sigsetjmp + "'" $ WC "d_sockatmark='undef'" + $ WC "d_sockatmarkproto='undef'" $ WC "d_socket='" + d_socket + "'" $ WC "d_socklen_t='" + d_socklen_t + "'" $ WC "d_sockpair='undef'" $ WC "d_socks5_init='undef'" $ WC "d_sqrtl='define'" + $ WC "d_sresgproto='undef'" + $ WC "d_sresgproto='undef'" + $ WC "d_sresproto='undef'" + $ WC "d_sresuproto='undef'" $ WC "d_statblks='undef'" $ WC "d_statfs_f_flags='undef'" $ WC "d_statfs_s='undef'" *************** *** 5148,5155 **** $ WC "d_statfsflags='undef'" $ WC "d_stdio_cnt_lval='" + d_stdio_cnt_lval + "'" $ WC "d_stdio_ptr_lval='" + d_stdio_ptr_lval + "'" - $ WC "d_stdio_ptr_lval_sets_cnt='" + d_stdio_ptr_lval_sets_cnt + "'" $ WC "d_stdio_ptr_lval_nochange_cnt='" + d_stdio_ptr_lval_nochange_cnt + "'" $ WC "d_stdio_stream_array='undef'" $ WC "d_stdiobase='" + d_stdiobase + "'" $ WC "d_stdstdio='" + d_stdstdio + "'" --- 5237,5244 ---- $ WC "d_statfsflags='undef'" $ WC "d_stdio_cnt_lval='" + d_stdio_cnt_lval + "'" $ WC "d_stdio_ptr_lval='" + d_stdio_ptr_lval + "'" $ WC "d_stdio_ptr_lval_nochange_cnt='" + d_stdio_ptr_lval_nochange_cnt + "'" + $ WC "d_stdio_ptr_lval_sets_cnt='" + d_stdio_ptr_lval_sets_cnt + "'" $ WC "d_stdio_stream_array='undef'" $ WC "d_stdiobase='" + d_stdiobase + "'" $ WC "d_stdstdio='" + d_stdstdio + "'" *************** *** 5158,5163 **** --- 5247,5253 ---- $ WC "d_strctcpy='define'" $ WC "d_strerrm='strerror((e),vaxc$errno)'" $ WC "d_strerror='define'" + $ WC "d_strftime='define'" $ WC "d_strtod='define'" $ WC "d_strtol='define'" $ WC "d_strtold='" + d_strtold + "'" *************** *** 5170,5175 **** --- 5260,5266 ---- $ WC "d_suidsafe='undef'" $ WC "d_symlink='undef'" $ WC "d_syscall='undef'" + $ WC "d_syscallproto='undef'" $ WC "d_sysconf='" + d_sysconf + "'" $ WC "d_syserrlst='undef'" $ WC "d_system='define'" *************** *** 5179,5185 **** $ WC "d_telldirproto='define'" $ WC "d_times='define'" $ WC "d_truncate='" + d_truncate + "'" ! $ WC "d_tzname='undef'" $ WC "d_u32align='define'" $ WC "d_ualarm='undef'" $ WC "d_umask='define'" --- 5270,5276 ---- $ WC "d_telldirproto='define'" $ WC "d_times='define'" $ WC "d_truncate='" + d_truncate + "'" ! $ WC "d_tzname='" + d_tzname + "'" $ WC "d_u32align='define'" $ WC "d_ualarm='undef'" $ WC "d_umask='define'" *************** *** 5187,5192 **** --- 5278,5284 ---- $ WC "d_union_semun='undef'" $ WC "d_unlink_all_versions='undef'" $ WC "d_usleep='undef'" + $ WC "d_usleepproto='undef'" $ WC "d_ustat='undef'" $ WC "d_vendorarch='undef'" $ WC "d_vendorlib='undef'" *************** *** 5212,5224 **** $ WC "dlsrc='dl_vms.c'" $ WC "doublesize='" + doublesize + "'" $ WC "drand01='" + drand01 + "'" ! $ WC "dynamic_ext='" + extensions + "'" $ WC "eagain=' '" $ WC "ebcdic='undef'" $ WC "embedmymalloc='" + mymalloc + "'" $ WC "eunicefix=':'" $ WC "exe_ext='" + exe_ext + "'" ! $ WC "extensions='" + extensions + "'" $ WC "fflushNULL='define'" $ WC "fflushall='undef'" $ WC "fpostype='fpos_t'" --- 5304,5326 ---- $ WC "dlsrc='dl_vms.c'" $ WC "doublesize='" + doublesize + "'" $ WC "drand01='" + drand01 + "'" ! $! ! $! The extensions symbol may be quite long ! $! ! $ tmp = "dynamic_ext='" + extensions + "'" ! $ WC/symbol tmp ! $ DELETE/SYMBOL tmp $ WC "eagain=' '" $ WC "ebcdic='undef'" $ WC "embedmymalloc='" + mymalloc + "'" $ WC "eunicefix=':'" $ WC "exe_ext='" + exe_ext + "'" ! $! ! $! The extensions symbol may be quite long ! $! ! $ tmp = "extensions='" + extensions + "'" ! $ WC/symbol tmp ! $ DELETE/SYMBOL tmp $ WC "fflushNULL='define'" $ WC "fflushall='undef'" $ WC "fpostype='fpos_t'" *************** *** 5252,5257 **** --- 5354,5360 ---- $ WC "i_iconv='" + i_iconv +"'" $ WC "i_ieeefp='undef'" $ WC "i_inttypes='" + i_inttypes + "'" + $ WC "i_langinfo='" + i_langinfo + "'" $ WC "i_libutil='" + i_libutil + "'" $ WC "i_limits='define'" $ WC "i_locale='" + i_locale + "'" *************** *** 5329,5335 **** $ WC "ivdformat='" + ivdformat + "'" $ WC "ivsize='" + ivsize + "'" $ WC "ivtype='" + ivtype + "'" ! $ WC "known_extensions='" + known_extensions + "'" $ WC "ld='" + ld + "'" $ WC "lddlflags='/Share'" $ WC "ldflags='" + ldflags + "'" --- 5432,5443 ---- $ WC "ivdformat='" + ivdformat + "'" $ WC "ivsize='" + ivsize + "'" $ WC "ivtype='" + ivtype + "'" ! $! ! $! The known_extensions symbol may be quite long ! $! ! $ tmp = "known_extensions='" + known_extensions + "'" ! $ WC/symbol tmp ! $ DELETE/SYMBOL tmp $ WC "ld='" + ld + "'" $ WC "lddlflags='/Share'" $ WC "ldflags='" + ldflags + "'" *************** *** 5463,5468 **** --- 5571,5577 ---- $ WC "use64bitall='" + use64bitall + "'" $ WC "use64bitint='" + use64bitint + "'" $ WC "usedebugging_perl='" + use_debugging_perl + "'" + $ WC "usecrosscompile='undef'" $ WC "usedl='" + usedl + "'" $ WC "useithreads='" + useithreads + "'" $ WC "uselargefiles='" + uselargefiles + "'" *************** *** 5472,5477 **** --- 5581,5587 ---- $ WC "usemymalloc='" + usemymalloc + "'" $ WC "useperlio='" + useperlio + "'" $ WC "useposix='false'" + $ WC "usereentrant='undef'" $ WC "usesocks='undef'" $ WC "usethreads='" + usethreads + "'" $ WC "usevfork='true'" *************** *** 5490,5496 **** $ WC "vms_ver='" + vms_ver + "'" ! VMS specific $ WC "voidflags='15'" $ WC "xs_apiversion='" + version + "'" ! $ WC "CONFIGDOTSH='true'" $! $! ##END WRITE NEW CONSTANTS HERE## $! --- 5600,5606 ---- $ WC "vms_ver='" + vms_ver + "'" ! VMS specific $ WC "voidflags='15'" $ WC "xs_apiversion='" + version + "'" ! $ WC "PERL_CONFIG_SH='true'" $! $! ##END WRITE NEW CONSTANTS HERE## $! *************** *** 5589,5594 **** --- 5699,5711 ---- $ IF d_herrno .EQS. "undef" THEN WC "#define NEED_AN_H_ERRNO" $ WC "#define HAS_ENVGETENV" $ WC "#define PERL_EXTERNAL_GLOB" + $ IF archname .EQS. "VMS_VAX" .AND. - + ccname .EQS. "DEC" .AND. - + ccversion .LE. 50390006 + $ THEN + $! Alas this does not help to build Fcntl + $! WC "#define PERL_IGNORE_FPUSIG SIGFPE" + $ ENDIF $ CLOSE CONFIG $! $ echo4 "Doing variable substitutions on .SH files..." *************** *** 5658,5663 **** --- 5775,5781 ---- "''Thread_Live_Dangerously'" "PV=''version'" "FLAGS=FLAGS=''extra_flags'" $! Clean up after ourselves $ DELETE/NOLOG/NOCONFIRM []munchconfig.exe; + $! $ echo4 "Extracting make_ext.com (without variable substitutions)" $ Create Sys$Disk:[-]make_ext.com $ Deck/Dollar="$EndOfTpl$" *************** *** 5666,5682 **** $! Any changes made to it directly will be lost. If you need to make any $! changes, please edit the template in Configure.Com instead. $ def = F$Environment("Default") ! $ exts1 = F$Edit(p1,"Compress") ! $ p2 = F$Edit(p2,"Upcase,Compress,Trim") ! $ If F$Locate("MCR ",p2).eq.0 Then p2 = F$Extract(3,255,p2) ! $ miniperl = "$" + F$Search(F$Parse(p2,".Exe")) ! $ makeutil = p3 ! $ if f$type('p3') .nes. "" then makeutil = 'p3' ! $ targ = F$Edit(p4,"Lowercase") $ i = 0 $ next_ext: ! $ ext = F$Element(i," ",p1) ! $ If ext .eqs. " " Then Goto done $ Define/User_mode Perl_Env_Tables CLISYM_LOCAL $ miniperl $ deck --- 5784,5814 ---- $! Any changes made to it directly will be lost. If you need to make any $! changes, please edit the template in Configure.Com instead. $ def = F$Environment("Default") ! $! p1 - how to invoke miniperl (passed in from descrip.mms) ! $ p1 = F$Edit(p1,"Upcase,Compress,Trim") ! $ If F$Locate("MCR ",p1).eq.0 Then p1 = F$Extract(3,255,p1) ! $ miniperl = "$" + F$Search(F$Parse(p1,".Exe")) ! $! p2 - how to invoke local make utility (passed in from descrip.mms) ! $ makeutil = p2 ! $ if f$type('p2') .nes. "" then makeutil = 'p2' ! $! p3 - make target (passed in from descrip.mms) ! $ targ = F$Edit(p3,"Lowercase") ! $ sts = 1 ! $ extensions = "" ! $ open/read CONFIG config.sh ! $ find_ext_loop: ! $ read/end=end_ext_loop CONFIG line ! $ if (f$extract(0,12,line) .NES. "extensions='") ! $ then goto find_ext_loop ! $ else extensions = f$extract(12,f$length(line),line) - "'" ! $ endif ! $ end_ext_loop: ! $ close CONFIG ! $ extensions = f$edit(extensions,"TRIM,COMPRESS") $ i = 0 $ next_ext: ! $ ext = f$element(i," ",extensions) ! $ If ext .eqs. " " .or. ext .eqs. "" Then Goto done $ Define/User_mode Perl_Env_Tables CLISYM_LOCAL $ miniperl $ deck *************** *** 5811,5816 **** --- 5943,5950 ---- $ CALL Bad_environment "T" $ CALL Bad_environment "FOO" $ CALL Bad_environment "EXT" + $ CALL Bad_environment "SOME_LOGICAL_NAME_NOT_LIKELY" + $ CALL Bad_environment "DOWN_LOGICAL_NAME_NOT_LIKELY" $ CALL Bad_environment "TEST" "SYMBOL" $ IF f$search("config.msg") .eqs. "" THEN echo "OK." $! *************** *** 5823,5829 **** $ echo4 "The perl.cld file is now being written..." $ OPEN/WRITE CONFIG 'file_2_find' $ ext = ".exe" ! $ IF ((sharedperl) .AND. (F$GETSYI("HW_MODEL") .GE. 1024)) THEN ext := .AXE $ IF (use_vmsdebug_perl) $ THEN $ WRITE CONFIG "define verb dbgperl" --- 5957,5963 ---- $ echo4 "The perl.cld file is now being written..." $ OPEN/WRITE CONFIG 'file_2_find' $ ext = ".exe" ! $ IF (sharedperl .AND. archname .EQS. "VMS_AXP") THEN ext := .AXE $ IF (use_vmsdebug_perl) $ THEN $ WRITE CONFIG "define verb dbgperl" diff -c 'perl-5.7.1/cop.h' 'perl-5.7.2/cop.h' Index: ./cop.h *** ./cop.h Sat Mar 17 20:34:46 2001 --- ./cop.h Mon Jul 9 17:09:47 2001 *************** *** 156,161 **** --- 156,162 ---- SV * old_namesv; OP * old_eval_root; SV * cur_text; + CV * cv; }; #define PUSHEVAL(cx,n,fgv) \ *************** *** 165,170 **** --- 166,172 ---- cx->blk_eval.old_namesv = (n ? newSVpv(n,0) : Nullsv); \ cx->blk_eval.old_eval_root = PL_eval_root; \ cx->blk_eval.cur_text = PL_linestr; \ + cx->blk_eval.cv = Nullcv; /* set by doeval(), as applicable */ \ } STMT_END #define POPEVAL(cx) \ diff -c 'perl-5.7.1/cv.h' 'perl-5.7.2/cv.h' Index: ./cv.h *** ./cv.h Tue Mar 6 04:04:23 2001 --- ./cv.h Mon Jul 9 17:09:47 2001 *************** *** 55,60 **** --- 55,65 ---- #define CvXSUBANY(sv) ((XPVCV*)SvANY(sv))->xcv_xsubany #define CvGV(sv) ((XPVCV*)SvANY(sv))->xcv_gv #define CvFILE(sv) ((XPVCV*)SvANY(sv))->xcv_file + #ifdef USE_ITHREADS + # define CvFILE_set_from_cop(sv, cop) (CvFILE(sv) = savepv(CopFILE(cop))) + #else + # define CvFILE_set_from_cop(sv, cop) (CvFILE(sv) = CopFILE(cop)) + #endif #define CvFILEGV(sv) (gv_fetchfile(CvFILE(sv)) #define CvDEPTH(sv) ((XPVCV*)SvANY(sv))->xcv_depth #define CvPADLIST(sv) ((XPVCV*)SvANY(sv))->xcv_padlist diff -c 'perl-5.7.1/cygwin/Makefile.SHs' 'perl-5.7.2/cygwin/Makefile.SHs' Index: ./cygwin/Makefile.SHs *** ./cygwin/Makefile.SHs Tue Mar 6 04:04:23 2001 --- ./cygwin/Makefile.SHs Mon Jul 9 17:09:47 2001 *************** *** 8,14 **** # #! /bin/sh ! case $CONFIG in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; --- 8,14 ---- # #! /bin/sh ! case $PERL_CONFIG_SH in '') if test -f config.sh; then TOP=.; elif test -f ../config.sh; then TOP=..; *************** *** 36,42 **** # install is included in Cygwin distributions, and we make a note of th # requirement in the README.cygwin file. However, let's give them # a warning. ! @install -c -m 755 ld2 ${installbin}/ld2 @if test ! -f ${installbin}/ld2; then \ echo "*************************************************" ; \ echo "Make will probably fail in a few more steps." ; \ --- 36,42 ---- # install is included in Cygwin distributions, and we make a note of th # requirement in the README.cygwin file. However, let's give them # a warning. ! @/usr/bin/install -c -m 755 ld2 ${installbin}/ld2 @if test ! -f ${installbin}/ld2; then \ echo "*************************************************" ; \ echo "Make will probably fail in a few more steps." ; \ diff -c 'perl-5.7.1/djgpp/config.over' 'perl-5.7.2/djgpp/config.over' Index: ./djgpp/config.over *** ./djgpp/config.over Sun Mar 25 07:14:46 2001 --- ./djgpp/config.over Mon Jul 9 17:09:48 2001 *************** *** 40,46 **** -e 's=filter/util/call=Filter/Util/Call=' \ -e 's=digest/md5=Digest/MD5=' \ -e 's=perlio/scalar=PerlIO/Scalar=' \ ! -e 's=mime/base64=MIME/Base64=' } static_ext=$(repair "$static_ext") extensions=$(repair "$extensions") --- 40,52 ---- -e 's=filter/util/call=Filter/Util/Call=' \ -e 's=digest/md5=Digest/MD5=' \ -e 's=perlio/scalar=PerlIO/Scalar=' \ ! -e 's=mime/base64=MIME/Base64=' \ ! -e 's=time/hires=Time/HiRes=' \ ! -e 's=list/util=List/Util=' \ ! -e 's=time/piece=Time/Piece=' \ ! -e 's=cwd=Cwd=' \ ! -e 's=perlio/via=PerlIO/Via=' \ ! -e 's=xs/typemap=XS/Typemap=' } static_ext=$(repair "$static_ext") extensions=$(repair "$extensions") diff -c 'perl-5.7.1/djgpp/configure.bat' 'perl-5.7.2/djgpp/configure.bat' Index: ./djgpp/configure.bat *** ./djgpp/configure.bat Tue Apr 10 05:29:17 2001 --- ./djgpp/configure.bat Fri Jul 13 17:18:32 2001 *************** *** 1,37 **** ! @echo off ! set CONFIG= ! set PATH_SEPARATOR=; ! set PATH_EXPAND=y ! sh -c 'if test $PATH_SEPARATOR = ";"; then exit 1; fi' ! if ERRORLEVEL 1 goto path_sep_ok ! echo Error: ! echo Make sure the environment variable PATH_SEPARATOR=; while building perl! ! echo Please check your DJGPP.ENV! ! goto end ! ! :path_sep_ok ! sh -c 'if test $PATH_EXPAND = "Y" -o $PATH_EXPAND = "y"; then exit 1; fi' ! if ERRORLEVEL 1 goto path_exp_ok ! echo Error: ! echo Make sure the environment variable PATH_EXPAND=Y while building perl! ! echo Please check your DJGPP.ENV! ! goto end ! ! :path_exp_ok ! sh -c '$SHELL -c "exit 128"' ! if ERRORLEVEL 128 goto shell_ok ! ! echo Error: ! echo The SHELL environment variable must be set to the full path of your sh.exe! ! goto end ! ! :shell_ok ! sh -c 'if test ! -d /tmp; then mkdir /tmp; fi' ! cp djgpp.c config.over .. ! cd .. ! echo Running sed... ! sh djgpp/djgppsed.sh ! ! echo Running Configure... ! sh Configure %1 %2 %3 %4 %5 %6 %7 %8 %9 ! :end --- 1,37 ---- ! @echo off ! set CONFIG= ! set PATH_SEPARATOR=; ! set PATH_EXPAND=y ! sh -c 'if test $PATH_SEPARATOR = ";"; then exit 1; fi' ! if ERRORLEVEL 1 goto path_sep_ok ! echo Error: ! echo Make sure the environment variable PATH_SEPARATOR=; while building perl! ! echo Please check your DJGPP.ENV! ! goto end ! ! :path_sep_ok ! sh -c 'if test $PATH_EXPAND = "Y" -o $PATH_EXPAND = "y"; then exit 1; fi' ! if ERRORLEVEL 1 goto path_exp_ok ! echo Error: ! echo Make sure the environment variable PATH_EXPAND=Y while building perl! ! echo Please check your DJGPP.ENV! ! goto end ! ! :path_exp_ok ! sh -c '$SHELL -c "exit 128"' ! if ERRORLEVEL 128 goto shell_ok ! ! echo Error: ! echo The SHELL environment variable must be set to the full path of your sh.exe! ! goto end ! ! :shell_ok ! sh -c 'if test ! -d /tmp; then mkdir /tmp; fi' ! cp djgpp.c config.over .. ! cd .. ! echo Running sed... ! sh djgpp/djgppsed.sh ! ! echo Running Configure... ! sh Configure %1 %2 %3 %4 %5 %6 %7 %8 %9 ! :end diff -c 'perl-5.7.1/djgpp/djgpp.c' 'perl-5.7.2/djgpp/djgpp.c' Index: ./djgpp/djgpp.c *** ./djgpp/djgpp.c Tue Mar 6 04:04:23 2001 --- ./djgpp/djgpp.c Mon Jul 9 17:09:48 2001 *************** *** 1,3 **** --- 1,4 ---- + #define PERLIO_NOT_STDIO 0 #include #include #include *************** *** 27,33 **** static struct pipe_list *pl = NULL; FILE * ! popen (const char *cm, const char *md) /* program name, pipe mode */ { struct pipe_list *l1; int fd; --- 28,34 ---- static struct pipe_list *pl = NULL; FILE * ! djgpp_popen (const char *cm, const char *md) /* program name, pipe mode */ { struct pipe_list *l1; int fd; *************** *** 75,81 **** } int ! pclose (FILE *pp) { struct pipe_list *l1, **l2; /* list pointers */ int retval=-1; /* function return value */ --- 76,82 ---- } int ! djgpp_pclose (FILE *pp) { struct pipe_list *l1, **l2; /* list pointers */ int retval=-1; /* function return value */ diff -c 'perl-5.7.1/djgpp/djgppsed.sh' 'perl-5.7.2/djgpp/djgppsed.sh' Index: ./djgpp/djgppsed.sh *** ./djgpp/djgppsed.sh Tue Mar 6 04:04:24 2001 --- ./djgpp/djgppsed.sh Mon Jul 9 17:09:48 2001 *************** *** 36,44 **** sed -e $SCPP t/comp/cpp.aux |tr -d '\r' >s; mv -f s t/comp/cpp.aux sed -e $SARGV -e $SDOTTMP t/io/argv.t >s; mv -f s t/io/argv.t sed -e $SABC t/io/inplace.t >s; mv -f s t/io/inplace.t ! sed -e $SDBMX t/lib/anydbm.t >s; mv -f s t/lib/anydbm.t ! sed -e $SDBMX -e $SDBHASH t/lib/gdbm.t >s; mv -f s t/lib/gdbm.t ! sed -e $SDBMX -e $SDBHASH t/lib/sdbm.t >s; mv -f s t/lib/sdbm.t sed -e $SSTAT -e $STMP2 t/op/stat.t >s; mv -f s t/op/stat.t sed -e $SLIST x2p/Makefile.SH |tr -d '\r' >s; mv -f s x2p/Makefile.SH sed -e 's=^#define.\([A-Z]\+\)_EXP.*$=#define \1_EXP djgpp_pathexp("\1")=g' config_h.SH >s; mv -f s config_h.SH --- 36,42 ---- sed -e $SCPP t/comp/cpp.aux |tr -d '\r' >s; mv -f s t/comp/cpp.aux sed -e $SARGV -e $SDOTTMP t/io/argv.t >s; mv -f s t/io/argv.t sed -e $SABC t/io/inplace.t >s; mv -f s t/io/inplace.t ! sed -e $SDBMX -e $SDBHASH ext/GDBM_File/gdbm.t >s; mv -f s ext/GDBM_File/gdbm.t sed -e $SSTAT -e $STMP2 t/op/stat.t >s; mv -f s t/op/stat.t sed -e $SLIST x2p/Makefile.SH |tr -d '\r' >s; mv -f s x2p/Makefile.SH sed -e 's=^#define.\([A-Z]\+\)_EXP.*$=#define \1_EXP djgpp_pathexp("\1")=g' config_h.SH >s; mv -f s config_h.SH diff -c 'perl-5.7.1/djgpp/fixpmain' 'perl-5.7.2/djgpp/fixpmain' Index: ./djgpp/fixpmain *** ./djgpp/fixpmain Tue Mar 6 04:04:24 2001 --- ./djgpp/fixpmain Mon Jul 9 17:09:48 2001 *************** *** 20,26 **** { $dosname=join ("__",map {lc substr ($_,0,8)} split /\//,$realname); $realname =~ s!/!__!g; ! $perlmain =~ s/\bboot_$dosname/boot_$realname/gm; $perlmain =~ s/\b$dosname(::bootstrap)/$realname$1/gm; } --- 20,28 ---- { $dosname=join ("__",map {lc substr ($_,0,8)} split /\//,$realname); $realname =~ s!/!__!g; ! $perlmain =~ s/\bboot_$dosname\b/boot_$realname/gm; ! $dosname =~ s/__/::/; ! $realname =~ s/__/::/; $perlmain =~ s/\b$dosname(::bootstrap)/$realname$1/gm; } diff -c 'perl-5.7.1/doio.c' 'perl-5.7.2/doio.c' Index: ./doio.c *** ./doio.c Thu Apr 5 06:54:55 2001 --- ./doio.c Mon Jul 9 17:09:48 2001 *************** *** 141,152 **** /* sysopen style args, i.e. integer mode and permissions */ STRLEN ix = 0; if (num_svs != 0) { ! Perl_croak(aTHX_ "panic:sysopen with multiple args"); } mode[ix++] = '#'; /* Marker to openn to use numeric "sysopen" */ #if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE) ! rawmode |= O_LARGEFILE; #endif #ifndef O_ACCMODE --- 141,161 ---- /* sysopen style args, i.e. integer mode and permissions */ STRLEN ix = 0; if (num_svs != 0) { ! Perl_croak(aTHX_ "panic: sysopen with multiple args"); } + if (rawmode & (O_WRONLY|O_RDWR|O_CREAT + #ifdef O_APPEND /* Not fully portable. */ + |O_APPEND + #endif + #ifdef O_TRUNC /* Not fully portable. */ + |O_TRUNC + #endif + )) + TAINT_PROPER("sysopen"); mode[ix++] = '#'; /* Marker to openn to use numeric "sysopen" */ #if defined(USE_64_BIT_RAWIO) && defined(O_LARGEFILE) ! rawmode |= O_LARGEFILE; /* Transparently largefiley. */ #endif #ifndef O_ACCMODE *************** *** 193,199 **** num_svs = 1; svp = &namesv; type = Nullch; ! fp = PerlIO_openn(aTHX_ type,mode, -1, rawmode, rawperm, NULL, num_svs, svp); } else { /* Regular (non-sys) open */ --- 202,208 ---- num_svs = 1; svp = &namesv; type = Nullch; ! fp = PerlIO_openn(aTHX_ type, mode, -1, rawmode, rawperm, NULL, num_svs, svp); } else { /* Regular (non-sys) open */ *************** *** 223,229 **** len = tend-type; } IoTYPE(io) = *type; ! if ((*type == IoTYPE_RDWR) && ((!num_svs || tend > type+1 && tend[-1] != IoTYPE_PIPE))) { /* scary */ mode[1] = *type++; writing = 1; } --- 232,240 ---- len = tend-type; } IoTYPE(io) = *type; ! if ((*type == IoTYPE_RDWR) && /* scary */ ! (*(type+1) == IoTYPE_RDONLY || *(type+1) == IoTYPE_WRONLY) && ! ((!num_svs || (tend > type+1 && tend[-1] != IoTYPE_PIPE)))) { mode[1] = *type++; writing = 1; } *************** *** 504,514 **** if (ckWARN(WARN_IO)) { if ((IoTYPE(io) == IoTYPE_RDONLY) && (fp == PerlIO_stdout() || fp == PerlIO_stderr())) { ! Perl_warner(aTHX_ WARN_IO, "'std%s' opened only for input", ! (fp == PerlIO_stdout()) ? "out" : "err"); } else if ((IoTYPE(io) == IoTYPE_WRONLY) && fp == PerlIO_stdin()) { ! Perl_warner(aTHX_ WARN_IO, "'stdin' opened only for output"); } } --- 515,527 ---- if (ckWARN(WARN_IO)) { if ((IoTYPE(io) == IoTYPE_RDONLY) && (fp == PerlIO_stdout() || fp == PerlIO_stderr())) { ! Perl_warner(aTHX_ WARN_IO, ! "Filehandle STD%s opened only for input", ! (fp == PerlIO_stdout()) ? "OUT" : "ERR"); } else if ((IoTYPE(io) == IoTYPE_WRONLY) && fp == PerlIO_stdin()) { ! Perl_warner(aTHX_ WARN_IO, ! "Filehandle STDIN opened only for output"); } } *************** *** 555,567 **** if (savefd != fd) { Pid_t pid; SV *sv; ! PerlLIO_dup2(fd, savefd); #ifdef VMS if (savefd != PerlIO_fileno(PerlIO_stdin())) { char newname[FILENAME_MAX+1]; ! if (fgetname(fp, newname)) { ! if (savefd == PerlIO_fileno(PerlIO_stdout())) Perl_vmssetuserlnm("SYS$OUTPUT", newname); ! if (savefd == PerlIO_fileno(PerlIO_stderr())) Perl_vmssetuserlnm("SYS$ERROR", newname); } } #endif --- 568,583 ---- if (savefd != fd) { Pid_t pid; SV *sv; ! if (PerlLIO_dup2(fd, savefd) < 0) { ! (void)PerlIO_close(fp); ! goto say_false; ! } #ifdef VMS if (savefd != PerlIO_fileno(PerlIO_stdin())) { char newname[FILENAME_MAX+1]; ! if (PerlIO_getname(fp, newname)) { ! if (fd == PerlIO_fileno(PerlIO_stdout())) Perl_vmssetuserlnm(aTHX_ "SYS$OUTPUT", newname); ! if (fd == PerlIO_fileno(PerlIO_stderr())) Perl_vmssetuserlnm(aTHX_ "SYS$ERROR", newname); } } #endif *************** *** 996,1002 **** Off_t Perl_do_tell(pTHX_ GV *gv) { ! register IO *io; register PerlIO *fp; if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) { --- 1012,1018 ---- Off_t Perl_do_tell(pTHX_ GV *gv) { ! register IO *io = 0; register PerlIO *fp; if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) { *************** *** 1015,1021 **** bool Perl_do_seek(pTHX_ GV *gv, Off_t pos, int whence) { ! register IO *io; register PerlIO *fp; if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) { --- 1031,1037 ---- bool Perl_do_seek(pTHX_ GV *gv, Off_t pos, int whence) { ! register IO *io = 0; register PerlIO *fp; if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) { *************** *** 1034,1040 **** Off_t Perl_do_sysseek(pTHX_ GV *gv, Off_t pos, int whence) { ! register IO *io; register PerlIO *fp; if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) --- 1050,1056 ---- Off_t Perl_do_sysseek(pTHX_ GV *gv, Off_t pos, int whence) { ! register IO *io = 0; register PerlIO *fp; if (gv && (io = GvIO(gv)) && (fp = IoIFP(io))) *************** *** 1317,1323 **** Perl_croak(aTHX_ "exec? I'm not *that* kind of operating system"); #else register char **a; ! char *tmps; STRLEN n_a; if (sp > mark) { --- 1333,1339 ---- Perl_croak(aTHX_ "exec? I'm not *that* kind of operating system"); #else register char **a; ! char *tmps = Nullch; STRLEN n_a; if (sp > mark) { *************** *** 1380,1386 **** { register char **a; register char *s; - char flags[10]; while (*cmd && isSPACE(*cmd)) cmd++; --- 1396,1401 ---- *************** *** 1388,1415 **** /* save an extra exec if possible */ #ifdef CSH ! if (strnEQ(cmd,PL_cshname,PL_cshlen) && strnEQ(cmd+PL_cshlen," -c",3)) { ! strcpy(flags,"-c"); ! s = cmd+PL_cshlen+3; ! if (*s == 'f') { ! s++; ! strcat(flags,"f"); ! } ! if (*s == ' ') ! s++; ! if (*s++ == '\'') { ! char *ncmd = s; ! while (*s) ! s++; ! if (s[-1] == '\n') ! *--s = '\0'; ! if (s[-1] == '\'') { ! *--s = '\0'; ! PerlProc_execl(PL_cshname,"csh", flags,ncmd,(char*)0); ! *s = '\''; ! return FALSE; ! } } } #endif /* CSH */ --- 1403,1434 ---- /* save an extra exec if possible */ #ifdef CSH ! { ! char flags[10]; ! if (strnEQ(cmd,PL_cshname,PL_cshlen) && ! strnEQ(cmd+PL_cshlen," -c",3)) { ! strcpy(flags,"-c"); ! s = cmd+PL_cshlen+3; ! if (*s == 'f') { ! s++; ! strcat(flags,"f"); ! } ! if (*s == ' ') ! s++; ! if (*s++ == '\'') { ! char *ncmd = s; ! while (*s) ! s++; ! if (s[-1] == '\n') ! *--s = '\0'; ! if (s[-1] == '\'') { ! *--s = '\0'; ! PerlProc_execl(PL_cshname,"csh", flags, ncmd, (char*)0); ! *s = '\''; ! return FALSE; ! } ! } } } #endif /* CSH */ *************** *** 1427,1433 **** goto doshell; for (s = cmd; *s; s++) { ! if (*s != ' ' && !isALPHA(*s) && strchr("$&*(){}[]'\";\\|?<>~`\n",*s)) { if (*s == '\n' && !s[1]) { *s = '\0'; break; --- 1446,1453 ---- goto doshell; for (s = cmd; *s; s++) { ! if (*s != ' ' && !isALPHA(*s) && ! strchr("$&*(){}[]'\";\\|?<>~`\n",*s)) { if (*s == '\n' && !s[1]) { *s = '\0'; break; *************** *** 1660,1672 **** } utbuf; #endif Zero(&utbuf, sizeof utbuf, char); #ifdef BIG_TIME ! utbuf.actime = (Time_t)SvNVx(*++mark); /* time accessed */ ! utbuf.modtime = (Time_t)SvNVx(*++mark); /* time modified */ #else ! utbuf.actime = (Time_t)SvIVx(*++mark); /* time accessed */ ! utbuf.modtime = (Time_t)SvIVx(*++mark); /* time modified */ #endif APPLY_TAINT_PROPER(); tot = sp - mark; --- 1680,1703 ---- } utbuf; #endif + SV* accessed = *++mark; + SV* modified = *++mark; + void * utbufp = &utbuf; + + /* be like C, and if both times are undefined, let the C + library figure out what to do. This usually means + "current time" */ + + if ( accessed == &PL_sv_undef && modified == &PL_sv_undef ) + utbufp = NULL; + Zero(&utbuf, sizeof utbuf, char); #ifdef BIG_TIME ! utbuf.actime = (Time_t)SvNVx(accessed); /* time accessed */ ! utbuf.modtime = (Time_t)SvNVx(modified); /* time modified */ #else ! utbuf.actime = (Time_t)SvIVx(accessed); /* time accessed */ ! utbuf.modtime = (Time_t)SvIVx(modified); /* time modified */ #endif APPLY_TAINT_PROPER(); tot = sp - mark; *************** *** 1673,1679 **** while (++mark <= sp) { char *name = SvPVx(*mark, n_a); APPLY_TAINT_PROPER(); ! if (PerlLIO_utime(name, &utbuf)) tot--; } } --- 1704,1710 ---- while (++mark <= sp) { char *name = SvPVx(*mark, n_a); APPLY_TAINT_PROPER(); ! if (PerlLIO_utime(name, utbufp)) tot--; } } *************** *** 1998,2010 **** id = SvIVx(*++mark); opstr = *++mark; opbuf = SvPV(opstr, opsize); ! if (opsize < sizeof(struct sembuf) ! || (opsize % sizeof(struct sembuf)) != 0) { SETERRNO(EINVAL,LIB$_INVARG); return -1; } SETERRNO(0,0); ! return semop(id, (struct sembuf *)opbuf, opsize/sizeof(struct sembuf)); #else Perl_croak(aTHX_ "semop not implemented"); #endif --- 2029,2070 ---- id = SvIVx(*++mark); opstr = *++mark; opbuf = SvPV(opstr, opsize); ! if (opsize < 3 * SHORTSIZE ! || (opsize % (3 * SHORTSIZE))) { SETERRNO(EINVAL,LIB$_INVARG); return -1; } SETERRNO(0,0); ! /* We can't assume that sizeof(struct sembuf) == 3 * sizeof(short). */ ! { ! int nsops = opsize / (3 * sizeof (short)); ! int i = nsops; ! short *ops = (short *) opbuf; ! short *o = ops; ! struct sembuf *temps, *t; ! I32 result; ! ! New (0, temps, nsops, struct sembuf); ! t = temps; ! while (i--) { ! t->sem_num = *o++; ! t->sem_op = *o++; ! t->sem_flg = *o++; ! t++; ! } ! result = semop(id, temps, nsops); ! t = temps; ! o = ops; ! i = nsops; ! while (i--) { ! *o++ = t->sem_num; ! *o++ = t->sem_op; ! *o++ = t->sem_flg; ! t++; ! } ! Safefree(temps); ! return result; ! } #else Perl_croak(aTHX_ "semop not implemented"); #endif *************** *** 2096,2102 **** char rslt[NAM$C_MAXRSS+1+sizeof(unsigned short int)] = {'\0','\0'}; char vmsspec[NAM$C_MAXRSS+1]; char *rstr = rslt + sizeof(unsigned short int), *begin, *end, *cp; - char tmpfnam[L_tmpnam] = "SYS$SCRATCH:"; $DESCRIPTOR(dfltdsc,"SYS$DISK:[]*.*;"); PerlIO *tmpfp; STRLEN i; --- 2156,2161 ---- *************** *** 2111,2117 **** ((struct NAM *)((struct FAB *)cxt)->fab$l_nam)->nam$l_fnb but that's unsupported, so I don't want to do it now and have it bite someone in the future. */ - strcat(tmpfnam,PerlLIO_tmpnam(NULL)); cp = SvPV(tmpglob,i); for (; i; i--) { if (cp[i] == ';') hasver = 1; --- 2170,2175 ---- *************** *** 2128,2134 **** break; } } ! if ((tmpfp = PerlIO_open(tmpfnam,"w+","fop=dlt")) != NULL) { Stat_t st; if (!PerlLIO_stat(SvPVX(tmpglob),&st) && S_ISDIR(st.st_mode)) ok = ((wilddsc.dsc$a_pointer = tovmspath(SvPVX(tmpglob),vmsspec)) != NULL); --- 2186,2192 ---- break; } } ! if ((tmpfp = PerlIO_tmpfile()) != NULL) { Stat_t st; if (!PerlLIO_stat(SvPVX(tmpglob),&st) && S_ISDIR(st.st_mode)) ok = ((wilddsc.dsc$a_pointer = tovmspath(SvPVX(tmpglob),vmsspec)) != NULL); diff -c 'perl-5.7.1/doop.c' 'perl-5.7.2/doop.c' Index: ./doop.c *** ./doop.c Thu Apr 5 06:54:57 2001 --- ./doop.c Mon Jul 9 17:09:48 2001 *************** *** 141,147 **** I32 grows = PL_op->op_private & OPpTRANS_GROWS; I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT; I32 del = PL_op->op_private & OPpTRANS_DELETE; ! STRLEN len, rlen; short *tbl; I32 ch; --- 141,147 ---- I32 grows = PL_op->op_private & OPpTRANS_GROWS; I32 complement = PL_op->op_private & OPpTRANS_COMPLEMENT; I32 del = PL_op->op_private & OPpTRANS_DELETE; ! STRLEN len, rlen = 0; short *tbl; I32 ch; *************** *** 308,314 **** SV** svp = hv_fetch(hv, "NONE", 4, FALSE); UV none = svp ? SvUV(*svp) : 0x7fffffff; UV extra = none + 1; ! UV final; UV uv; I32 isutf8; U8 hibit = 0; --- 308,314 ---- SV** svp = hv_fetch(hv, "NONE", 4, FALSE); UV none = svp ? SvUV(*svp) : 0x7fffffff; UV extra = none + 1; ! UV final = 0; UV uv; I32 isutf8; U8 hibit = 0; *************** *** 344,350 **** } while (s < send) { ! if ((uv = swash_fetch(rv, s)) < none) { s += UTF8SKIP(s); matches++; d = uvuni_to_utf8(d, uv); --- 344,350 ---- } while (s < send) { ! if ((uv = swash_fetch(rv, s, TRUE)) < none) { s += UTF8SKIP(s); matches++; d = uvuni_to_utf8(d, uv); *************** *** 397,403 **** S_do_trans_count_utf8(pTHX_ SV *sv)/* SPC - OK */ { U8 *s; ! U8 *start, *send; I32 matches = 0; STRLEN len; --- 397,403 ---- S_do_trans_count_utf8(pTHX_ SV *sv)/* SPC - OK */ { U8 *s; ! U8 *start = 0, *send; I32 matches = 0; STRLEN len; *************** *** 423,429 **** send = s + len; while (s < send) { ! if ((uv = swash_fetch(rv, s)) < none || uv == extra) matches++; s += UTF8SKIP(s); } --- 423,429 ---- send = s + len; while (s < send) { ! if ((uv = swash_fetch(rv, s, TRUE)) < none || uv == extra) matches++; s += UTF8SKIP(s); } *************** *** 448,454 **** SV** svp = hv_fetch(hv, "NONE", 4, FALSE); UV none = svp ? SvUV(*svp) : 0x7fffffff; UV extra = none + 1; ! UV final; bool havefinal = FALSE; UV uv; STRLEN len; --- 448,454 ---- SV** svp = hv_fetch(hv, "NONE", 4, FALSE); UV none = svp ? SvUV(*svp) : 0x7fffffff; UV extra = none + 1; ! UV final = 0; bool havefinal = FALSE; UV uv; STRLEN len; *************** *** 491,497 **** if (squash) { UV puv = 0xfeedface; while (s < send) { ! uv = swash_fetch(rv, s); if (d > dend) { STRLEN clen = d - dstart; --- 491,497 ---- if (squash) { UV puv = 0xfeedface; while (s < send) { ! uv = swash_fetch(rv, s, TRUE); if (d > dend) { STRLEN clen = d - dstart; *************** *** 546,552 **** } else { while (s < send) { ! uv = swash_fetch(rv, s); if (d > dend) { STRLEN clen = d - dstart; STRLEN nlen = dend - dstart + len + UTF8_MAXLEN; --- 546,552 ---- } else { while (s < send) { ! uv = swash_fetch(rv, s, TRUE); if (d > dend) { STRLEN clen = d - dstart; STRLEN nlen = dend - dstart + len + UTF8_MAXLEN; *************** *** 646,654 **** register I32 items = sp - mark; register STRLEN len; STRLEN delimlen; - register char *delim = SvPV(del, delimlen); STRLEN tmplen; mark++; len = (items > 0 ? (delimlen * (items - 1) ) : 0); (void)SvUPGRADE(sv, SVt_PV); --- 646,656 ---- register I32 items = sp - mark; register STRLEN len; STRLEN delimlen; STRLEN tmplen; + (void) SvPV(del, delimlen); /* stringify and get the delimlen */ + /* SvCUR assumes it's SvPOK() and woe betide you if it's not. */ + mark++; len = (items > 0 ? (delimlen * (items - 1) ) : 0); (void)SvUPGRADE(sv, SVt_PV); *************** *** 667,680 **** ++mark; } if (items-- > 0) { - sv_setpv(sv, ""); if (*mark) sv_catsv(sv, *mark); mark++; } ! else ! sv_setpv(sv,""); if (delimlen) { for (; items > 0; items--,mark++) { sv_catsv(sv,del); --- 669,684 ---- ++mark; } + sv_setpv(sv, ""); + if (PL_tainting && SvMAGICAL(sv)) + SvTAINTED_off(sv); + if (items-- > 0) { if (*mark) sv_catsv(sv, *mark); mark++; } ! if (delimlen) { for (; items > 0; items--,mark++) { sv_catsv(sv,del); *************** *** 989,994 **** --- 993,999 ---- { register I32 count; STRLEN len; + STRLEN n_a; char *s; if (RsSNARF(PL_rs)) *************** *** 1020,1027 **** else if (SvREADONLY(sv)) Perl_croak(aTHX_ PL_no_modify); s = SvPV(sv, len); - if (len && !SvPOKp(sv)) - s = SvPV_force(sv, len); if (s && len) { s += --len; if (RsPARA(PL_rs)) { --- 1025,1030 ---- *************** *** 1052,1063 **** count += rslen; } } ! *s = '\0'; SvCUR_set(sv, len); SvNIOK_off(sv); } nope: - SvSETMAGIC(sv); return count; } --- 1055,1067 ---- count += rslen; } } ! s = SvPV_force(sv, n_a); SvCUR_set(sv, len); + *SvEND(sv) = '\0'; SvNIOK_off(sv); + SvSETMAGIC(sv); } nope: return count; } *************** *** 1080,1086 **** char *rsave; bool left_utf = DO_UTF8(left); bool right_utf = DO_UTF8(right); ! I32 needlen; if (left_utf && !right_utf) sv_utf8_upgrade(right); --- 1084,1090 ---- char *rsave; bool left_utf = DO_UTF8(left); bool right_utf = DO_UTF8(right); ! I32 needlen = 0; if (left_utf && !right_utf) sv_utf8_upgrade(right); *************** *** 1291,1297 **** if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */ if (SvTYPE(TARG) < SVt_PVLV) { sv_upgrade(TARG, SVt_PVLV); ! sv_magic(TARG, Nullsv, 'k', Nullch, 0); } LvTYPE(TARG) = 'k'; if (LvTARG(TARG) != (SV*)keys) { --- 1295,1301 ---- if (PL_op->op_flags & OPf_MOD || LVRET) { /* lvalue */ if (SvTYPE(TARG) < SVt_PVLV) { sv_upgrade(TARG, SVt_PVLV); ! sv_magic(TARG, Nullsv, PERL_MAGIC_nkeys, Nullch, 0); } LvTYPE(TARG) = 'k'; if (LvTARG(TARG) != (SV*)keys) { *************** *** 1303,1309 **** RETURN; } ! if (! SvTIED_mg((SV*)keys, 'P')) i = HvKEYS(keys); else { i = 0; --- 1307,1313 ---- RETURN; } ! if (! SvTIED_mg((SV*)keys, PERL_MAGIC_tied)) i = HvKEYS(keys); else { i = 0; diff -c 'perl-5.7.1/dosish.h' 'perl-5.7.2/dosish.h' Index: ./dosish.h *** ./dosish.h Tue Mar 6 04:04:24 2001 --- ./dosish.h Mon Jul 9 17:09:48 2001 *************** *** 25,32 **** # define PERL_SYS_INIT(c,v) Perl_win32_init(c,v) # define BIT_BUCKET "nul" # else ! # define PERL_SYS_INIT(c,v) ! # define BIT_BUCKET "\\dev\\nul" /* "wanna be like, umm, Newlined, or somethin?" */ # endif #endif /* DJGPP */ --- 25,37 ---- # define PERL_SYS_INIT(c,v) Perl_win32_init(c,v) # define BIT_BUCKET "nul" # else ! # ifdef NETWARE ! # define PERL_SYS_INIT(c,v) Perl_nw5_init(c,v) ! # define BIT_BUCKET "nul" ! # else ! # define PERL_SYS_INIT(c,v) ! # define BIT_BUCKET "\\dev\\nul" /* "wanna be like, umm, Newlined, or somethin?" */ ! # endif /* NETWARE */ # endif #endif /* DJGPP */ diff -c 'perl-5.7.1/dump.c' 'perl-5.7.2/dump.c' Index: ./dump.c *** ./dump.c Sat Apr 7 21:25:59 2001 --- ./dump.c Thu Jul 12 16:54:38 2001 *************** *** 60,67 **** dump_sub(gv); if (GvFORM(gv)) dump_form(gv); ! if (HeKEY(entry)[HeKLEN(entry)-1] == ':' && ! (hv = GvHV(gv)) && HvNAME(hv) && hv != PL_defstash) dump_packsubs(hv); /* nested package */ } } --- 60,67 ---- dump_sub(gv); if (GvFORM(gv)) dump_form(gv); ! if (HeKEY(entry)[HeKLEN(entry)-1] == ':' ! && (hv = GvHV(gv)) && hv != PL_defstash) dump_packsubs(hv); /* nested package */ } } *************** *** 319,327 **** ch = '?'; else ch = '/'; ! if (pm->op_pmregexp) Perl_dump_indent(aTHX_ level, file, "PMf_PRE %c%s%c%s\n", ! ch, pm->op_pmregexp->precomp, ch, (pm->op_private & OPpRUNTIME) ? " (RUNTIME)" : ""); else Perl_dump_indent(aTHX_ level, file, "PMf_PRE (RUNTIME)\n"); --- 319,327 ---- ch = '?'; else ch = '/'; ! if (PM_GETRE(pm)) Perl_dump_indent(aTHX_ level, file, "PMf_PRE %c%s%c%s\n", ! ch, PM_GETRE(pm)->precomp, ch, (pm->op_private & OPpRUNTIME) ? " (RUNTIME)" : ""); else Perl_dump_indent(aTHX_ level, file, "PMf_PRE (RUNTIME)\n"); *************** *** 329,335 **** Perl_dump_indent(aTHX_ level, file, "PMf_REPL = "); op_dump(pm->op_pmreplroot); } ! if (pm->op_pmflags || (pm->op_pmregexp && pm->op_pmregexp->check_substr)) { SV *tmpsv = newSVpvn("", 0); if (pm->op_pmdynflags & PMdf_USED) sv_catpv(tmpsv, ",USED"); --- 329,335 ---- Perl_dump_indent(aTHX_ level, file, "PMf_REPL = "); op_dump(pm->op_pmreplroot); } ! if (pm->op_pmflags || (PM_GETRE(pm) && PM_GETRE(pm)->check_substr)) { SV *tmpsv = newSVpvn("", 0); if (pm->op_pmdynflags & PMdf_USED) sv_catpv(tmpsv, ",USED"); *************** *** 337,347 **** sv_catpv(tmpsv, ",TAINTED"); if (pm->op_pmflags & PMf_ONCE) sv_catpv(tmpsv, ",ONCE"); ! if (pm->op_pmregexp && pm->op_pmregexp->check_substr ! && !(pm->op_pmregexp->reganch & ROPT_NOSCAN)) sv_catpv(tmpsv, ",SCANFIRST"); ! if (pm->op_pmregexp && pm->op_pmregexp->check_substr ! && pm->op_pmregexp->reganch & ROPT_CHECK_ALL) sv_catpv(tmpsv, ",ALL"); if (pm->op_pmflags & PMf_SKIPWHITE) sv_catpv(tmpsv, ",SKIPWHITE"); --- 337,347 ---- sv_catpv(tmpsv, ",TAINTED"); if (pm->op_pmflags & PMf_ONCE) sv_catpv(tmpsv, ",ONCE"); ! if (PM_GETRE(pm) && PM_GETRE(pm)->check_substr ! && !(PM_GETRE(pm)->reganch & ROPT_NOSCAN)) sv_catpv(tmpsv, ",SCANFIRST"); ! if (PM_GETRE(pm) && PM_GETRE(pm)->check_substr ! && PM_GETRE(pm)->reganch & ROPT_CHECK_ALL) sv_catpv(tmpsv, ",ALL"); if (pm->op_pmflags & PMf_SKIPWHITE) sv_catpv(tmpsv, ",SKIPWHITE"); *************** *** 392,398 **** --- 392,411 ---- PerlIO_printf(file, "DONE\n"); if (o->op_targ) { if (o->op_type == OP_NULL) + { Perl_dump_indent(aTHX_ level, file, " (was %s)\n", PL_op_name[o->op_targ]); + if (o->op_targ == OP_NEXTSTATE) + { + if (CopLINE(cCOPo)) + Perl_dump_indent(aTHX_ level, file, "LINE = %d\n",CopLINE(cCOPo)); + if (CopSTASHPV(cCOPo)) + Perl_dump_indent(aTHX_ level, file, "PACKAGE = \"%s\"\n", + CopSTASHPV(cCOPo)); + if (cCOPo->cop_label) + Perl_dump_indent(aTHX_ level, file, "LABEL = \"%s\"\n", + cCOPo->cop_label); + } + } else Perl_dump_indent(aTHX_ level, file, "TARG = %ld\n", (long)o->op_targ); } *************** *** 436,442 **** if (o->op_private & OPpTARGET_MY) sv_catpv(tmpsv, ",TARGET_MY"); } ! if (o->op_type == OP_AASSIGN) { if (o->op_private & OPpASSIGN_COMMON) sv_catpv(tmpsv, ",COMMON"); if (o->op_private & OPpASSIGN_HASH) --- 449,462 ---- if (o->op_private & OPpTARGET_MY) sv_catpv(tmpsv, ",TARGET_MY"); } ! else if (o->op_type == OP_LEAVESUB || ! o->op_type == OP_LEAVE || ! o->op_type == OP_LEAVESUBLV || ! o->op_type == OP_LEAVEWRITE) { ! if (o->op_private & OPpREFCOUNTED) ! sv_catpv(tmpsv, ",REFCOUNTED"); ! } ! else if (o->op_type == OP_AASSIGN) { if (o->op_private & OPpASSIGN_COMMON) sv_catpv(tmpsv, ",COMMON"); if (o->op_private & OPpASSIGN_HASH) *************** *** 453,458 **** --- 473,482 ---- sv_catpv(tmpsv, ",DELETE"); if (o->op_private & OPpTRANS_COMPLEMENT) sv_catpv(tmpsv, ",COMPLEMENT"); + if (o->op_private & OPpTRANS_IDENTICAL) + sv_catpv(tmpsv, ",IDENTICAL"); + if (o->op_private & OPpTRANS_GROWS) + sv_catpv(tmpsv, ",GROWS"); } else if (o->op_type == OP_REPEAT) { if (o->op_private & OPpREPEAT_DOLIST) *************** *** 474,481 **** sv_catpv(tmpsv, ",DB"); if (o->op_private & OPpENTERSUB_HASTARG) sv_catpv(tmpsv, ",HASTARG"); } ! else switch (o->op_private & OPpDEREF) { case OPpDEREF_SV: sv_catpv(tmpsv, ",SV"); --- 498,509 ---- sv_catpv(tmpsv, ",DB"); if (o->op_private & OPpENTERSUB_HASTARG) sv_catpv(tmpsv, ",HASTARG"); + if (o->op_private & OPpENTERSUB_NOPAREN) + sv_catpv(tmpsv, ",NOPAREN"); + if (o->op_private & OPpENTERSUB_INARGS) + sv_catpv(tmpsv, ",INARGS"); } ! else { switch (o->op_private & OPpDEREF) { case OPpDEREF_SV: sv_catpv(tmpsv, ",SV"); *************** *** 487,492 **** --- 515,523 ---- sv_catpv(tmpsv, ",HV"); break; } + if (o->op_private & OPpMAYBE_LVSUB) + sv_catpv(tmpsv, ",MAYBE_LVSUB"); + } if (o->op_type == OP_AELEM || o->op_type == OP_HELEM) { if (o->op_private & OPpLVAL_DEFER) sv_catpv(tmpsv, ",LVAL_DEFER"); *************** *** 503,508 **** --- 534,545 ---- sv_catpv(tmpsv, ",BARE"); if (o->op_private & OPpCONST_STRICT) sv_catpv(tmpsv, ",STRICT"); + if (o->op_private & OPpCONST_ARYBASE) + sv_catpv(tmpsv, ",ARYBASE"); + if (o->op_private & OPpCONST_WARNING) + sv_catpv(tmpsv, ",WARNING"); + if (o->op_private & OPpCONST_ENTERED) + sv_catpv(tmpsv, ",ENTERED"); } else if (o->op_type == OP_FLIP) { if (o->op_private & OPpFLIP_LINENUM) *************** *** 515,520 **** --- 552,599 ---- if (o->op_private & OPpLVAL_INTRO) sv_catpv(tmpsv, ",INTRO"); } + else if (o->op_type == OP_GV) { + if (o->op_private & OPpEARLY_CV) + sv_catpv(tmpsv, ",EARLY_CV"); + } + else if (o->op_type == OP_LIST) { + if (o->op_private & OPpLIST_GUESSED) + sv_catpv(tmpsv, ",GUESSED"); + } + else if (o->op_type == OP_DELETE) { + if (o->op_private & OPpSLICE) + sv_catpv(tmpsv, ",SLICE"); + } + else if (o->op_type == OP_EXISTS) { + if (o->op_private & OPpEXISTS_SUB) + sv_catpv(tmpsv, ",EXISTS_SUB"); + } + else if (o->op_type == OP_SORT) { + if (o->op_private & OPpSORT_NUMERIC) + sv_catpv(tmpsv, ",NUMERIC"); + if (o->op_private & OPpSORT_INTEGER) + sv_catpv(tmpsv, ",INTEGER"); + if (o->op_private & OPpSORT_REVERSE) + sv_catpv(tmpsv, ",REVERSE"); + } + else if (o->op_type == OP_THREADSV) { + if (o->op_private & OPpDONE_SVREF) + sv_catpv(tmpsv, ",SVREF"); + } + else if (o->op_type == OP_OPEN || o->op_type == OP_BACKTICK) { + if (o->op_private & OPpOPEN_IN_RAW) + sv_catpv(tmpsv, ",IN_RAW"); + if (o->op_private & OPpOPEN_IN_CRLF) + sv_catpv(tmpsv, ",IN_CRLF"); + if (o->op_private & OPpOPEN_OUT_RAW) + sv_catpv(tmpsv, ",OUT_RAW"); + if (o->op_private & OPpOPEN_OUT_CRLF) + sv_catpv(tmpsv, ",OUT_CRLF"); + } + else if (o->op_type == OP_EXIT) { + if (o->op_private & OPpEXIT_VMSISH) + sv_catpv(tmpsv, ",EXIST_VMSISH"); + } if (o->op_flags & OPf_MOD && o->op_private & OPpLVAL_INTRO) sv_catpv(tmpsv, ",INTRO"); if (SvCUR(tmpsv)) *************** *** 640,645 **** --- 719,768 ---- Perl_dump_indent(aTHX_ 0, Perl_debug_log, "}\n"); } + + /* map magic types to the symbolic name + * (with the PERL_MAGIC_ prefixed stripped) + */ + + static struct { char type; char *name; } magic_names[] = { + { PERL_MAGIC_sv, "sv(\\0)" }, + { PERL_MAGIC_arylen, "arylen(#)" }, + { PERL_MAGIC_glob, "glob(*)" }, + { PERL_MAGIC_pos, "pos(.)" }, + { PERL_MAGIC_backref, "backref(<)" }, + { PERL_MAGIC_overload, "overload(A)" }, + { PERL_MAGIC_bm, "bm(B)" }, + { PERL_MAGIC_regdata, "regdata(D)" }, + { PERL_MAGIC_env, "env(E)" }, + { PERL_MAGIC_isa, "isa(I)" }, + { PERL_MAGIC_dbfile, "dbfile(L)" }, + { PERL_MAGIC_tied, "tied(P)" }, + { PERL_MAGIC_sig, "sig(S)" }, + { PERL_MAGIC_uvar, "uvar(U)" }, + { PERL_MAGIC_overload_elem, "overload_elem(a)" }, + { PERL_MAGIC_overload_table, "overload_table(c)" }, + { PERL_MAGIC_regdatum, "regdatum(d)" }, + { PERL_MAGIC_envelem, "envelem(e)" }, + { PERL_MAGIC_fm, "fm(f)" }, + { PERL_MAGIC_regex_global, "regex_global(g)" }, + { PERL_MAGIC_isaelem, "isaelem(i)" }, + { PERL_MAGIC_nkeys, "nkeys(k)" }, + { PERL_MAGIC_dbline, "dbline(l)" }, + { PERL_MAGIC_mutex, "mutex(m)" }, + { PERL_MAGIC_collxfrm, "collxfrm(o)" }, + { PERL_MAGIC_tiedelem, "tiedelem(p)" }, + { PERL_MAGIC_tiedscalar, "tiedscalar(q)" }, + { PERL_MAGIC_qr, "qr(r)" }, + { PERL_MAGIC_sigelem, "sigelem(s)" }, + { PERL_MAGIC_taint, "taint(t)" }, + { PERL_MAGIC_vec, "vec(v)" }, + { PERL_MAGIC_substr, "substr(x)" }, + { PERL_MAGIC_defelem, "defelem(y)" }, + { PERL_MAGIC_ext, "ext(~)" }, + /* this null string terminates the list */ + { 0, 0 }, + }; + void Perl_do_magic_dump(pTHX_ I32 level, PerlIO *file, MAGIC *mg, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim) { *************** *** 687,696 **** if (mg->mg_private) Perl_dump_indent(aTHX_ level, file, " MG_PRIVATE = %d\n", mg->mg_private); ! if (isPRINT(mg->mg_type)) ! Perl_dump_indent(aTHX_ level, file, " MG_TYPE = '%c'\n", mg->mg_type); ! else ! Perl_dump_indent(aTHX_ level, file, " MG_TYPE = '\\%o'\n", mg->mg_type); if (mg->mg_flags) { Perl_dump_indent(aTHX_ level, file, " MG_FLAGS = 0x%02X\n", mg->mg_flags); --- 810,831 ---- if (mg->mg_private) Perl_dump_indent(aTHX_ level, file, " MG_PRIVATE = %d\n", mg->mg_private); ! { ! int n; ! char *name = 0; ! for (n=0; magic_names[n].name; n++) { ! if (mg->mg_type == magic_names[n].type) { ! name = magic_names[n].name; ! break; ! } ! } ! if (name) ! Perl_dump_indent(aTHX_ level, file, ! " MG_TYPE = PERL_MAGIC_%s\n", name); ! else ! Perl_dump_indent(aTHX_ level, file, ! " MG_TYPE = UNKNOWN(\\%o)\n", mg->mg_type); ! } if (mg->mg_flags) { Perl_dump_indent(aTHX_ level, file, " MG_FLAGS = 0x%02X\n", mg->mg_flags); *************** *** 761,767 **** Perl_dump_indent(aTHX_ level, file, "%s = 0x%"UVxf, name, PTR2UV(sv)); if (sv && GvNAME(sv)) { PerlIO_printf(file, "\t\""); ! if (GvSTASH(sv) && HvNAME(GvSTASH(sv))) PerlIO_printf(file, "%s\" :: \"", HvNAME(GvSTASH(sv))); PerlIO_printf(file, "%s\"\n", GvNAME(sv)); } --- 896,902 ---- Perl_dump_indent(aTHX_ level, file, "%s = 0x%"UVxf, name, PTR2UV(sv)); if (sv && GvNAME(sv)) { PerlIO_printf(file, "\t\""); ! if (GvSTASH(sv)) PerlIO_printf(file, "%s\" :: \"", HvNAME(GvSTASH(sv))); PerlIO_printf(file, "%s\"\n", GvNAME(sv)); } *************** *** 838,845 **** --- 973,982 ---- case SVt_PVGV: if (GvINTRO(sv)) sv_catpv(d, "INTRO,"); if (GvMULTI(sv)) sv_catpv(d, "MULTI,"); + if (GvUNIQUE(sv)) sv_catpv(d, "UNIQUE,"); if (GvASSUMECV(sv)) sv_catpv(d, "ASSUMECV,"); if (GvIN_PAD(sv)) sv_catpv(d, "IN_PAD,"); + if (flags & SVpad_OUR) sv_catpv(d, "OUR,"); if (GvIMPORTED(sv)) { sv_catpv(d, "IMPORT"); if (GvIMPORTED(sv) == GVf_IMPORTED) *************** *** 853,859 **** sv_catpv(d, " ),"); } } ! /* FALL THROGH */ default: if (SvEVALED(sv)) sv_catpv(d, "EVALED,"); if (SvIsUV(sv)) sv_catpv(d, "IsUV,"); --- 990,996 ---- sv_catpv(d, " ),"); } } ! /* FALL THROUGH */ default: if (SvEVALED(sv)) sv_catpv(d, "EVALED,"); if (SvIsUV(sv)) sv_catpv(d, "IsUV,"); *************** *** 862,867 **** --- 999,1008 ---- case SVt_PVBM: if (SvTAIL(sv)) sv_catpv(d, "TAIL,"); if (SvVALID(sv)) sv_catpv(d, "VALID,"); + break; + case SVt_PVMG: + if (flags & SVpad_TYPED) + sv_catpv(d, "TYPED,"); break; } diff -c 'perl-5.7.1/emacs/cperl-mode.el' 'perl-5.7.2/emacs/cperl-mode.el' Index: ./emacs/cperl-mode.el Prereq: 4.32 *** ./emacs/cperl-mode.el Tue Mar 6 04:04:25 2001 --- ./emacs/cperl-mode.el Mon Jul 9 17:09:49 2001 *************** *** 1610,1616 **** ftp://ftp.math.ohio-state.edu/pub/users/ilya/cperl-mode/patches \(this upgrades syntax-parsing abilities of RMS Emaxen v19.34 and v20.2 up to the level of RMS Emacs v20.3 - a must for a good Perl ! mode.) You will not get much from XEmacs, it's syntax abilities are too primitive. Get support packages choose-color.el (or font-lock-extra.el before --- 1610,1616 ---- ftp://ftp.math.ohio-state.edu/pub/users/ilya/cperl-mode/patches \(this upgrades syntax-parsing abilities of RMS Emaxen v19.34 and v20.2 up to the level of RMS Emacs v20.3 - a must for a good Perl ! mode.) You will not get much from XEmacs; its syntax abilities are too primitive. Get support packages choose-color.el (or font-lock-extra.el before diff -c 'perl-5.7.1/emacs/e2ctags.pl' 'perl-5.7.2/emacs/e2ctags.pl' Index: ./emacs/e2ctags.pl *** ./emacs/e2ctags.pl Tue Mar 6 04:04:25 2001 --- ./emacs/e2ctags.pl Mon Jul 9 17:09:49 2001 *************** *** 16,21 **** --- 16,22 ---- my $filename; my ($tag,$line_no,$line); my %tags = (); + my %filetags = (); my %files = (); my @lines = (); *************** *** 34,54 **** next if /struct/; if (/\x01/) { ($tag,$line_no) = /\x7F(\w+)\x01(\d+)/; - next unless $tag; - ##Take only the first entry per tag - next if defined($tags{$tag}); - $tags{$tag}{FILE} = $filename; - $tags{$tag}{LINE_NO} = $line_no; } else { tr/(//d; ($tag,$line_no) = /(\w+)\s*\x7F(\d+),/; - next unless $tag; - ##Take only the first entry per tag - next if defined($tags{$tag}); - $tags{$tag}{FILE} = $filename; - $tags{$tag}{LINE_NO} = $line_no; } } foreach $filename (keys %files) { --- 35,51 ---- next if /struct/; if (/\x01/) { ($tag,$line_no) = /\x7F(\w+)\x01(\d+)/; } else { tr/(//d; ($tag,$line_no) = /(\w+)\s*\x7F(\d+),/; } + next unless $tag; + ##Take only the first entry per tag + next if defined($tags{$tag}); + $tags{$tag}{FILE} = $filename; + $tags{$tag}{LINE_NO} = $line_no; + push @{$filetags{$filename}}, $tag; } foreach $filename (keys %files) { *************** *** 56,63 **** @lines = ; close FILE; chomp @lines; ! foreach $tag ( keys %tags ) { ! next unless $filename eq $tags{$tag}{FILE}; $line = $lines[$tags{$tag}{LINE_NO}-1]; if (length($line) >= 50) { $line = substr($line,0,50); --- 53,59 ---- @lines = ; close FILE; chomp @lines; ! foreach $tag ( @{$filetags{$filename}} ) { $line = $lines[$tags{$tag}{LINE_NO}-1]; if (length($line) >= 50) { $line = substr($line,0,50); diff -c 'perl-5.7.1/embed.h' 'perl-5.7.2/embed.h' Index: ./embed.h *** ./embed.h Fri Apr 6 16:42:03 2001 --- ./embed.h Thu Jul 12 21:34:39 2001 *************** *** 101,106 **** --- 101,107 ---- #define block_gimme Perl_block_gimme #define block_start Perl_block_start #define boot_core_UNIVERSAL Perl_boot_core_UNIVERSAL + #define boot_core_PerlIO Perl_boot_core_PerlIO #define call_list Perl_call_list #define cando Perl_cando #define cast_ulong Perl_cast_ulong *************** *** 271,276 **** --- 272,278 ---- #define ingroup Perl_ingroup #define init_debugger Perl_init_debugger #define init_stacks Perl_init_stacks + #define init_tm Perl_init_tm #define intro_my Perl_intro_my #define instr Perl_instr #define io_close Perl_io_close *************** *** 333,338 **** --- 335,342 ---- #define leave_scope Perl_leave_scope #define lex_end Perl_lex_end #define lex_start Perl_lex_start + #define op_null Perl_op_null + #define op_clear Perl_op_clear #define linklist Perl_linklist #define list Perl_list #define listkids Perl_listkids *************** *** 340,345 **** --- 344,351 ---- #define vload_module Perl_vload_module #define localize Perl_localize #define looks_like_number Perl_looks_like_number + #define grok_number Perl_grok_number + #define grok_numeric_radix Perl_grok_numeric_radix #define magic_clearenv Perl_magic_clearenv #define magic_clear_all_env Perl_magic_clear_all_env #define magic_clearpack Perl_magic_clearpack *************** *** 409,420 **** #define mg_magical Perl_mg_magical #define mg_set Perl_mg_set #define mg_size Perl_mg_size #define mod Perl_mod #define mode_from_discipline Perl_mode_from_discipline #define moreswitches Perl_moreswitches #define my Perl_my #define my_atof Perl_my_atof ! #if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY) #define my_bcopy Perl_my_bcopy #endif #if !defined(HAS_BZERO) && !defined(HAS_MEMSET) --- 415,427 ---- #define mg_magical Perl_mg_magical #define mg_set Perl_mg_set #define mg_size Perl_mg_size + #define mini_mktime Perl_mini_mktime #define mod Perl_mod #define mode_from_discipline Perl_mode_from_discipline #define moreswitches Perl_moreswitches #define my Perl_my #define my_atof Perl_my_atof ! #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY)) #define my_bcopy Perl_my_bcopy #endif #if !defined(HAS_BZERO) && !defined(HAS_MEMSET) *************** *** 437,442 **** --- 444,450 ---- #endif #define my_setenv Perl_my_setenv #define my_stat Perl_my_stat + #define my_strftime Perl_my_strftime #if defined(MYSWAP) #define my_swap Perl_my_swap #define my_htonl Perl_my_htonl *************** *** 637,643 **** #define sv_2iv Perl_sv_2iv #define sv_2mortal Perl_sv_2mortal #define sv_2nv Perl_sv_2nv - #define sv_2pv Perl_sv_2pv #define sv_2pvutf8 Perl_sv_2pvutf8 #define sv_2pvbyte Perl_sv_2pvbyte #define sv_2uv Perl_sv_2uv --- 645,650 ---- *************** *** 654,661 **** #define sv_catpvf Perl_sv_catpvf #define sv_vcatpvf Perl_sv_vcatpvf #define sv_catpv Perl_sv_catpv - #define sv_catpvn Perl_sv_catpvn - #define sv_catsv Perl_sv_catsv #define sv_chop Perl_sv_chop #define sv_clean_all Perl_sv_clean_all #define sv_clean_objs Perl_sv_clean_objs --- 661,666 ---- *************** *** 666,671 **** --- 671,677 ---- #define sv_collxfrm Perl_sv_collxfrm #endif #define sv_compile_2op Perl_sv_compile_2op + #define getcwd_sv Perl_getcwd_sv #define sv_dec Perl_sv_dec #define sv_dump Perl_sv_dump #define sv_derived_from Perl_sv_derived_from *************** *** 687,693 **** #define sv_peek Perl_sv_peek #define sv_pos_u2b Perl_sv_pos_u2b #define sv_pos_b2u Perl_sv_pos_b2u - #define sv_pvn_force Perl_sv_pvn_force #define sv_pvutf8n_force Perl_sv_pvutf8n_force #define sv_pvbyten_force Perl_sv_pvbyten_force #define sv_reftype Perl_sv_reftype --- 693,698 ---- *************** *** 707,713 **** #define sv_setref_pvn Perl_sv_setref_pvn #define sv_setpv Perl_sv_setpv #define sv_setpvn Perl_sv_setpvn - #define sv_setsv Perl_sv_setsv #define sv_taint Perl_sv_taint #define sv_tainted Perl_sv_tainted #define sv_unmagic Perl_sv_unmagic --- 712,717 ---- *************** *** 827,833 **** #define sv_pv Perl_sv_pv #define sv_pvutf8 Perl_sv_pvutf8 #define sv_pvbyte Perl_sv_pvbyte - #define sv_utf8_upgrade Perl_sv_utf8_upgrade #define sv_utf8_downgrade Perl_sv_utf8_downgrade #define sv_utf8_encode Perl_sv_utf8_encode #define sv_utf8_decode Perl_sv_utf8_decode --- 831,836 ---- *************** *** 910,917 **** #define scalarboolean S_scalarboolean #define too_few_arguments S_too_few_arguments #define too_many_arguments S_too_many_arguments - #define op_clear S_op_clear - #define null S_null #define pad_addlex S_pad_addlex #define pad_findlex S_pad_findlex #define newDEFSVOP S_newDEFSVOP --- 913,918 ---- *************** *** 965,973 **** # endif #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) - #define doencodes S_doencodes #define refto S_refto #define seed S_seed #define mul128 S_mul128 #define is_an_int S_is_an_int #define div128 S_div128 --- 966,976 ---- # endif #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) #define refto S_refto #define seed S_seed + #endif + #if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT) + #define doencodes S_doencodes #define mul128 S_mul128 #define is_an_int S_is_an_int #define div128 S_div128 *************** *** 1018,1025 **** --- 1021,1030 ---- #define regtail S_regtail #define regwhite S_regwhite #define nextchar S_nextchar + # ifdef DEBUGGING #define dumpuntil S_dumpuntil #define put_byte S_put_byte + # endif #define scan_commit S_scan_commit #define cl_anything S_cl_anything #define cl_is_anything S_cl_is_anything *************** *** 1050,1056 **** --- 1055,1064 ---- #define find_byclass S_find_byclass #endif #if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT) + # ifdef DEBUGGING + #define deb_curcv S_deb_curcv #define debprof S_debprof + # endif #endif #if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT) #define save_scalar_at S_save_scalar_at *************** *** 1100,1110 **** #define visit S_visit #define sv_add_backref S_sv_add_backref #define sv_del_backref S_sv_del_backref ! # if defined(DEBUGGING) #define del_sv S_del_sv # endif # if !defined(NV_PRESERVES_UV) - #define sv_2inuv_non_preserve S_sv_2inuv_non_preserve #define sv_2iuv_non_preserve S_sv_2iuv_non_preserve # endif #define expect_number S_expect_number --- 1108,1117 ---- #define visit S_visit #define sv_add_backref S_sv_add_backref #define sv_del_backref S_sv_del_backref ! # ifdef DEBUGGING #define del_sv S_del_sv # endif # if !defined(NV_PRESERVES_UV) #define sv_2iuv_non_preserve S_sv_2iuv_non_preserve # endif #define expect_number S_expect_number *************** *** 1118,1123 **** --- 1125,1131 ---- #define force_version S_force_version #define force_word S_force_word #define tokeq S_tokeq + #define pending_ident S_pending_ident #define scan_const S_scan_const #define scan_formline S_scan_formline #define scan_heredoc S_scan_heredoc *************** *** 1145,1151 **** --- 1153,1161 ---- #define filter_gets S_filter_gets #define find_in_my_stash S_find_in_my_stash #define new_constant S_new_constant + # if defined(DEBUGGING) #define tokereport S_tokereport + # endif #define ao S_ao #define depcom S_depcom #define incl_perldb S_incl_perldb *************** *** 1163,1170 **** #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup S_isa_lookup #endif ! #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define stdize_locale S_stdize_locale #define mess_alloc S_mess_alloc # if defined(LEAKTEST) #define xstat S_xstat --- 1173,1183 ---- #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup S_isa_lookup #endif ! #if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT) #define stdize_locale S_stdize_locale + #endif + #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) + #define closest_cop S_closest_cop #define mess_alloc S_mess_alloc # if defined(LEAKTEST) #define xstat S_xstat *************** *** 1172,1177 **** --- 1185,1197 ---- #endif #if defined(PERL_OBJECT) #endif + #define sv_setsv_flags Perl_sv_setsv_flags + #define sv_catpvn_flags Perl_sv_catpvn_flags + #define sv_catsv_flags Perl_sv_catsv_flags + #define sv_utf8_upgrade_flags Perl_sv_utf8_upgrade_flags + #define sv_pvn_force_flags Perl_sv_pvn_force_flags + #define sv_2pv_flags Perl_sv_2pv_flags + #define my_atof2 Perl_my_atof2 #define ck_anoncode Perl_ck_anoncode #define ck_bitop Perl_ck_bitop #define ck_concat Perl_ck_concat *************** *** 1184,1190 **** #define ck_exit Perl_ck_exit #define ck_ftst Perl_ck_ftst #define ck_fun Perl_ck_fun - #define ck_fun_locale Perl_ck_fun_locale #define ck_glob Perl_ck_glob #define ck_grep Perl_ck_grep #define ck_index Perl_ck_index --- 1204,1209 ---- *************** *** 1202,1208 **** #define ck_rfun Perl_ck_rfun #define ck_rvconst Perl_ck_rvconst #define ck_sassign Perl_ck_sassign - #define ck_scmp Perl_ck_scmp #define ck_select Perl_ck_select #define ck_shift Perl_ck_shift #define ck_sort Perl_ck_sort --- 1221,1226 ---- *************** *** 1615,1620 **** --- 1633,1639 ---- #define block_gimme() Perl_block_gimme(aTHX) #define block_start(a) Perl_block_start(aTHX_ a) #define boot_core_UNIVERSAL() Perl_boot_core_UNIVERSAL(aTHX) + #define boot_core_PerlIO() Perl_boot_core_PerlIO(aTHX) #define call_list(a,b) Perl_call_list(aTHX_ a,b) #define cando(a,b,c) Perl_cando(aTHX_ a,b,c) #define cast_ulong(a) Perl_cast_ulong(aTHX_ a) *************** *** 1766,1771 **** --- 1785,1791 ---- #define ingroup(a,b) Perl_ingroup(aTHX_ a,b) #define init_debugger() Perl_init_debugger(aTHX) #define init_stacks() Perl_init_stacks(aTHX) + #define init_tm(a) Perl_init_tm(aTHX_ a) #define intro_my() Perl_intro_my(aTHX) #define instr(a,b) Perl_instr(aTHX_ a,b) #define io_close(a,b) Perl_io_close(aTHX_ a,b) *************** *** 1828,1833 **** --- 1848,1855 ---- #define leave_scope(a) Perl_leave_scope(aTHX_ a) #define lex_end() Perl_lex_end(aTHX) #define lex_start(a) Perl_lex_start(aTHX_ a) + #define op_null(a) Perl_op_null(aTHX_ a) + #define op_clear(a) Perl_op_clear(aTHX_ a) #define linklist(a) Perl_linklist(aTHX_ a) #define list(a) Perl_list(aTHX_ a) #define listkids(a) Perl_listkids(aTHX_ a) *************** *** 1834,1839 **** --- 1856,1863 ---- #define vload_module(a,b,c,d) Perl_vload_module(aTHX_ a,b,c,d) #define localize(a,b) Perl_localize(aTHX_ a,b) #define looks_like_number(a) Perl_looks_like_number(aTHX_ a) + #define grok_number(a,b,c) Perl_grok_number(aTHX_ a,b,c) + #define grok_numeric_radix(a,b) Perl_grok_numeric_radix(aTHX_ a,b) #define magic_clearenv(a,b) Perl_magic_clearenv(aTHX_ a,b) #define magic_clear_all_env(a,b) Perl_magic_clear_all_env(aTHX_ a,b) #define magic_clearpack(a,b) Perl_magic_clearpack(aTHX_ a,b) *************** *** 1902,1913 **** #define mg_magical(a) Perl_mg_magical(aTHX_ a) #define mg_set(a) Perl_mg_set(aTHX_ a) #define mg_size(a) Perl_mg_size(aTHX_ a) #define mod(a,b) Perl_mod(aTHX_ a,b) #define mode_from_discipline(a) Perl_mode_from_discipline(aTHX_ a) #define moreswitches(a) Perl_moreswitches(aTHX_ a) #define my(a) Perl_my(aTHX_ a) #define my_atof(a) Perl_my_atof(aTHX_ a) ! #if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY) #define my_bcopy Perl_my_bcopy #endif #if !defined(HAS_BZERO) && !defined(HAS_MEMSET) --- 1926,1938 ---- #define mg_magical(a) Perl_mg_magical(aTHX_ a) #define mg_set(a) Perl_mg_set(aTHX_ a) #define mg_size(a) Perl_mg_size(aTHX_ a) + #define mini_mktime(a) Perl_mini_mktime(aTHX_ a) #define mod(a,b) Perl_mod(aTHX_ a,b) #define mode_from_discipline(a) Perl_mode_from_discipline(aTHX_ a) #define moreswitches(a) Perl_moreswitches(aTHX_ a) #define my(a) Perl_my(aTHX_ a) #define my_atof(a) Perl_my_atof(aTHX_ a) ! #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY)) #define my_bcopy Perl_my_bcopy #endif #if !defined(HAS_BZERO) && !defined(HAS_MEMSET) *************** *** 1930,1935 **** --- 1955,1961 ---- #endif #define my_setenv(a,b) Perl_my_setenv(aTHX_ a,b) #define my_stat() Perl_my_stat(aTHX) + #define my_strftime(a,b,c,d,e,f,g,h,i,j) Perl_my_strftime(aTHX_ a,b,c,d,e,f,g,h,i,j) #if defined(MYSWAP) #define my_swap(a) Perl_my_swap(aTHX_ a) #define my_htonl(a) Perl_my_htonl(aTHX_ a) *************** *** 2129,2135 **** #define sv_2iv(a) Perl_sv_2iv(aTHX_ a) #define sv_2mortal(a) Perl_sv_2mortal(aTHX_ a) #define sv_2nv(a) Perl_sv_2nv(aTHX_ a) - #define sv_2pv(a,b) Perl_sv_2pv(aTHX_ a,b) #define sv_2pvutf8(a,b) Perl_sv_2pvutf8(aTHX_ a,b) #define sv_2pvbyte(a,b) Perl_sv_2pvbyte(aTHX_ a,b) #define sv_2uv(a) Perl_sv_2uv(aTHX_ a) --- 2155,2160 ---- *************** *** 2145,2152 **** #define sv_bless(a,b) Perl_sv_bless(aTHX_ a,b) #define sv_vcatpvf(a,b,c) Perl_sv_vcatpvf(aTHX_ a,b,c) #define sv_catpv(a,b) Perl_sv_catpv(aTHX_ a,b) - #define sv_catpvn(a,b,c) Perl_sv_catpvn(aTHX_ a,b,c) - #define sv_catsv(a,b) Perl_sv_catsv(aTHX_ a,b) #define sv_chop(a,b) Perl_sv_chop(aTHX_ a,b) #define sv_clean_all() Perl_sv_clean_all(aTHX) #define sv_clean_objs() Perl_sv_clean_objs(aTHX) --- 2170,2175 ---- *************** *** 2157,2162 **** --- 2180,2186 ---- #define sv_collxfrm(a,b) Perl_sv_collxfrm(aTHX_ a,b) #endif #define sv_compile_2op(a,b,c,d) Perl_sv_compile_2op(aTHX_ a,b,c,d) + #define getcwd_sv(a) Perl_getcwd_sv(aTHX_ a) #define sv_dec(a) Perl_sv_dec(aTHX_ a) #define sv_dump(a) Perl_sv_dump(aTHX_ a) #define sv_derived_from(a,b) Perl_sv_derived_from(aTHX_ a,b) *************** *** 2178,2184 **** #define sv_peek(a) Perl_sv_peek(aTHX_ a) #define sv_pos_u2b(a,b,c) Perl_sv_pos_u2b(aTHX_ a,b,c) #define sv_pos_b2u(a,b) Perl_sv_pos_b2u(aTHX_ a,b) - #define sv_pvn_force(a,b) Perl_sv_pvn_force(aTHX_ a,b) #define sv_pvutf8n_force(a,b) Perl_sv_pvutf8n_force(aTHX_ a,b) #define sv_pvbyten_force(a,b) Perl_sv_pvbyten_force(aTHX_ a,b) #define sv_reftype(a,b) Perl_sv_reftype(aTHX_ a,b) --- 2202,2207 ---- *************** *** 2197,2203 **** #define sv_setref_pvn(a,b,c,d) Perl_sv_setref_pvn(aTHX_ a,b,c,d) #define sv_setpv(a,b) Perl_sv_setpv(aTHX_ a,b) #define sv_setpvn(a,b,c) Perl_sv_setpvn(aTHX_ a,b,c) - #define sv_setsv(a,b) Perl_sv_setsv(aTHX_ a,b) #define sv_taint(a) Perl_sv_taint(aTHX_ a) #define sv_tainted(a) Perl_sv_tainted(aTHX_ a) #define sv_unmagic(a,b) Perl_sv_unmagic(aTHX_ a,b) --- 2220,2225 ---- *************** *** 2210,2216 **** #define sv_vsetpvfn(a,b,c,d,e,f,g) Perl_sv_vsetpvfn(aTHX_ a,b,c,d,e,f,g) #define str_to_version(a) Perl_str_to_version(aTHX_ a) #define swash_init(a,b,c,d,e) Perl_swash_init(aTHX_ a,b,c,d,e) ! #define swash_fetch(a,b) Perl_swash_fetch(aTHX_ a,b) #define taint_env() Perl_taint_env(aTHX) #define taint_proper(a,b) Perl_taint_proper(aTHX_ a,b) #define to_utf8_lower(a) Perl_to_utf8_lower(aTHX_ a) --- 2232,2238 ---- #define sv_vsetpvfn(a,b,c,d,e,f,g) Perl_sv_vsetpvfn(aTHX_ a,b,c,d,e,f,g) #define str_to_version(a) Perl_str_to_version(aTHX_ a) #define swash_init(a,b,c,d,e) Perl_swash_init(aTHX_ a,b,c,d,e) ! #define swash_fetch(a,b,c) Perl_swash_fetch(aTHX_ a,b,c) #define taint_env() Perl_taint_env(aTHX) #define taint_proper(a,b) Perl_taint_proper(aTHX_ a,b) #define to_utf8_lower(a) Perl_to_utf8_lower(aTHX_ a) *************** *** 2311,2317 **** #define sv_pv(a) Perl_sv_pv(aTHX_ a) #define sv_pvutf8(a) Perl_sv_pvutf8(aTHX_ a) #define sv_pvbyte(a) Perl_sv_pvbyte(aTHX_ a) - #define sv_utf8_upgrade(a) Perl_sv_utf8_upgrade(aTHX_ a) #define sv_utf8_downgrade(a,b) Perl_sv_utf8_downgrade(aTHX_ a,b) #define sv_utf8_encode(a) Perl_sv_utf8_encode(aTHX_ a) #define sv_utf8_decode(a) Perl_sv_utf8_decode(aTHX_ a) --- 2333,2338 ---- *************** *** 2326,2342 **** #define my_attrs(a,b) Perl_my_attrs(aTHX_ a,b) #define boot_core_xsutils() Perl_boot_core_xsutils(aTHX) #if defined(USE_ITHREADS) ! #define cx_dup(a,b,c) Perl_cx_dup(aTHX_ a,b,c) ! #define si_dup(a) Perl_si_dup(aTHX_ a) ! #define ss_dup(a) Perl_ss_dup(aTHX_ a) #define any_dup(a,b) Perl_any_dup(aTHX_ a,b) ! #define he_dup(a,b) Perl_he_dup(aTHX_ a,b) ! #define re_dup(a) Perl_re_dup(aTHX_ a) #define fp_dup(a,b) Perl_fp_dup(aTHX_ a,b) #define dirp_dup(a) Perl_dirp_dup(aTHX_ a) ! #define gp_dup(a) Perl_gp_dup(aTHX_ a) ! #define mg_dup(a) Perl_mg_dup(aTHX_ a) ! #define sv_dup(a) Perl_sv_dup(aTHX_ a) #if defined(HAVE_INTERP_INTERN) #define sys_intern_dup(a,b) Perl_sys_intern_dup(aTHX_ a,b) #endif --- 2347,2363 ---- #define my_attrs(a,b) Perl_my_attrs(aTHX_ a,b) #define boot_core_xsutils() Perl_boot_core_xsutils(aTHX) #if defined(USE_ITHREADS) ! #define cx_dup(a,b,c,d) Perl_cx_dup(aTHX_ a,b,c,d) ! #define si_dup(a,b) Perl_si_dup(aTHX_ a,b) ! #define ss_dup(a,b) Perl_ss_dup(aTHX_ a,b) #define any_dup(a,b) Perl_any_dup(aTHX_ a,b) ! #define he_dup(a,b,c) Perl_he_dup(aTHX_ a,b,c) ! #define re_dup(a,b) Perl_re_dup(aTHX_ a,b) #define fp_dup(a,b) Perl_fp_dup(aTHX_ a,b) #define dirp_dup(a) Perl_dirp_dup(aTHX_ a) ! #define gp_dup(a,b) Perl_gp_dup(aTHX_ a,b) ! #define mg_dup(a,b) Perl_mg_dup(aTHX_ a,b) ! #define sv_dup(a,b) Perl_sv_dup(aTHX_ a,b) #if defined(HAVE_INTERP_INTERN) #define sys_intern_dup(a,b) Perl_sys_intern_dup(aTHX_ a,b) #endif *************** *** 2394,2401 **** #define scalarboolean(a) S_scalarboolean(aTHX_ a) #define too_few_arguments(a,b) S_too_few_arguments(aTHX_ a,b) #define too_many_arguments(a,b) S_too_many_arguments(aTHX_ a,b) - #define op_clear(a) S_op_clear(aTHX_ a) - #define null(a) S_null(aTHX_ a) #define pad_addlex(a) S_pad_addlex(aTHX_ a) #define pad_findlex(a,b,c,d,e,f,g) S_pad_findlex(aTHX_ a,b,c,d,e,f,g) #define newDEFSVOP() S_newDEFSVOP(aTHX) --- 2415,2420 ---- *************** *** 2449,2457 **** # endif #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) - #define doencodes(a,b,c) S_doencodes(aTHX_ a,b,c) #define refto(a) S_refto(aTHX_ a) #define seed() S_seed(aTHX) #define mul128(a,b) S_mul128(aTHX_ a,b) #define is_an_int(a,b) S_is_an_int(aTHX_ a,b) #define div128(a,b) S_div128(aTHX_ a,b) --- 2468,2478 ---- # endif #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) #define refto(a) S_refto(aTHX_ a) #define seed() S_seed(aTHX) + #endif + #if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT) + #define doencodes(a,b,c) S_doencodes(aTHX_ a,b,c) #define mul128(a,b) S_mul128(aTHX_ a,b) #define is_an_int(a,b) S_is_an_int(aTHX_ a,b) #define div128(a,b) S_div128(aTHX_ a,b) *************** *** 2502,2509 **** --- 2523,2532 ---- #define regtail(a,b,c) S_regtail(aTHX_ a,b,c) #define regwhite(a,b) S_regwhite(aTHX_ a,b) #define nextchar(a) S_nextchar(aTHX_ a) + # ifdef DEBUGGING #define dumpuntil(a,b,c,d,e) S_dumpuntil(aTHX_ a,b,c,d,e) #define put_byte(a,b) S_put_byte(aTHX_ a,b) + # endif #define scan_commit(a,b) S_scan_commit(aTHX_ a,b) #define cl_anything(a,b) S_cl_anything(aTHX_ a,b) #define cl_is_anything(a) S_cl_is_anything(aTHX_ a) *************** *** 2533,2539 **** --- 2556,2565 ---- #define find_byclass(a,b,c,d,e,f) S_find_byclass(aTHX_ a,b,c,d,e,f) #endif #if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT) + # ifdef DEBUGGING + #define deb_curcv(a) S_deb_curcv(aTHX_ a) #define debprof(a) S_debprof(aTHX_ a) + # endif #endif #if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT) #define save_scalar_at(a) S_save_scalar_at(aTHX_ a) *************** *** 2583,2593 **** #define visit(a) S_visit(aTHX_ a) #define sv_add_backref(a,b) S_sv_add_backref(aTHX_ a,b) #define sv_del_backref(a) S_sv_del_backref(aTHX_ a) ! # if defined(DEBUGGING) #define del_sv(a) S_del_sv(aTHX_ a) # endif # if !defined(NV_PRESERVES_UV) - #define sv_2inuv_non_preserve(a,b) S_sv_2inuv_non_preserve(aTHX_ a,b) #define sv_2iuv_non_preserve(a,b) S_sv_2iuv_non_preserve(aTHX_ a,b) # endif #define expect_number(a) S_expect_number(aTHX_ a) --- 2609,2618 ---- #define visit(a) S_visit(aTHX_ a) #define sv_add_backref(a,b) S_sv_add_backref(aTHX_ a,b) #define sv_del_backref(a) S_sv_del_backref(aTHX_ a) ! # ifdef DEBUGGING #define del_sv(a) S_del_sv(aTHX_ a) # endif # if !defined(NV_PRESERVES_UV) #define sv_2iuv_non_preserve(a,b) S_sv_2iuv_non_preserve(aTHX_ a,b) # endif #define expect_number(a) S_expect_number(aTHX_ a) *************** *** 2601,2606 **** --- 2626,2632 ---- #define force_version(a) S_force_version(aTHX_ a) #define force_word(a,b,c,d,e) S_force_word(aTHX_ a,b,c,d,e) #define tokeq(a) S_tokeq(aTHX_ a) + #define pending_ident() S_pending_ident(aTHX) #define scan_const(a) S_scan_const(aTHX_ a) #define scan_formline(a) S_scan_formline(aTHX_ a) #define scan_heredoc(a) S_scan_heredoc(aTHX_ a) *************** *** 2628,2634 **** --- 2654,2662 ---- #define filter_gets(a,b,c) S_filter_gets(aTHX_ a,b,c) #define find_in_my_stash(a,b) S_find_in_my_stash(aTHX_ a,b) #define new_constant(a,b,c,d,e,f) S_new_constant(aTHX_ a,b,c,d,e,f) + # if defined(DEBUGGING) #define tokereport(a,b,c) S_tokereport(aTHX_ a,b,c) + # endif #define ao(a) S_ao(aTHX_ a) #define depcom() S_depcom(aTHX) #define incl_perldb() S_incl_perldb(aTHX) *************** *** 2646,2653 **** #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d) #endif ! #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define stdize_locale(a) S_stdize_locale(aTHX_ a) #define mess_alloc() S_mess_alloc(aTHX) # if defined(LEAKTEST) #define xstat(a) S_xstat(aTHX_ a) --- 2674,2684 ---- #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) #define isa_lookup(a,b,c,d) S_isa_lookup(aTHX_ a,b,c,d) #endif ! #if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT) #define stdize_locale(a) S_stdize_locale(aTHX_ a) + #endif + #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) + #define closest_cop(a,b) S_closest_cop(aTHX_ a,b) #define mess_alloc() S_mess_alloc(aTHX) # if defined(LEAKTEST) #define xstat(a) S_xstat(aTHX_ a) *************** *** 2655,2660 **** --- 2686,2698 ---- #endif #if defined(PERL_OBJECT) #endif + #define sv_setsv_flags(a,b,c) Perl_sv_setsv_flags(aTHX_ a,b,c) + #define sv_catpvn_flags(a,b,c,d) Perl_sv_catpvn_flags(aTHX_ a,b,c,d) + #define sv_catsv_flags(a,b,c) Perl_sv_catsv_flags(aTHX_ a,b,c) + #define sv_utf8_upgrade_flags(a,b) Perl_sv_utf8_upgrade_flags(aTHX_ a,b) + #define sv_pvn_force_flags(a,b,c) Perl_sv_pvn_force_flags(aTHX_ a,b,c) + #define sv_2pv_flags(a,b,c) Perl_sv_2pv_flags(aTHX_ a,b,c) + #define my_atof2(a,b) Perl_my_atof2(aTHX_ a,b) #define ck_anoncode(a) Perl_ck_anoncode(aTHX_ a) #define ck_bitop(a) Perl_ck_bitop(aTHX_ a) #define ck_concat(a) Perl_ck_concat(aTHX_ a) *************** *** 2667,2673 **** #define ck_exit(a) Perl_ck_exit(aTHX_ a) #define ck_ftst(a) Perl_ck_ftst(aTHX_ a) #define ck_fun(a) Perl_ck_fun(aTHX_ a) - #define ck_fun_locale(a) Perl_ck_fun_locale(aTHX_ a) #define ck_glob(a) Perl_ck_glob(aTHX_ a) #define ck_grep(a) Perl_ck_grep(aTHX_ a) #define ck_index(a) Perl_ck_index(aTHX_ a) --- 2705,2710 ---- *************** *** 2685,2691 **** #define ck_rfun(a) Perl_ck_rfun(aTHX_ a) #define ck_rvconst(a) Perl_ck_rvconst(aTHX_ a) #define ck_sassign(a) Perl_ck_sassign(aTHX_ a) - #define ck_scmp(a) Perl_ck_scmp(aTHX_ a) #define ck_select(a) Perl_ck_select(aTHX_ a) #define ck_shift(a) Perl_ck_shift(aTHX_ a) #define ck_sort(a) Perl_ck_sort(aTHX_ a) --- 2722,2727 ---- *************** *** 3052,3062 **** # if defined(PERL_IMPLICIT_SYS) # endif #endif - #if defined(MYMALLOC) #define malloc Perl_malloc #define calloc Perl_calloc #define realloc Perl_realloc #define mfree Perl_mfree #define malloced_size Perl_malloced_size #endif #define get_context Perl_get_context --- 3088,3098 ---- # if defined(PERL_IMPLICIT_SYS) # endif #endif #define malloc Perl_malloc #define calloc Perl_calloc #define realloc Perl_realloc #define mfree Perl_mfree + #if defined(MYMALLOC) #define malloced_size Perl_malloced_size #endif #define get_context Perl_get_context *************** *** 3138,3143 **** --- 3174,3181 ---- #define block_start Perl_block_start #define Perl_boot_core_UNIVERSAL CPerlObj::Perl_boot_core_UNIVERSAL #define boot_core_UNIVERSAL Perl_boot_core_UNIVERSAL + #define Perl_boot_core_PerlIO CPerlObj::Perl_boot_core_PerlIO + #define boot_core_PerlIO Perl_boot_core_PerlIO #define Perl_call_list CPerlObj::Perl_call_list #define call_list Perl_call_list #define Perl_cando CPerlObj::Perl_cando *************** *** 3462,3467 **** --- 3500,3507 ---- #define init_debugger Perl_init_debugger #define Perl_init_stacks CPerlObj::Perl_init_stacks #define init_stacks Perl_init_stacks + #define Perl_init_tm CPerlObj::Perl_init_tm + #define init_tm Perl_init_tm #define Perl_intro_my CPerlObj::Perl_intro_my #define intro_my Perl_intro_my #define Perl_instr CPerlObj::Perl_instr *************** *** 3586,3591 **** --- 3626,3635 ---- #define lex_end Perl_lex_end #define Perl_lex_start CPerlObj::Perl_lex_start #define lex_start Perl_lex_start + #define Perl_op_null CPerlObj::Perl_op_null + #define op_null Perl_op_null + #define Perl_op_clear CPerlObj::Perl_op_clear + #define op_clear Perl_op_clear #define Perl_linklist CPerlObj::Perl_linklist #define linklist Perl_linklist #define Perl_list CPerlObj::Perl_list *************** *** 3600,3605 **** --- 3644,3653 ---- #define localize Perl_localize #define Perl_looks_like_number CPerlObj::Perl_looks_like_number #define looks_like_number Perl_looks_like_number + #define Perl_grok_number CPerlObj::Perl_grok_number + #define grok_number Perl_grok_number + #define Perl_grok_numeric_radix CPerlObj::Perl_grok_numeric_radix + #define grok_numeric_radix Perl_grok_numeric_radix #define Perl_magic_clearenv CPerlObj::Perl_magic_clearenv #define magic_clearenv Perl_magic_clearenv #define Perl_magic_clear_all_env CPerlObj::Perl_magic_clear_all_env *************** *** 3732,3737 **** --- 3780,3787 ---- #define mg_set Perl_mg_set #define Perl_mg_size CPerlObj::Perl_mg_size #define mg_size Perl_mg_size + #define Perl_mini_mktime CPerlObj::Perl_mini_mktime + #define mini_mktime Perl_mini_mktime #define Perl_mod CPerlObj::Perl_mod #define mod Perl_mod #define Perl_mode_from_discipline CPerlObj::Perl_mode_from_discipline *************** *** 3742,3748 **** #define my Perl_my #define Perl_my_atof CPerlObj::Perl_my_atof #define my_atof Perl_my_atof ! #if !defined(HAS_BCOPY) || !defined(HAS_SAFE_BCOPY) #define Perl_my_bcopy CPerlObj::Perl_my_bcopy #define my_bcopy Perl_my_bcopy #endif --- 3792,3798 ---- #define my Perl_my #define Perl_my_atof CPerlObj::Perl_my_atof #define my_atof Perl_my_atof ! #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY)) #define Perl_my_bcopy CPerlObj::Perl_my_bcopy #define my_bcopy Perl_my_bcopy #endif *************** *** 3778,3783 **** --- 3828,3835 ---- #define my_setenv Perl_my_setenv #define Perl_my_stat CPerlObj::Perl_my_stat #define my_stat Perl_my_stat + #define Perl_my_strftime CPerlObj::Perl_my_strftime + #define my_strftime Perl_my_strftime #if defined(MYSWAP) #define Perl_my_swap CPerlObj::Perl_my_swap #define my_swap Perl_my_swap *************** *** 4231,4236 **** --- 4283,4290 ---- #endif #define Perl_sv_compile_2op CPerlObj::Perl_sv_compile_2op #define sv_compile_2op Perl_sv_compile_2op + #define Perl_getcwd_sv CPerlObj::Perl_getcwd_sv + #define getcwd_sv Perl_getcwd_sv #define Perl_sv_dec CPerlObj::Perl_sv_dec #define sv_dec Perl_sv_dec #define Perl_sv_dump CPerlObj::Perl_sv_dump *************** *** 4683,4692 **** #define too_few_arguments S_too_few_arguments #define S_too_many_arguments CPerlObj::S_too_many_arguments #define too_many_arguments S_too_many_arguments - #define S_op_clear CPerlObj::S_op_clear - #define op_clear S_op_clear - #define S_null CPerlObj::S_null - #define null S_null #define S_pad_addlex CPerlObj::S_pad_addlex #define pad_addlex S_pad_addlex #define S_pad_findlex CPerlObj::S_pad_findlex --- 4737,4742 ---- *************** *** 4779,4790 **** # endif #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) - #define S_doencodes CPerlObj::S_doencodes - #define doencodes S_doencodes #define S_refto CPerlObj::S_refto #define refto S_refto #define S_seed CPerlObj::S_seed #define seed S_seed #define S_mul128 CPerlObj::S_mul128 #define mul128 S_mul128 #define S_is_an_int CPerlObj::S_is_an_int --- 4829,4842 ---- # endif #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) #define S_refto CPerlObj::S_refto #define refto S_refto #define S_seed CPerlObj::S_seed #define seed S_seed + #endif + #if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT) + #define S_doencodes CPerlObj::S_doencodes + #define doencodes S_doencodes #define S_mul128 CPerlObj::S_mul128 #define mul128 S_mul128 #define S_is_an_int CPerlObj::S_is_an_int *************** *** 4873,4882 **** --- 4925,4936 ---- #define regwhite S_regwhite #define S_nextchar CPerlObj::S_nextchar #define nextchar S_nextchar + # ifdef DEBUGGING #define S_dumpuntil CPerlObj::S_dumpuntil #define dumpuntil S_dumpuntil #define S_put_byte CPerlObj::S_put_byte #define put_byte S_put_byte + # endif #define S_scan_commit CPerlObj::S_scan_commit #define scan_commit S_scan_commit #define S_cl_anything CPerlObj::S_cl_anything *************** *** 4933,4940 **** --- 4987,4998 ---- #define find_byclass S_find_byclass #endif #if defined(PERL_IN_RUN_C) || defined(PERL_DECL_PROT) + # ifdef DEBUGGING + #define S_deb_curcv CPerlObj::S_deb_curcv + #define deb_curcv S_deb_curcv #define S_debprof CPerlObj::S_debprof #define debprof S_debprof + # endif #endif #if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT) #define S_save_scalar_at CPerlObj::S_save_scalar_at *************** *** 5029,5041 **** #define sv_add_backref S_sv_add_backref #define S_sv_del_backref CPerlObj::S_sv_del_backref #define sv_del_backref S_sv_del_backref ! # if defined(DEBUGGING) #define S_del_sv CPerlObj::S_del_sv #define del_sv S_del_sv # endif # if !defined(NV_PRESERVES_UV) - #define S_sv_2inuv_non_preserve CPerlObj::S_sv_2inuv_non_preserve - #define sv_2inuv_non_preserve S_sv_2inuv_non_preserve #define S_sv_2iuv_non_preserve CPerlObj::S_sv_2iuv_non_preserve #define sv_2iuv_non_preserve S_sv_2iuv_non_preserve # endif --- 5087,5097 ---- #define sv_add_backref S_sv_add_backref #define S_sv_del_backref CPerlObj::S_sv_del_backref #define sv_del_backref S_sv_del_backref ! # ifdef DEBUGGING #define S_del_sv CPerlObj::S_del_sv #define del_sv S_del_sv # endif # if !defined(NV_PRESERVES_UV) #define S_sv_2iuv_non_preserve CPerlObj::S_sv_2iuv_non_preserve #define sv_2iuv_non_preserve S_sv_2iuv_non_preserve # endif *************** *** 5057,5062 **** --- 5113,5120 ---- #define force_word S_force_word #define S_tokeq CPerlObj::S_tokeq #define tokeq S_tokeq + #define S_pending_ident CPerlObj::S_pending_ident + #define pending_ident S_pending_ident #define S_scan_const CPerlObj::S_scan_const #define scan_const S_scan_const #define S_scan_formline CPerlObj::S_scan_formline *************** *** 5111,5118 **** --- 5169,5178 ---- #define find_in_my_stash S_find_in_my_stash #define S_new_constant CPerlObj::S_new_constant #define new_constant S_new_constant + # if defined(DEBUGGING) #define S_tokereport CPerlObj::S_tokereport #define tokereport S_tokereport + # endif #define S_ao CPerlObj::S_ao #define ao S_ao #define S_depcom CPerlObj::S_depcom *************** *** 5138,5146 **** #define S_isa_lookup CPerlObj::S_isa_lookup #define isa_lookup S_isa_lookup #endif ! #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) #define S_stdize_locale CPerlObj::S_stdize_locale #define stdize_locale S_stdize_locale #define S_mess_alloc CPerlObj::S_mess_alloc #define mess_alloc S_mess_alloc # if defined(LEAKTEST) --- 5198,5210 ---- #define S_isa_lookup CPerlObj::S_isa_lookup #define isa_lookup S_isa_lookup #endif ! #if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT) #define S_stdize_locale CPerlObj::S_stdize_locale #define stdize_locale S_stdize_locale + #endif + #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) + #define S_closest_cop CPerlObj::S_closest_cop + #define closest_cop S_closest_cop #define S_mess_alloc CPerlObj::S_mess_alloc #define mess_alloc S_mess_alloc # if defined(LEAKTEST) *************** *** 5150,5155 **** --- 5214,5233 ---- #endif #if defined(PERL_OBJECT) #endif + #define Perl_sv_setsv_flags CPerlObj::Perl_sv_setsv_flags + #define sv_setsv_flags Perl_sv_setsv_flags + #define Perl_sv_catpvn_flags CPerlObj::Perl_sv_catpvn_flags + #define sv_catpvn_flags Perl_sv_catpvn_flags + #define Perl_sv_catsv_flags CPerlObj::Perl_sv_catsv_flags + #define sv_catsv_flags Perl_sv_catsv_flags + #define Perl_sv_utf8_upgrade_flags CPerlObj::Perl_sv_utf8_upgrade_flags + #define sv_utf8_upgrade_flags Perl_sv_utf8_upgrade_flags + #define Perl_sv_pvn_force_flags CPerlObj::Perl_sv_pvn_force_flags + #define sv_pvn_force_flags Perl_sv_pvn_force_flags + #define Perl_sv_2pv_flags CPerlObj::Perl_sv_2pv_flags + #define sv_2pv_flags Perl_sv_2pv_flags + #define Perl_my_atof2 CPerlObj::Perl_my_atof2 + #define my_atof2 Perl_my_atof2 #define Perl_ck_anoncode CPerlObj::Perl_ck_anoncode #define ck_anoncode Perl_ck_anoncode #define Perl_ck_bitop CPerlObj::Perl_ck_bitop *************** *** 5174,5181 **** #define ck_ftst Perl_ck_ftst #define Perl_ck_fun CPerlObj::Perl_ck_fun #define ck_fun Perl_ck_fun - #define Perl_ck_fun_locale CPerlObj::Perl_ck_fun_locale - #define ck_fun_locale Perl_ck_fun_locale #define Perl_ck_glob CPerlObj::Perl_ck_glob #define ck_glob Perl_ck_glob #define Perl_ck_grep CPerlObj::Perl_ck_grep --- 5252,5257 ---- *************** *** 5210,5217 **** #define ck_rvconst Perl_ck_rvconst #define Perl_ck_sassign CPerlObj::Perl_ck_sassign #define ck_sassign Perl_ck_sassign - #define Perl_ck_scmp CPerlObj::Perl_ck_scmp - #define ck_scmp Perl_ck_scmp #define Perl_ck_select CPerlObj::Perl_ck_select #define ck_select Perl_ck_select #define Perl_ck_shift CPerlObj::Perl_ck_shift --- 5286,5291 ---- diff -c 'perl-5.7.1/embed.pl' 'perl-5.7.2/embed.pl' Index: ./embed.pl *** ./embed.pl Fri Apr 6 16:19:51 2001 --- ./embed.pl Thu Jul 12 21:34:33 2001 *************** *** 49,55 **** else { @args = split /\s*\|\s*/, $_; } ! print $F $function->(@args); } print $F $trailer if $trailer; close $F unless ref $filename; --- 49,56 ---- else { @args = split /\s*\|\s*/, $_; } ! my @outs = &{$function}(@args); ! print $F @outs; # $function->(@args) is not 5.003 } print $F $trailer if $trailer; close $F unless ref $filename; *************** *** 251,257 **** readvars %thread, 'thrdvar.h','T'; readvars %globvar, 'perlvars.h','G'; ! foreach my $sym (sort keys %thread) { warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym}; } --- 252,259 ---- readvars %thread, 'thrdvar.h','T'; readvars %globvar, 'perlvars.h','G'; ! my $sym; ! foreach $sym (sort keys %thread) { warn "$sym in intrpvar.h as well as thrdvar.h\n" if exists $intrp{$sym}; } *************** *** 856,870 **** EOT ! foreach my $sym (sort keys %intrp) { print CAPIH bincompat_var('I',$sym); } ! foreach my $sym (sort keys %thread) { print CAPIH bincompat_var('T',$sym); } ! foreach my $sym (sort keys %globvar) { print CAPIH bincompat_var('G',$sym); } --- 858,872 ---- EOT ! foreach $sym (sort keys %intrp) { print CAPIH bincompat_var('I',$sym); } ! foreach $sym (sort keys %thread) { print CAPIH bincompat_var('T',$sym); } ! foreach $sym (sort keys %globvar) { print CAPIH bincompat_var('G',$sym); } *************** *** 985,991 **** if (length $return) { $decl .= " $rettype retval;\n"; $retarg .= "retval = "; ! $return = "\n ${return}retval;\n"; } $emitval .= <Tregcode) #define PL_regcomp_parse (vTHX->Tregcomp_parse) #define PL_regcomp_rx (vTHX->Tregcomp_rx) + #define PL_regcompat1 (vTHX->Tregcompat1) #define PL_regcompp (vTHX->Tregcompp) #define PL_regdata (vTHX->Tregdata) #define PL_regdummy (vTHX->Tregdummy) *************** *** 112,123 **** #define PL_regint_start (vTHX->Tregint_start) #define PL_regint_string (vTHX->Tregint_string) #define PL_reginterp_cnt (vTHX->Treginterp_cnt) #define PL_reglastparen (vTHX->Treglastparen) #define PL_regnarrate (vTHX->Tregnarrate) #define PL_regnaughty (vTHX->Tregnaughty) #define PL_regnpar (vTHX->Tregnpar) #define PL_regprecomp (vTHX->Tregprecomp) - #define PL_regprev (vTHX->Tregprev) #define PL_regprogram (vTHX->Tregprogram) #define PL_regsawback (vTHX->Tregsawback) #define PL_regseen (vTHX->Tregseen) --- 113,124 ---- #define PL_regint_start (vTHX->Tregint_start) #define PL_regint_string (vTHX->Tregint_string) #define PL_reginterp_cnt (vTHX->Treginterp_cnt) + #define PL_reglastcloseparen (vTHX->Treglastcloseparen) #define PL_reglastparen (vTHX->Treglastparen) #define PL_regnarrate (vTHX->Tregnarrate) #define PL_regnaughty (vTHX->Tregnaughty) #define PL_regnpar (vTHX->Tregnpar) #define PL_regprecomp (vTHX->Tregprecomp) #define PL_regprogram (vTHX->Tregprogram) #define PL_regsawback (vTHX->Tregsawback) #define PL_regseen (vTHX->Tregseen) *************** *** 325,333 **** #define PL_nthreads (PERL_GET_INTERP->Inthreads) #define PL_nthreads_cond (PERL_GET_INTERP->Inthreads_cond) #define PL_nullstash (PERL_GET_INTERP->Inullstash) #define PL_numeric_local (PERL_GET_INTERP->Inumeric_local) #define PL_numeric_name (PERL_GET_INTERP->Inumeric_name) ! #define PL_numeric_radix (PERL_GET_INTERP->Inumeric_radix) #define PL_numeric_standard (PERL_GET_INTERP->Inumeric_standard) #define PL_ofmt (PERL_GET_INTERP->Iofmt) #define PL_oldbufptr (PERL_GET_INTERP->Ioldbufptr) --- 326,335 ---- #define PL_nthreads (PERL_GET_INTERP->Inthreads) #define PL_nthreads_cond (PERL_GET_INTERP->Inthreads_cond) #define PL_nullstash (PERL_GET_INTERP->Inullstash) + #define PL_numeric_compat1 (PERL_GET_INTERP->Inumeric_compat1) #define PL_numeric_local (PERL_GET_INTERP->Inumeric_local) #define PL_numeric_name (PERL_GET_INTERP->Inumeric_name) ! #define PL_numeric_radix_sv (PERL_GET_INTERP->Inumeric_radix_sv) #define PL_numeric_standard (PERL_GET_INTERP->Inumeric_standard) #define PL_ofmt (PERL_GET_INTERP->Iofmt) #define PL_oldbufptr (PERL_GET_INTERP->Ioldbufptr) *************** *** 358,363 **** --- 360,368 ---- #define PL_psig_pend (PERL_GET_INTERP->Ipsig_pend) #define PL_psig_ptr (PERL_GET_INTERP->Ipsig_ptr) #define PL_ptr_table (PERL_GET_INTERP->Iptr_table) + #define PL_reentrant_buffer (PERL_GET_INTERP->Ireentrant_buffer) + #define PL_regex_pad (PERL_GET_INTERP->Iregex_pad) + #define PL_regex_padav (PERL_GET_INTERP->Iregex_padav) #define PL_replgv (PERL_GET_INTERP->Ireplgv) #define PL_rsfp (PERL_GET_INTERP->Irsfp) #define PL_rsfp_filters (PERL_GET_INTERP->Irsfp_filters) *************** *** 606,614 **** #define PL_nthreads (vTHX->Inthreads) #define PL_nthreads_cond (vTHX->Inthreads_cond) #define PL_nullstash (vTHX->Inullstash) #define PL_numeric_local (vTHX->Inumeric_local) #define PL_numeric_name (vTHX->Inumeric_name) ! #define PL_numeric_radix (vTHX->Inumeric_radix) #define PL_numeric_standard (vTHX->Inumeric_standard) #define PL_ofmt (vTHX->Iofmt) #define PL_oldbufptr (vTHX->Ioldbufptr) --- 611,620 ---- #define PL_nthreads (vTHX->Inthreads) #define PL_nthreads_cond (vTHX->Inthreads_cond) #define PL_nullstash (vTHX->Inullstash) + #define PL_numeric_compat1 (vTHX->Inumeric_compat1) #define PL_numeric_local (vTHX->Inumeric_local) #define PL_numeric_name (vTHX->Inumeric_name) ! #define PL_numeric_radix_sv (vTHX->Inumeric_radix_sv) #define PL_numeric_standard (vTHX->Inumeric_standard) #define PL_ofmt (vTHX->Iofmt) #define PL_oldbufptr (vTHX->Ioldbufptr) *************** *** 639,644 **** --- 645,653 ---- #define PL_psig_pend (vTHX->Ipsig_pend) #define PL_psig_ptr (vTHX->Ipsig_ptr) #define PL_ptr_table (vTHX->Iptr_table) + #define PL_reentrant_buffer (vTHX->Ireentrant_buffer) + #define PL_regex_pad (vTHX->Iregex_pad) + #define PL_regex_padav (vTHX->Iregex_padav) #define PL_replgv (vTHX->Ireplgv) #define PL_rsfp (vTHX->Irsfp) #define PL_rsfp_filters (vTHX->Irsfp_filters) *************** *** 805,810 **** --- 814,820 ---- #define PL_regcode (aTHXo->interp.Tregcode) #define PL_regcomp_parse (aTHXo->interp.Tregcomp_parse) #define PL_regcomp_rx (aTHXo->interp.Tregcomp_rx) + #define PL_regcompat1 (aTHXo->interp.Tregcompat1) #define PL_regcompp (aTHXo->interp.Tregcompp) #define PL_regdata (aTHXo->interp.Tregdata) #define PL_regdummy (aTHXo->interp.Tregdummy) *************** *** 818,829 **** #define PL_regint_start (aTHXo->interp.Tregint_start) #define PL_regint_string (aTHXo->interp.Tregint_string) #define PL_reginterp_cnt (aTHXo->interp.Treginterp_cnt) #define PL_reglastparen (aTHXo->interp.Treglastparen) #define PL_regnarrate (aTHXo->interp.Tregnarrate) #define PL_regnaughty (aTHXo->interp.Tregnaughty) #define PL_regnpar (aTHXo->interp.Tregnpar) #define PL_regprecomp (aTHXo->interp.Tregprecomp) - #define PL_regprev (aTHXo->interp.Tregprev) #define PL_regprogram (aTHXo->interp.Tregprogram) #define PL_regsawback (aTHXo->interp.Tregsawback) #define PL_regseen (aTHXo->interp.Tregseen) --- 828,839 ---- #define PL_regint_start (aTHXo->interp.Tregint_start) #define PL_regint_string (aTHXo->interp.Tregint_string) #define PL_reginterp_cnt (aTHXo->interp.Treginterp_cnt) + #define PL_reglastcloseparen (aTHXo->interp.Treglastcloseparen) #define PL_reglastparen (aTHXo->interp.Treglastparen) #define PL_regnarrate (aTHXo->interp.Tregnarrate) #define PL_regnaughty (aTHXo->interp.Tregnaughty) #define PL_regnpar (aTHXo->interp.Tregnpar) #define PL_regprecomp (aTHXo->interp.Tregprecomp) #define PL_regprogram (aTHXo->interp.Tregprogram) #define PL_regsawback (aTHXo->interp.Tregsawback) #define PL_regseen (aTHXo->interp.Tregseen) *************** *** 1023,1031 **** #define PL_nthreads (aTHXo->interp.Inthreads) #define PL_nthreads_cond (aTHXo->interp.Inthreads_cond) #define PL_nullstash (aTHXo->interp.Inullstash) #define PL_numeric_local (aTHXo->interp.Inumeric_local) #define PL_numeric_name (aTHXo->interp.Inumeric_name) ! #define PL_numeric_radix (aTHXo->interp.Inumeric_radix) #define PL_numeric_standard (aTHXo->interp.Inumeric_standard) #define PL_ofmt (aTHXo->interp.Iofmt) #define PL_oldbufptr (aTHXo->interp.Ioldbufptr) --- 1033,1042 ---- #define PL_nthreads (aTHXo->interp.Inthreads) #define PL_nthreads_cond (aTHXo->interp.Inthreads_cond) #define PL_nullstash (aTHXo->interp.Inullstash) + #define PL_numeric_compat1 (aTHXo->interp.Inumeric_compat1) #define PL_numeric_local (aTHXo->interp.Inumeric_local) #define PL_numeric_name (aTHXo->interp.Inumeric_name) ! #define PL_numeric_radix_sv (aTHXo->interp.Inumeric_radix_sv) #define PL_numeric_standard (aTHXo->interp.Inumeric_standard) #define PL_ofmt (aTHXo->interp.Iofmt) #define PL_oldbufptr (aTHXo->interp.Ioldbufptr) *************** *** 1056,1061 **** --- 1067,1075 ---- #define PL_psig_pend (aTHXo->interp.Ipsig_pend) #define PL_psig_ptr (aTHXo->interp.Ipsig_ptr) #define PL_ptr_table (aTHXo->interp.Iptr_table) + #define PL_reentrant_buffer (aTHXo->interp.Ireentrant_buffer) + #define PL_regex_pad (aTHXo->interp.Iregex_pad) + #define PL_regex_padav (aTHXo->interp.Iregex_padav) #define PL_replgv (aTHXo->interp.Ireplgv) #define PL_rsfp (aTHXo->interp.Irsfp) #define PL_rsfp_filters (aTHXo->interp.Irsfp_filters) *************** *** 1305,1313 **** #define PL_Inthreads PL_nthreads #define PL_Inthreads_cond PL_nthreads_cond #define PL_Inullstash PL_nullstash #define PL_Inumeric_local PL_numeric_local #define PL_Inumeric_name PL_numeric_name ! #define PL_Inumeric_radix PL_numeric_radix #define PL_Inumeric_standard PL_numeric_standard #define PL_Iofmt PL_ofmt #define PL_Ioldbufptr PL_oldbufptr --- 1319,1328 ---- #define PL_Inthreads PL_nthreads #define PL_Inthreads_cond PL_nthreads_cond #define PL_Inullstash PL_nullstash + #define PL_Inumeric_compat1 PL_numeric_compat1 #define PL_Inumeric_local PL_numeric_local #define PL_Inumeric_name PL_numeric_name ! #define PL_Inumeric_radix_sv PL_numeric_radix_sv #define PL_Inumeric_standard PL_numeric_standard #define PL_Iofmt PL_ofmt #define PL_Ioldbufptr PL_oldbufptr *************** *** 1338,1343 **** --- 1353,1361 ---- #define PL_Ipsig_pend PL_psig_pend #define PL_Ipsig_ptr PL_psig_ptr #define PL_Iptr_table PL_ptr_table + #define PL_Ireentrant_buffer PL_reentrant_buffer + #define PL_Iregex_pad PL_regex_pad + #define PL_Iregex_padav PL_regex_padav #define PL_Ireplgv PL_replgv #define PL_Irsfp PL_rsfp #define PL_Irsfp_filters PL_rsfp_filters *************** *** 1500,1505 **** --- 1518,1524 ---- #define PL_regcode (aTHX->Tregcode) #define PL_regcomp_parse (aTHX->Tregcomp_parse) #define PL_regcomp_rx (aTHX->Tregcomp_rx) + #define PL_regcompat1 (aTHX->Tregcompat1) #define PL_regcompp (aTHX->Tregcompp) #define PL_regdata (aTHX->Tregdata) #define PL_regdummy (aTHX->Tregdummy) *************** *** 1513,1524 **** #define PL_regint_start (aTHX->Tregint_start) #define PL_regint_string (aTHX->Tregint_string) #define PL_reginterp_cnt (aTHX->Treginterp_cnt) #define PL_reglastparen (aTHX->Treglastparen) #define PL_regnarrate (aTHX->Tregnarrate) #define PL_regnaughty (aTHX->Tregnaughty) #define PL_regnpar (aTHX->Tregnpar) #define PL_regprecomp (aTHX->Tregprecomp) - #define PL_regprev (aTHX->Tregprev) #define PL_regprogram (aTHX->Tregprogram) #define PL_regsawback (aTHX->Tregsawback) #define PL_regseen (aTHX->Tregseen) --- 1532,1543 ---- #define PL_regint_start (aTHX->Tregint_start) #define PL_regint_string (aTHX->Tregint_string) #define PL_reginterp_cnt (aTHX->Treginterp_cnt) + #define PL_reglastcloseparen (aTHX->Treglastcloseparen) #define PL_reglastparen (aTHX->Treglastparen) #define PL_regnarrate (aTHX->Tregnarrate) #define PL_regnaughty (aTHX->Tregnaughty) #define PL_regnpar (aTHX->Tregnpar) #define PL_regprecomp (aTHX->Tregprecomp) #define PL_regprogram (aTHX->Tregprogram) #define PL_regsawback (aTHX->Tregsawback) #define PL_regseen (aTHX->Tregseen) *************** *** 1636,1641 **** --- 1655,1661 ---- #define PL_Tregcode PL_regcode #define PL_Tregcomp_parse PL_regcomp_parse #define PL_Tregcomp_rx PL_regcomp_rx + #define PL_Tregcompat1 PL_regcompat1 #define PL_Tregcompp PL_regcompp #define PL_Tregdata PL_regdata #define PL_Tregdummy PL_regdummy *************** *** 1649,1660 **** #define PL_Tregint_start PL_regint_start #define PL_Tregint_string PL_regint_string #define PL_Treginterp_cnt PL_reginterp_cnt #define PL_Treglastparen PL_reglastparen #define PL_Tregnarrate PL_regnarrate #define PL_Tregnaughty PL_regnaughty #define PL_Tregnpar PL_regnpar #define PL_Tregprecomp PL_regprecomp - #define PL_Tregprev PL_regprev #define PL_Tregprogram PL_regprogram #define PL_Tregsawback PL_regsawback #define PL_Tregseen PL_regseen --- 1669,1680 ---- #define PL_Tregint_start PL_regint_start #define PL_Tregint_string PL_regint_string #define PL_Treginterp_cnt PL_reginterp_cnt + #define PL_Treglastcloseparen PL_reglastcloseparen #define PL_Treglastparen PL_reglastparen #define PL_Tregnarrate PL_regnarrate #define PL_Tregnaughty PL_regnaughty #define PL_Tregnpar PL_regnpar #define PL_Tregprecomp PL_regprecomp #define PL_Tregprogram PL_regprogram #define PL_Tregsawback PL_regsawback #define PL_Tregseen PL_regseen diff -c 'perl-5.7.1/epoc/config.sh' 'perl-5.7.2/epoc/config.sh' Index: ./epoc/config.sh *** ./epoc/config.sh Sun Apr 8 01:56:59 2001 --- ./epoc/config.sh Fri Jul 13 03:15:39 2001 *************** *** 25,30 **** --- 25,31 ---- _exe='.exe' _o='.o' afs='false' + afsroot='/afs' alignbytes='8' ansi2knr='' aphostname='' *************** *** 32,39 **** apisubversion='' apiversion='' ar='arm-pe-ar' ! archlib='?:/perl/lib/5.7.1/epoc' ! archlibexp='?:/perl/lib/5.7.1/epoc' archname64='' archname='epoc' archobjs='epoc.o epocish.o epoc_stubs.o' --- 33,40 ---- apisubversion='' apiversion='' ar='arm-pe-ar' ! archlib='?:/perl/lib/5.7.2/epoc' ! archlibexp='?:/perl/lib/5.7.2/epoc' archname64='' archname='epoc' archobjs='epoc.o epocish.o epoc_stubs.o' *************** *** 75,84 **** cpprun='arm-pe-gcc -E -B/usr/local/lib/gcc-lib/arm-pe/cygnus-2.7.2-960323/' cppstdin='arm-pe-gcc -E -B/usr/local/lib/gcc-lib/arm-pe/cygnus-2.7.2-960323/' cppsymbols='' - crosscompile='define' cryptlib='' csh='csh' - d__fwalk='undef' d_Gconvert='epoc_gcvt((x),(n),(b))' d_PRIEUldbl='undef' d_PRIFUldbl='undef' --- 76,83 ---- *************** *** 92,97 **** --- 91,97 ---- d_PRIo64='undef' d_PRIu64='undef' d_PRIx64='undef' + d__fwalk='undef' d_access='undef' d_accessx='undef' d_alarm='undef' *************** *** 114,125 **** d_chsize='undef' d_closedir='undef' d_cmsghdr_s='undef' - d_const='define' d_cmsghdr_s='undef' d_crypt='undef' d_csh='undef' d_cuserid='undef' d_dbl_dig='undef' d_difftime='define' d_dirnamlen='undef' d_dlerror='undef' --- 114,126 ---- d_chsize='undef' d_closedir='undef' d_cmsghdr_s='undef' d_cmsghdr_s='undef' + d_const='define' d_crypt='undef' d_csh='undef' d_cuserid='undef' d_dbl_dig='undef' + d_dbminitproto='undef' d_difftime='define' d_dirnamlen='undef' d_dlerror='undef' *************** *** 137,142 **** --- 138,144 ---- d_endsent='undef' d_eofnblk='define' d_eunice='undef' + d_fchdir='undef' d_fchmod='undef' d_fchown='undef' d_fcntl='undef' *************** *** 147,152 **** --- 149,155 ---- d_fgetpos='define' d_flexfnam='define' d_flock='undef' + d_flockproto='undef' d_fork='undef' d_fpathconf='undef' d_fpos64_t='undef' *************** *** 229,234 **** --- 232,238 ---- d_mktime='define' d_mmap='undef' d_modfl='undef' + d_modfl_pow32_bug='undef' d_mprotect='undef' d_msg='undef' d_msg_ctrunc='undef' *************** *** 237,245 **** d_msg_peek='undef' d_msg_proxy='undef' d_msgctl='undef' - d_msghdr_s='undef' d_msgget='undef' d_msghdr_s='undef' d_msgrcv='undef' d_msgsnd='undef' d_msync='undef' --- 241,249 ---- d_msg_peek='undef' d_msg_proxy='undef' d_msgctl='undef' d_msgget='undef' d_msghdr_s='undef' + d_msghdr_s='undef' d_msgrcv='undef' d_msgsnd='undef' d_msync='undef' *************** *** 246,251 **** --- 250,256 ---- d_munmap='undef' d_mymalloc='undef' d_nice='undef' + d_nl_langinfo='undef' d_off64_t='undef' d_old_pthread_create_joinable='undef' d_oldpthreads='undef' *************** *** 258,263 **** --- 263,269 ---- d_pipe='undef' d_poll='undef' d_portable='undef' + d_pthread_atfork='undef' d_pthread_yield='undef' d_pwage='undef' d_pwchange='undef' *************** *** 271,279 **** d_readdir='define' d_readlink='undef' d_readv='undef' - d_recvmsg='undef' d_readv='undef' d_recvmsg='undef' d_rename='define' d_rewinddir='define' d_rmdir='define' --- 277,285 ---- d_readdir='define' d_readlink='undef' d_readv='undef' d_readv='undef' d_recvmsg='undef' + d_recvmsg='undef' d_rename='define' d_rewinddir='define' d_rmdir='define' *************** *** 305,312 **** d_setpgid='undef' d_setpgrp2='undef' d_setpgrp='undef' - d_setproctitle='undef' d_setprior='undef' d_setpwent='undef' d_setregid='undef' d_setresgid='undef' --- 311,318 ---- d_setpgid='undef' d_setpgrp2='undef' d_setpgrp='undef' d_setprior='undef' + d_setproctitle='undef' d_setpwent='undef' d_setregid='undef' d_setresgid='undef' *************** *** 328,336 **** --- 334,345 ---- d_sigprocmask='undef' d_sigsetjmp='undef' d_sockatmark='undef' + d_sockatmarkproto='undef' d_socket='define' d_sockpair='undef' d_socks5_init='undef' + d_sresgproto='undef' + d_sresuproto='undef' d_statblks='define' d_statfs='undef' d_statfsflags='define' *************** *** 337,344 **** d_statvfs='undef' d_stdio_cnt_lval='define' d_stdio_ptr_lval='define' - d_stdio_ptr_lval_sets_cnt='undef' d_stdio_ptr_lval_nochange_cnt='undef' d_stdio_stream_array='undef' d_stdiobase='undef' d_stdstdio='undef' --- 346,353 ---- d_statvfs='undef' d_stdio_cnt_lval='define' d_stdio_ptr_lval='define' d_stdio_ptr_lval_nochange_cnt='undef' + d_stdio_ptr_lval_sets_cnt='undef' d_stdio_stream_array='undef' d_stdiobase='undef' d_stdstdio='undef' *************** *** 347,362 **** d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' d_strtod='define' d_strtol='define' d_strtoq='undef' d_strtoul='define' - d_strtouq='undef' d_strtoull='undef' d_strxfrm='define' d_suidsafe='undef' d_symlink='undef' d_syscall='undef' d_sysconf='define' d_sysernlst='undef' d_syserrlst='undef' --- 356,373 ---- d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' + d_strftime='define' d_strtod='define' d_strtol='define' d_strtoq='undef' d_strtoul='define' d_strtoull='undef' + d_strtouq='undef' d_strxfrm='define' d_suidsafe='undef' d_symlink='undef' d_syscall='undef' + d_syscallproto='undef' d_sysconf='define' d_sysernlst='undef' d_syserrlst='undef' *************** *** 374,379 **** --- 385,391 ---- d_umask='undef' d_uname='undef' d_union_semun='undef' + d_usleepproto='undef' d_vendorlib='undef' d_vfork='undef' d_void_closedir='undef' *************** *** 405,411 **** eunicefix=':' exe_ext='' expr='expr' ! extensions='Data/Dumper Digest/MD5 Errno Fcntl File/Glob Filter::Util::Call IO MIME::Base64 Opcode PerlIO::Scalar Socket Storable Sys/Hostname attrs re' fflushNULL='undef' fflushall='define' find='' --- 417,423 ---- eunicefix=':' exe_ext='' expr='expr' ! extensions='Data/Dumper Digest/MD5 Errno Fcntl File/Glob Filter/Util/Call IO List/Util MIME/Base64 Opcode PerlIO/Scalar Socket Storable Sys/Hostname Time/Piece attrs re' fflushNULL='undef' fflushall='define' find='' *************** *** 441,446 **** --- 453,459 ---- i_iconv='undef' i_ieeefp='undef' i_inttypes='undef' + i_langinfo='undef' i_libutil='undef' i_limits='define' i_locale='undef' *************** *** 619,626 **** pr='' prefix='' prefixexp='' ! privlib='?:/perl/lib/5.7.1' ! privlibexp='?:/perl/lib/5.7.1' prototype='define' ptrsize='4' randbits='31' --- 632,639 ---- pr='' prefix='' prefixexp='' ! privlib='?:/perl/lib/5.7.2' ! privlibexp='?:/perl/lib/5.7.2' prototype='define' ptrsize='4' randbits='31' *************** *** 664,674 **** sig_num_init='0, 0' sig_size='1' signal_t='void' ! sitearch='?:/perl/lib/site_perl/5.7.1/epoc' ! sitearchexp='?:/perl/lib/site_perl/5.7.1/epoc' ! sitelib='?:/perl/lib/site_perl/5.7.1/' sitelib_stem='?:/perl/lib/site_perl' ! sitelibexp='?:/perl/lib/site_perl/5.7.1/' siteprefix='' siteprefixexp='' sizesize='4' --- 677,687 ---- sig_num_init='0, 0' sig_size='1' signal_t='void' ! sitearch='?:/perl/lib/site_perl/5.7.2/epoc' ! sitearchexp='?:/perl/lib/site_perl/5.7.2/epoc' ! sitelib='?:/perl/lib/site_perl/5.7.2/' sitelib_stem='?:/perl/lib/site_perl' ! sitelibexp='?:/perl/lib/site_perl/5.7.2/' siteprefix='' siteprefixexp='' sizesize='4' *************** *** 715,720 **** --- 728,734 ---- uniq='uniq' use64bitall='undef' use64bitint='undef' + usecrosscompile='define' usedl='undef' uselargefiles='undef' uselongdouble='undef' *************** *** 725,730 **** --- 739,745 ---- useopcode='' useperlio='undef' useposix='' + usereentrant='undef' usesfio='' useshrplib='' usesocks='undef' *************** *** 738,744 **** vendorlibexp='' vendorprefix='' vendorprefixexp='' ! version='5.7.1' versiononly='undef' vi='' voidflags='15' --- 753,759 ---- vendorlibexp='' vendorprefix='' vendorprefixexp='' ! version='5.7.2' versiononly='undef' vi='' voidflags='15' *************** *** 766,772 **** PERL_API_REVISION=5 PERL_API_VERSION=6 PERL_API_SUBVERSION=0 ! CONFIGDOTSH=true # Variables propagated from previous config.sh file. pp_sys_cflags='' epocish_cflags='ccflags="$cflags -xc++"' --- 781,787 ---- PERL_API_REVISION=5 PERL_API_VERSION=6 PERL_API_SUBVERSION=0 ! PERL_CONFIG_SH=true # Variables propagated from previous config.sh file. pp_sys_cflags='' epocish_cflags='ccflags="$cflags -xc++"' *************** *** 871,877 **** vendorlibexp='' vendorprefix='' vendorprefixexp='' ! version='5.7.1' vi='' voidflags='15' xlibpth='' --- 886,892 ---- vendorlibexp='' vendorprefix='' vendorprefixexp='' ! version='5.7.2' vi='' voidflags='15' xlibpth='' diff -c 'perl-5.7.1/epoc/epocish.h' 'perl-5.7.2/epoc/epocish.h' Index: ./epoc/epocish.h *** ./epoc/epocish.h Tue Mar 6 04:04:27 2001 --- ./epoc/epocish.h Mon Jul 9 17:09:50 2001 *************** *** 143,145 **** --- 143,148 ---- #define init_os_extras Perl_init_os_extras #define NO_ENVIRON_ARRAY + + #define ARG_MAX 4096 + diff -c 'perl-5.7.1/ext/B/B.pm' 'perl-5.7.2/ext/B/B.pm' Index: ./ext/B/B.pm *** ./ext/B/B.pm Thu Apr 5 21:28:14 2001 --- ./ext/B/B.pm Mon Jul 9 17:09:50 2001 *************** *** 66,72 **** # The regex below corresponds to the isCONTROLVAR macro # from toke.c ! $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^".chr(64 ^ ord($1))/e; return $name; } --- 66,77 ---- # The regex below corresponds to the isCONTROLVAR macro # from toke.c ! $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^". ! chr( utf8::unicode_to_native( 64 ^ ord($1) ))/e; ! ! # When we say unicode_to_native we really mean ascii_to_native, ! # which matters iff this is a non-ASCII platform (EBCDIC). ! return $name; } *************** *** 75,80 **** --- 80,89 ---- return (($self->FLAGS() & SVf_IVisUV()) ? $self->UVX : $self->IV); } + sub B::NULL::as_string() {""} + sub B::IV::as_string() {goto &B::IV::int_value} + sub B::PV::as_string() {goto &B::PV::PV} + my $debug; my $op_count = 0; my @parents = (); *************** *** 834,845 **** the description of C above for what the debugging flag does. ! =item walksymtable(SYMREF, METHOD, RECURSE) Walk the symbol table starting at SYMREF and call METHOD on each ! symbol visited. When the walk reached package symbols "Foo::" it ! invokes RECURSE and only recurses into the package if that sub ! returns true. =item svref_2object(SV) --- 843,866 ---- the description of C above for what the debugging flag does. ! =item walksymtable(SYMREF, METHOD, RECURSE, PREFIX) Walk the symbol table starting at SYMREF and call METHOD on each ! symbol (a B::GV object) visited. When the walk reaches package ! symbols (such as "Foo::") it invokes RECURSE, passing in the symbol ! name, and only recurses into the package if that sub returns true. ! ! PREFIX is the name of the SYMREF you're walking. ! ! For example... ! ! # Walk CGI's symbol table calling print_subs on each symbol. ! # Only recurse into CGI::Util:: ! walksymtable(\%CGI::, 'print_subs', sub { $_[0] eq 'CGI::Util::' }, ! 'CGI::'); ! ! print_subs() is a B::GV method you have declared. ! =item svref_2object(SV) diff -c /dev/null 'perl-5.7.2/ext/B/B.t' Index: ./ext/B/B.t *** ./ext/B/B.t Thu Jan 1 02:00:00 1970 --- ./ext/B/B.t Mon Jul 9 17:09:50 2001 *************** *** 0 **** --- 1,63 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } else { + @INC = '.'; + push @INC, '../lib'; + } + } + + $| = 1; + use warnings; + use strict; + use Config; + + print "1..2\n"; + + my $test = 1; + + sub ok { print "ok $test\n"; $test++ } + + use B; + + + package Testing::Symtable; + use vars qw($This @That %wibble $moo %moo); + my $not_a_sym = 'moo'; + + sub moo { 42 } + sub car { 23 } + + + package Testing::Symtable::Foo; + sub yarrow { "Hock" } + + package Testing::Symtable::Bar; + sub hock { "yarrow" } + + package main; + use vars qw(%Subs); + local %Subs = (); + B::walksymtable(\%Testing::Symtable::, 'find_syms', sub { $_[0] =~ /Foo/ }, + 'Testing::Symtable::'); + + sub B::GV::find_syms { + my($symbol) = @_; + + $main::Subs{$symbol->STASH->NAME . '::' . $symbol->NAME}++; + } + + my @syms = map { 'Testing::Symtable::'.$_ } qw(This That wibble moo car + BEGIN); + push @syms, "Testing::Symtable::Foo::yarrow"; + + # Make sure we hit all the expected symbols. + print "not " unless join('', sort @syms) eq join('', sort keys %Subs); + ok; + + # Make sure we only hit them each once. + print "not " unless !grep $_ != 1, values %Subs; + ok; diff -c 'perl-5.7.1/ext/B/B.xs' 'perl-5.7.2/ext/B/B.xs' Index: ./ext/B/B.xs *** ./ext/B/B.xs Thu Apr 5 06:53:18 2001 --- ./ext/B/B.xs Mon Jul 9 17:09:50 2001 *************** *** 667,673 **** #define PMOP_pmreplroot(o) o->op_pmreplroot #define PMOP_pmreplstart(o) o->op_pmreplstart #define PMOP_pmnext(o) o->op_pmnext ! #define PMOP_pmregexp(o) o->op_pmregexp #define PMOP_pmflags(o) o->op_pmflags #define PMOP_pmpermflags(o) o->op_pmpermflags --- 667,673 ---- #define PMOP_pmreplroot(o) o->op_pmreplroot #define PMOP_pmreplstart(o) o->op_pmreplstart #define PMOP_pmnext(o) o->op_pmnext ! #define PMOP_pmregexp(o) PM_GETRE(o) #define PMOP_pmflags(o) o->op_pmflags #define PMOP_pmpermflags(o) o->op_pmpermflags *************** *** 712,718 **** REGEXP * rx = NO_INIT CODE: ST(0) = sv_newmortal(); ! rx = o->op_pmregexp; if (rx) sv_setpvn(ST(0), rx->precomp, rx->prelen); --- 712,718 ---- REGEXP * rx = NO_INIT CODE: ST(0) = sv_newmortal(); ! rx = PM_GETRE(o); if (rx) sv_setpvn(ST(0), rx->precomp, rx->prelen); *************** *** 756,766 **** B::PVOP o CODE: /* ! * OP_TRANS uses op_pv to point to a table of 256 shorts * whereas other PVOPs point to a null terminated string. */ ! ST(0) = sv_2mortal(newSVpv(o->op_pv, (o->op_type == OP_TRANS) ? ! 256 * sizeof(short) : 0)); #define LOOP_redoop(o) o->op_redoop #define LOOP_nextop(o) o->op_nextop --- 756,777 ---- B::PVOP o CODE: /* ! * OP_TRANS uses op_pv to point to a table of 256 or >=258 shorts * whereas other PVOPs point to a null terminated string. */ ! if (o->op_type == OP_TRANS && ! (o->op_private & OPpTRANS_COMPLEMENT) && ! !(o->op_private & OPpTRANS_DELETE)) ! { ! short* tbl = (short*)o->op_pv; ! short entries = 257 + tbl[256]; ! ST(0) = sv_2mortal(newSVpv(o->op_pv, entries * sizeof(short))); ! } ! else if (o->op_type == OP_TRANS) { ! ST(0) = sv_2mortal(newSVpv(o->op_pv, 256 * sizeof(short))); ! } ! else ! ST(0) = sv_2mortal(newSVpv(o->op_pv, 0)); #define LOOP_redoop(o) o->op_redoop #define LOOP_nextop(o) o->op_nextop *************** *** 911,916 **** --- 922,928 ---- CODE: ST(0) = sv_newmortal(); sv_setpvn(ST(0), SvPVX(sv), SvCUR(sv)); + SvFLAGS(ST(0)) |= SvUTF8(sv); STRLEN SvLEN(sv) diff -c 'perl-5.7.1/ext/B/B/Assembler.pm' 'perl-5.7.2/ext/B/B/Assembler.pm' Index: ./ext/B/B/Assembler.pm *** ./ext/B/B/Assembler.pm Tue Mar 6 04:04:28 2001 --- ./ext/B/B/Assembler.pm Mon Jul 9 17:09:50 2001 *************** *** 55,61 **** sub B::Asmdata::PUT_U16 { pack("S", $_[0]) } sub B::Asmdata::PUT_U32 { pack("L", $_[0]) } sub B::Asmdata::PUT_I32 { pack("L", $_[0]) } ! sub B::Asmdata::PUT_NV { sprintf("%s\0", $_[0]) } # "%lf" looses precision and pack('d',...) # may not even be portable between compilers sub B::Asmdata::PUT_objindex { pack("L", $_[0]) } # could allow names here sub B::Asmdata::PUT_svindex { &B::Asmdata::PUT_objindex } --- 55,61 ---- sub B::Asmdata::PUT_U16 { pack("S", $_[0]) } sub B::Asmdata::PUT_U32 { pack("L", $_[0]) } sub B::Asmdata::PUT_I32 { pack("L", $_[0]) } ! sub B::Asmdata::PUT_NV { sprintf("%s\0", $_[0]) } # "%lf" loses precision and pack('d',...) # may not even be portable between compilers sub B::Asmdata::PUT_objindex { pack("L", $_[0]) } # could allow names here sub B::Asmdata::PUT_svindex { &B::Asmdata::PUT_objindex } diff -c 'perl-5.7.1/ext/B/B/C.pm' 'perl-5.7.2/ext/B/B/C.pm' Index: ./ext/B/B/C.pm *** ./ext/B/B/C.pm Thu Apr 5 06:53:26 2001 --- ./ext/B/B/C.pm Mon Jul 9 17:09:50 2001 *************** *** 362,368 **** if (defined($re)) { my $resym = sprintf("re%d", $re_index++); $decl->add(sprintf("static char *$resym = %s;", cstring($re))); ! $init->add(sprintf("$pm.op_pmregexp = pregcomp($resym, $resym + %u, &$pm);", length($re))); } if ($gvsym) { --- 362,368 ---- if (defined($re)) { my $resym = sprintf("re%d", $re_index++); $decl->add(sprintf("static char *$resym = %s;", cstring($re))); ! $init->add(sprintf("PM_SETRE(&$pm,pregcomp($resym, $resym + %u, &$pm));", length($re))); } if ($gvsym) { diff -c 'perl-5.7.1/ext/B/B/Concise.pm' 'perl-5.7.2/ext/B/B/Concise.pm' Index: ./ext/B/B/Concise.pm *** ./ext/B/B/Concise.pm Thu Apr 5 21:21:50 2001 --- ./ext/B/B/Concise.pm Mon Jul 9 17:09:50 2001 *************** *** 3,10 **** # This program is free software; you can redistribute and/or modify it # under the same terms as Perl itself. - our $VERSION = "0.51"; use strict; use B qw(class ppname main_start main_root main_cv cstring svref_2object SVf_IOK SVf_NOK SVf_POK OPf_KIDS); --- 3,17 ---- # This program is free software; you can redistribute and/or modify it # under the same terms as Perl itself. use strict; + use warnings; + + use Exporter (); + + our $VERSION = "0.52"; + our @ISA = qw(Exporter); + our @EXPORT_OK = qw(set_style add_callback); + use B qw(class ppname main_start main_root main_cv cstring svref_2object SVf_IOK SVf_NOK SVf_POK OPf_KIDS); *************** *** 38,44 **** --- 45,60 ---- my($format, $gotofmt, $treefmt); my $curcv; my($seq_base, $cop_seq_base); + my @callbacks; + sub set_style { + ($format, $gotofmt, $treefmt) = @_; + } + + sub add_callback { + push @callbacks, @_; + } + sub concise_cv { my ($order, $cvref) = @_; my $cv = svref_2object($cvref); *************** *** 68,78 **** my $order = "basic"; sub compile { my @options = grep(/^-/, @_); my @args = grep(!/^-/, @_); my $do_main = 0; - ($format, $gotofmt, $treefmt) = @{$style{"concise"}}; for my $o (@options) { if ($o eq "-basic") { $order = "basic"; --- 84,95 ---- my $order = "basic"; + set_style(@{$style{concise}}); + sub compile { my @options = grep(/^-/, @_); my @args = grep(!/^-/, @_); my $do_main = 0; for my $o (@options) { if ($o eq "-basic") { $order = "basic"; *************** *** 97,103 **** } elsif ($o eq "-littleendian") { $big_endian = 0; } elsif (exists $style{substr($o, 1)}) { ! ($format, $gotofmt, $treefmt) = @{$style{substr($o, 1)}}; } else { warn "Option $o unrecognized"; } --- 114,120 ---- } elsif ($o eq "-littleendian") { $big_endian = 0; } elsif (exists $style{substr($o, 1)}) { ! set_style(@{$style{substr($o, 1)}}); } else { warn "Option $o unrecognized"; } *************** *** 136,141 **** --- 153,159 ---- 'LISTOP' => "@", 'PMOP' => "/", 'SVOP' => "\$", 'GVOP' => "*", 'PVOP' => '"', 'LOOP' => "{", 'COP' => ";"); + no warnings 'qw'; # "Possible attempt to put comments..." my @linenoise = qw'# () sc ( @? 1 $* gv *{ m$ m@ m% m? p/ *$ $ $# & a& pt \\ s\\ rf bl ` *? <> ?? ?/ r/ c/ // qr s/ /c y/ = @= C sC Cp sp df un BM po +1 +I *************** *** 283,289 **** "link", "symlink", "mkdir", "rmdir", "wait", "waitpid", "system", "exec", "kill", "getppid", "getpgrp", "setpgrp", "getpriority", "setpriority", "time", "sleep"); ! @{$priv{"const"}}{8,16,32,64,128} = ("STRICT","ENTERED", "$[", "BARE", "WARN"); $priv{"flip"}{64} = $priv{"flop"}{64} = "LINENUM"; $priv{"list"}{64} = "GUESSED"; $priv{"delete"}{64} = "SLICE"; --- 301,307 ---- "link", "symlink", "mkdir", "rmdir", "wait", "waitpid", "system", "exec", "kill", "getppid", "getpgrp", "setpgrp", "getpriority", "setpriority", "time", "sleep"); ! @{$priv{"const"}}{8,16,32,64,128} = ("STRICT","ENTERED", '$[', "BARE", "WARN"); $priv{"flip"}{64} = $priv{"flop"}{64} = "LINENUM"; $priv{"list"}{64} = "GUESSED"; $priv{"delete"}{64} = "SLICE"; *************** *** 339,348 **** $h{svclass} = $h{svaddr} = $h{svval} = ""; if ($h{class} eq "PMOP") { my $precomp = $op->precomp; ! $precomp = defined($precomp) ? "/$precomp/" : ""; my $pmreplroot = $op->pmreplroot; ! my ($pmreplroot, $pmreplstart); ! if ($ {$pmreplroot = $op->pmreplroot} && $pmreplroot->isa("B::GV")) { # with C<@stash_array = split(/pat/, str);>, # *stash_array is stored in pmreplroot. $h{arg} = "($precomp => \@" . $pmreplroot->NAME . ")"; --- 357,375 ---- $h{svclass} = $h{svaddr} = $h{svval} = ""; if ($h{class} eq "PMOP") { my $precomp = $op->precomp; ! if (defined $precomp) { ! # Escape literal control sequences ! for ($precomp) { ! s/\t/\\t/g; s/\n/\\n/g; s/\r/\\r/g; ! # How can we do the below portably? ! #s/([\0-\037\177-\377])/"\\".sprintf("%03o", ord($1))/eg; ! } ! $precomp = "/$precomp/"; ! } ! else { $precomp = ""; } my $pmreplroot = $op->pmreplroot; ! my $pmreplstart; ! if ($$pmreplroot && $pmreplroot->isa("B::GV")) { # with C<@stash_array = split(/pat/, str);>, # *stash_array is stored in pmreplroot. $h{arg} = "($precomp => \@" . $pmreplroot->NAME . ")"; *************** *** 423,428 **** --- 450,456 ---- $h{label} = $labels{$op->seq}; $h{typenum} = $op->type; $h{noise} = $linenoise[$op->type]; + $_->(\%h, $op, \$format, \$level) for @callbacks; return fmt_line(\%h, $format, $level); } *************** *** 488,493 **** --- 516,523 ---- perl -MO=Concise[,OPTIONS] foo.pl + use B::Concise qw(set_style add_callback); + =head1 DESCRIPTION This compiler backend prints the internal OPs of a Perl program's syntax *************** *** 815,820 **** --- 845,887 ---- " PVOP An OP with a string { LOOP An OP that holds pointers for a loop ; COP An OP that marks the start of a statement + + =head1 Using B::Concise outside of the O framework + + It is possible to extend B by using it outside of the B + framework and providing new styles and new variables. + + use B::Concise qw(set_style add_callback); + set_style($format, $gotofmt, $treefmt); + add_callback + ( + sub + { + my ($h, $op, $level, $format) = @_; + $h->{variable} = some_func($op); + } + ); + B::Concise::compile(@options)->(); + + You can specify a style by calling the B subroutine. If you + have a new variable in your style, or you want to change the value of an + existing variable, you will need to add a callback to specify the value + for that variable. + + This is done by calling B passing references to any + callback subroutines. The subroutines are called in the same order as + they are added. Each subroutine is passed four parameters. These are a + reference to a hash, the keys of which are the names of the variables + and the values of which are their values, the op, the level and the + format. + + To define your own variables, simply add them to the hash, or change + existing values if you need to. The level and format are passed in as + references to scalars, but it is unlikely that they will need to be + changed or even used. + + To see the output, call the subroutine returned by B in the + same way that B does. =head1 AUTHOR diff -c 'perl-5.7.1/ext/B/B/Debug.pm' 'perl-5.7.2/ext/B/B/Debug.pm' Index: ./ext/B/B/Debug.pm *** ./ext/B/B/Debug.pm Thu Apr 5 21:21:50 2001 --- ./ext/B/B/Debug.pm Mon Jul 9 17:09:50 2001 *************** *** 90,96 **** sub B::PVOP::debug { my ($op) = @_; $op->B::OP::debug(); ! printf "\top_pv\t\t0x%x\n", $op->pv; } sub B::PADOP::debug { --- 90,96 ---- sub B::PVOP::debug { my ($op) = @_; $op->B::OP::debug(); ! printf "\top_pv\t\t%s\n", cstring($op->pv); } sub B::PADOP::debug { *************** *** 125,130 **** --- 125,139 ---- REFCNT %d FLAGS 0x%x EOT + } + + sub B::RV::debug { + my ($rv) = @_; + B::SV::debug($rv); + printf <<'EOT', ${$rv->RV}; + RV 0x%x + EOT + $rv->RV->debug; } sub B::PV::debug { diff -c 'perl-5.7.1/ext/B/B/Deparse.pm' 'perl-5.7.2/ext/B/B/Deparse.pm' Index: ./ext/B/B/Deparse.pm *** ./ext/B/B/Deparse.pm Fri Apr 6 01:13:49 2001 --- ./ext/B/B/Deparse.pm Mon Jul 9 17:09:51 2001 *************** *** 8,24 **** package B::Deparse; use Carp 'cluck', 'croak'; ! use B qw(class main_root main_start main_cv svref_2object opnumber OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST ! OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL ! OPpLVAL_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY ! SVf_IOK SVf_NOK SVf_ROK SVf_POK CVf_METHOD CVf_LOCKED CVf_LVALUE ! PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED); ! $VERSION = 0.60; use strict; # Changes between 0.50 and 0.51: # - fixed nulled leave with live enter in sort { } --- 8,27 ---- package B::Deparse; use Carp 'cluck', 'croak'; ! use B qw(class main_root main_start main_cv svref_2object opnumber cstring OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST ! OPf_KIDS OPf_REF OPf_STACKED OPf_SPECIAL OPf_MOD ! OPpLVAL_INTRO OPpOUR_INTRO OPpENTERSUB_AMPER OPpSLICE OPpCONST_BARE OPpTRANS_SQUASH OPpTRANS_DELETE OPpTRANS_COMPLEMENT OPpTARGET_MY ! OPpCONST_ARYBASE OPpEXISTS_SUB OPpSORT_NUMERIC OPpSORT_INTEGER ! OPpSORT_REVERSE ! SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR CVf_METHOD CVf_LOCKED CVf_LVALUE ! PMf_KEEP PMf_GLOBAL PMf_CONTINUE PMf_EVAL PMf_ONCE PMf_SKIPWHITE PMf_MULTILINE PMf_SINGLELINE PMf_FOLD PMf_EXTENDED); ! $VERSION = 0.61; use strict; + use warnings (); # Changes between 0.50 and 0.51: # - fixed nulled leave with live enter in sort { } *************** *** 89,105 **** # - separate recognition of constant subs # - rewrote continue block handling, now recoginizing for loops # - added more control of expanding control structures # Todo: # - finish tr/// changes # - add option for even more parens (generalize \&foo change) - # - {} around variables in strings ("${var}letters") - # base/lex.t 25-27 - # comp/term.t 11 # - left/right context - # - recognize `use utf8', `use integer', etc # - treat top-level block specially for incremental output - # - interpret high bit chars in string as utf8 \x{...} (when?) # - copy comments (look at real text with $^P?) # - avoid semis in one-statement blocks # - associativity of &&=, ||=, ?: --- 92,118 ---- # - separate recognition of constant subs # - rewrote continue block handling, now recoginizing for loops # - added more control of expanding control structures + # Changes between 0.60 and 0.61 (mostly by Robin Houston) + # - many bug-fixes + # - support for pragmas and 'use' + # - support for the little-used $[ variable + # - support for __DATA__ sections + # - UTF8 support + # - BEGIN, CHECK, INIT and END blocks + # - scoping of subroutine declarations fixed + # - compile-time output from the input program can be suppressed, so that the + # output is just the deparsed code. (a change to O.pm in fact) + # - our() declarations + # - *all* the known bugs are now listed in the BUGS section + # - comprehensive test mechanism (TEST -deparse) # Todo: + # (See also BUGS section at the end of this file) + # # - finish tr/// changes # - add option for even more parens (generalize \&foo change) # - left/right context # - treat top-level block specially for incremental output # - copy comments (look at real text with $^P?) # - avoid semis in one-statement blocks # - associativity of &&=, ||=, ?: *************** *** 109,125 **** # - more style options: brace style, hex vs. octal, quotes, ... # - print big ints as hex/octal instead of decimal (heuristic?) # - handle `my $x if 0'? - # - include values of variables (e.g. set in BEGIN) # - coordinate with Data::Dumper (both directions? see previous) # - version using op_next instead of op_first/sibling? # - avoid string copies (pass arrays, one big join?) - # - auto-apply `-u'? - # - -uPackage:: descend recursively? # - here-docs? - # - ? # Tests that will always fail: ! # comp/redef.t -- all (redefinition happens at compile time) # Object fields (were globals): # --- 122,134 ---- # - more style options: brace style, hex vs. octal, quotes, ... # - print big ints as hex/octal instead of decimal (heuristic?) # - handle `my $x if 0'? # - coordinate with Data::Dumper (both directions? see previous) # - version using op_next instead of op_first/sibling? # - avoid string copies (pass arrays, one big join?) # - here-docs? # Tests that will always fail: ! # (see t/TEST for the short list) # Object fields (were globals): # *************** *** 134,144 **** # curcv: # CV for current sub (or main program) being deparsed # # curstash: # name of the current package for deparsed code # # subs_todo: ! # array of [cop_seq, GV, is_format?] for subs and formats we still # want to deparse # # protos_todo: --- 143,161 ---- # curcv: # CV for current sub (or main program) being deparsed # + # curcvlex: + # Cached hash of lexical variables for curcv: keys are names, + # each value is an array of pairs, indicating the cop_seq of scopes + # in which a var of that name is valid. + # + # curcop: + # COP for statement being deparsed + # # curstash: # name of the current package for deparsed code # # subs_todo: ! # array of [cop_seq, CV, is_format?] for subs and formats we still # want to deparse # # protos_todo: *************** *** 148,153 **** --- 165,174 ---- # keys are addresses of GVs for subs and formats we've already # deparsed (or at least put into subs_todo) # + # subs_declared + # keys are names of subs for which we've printed declarations. + # That means we can omit parentheses from the arguments. + # # parens: -p # linenums: -l # unquote: -q *************** *** 200,205 **** --- 221,233 ---- # 1 statement modifiers # 0 statement level + # Also, lineseq may pass a fourth parameter to the pp_ routines: + # if present, the fourth parameter is passed on by deparse. + # + # If present and true, it means that the op exists directly as + # part of a lineseq. Currently it's only used by scopeop to + # decide whether its results need to be enclosed in a do {} block. + # Nonprinting characters with special meaning: # \cS - steal parens (see maybe_parens_unop) # \n - newline and indent *************** *** 215,221 **** sub todo { my $self = shift; ! my($gv, $cv, $is_form) = @_; my $seq; if (!null($cv->START) and is_state($cv->START)) { $seq = $cv->START->cop_seq; --- 243,250 ---- sub todo { my $self = shift; ! my($cv, $is_form) = @_; ! return unless ($cv->FILE eq $0 || exists $self->{files}{$cv->FILE}); my $seq; if (!null($cv->START) and is_state($cv->START)) { $seq = $cv->START->cop_seq; *************** *** 222,310 **** } else { $seq = 0; } ! push @{$self->{'subs_todo'}}, [$seq, $gv, $is_form]; } sub next_todo { my $self = shift; my $ent = shift @{$self->{'subs_todo'}}; ! my $name = $self->gv_name($ent->[1]); if ($ent->[2]) { return "format $name =\n" ! . $self->deparse_format($ent->[1]->FORM). "\n"; } else { ! return "sub $name " . $self->deparse_sub($ent->[1]->CV); } } ! sub walk_tree { ! my($op, $sub) = @_; ! $sub->($op); ! if ($op->flags & OPf_KIDS) { ! my $kid; ! for ($kid = $op->first; not null $kid; $kid = $kid->sibling) { ! walk_tree($kid, $sub); ! } } ! } ! sub walk_sub { ! my $self = shift; ! my $cv = shift; ! my $op = $cv->ROOT; ! $op = shift if null $op; ! return if !$op or null $op; ! walk_tree($op, sub { ! my $op = shift; ! if ($op->name eq "gv") { ! my $gv = $self->gv_or_padgv($op); ! if ($op->next->name eq "entersub") { ! return if $self->{'subs_done'}{$$gv}++; ! return if class($gv->CV) eq "SPECIAL"; ! $self->todo($gv, $gv->CV, 0); ! $self->walk_sub($gv->CV); ! } elsif ($op->next->name eq "enterwrite" ! or ($op->next->name eq "rv2gv" ! and $op->next->next->name eq "enterwrite")) { ! return if $self->{'forms_done'}{$$gv}++; ! return if class($gv->FORM) eq "SPECIAL"; ! $self->todo($gv, $gv->FORM, 1); ! $self->walk_sub($gv->FORM); ! } ! } ! }); } sub stash_subs { ! my $self = shift; ! my $pack = shift; ! my(%stash, @ret); ! { no strict 'refs'; %stash = svref_2object(\%{$pack . "::"})->ARRAY } ! if ($pack eq "main") { ! $pack = ""; ! } else { ! $pack = $pack . "::"; } ! my($key, $val); ! while (($key, $val) = each %stash) { my $class = class($val); if ($class eq "PV") { ! # Just a prototype push @{$self->{'protos_todo'}}, [$pack . $key, $val->PV]; } elsif ($class eq "IV") { ! # Just a name push @{$self->{'protos_todo'}}, [$pack . $key, undef]; } elsif ($class eq "GV") { ! if (class($val->CV) ne "SPECIAL") { next if $self->{'subs_done'}{$$val}++; ! $self->todo($val, $val->CV, 0); ! $self->walk_sub($val->CV); } ! if (class($val->FORM) ne "SPECIAL") { next if $self->{'forms_done'}{$$val}++; ! $self->todo($val, $val->FORM, 1); ! $self->walk_sub($val->FORM); } } } } --- 251,425 ---- } else { $seq = 0; } ! push @{$self->{'subs_todo'}}, [$seq, $cv, $is_form]; } sub next_todo { my $self = shift; my $ent = shift @{$self->{'subs_todo'}}; ! my $cv = $ent->[1]; ! my $gv = $cv->GV; ! my $name = $self->gv_name($gv); if ($ent->[2]) { return "format $name =\n" ! . $self->deparse_format($ent->[1]). "\n"; } else { ! $self->{'subs_declared'}{$name} = 1; ! if ($name eq "BEGIN") { ! my $use_dec = $self->begin_is_use($cv); ! if (defined ($use_dec)) { ! return () if 0 == length($use_dec); ! return $use_dec; ! } ! } ! my $l = ''; ! if ($self->{'linenums'}) { ! my $line = $gv->LINE; ! my $file = $gv->FILE; ! $l = "\n\f#line $line \"$file\"\n"; ! } ! return "${l}sub $name " . $self->deparse_sub($cv); } } ! # Return a "use" declaration for this BEGIN block, if appropriate ! sub begin_is_use { ! my ($self, $cv) = @_; ! my $root = $cv->ROOT; ! local @$self{qw'curcv curcvlex'} = ($cv); ! #require B::Debug; ! #B::walkoptree($cv->ROOT, "debug"); ! my $lineseq = $root->first; ! return if $lineseq->name ne "lineseq"; ! ! my $req_op = $lineseq->first->sibling; ! return if $req_op->name ne "require"; ! ! my $module; ! if ($req_op->first->private & OPpCONST_BARE) { ! # Actually it should always be a bareword ! $module = $self->const_sv($req_op->first)->PV; ! $module =~ s[/][::]g; ! $module =~ s/.pm$//; } ! else { ! $module = const($self->const_sv($req_op->first)); ! } ! my $version; ! my $version_op = $req_op->sibling; ! return if class($version_op) eq "NULL"; ! if ($version_op->name eq "lineseq") { ! # We have a version parameter; skip nextstate & pushmark ! my $constop = $version_op->first->next->next; ! ! return unless $self->const_sv($constop)->PV eq $module; ! $constop = $constop->sibling; ! $version = $self->const_sv($constop)->int_value; ! $constop = $constop->sibling; ! return if $constop->name ne "method_named"; ! return if $self->const_sv($constop)->PV ne "VERSION"; ! } ! ! $lineseq = $version_op->sibling; ! return if $lineseq->name ne "lineseq"; ! my $entersub = $lineseq->first->sibling; ! if ($entersub->name eq "stub") { ! return "use $module $version ();\n" if defined $version; ! return "use $module ();\n"; ! } ! return if $entersub->name ne "entersub"; ! ! # See if there are import arguments ! my $args = ''; ! ! my $svop = $entersub->first->sibling; # Skip over pushmark ! return unless $self->const_sv($svop)->PV eq $module; ! ! # Pull out the arguments ! for ($svop=$svop->sibling; $svop->name ne "method_named"; ! $svop = $svop->sibling) { ! $args .= ", " if length($args); ! $args .= $self->deparse($svop, 6); ! } ! ! my $use = 'use'; ! my $method_named = $svop; ! return if $method_named->name ne "method_named"; ! my $method_name = $self->const_sv($method_named)->PV; ! ! if ($method_name eq "unimport") { ! $use = 'no'; ! } ! ! # Certain pragmas are dealt with using hint bits, ! # so we ignore them here ! if ($module eq 'strict' || $module eq 'integer' ! || $module eq 'bytes' || $module eq 'warnings') { ! return ""; ! } ! ! if (defined $version && length $args) { ! return "$use $module $version ($args);\n"; ! } elsif (defined $version) { ! return "$use $module $version;\n"; ! } elsif (length $args) { ! return "$use $module ($args);\n"; ! } else { ! return "$use $module;\n"; ! } } sub stash_subs { ! my ($self, $pack) = @_; ! my (@ret, $stash); ! if (!defined $pack) { ! $pack = ''; ! $stash = \%::; } ! else { ! $pack =~ s/(::)?$/::/; ! no strict 'refs'; ! $stash = \%$pack; ! } ! my %stash = svref_2object($stash)->ARRAY; ! while (my ($key, $val) = each %stash) { ! next if $key eq 'main::'; # avoid infinite recursion my $class = class($val); if ($class eq "PV") { ! # Just a prototype. As an ugly but fairly effective way ! # to find out if it belongs here is to see if the AUTOLOAD ! # (if any) for the stash was defined in one of our files. ! my $A = $stash{"AUTOLOAD"}; ! if (defined ($A) && class($A) eq "GV" && defined($A->CV) ! && class($A->CV) eq "CV") { ! my $AF = $A->FILE; ! next unless $AF eq $0 || exists $self->{'files'}{$AF}; ! } push @{$self->{'protos_todo'}}, [$pack . $key, $val->PV]; } elsif ($class eq "IV") { ! # Just a name. As above. ! my $A = $stash{"AUTOLOAD"}; ! if (defined ($A) && class($A) eq "GV" && defined($A->CV) ! && class($A->CV) eq "CV") { ! my $AF = $A->FILE; ! next unless $AF eq $0 || exists $self->{'files'}{$AF}; ! } push @{$self->{'protos_todo'}}, [$pack . $key, undef]; } elsif ($class eq "GV") { ! if (class(my $cv = $val->CV) ne "SPECIAL") { next if $self->{'subs_done'}{$$val}++; ! next if $$val != ${$cv->GV}; # Ignore imposters ! $self->todo($cv, 0); } ! if (class(my $cv = $val->FORM) ne "SPECIAL") { next if $self->{'forms_done'}{$$val}++; ! next if $$val != ${$cv->GV}; # Ignore imposters ! $self->todo($cv, 1); } + if (class($val->HV) ne "SPECIAL" && $key =~ /::$/) { + $self->stash_subs($pack . $key); + } } } } *************** *** 346,352 **** --- 461,469 ---- my $class = shift; my $self = bless {}, $class; $self->{'subs_todo'} = []; + $self->{'files'} = {}; $self->{'curstash'} = "main"; + $self->{'curcop'} = undef; $self->{'cuddle'} = "\n"; $self->{'indent_size'} = 4; $self->{'use_tabs'} = 0; *************** *** 355,363 **** $self->{'linenums'} = 0; $self->{'parens'} = 0; $self->{'ex_const'} = "'???'"; while (my $arg = shift @_) { ! if (substr($arg, 0, 2) eq "-u") { ! $self->stash_subs(substr($arg, 2)); } elsif ($arg eq "-p") { $self->{'parens'} = 1; } elsif ($arg eq "-l") { --- 472,486 ---- $self->{'linenums'} = 0; $self->{'parens'} = 0; $self->{'ex_const'} = "'???'"; + + $self->{'ambient_arybase'} = 0; + $self->{'ambient_warnings'} = undef; # Assume no lexical warnings + $self->{'ambient_hints'} = 0; + $self->init(); + while (my $arg = shift @_) { ! if ($arg =~ /^-f(.*)/) { ! $self->{'files'}{$1} = 1; } elsif ($arg eq "-p") { $self->{'parens'} = 1; } elsif ($arg eq "-l") { *************** *** 373,385 **** return $self; } sub compile { my(@args) = @_; return sub { my $self = B::Deparse->new(@args); ! $self->stash_subs("main"); $self->{'curcv'} = main_cv; ! $self->walk_sub(main_cv, main_start); print $self->print_protos; @{$self->{'subs_todo'}} = sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}}; --- 496,541 ---- return $self; } + { + # Mask out the bits that L uses + my $WARN_MASK; + BEGIN { + $WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all}; + } + sub WARN_MASK () { + return $WARN_MASK; + } + } + + # Initialise the contextual information, either from + # defaults provided with the ambient_pragmas method, + # or from perl's own defaults otherwise. + sub init { + my $self = shift; + + $self->{'arybase'} = $self->{'ambient_arybase'}; + $self->{'warnings'} = defined ($self->{'ambient_warnings'}) + ? $self->{'ambient_warnings'} & WARN_MASK + : undef; + $self->{'hints'} = $self->{'ambient_hints'} & 0xFF; + + # also a convenient place to clear out subs_declared + delete $self->{'subs_declared'}; + } + sub compile { my(@args) = @_; return sub { my $self = B::Deparse->new(@args); ! my @BEGINs = B::begin_av->isa("B::AV") ? B::begin_av->ARRAY : (); ! my @INITs = B::init_av->isa("B::AV") ? B::init_av->ARRAY : (); ! my @ENDs = B::end_av->isa("B::AV") ? B::end_av->ARRAY : (); ! for my $block (@BEGINs, @INITs, @ENDs) { ! $self->todo($block, 0); ! } ! $self->stash_subs(); $self->{'curcv'} = main_cv; ! $self->{'curcvlex'} = undef; print $self->print_protos; @{$self->{'subs_todo'}} = sort {$a->[0] <=> $b->[0]} @{$self->{'subs_todo'}}; *************** *** 390,395 **** --- 546,558 ---- push @text, $self->next_todo; } print $self->indent(join("", @text)), "\n" if @text; + + # Print __DATA__ section, if necessary + no strict 'refs'; + if (defined *{$self->{'curstash'}."::DATA"}{IO}) { + print "__DATA__\n"; + print readline(*{$self->{'curstash'}."::DATA"}); + } } } *************** *** 397,412 **** my $self = shift; my $sub = shift; croak "Usage: ->coderef2text(CODEREF)" unless ref($sub) eq "CODE"; return $self->indent($self->deparse_sub(svref_2object($sub))); } sub deparse { my $self = shift; ! my($op, $cx) = @_; ! # cluck if class($op) eq "NULL"; ! # cluck unless $op; ! # return $self->$ {\("pp_" . $op->name)}($op, $cx); my $meth = "pp_" . $op->name; return $self->$meth($op, $cx); } --- 560,684 ---- my $self = shift; my $sub = shift; croak "Usage: ->coderef2text(CODEREF)" unless ref($sub) eq "CODE"; + + $self->init(); return $self->indent($self->deparse_sub(svref_2object($sub))); } + sub ambient_pragmas { + my $self = shift; + my ($arybase, $hint_bits, $warning_bits) = (0, 0); + + while (@_ > 1) { + my $name = shift(); + my $val = shift(); + + if ($name eq 'strict') { + require strict; + + if ($val eq 'none') { + $hint_bits &= ~strict::bits(qw/refs subs vars/); + next(); + } + + my @names; + if ($val eq "all") { + @names = qw/refs subs vars/; + } + elsif (ref $val) { + @names = @$val; + } + else { + @names = split' ', $val; + } + $hint_bits |= strict::bits(@names); + } + + elsif ($name eq '$[') { + $arybase = $val; + } + + elsif ($name eq 'integer' + || $name eq 'bytes' + || $name eq 'utf8') { + require "$name.pm"; + if ($val) { + $hint_bits |= ${$::{"${name}::"}{"hint_bits"}}; + } + else { + $hint_bits &= ~${$::{"${name}::"}{"hint_bits"}}; + } + } + + elsif ($name eq 're') { + require re; + if ($val eq 'none') { + $hint_bits &= ~re::bits(qw/taint eval/); + next(); + } + + my @names; + if ($val eq 'all') { + @names = qw/taint eval/; + } + elsif (ref $val) { + @names = @$val; + } + else { + @names = split' ',$val; + } + $hint_bits |= re::bits(@names); + } + + elsif ($name eq 'warnings') { + if ($val eq 'none') { + $warning_bits = $warnings::NONE; + next(); + } + + my @names; + if (ref $val) { + @names = @$val; + } + else { + @names = split/\s+/, $val; + } + + $warning_bits = $warnings::NONE if !defined ($warning_bits); + $warning_bits |= warnings::bits(@names); + } + + elsif ($name eq 'warning_bits') { + $warning_bits = $val; + } + + elsif ($name eq 'hint_bits') { + $hint_bits = $val; + } + + else { + croak "Unknown pragma type: $name"; + } + } + if (@_) { + croak "The ambient_pragmas method expects an even number of args"; + } + + $self->{'ambient_arybase'} = $arybase; + $self->{'ambient_warnings'} = $warning_bits; + $self->{'ambient_hints'} = $hint_bits; + } + sub deparse { my $self = shift; ! my($op, $cx, $flags) = @_; ! ! Carp::confess("Null op in deparse") if !defined($op) ! || class($op) eq "NULL"; my $meth = "pp_" . $op->name; + if (is_scope($op)) { + return $self->$meth($op, $cx, $flags); + } return $self->$meth($op, $cx); } *************** *** 442,447 **** --- 714,722 ---- my $self = shift; my $cv = shift; my $proto = ""; + Carp::confess("NULL in deparse_sub") if !defined($cv) || $cv->isa("B::NULL"); + Carp::confess("SPECIAL in deparse_sub") if $cv->isa("B::SPECIAL"); + local $self->{'curcop'} = $self->{'curcop'}; if ($cv->FLAGS & SVf_POK) { $proto = "(". $cv->PV . ") "; } *************** *** 453,471 **** } local($self->{'curcv'}) = $cv; ! local($self->{'curstash'}) = $self->{'curstash'}; if (not null $cv->ROOT) { ! # skip leavesub ! return $proto . "{\n\t" . ! $self->deparse($cv->ROOT->first, 0) . "\n\b}\n"; } ! my $sv = $cv->const_sv; ! if ($$sv) { ! # uh-oh. inlinable sub... format it differently ! return $proto . "{ " . const($sv) . " }\n"; ! } else { # XSUB? ! return $proto . "{}\n"; } } sub deparse_format { --- 728,765 ---- } local($self->{'curcv'}) = $cv; ! local($self->{'curcvlex'}); ! local(@$self{qw'curstash warnings hints'}) ! = @$self{qw'curstash warnings hints'}; ! my $body; if (not null $cv->ROOT) { ! my $lineseq = $cv->ROOT->first; ! if ($lineseq->name eq "lineseq") { ! my @ops; ! for(my$o=$lineseq->first; $$o; $o=$o->sibling) { ! push @ops, $o; ! } ! $body = $self->lineseq(undef, @ops).";"; ! my $scope_en = $self->find_scope_en($lineseq); ! if (defined $scope_en) { ! my $subs = join"", $self->seq_subs($scope_en); ! $body .= ";\n$subs" if length($subs); ! } ! } ! else { ! $body = $self->deparse($cv->ROOT->first, 0); ! } } ! else { ! my $sv = $cv->const_sv; ! if ($$sv) { ! # uh-oh. inlinable sub... format it differently ! return $proto . "{ " . const($sv) . " }\n"; ! } else { # XSUB? (or just a declaration) ! return "$proto;\n"; ! } } + return $proto ."{\n\t$body\n\b}" ."\n"; } sub deparse_format { *************** *** 473,479 **** my $form = shift; my @text; local($self->{'curcv'}) = $form; ! local($self->{'curstash'}) = $self->{'curstash'}; my $op = $form->ROOT; my $kid; $op = $op->first->first; # skip leavewrite, lineseq --- 767,775 ---- my $form = shift; my @text; local($self->{'curcv'}) = $form; ! local($self->{'curcvlex'}); ! local(@$self{qw'curstash warnings hints'}) ! = @$self{'curstash warnings hints'}; my $op = $form->ROOT; my $kid; $op = $op->first->first; # skip leavewrite, lineseq *************** *** 481,495 **** $op = $op->sibling; # skip nextstate my @exprs; $kid = $op->first->sibling; # skip pushmark ! push @text, $self->const_sv($kid)->PV; $kid = $kid->sibling; for (; not null $kid; $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 0); } ! push @text, join(", ", @exprs)."\n" if @exprs; $op = $op->sibling; } ! return join("", @text) . "."; } sub is_scope { --- 777,791 ---- $op = $op->sibling; # skip nextstate my @exprs; $kid = $op->first->sibling; # skip pushmark ! push @text, "\f".$self->const_sv($kid)->PV; $kid = $kid->sibling; for (; not null $kid; $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 0); } ! push @text, "\f".join(", ", @exprs)."\n" if @exprs; $op = $op->sibling; } ! return join("", @text) . "\f."; } sub is_scope { *************** *** 547,555 **** my $self = shift; my($name, $kid, $cx) = @_; if ($cx > 16 or $self->{'parens'}) { ! return "$name(" . $self->deparse($kid, 1) . ")"; } else { $kid = $self->deparse($kid, 16); if (substr($kid, 0, 1) eq "\cS") { # use kid's parens return $name . substr($kid, 1); --- 843,858 ---- my $self = shift; my($name, $kid, $cx) = @_; if ($cx > 16 or $self->{'parens'}) { ! $kid = $self->deparse($kid, 1); ! if ($name eq "umask" && $kid =~ /^\d+$/) { ! $kid = sprintf("%#o", $kid); ! } ! return "$name($kid)"; } else { $kid = $self->deparse($kid, 16); + if ($name eq "umask" && $kid =~ /^\d+$/) { + $kid = sprintf("%#o", $kid); + } if (substr($kid, 0, 1) eq "\cS") { # use kid's parens return $name . substr($kid, 1); *************** *** 576,586 **** sub maybe_local { my $self = shift; my($op, $cx, $text) = @_; ! if ($op->private & OPpLVAL_INTRO and not $self->{'avoid_local'}{$$op}) { if (want_scalar($op)) { ! return "local $text"; } else { ! return $self->maybe_parens_func("local", $text, $cx, 16); } } else { return $text; --- 879,892 ---- sub maybe_local { my $self = shift; my($op, $cx, $text) = @_; ! my $our_intro = ($op->name =~ /^(gv|rv2)[ash]v$/) ? OPpOUR_INTRO : 0; ! if ($op->private & (OPpLVAL_INTRO|$our_intro) ! and not $self->{'avoid_local'}{$$op}) { ! my $our_local = ($op->private & OPpLVAL_INTRO) ? "local" : "our"; if (want_scalar($op)) { ! return "$our_local $text"; } else { ! return $self->maybe_parens_func("$our_local", $text, $cx, 16); } } else { return $text; *************** *** 674,679 **** --- 980,990 ---- return "XXX"; } + sub pp_method_named { + cluck "unexpected OP_METHOD_NAMED"; + return "XXX"; + } + sub pp_flip { # see also flop cluck "unexpected OP_FLIP"; return "XXX"; *************** *** 704,738 **** return "XXX"; } sub lineseq { ! my $self = shift; ! my(@ops) = @_; my($expr, @exprs); for (my $i = 0; $i < @ops; $i++) { $expr = ""; if (is_state $ops[$i]) { $expr = $self->deparse($ops[$i], 0); $i++; ! last if $i > $#ops; } ! if (!is_state $ops[$i] and $ops[$i+1] and !null($ops[$i+1]) and ! $ops[$i+1]->name eq "leaveloop" and $self->{'expand'} < 3) { ! push @exprs, $expr . $self->for_loop($ops[$i], 0); ! $i++; ! next; } ! $expr .= $self->deparse($ops[$i], 0); ! push @exprs, $expr if length $expr; } ! return join(";\n", @exprs); } sub scopeop { ! my($real_block, $self, $op, $cx) = @_; my $kid; my @kids; ! local($self->{'curstash'}) = $self->{'curstash'} if $real_block; if ($real_block) { $kid = $op->first->sibling; # skip enter if (is_miniwhile($kid)) { --- 1015,1082 ---- return "XXX"; } + # $root should be the op which represents the root of whatever + # we're sequencing here. If it's undefined, then we don't append + # any subroutine declarations to the deparsed ops, otherwise we + # append appropriate declarations. sub lineseq { ! my($self, $root, @ops) = @_; my($expr, @exprs); + + my $out_cop = $self->{'curcop'}; + my $out_seq = defined($out_cop) ? $out_cop->cop_seq : undef; + my $limit_seq; + if (defined $root) { + $limit_seq = $out_seq; + my $nseq = $self->find_scope_st($root->sibling) if ${$root->sibling}; + $limit_seq = $nseq if !defined($limit_seq) + or defined($nseq) && $nseq < $limit_seq; + } + $limit_seq = $self->{'limit_seq'} + if defined($self->{'limit_seq'}) + && (!defined($limit_seq) || $self->{'limit_seq'} < $limit_seq); + local $self->{'limit_seq'} = $limit_seq; for (my $i = 0; $i < @ops; $i++) { $expr = ""; if (is_state $ops[$i]) { $expr = $self->deparse($ops[$i], 0); $i++; ! if ($i > $#ops) { ! push @exprs, $expr; ! last; ! } } ! if (!is_state $ops[$i] and (my $ls = $ops[$i+1]) and ! !null($ops[$i+1]) and $ops[$i+1]->name eq "lineseq") { ! if ($ls->first && !null($ls->first) && is_state($ls->first) ! && (my $sib = $ls->first->sibling)) { ! if (!null($sib) && $sib->name eq "leaveloop") { ! push @exprs, $expr . $self->for_loop($ops[$i], 0); ! $i++; ! next; ! } ! } } ! $expr .= $self->deparse($ops[$i], 0, (@ops != 1)); ! $expr =~ s/;\n?\z//; ! push @exprs, $expr; } ! my $body = join(";\n", grep {length} @exprs); ! my $subs = ""; ! if (defined $root && defined $limit_seq) { ! $subs = join "\n", $self->seq_subs($limit_seq); ! } ! return join(";\n", grep {length} $body, $subs); } sub scopeop { ! my($real_block, $self, $op, $cx, $flags) = @_; my $kid; my @kids; ! ! local(@$self{qw'curstash warnings hints'}) ! = @$self{qw'curstash warnings hints'} if $real_block; if ($real_block) { $kid = $op->first->sibling; # skip enter if (is_miniwhile($kid)) { *************** *** 757,766 **** for (; !null($kid); $kid = $kid->sibling) { push @kids, $kid; } ! if ($cx > 0) { # inside an expression, (a do {} while for lineseq) ! return "do { " . $self->lineseq(@kids) . " }"; } else { ! return $self->lineseq(@kids) . ";"; } } --- 1101,1111 ---- for (; !null($kid); $kid = $kid->sibling) { push @kids, $kid; } ! if ($flags || $cx > 0) { # inside an expression, (a do {} while for lineseq) ! return "do {\n\t" . $self->lineseq($op, @kids) . "\n\b}"; } else { ! my $lineseq = $self->lineseq($op, @kids); ! return (length ($lineseq) ? "$lineseq;" : ""); } } *************** *** 777,782 **** --- 1122,1128 ---- sub gv_name { my $self = shift; my $gv = shift; + Carp::confess() if $gv->isa("B::CV"); my $stash = $gv->STASH->NAME; my $name = $gv->SAFENAME; if ($stash eq $self->{'curstash'} or $globalnames{$name} *************** *** 792,808 **** return $stash . $name; } ! # Notice how subs and formats are inserted between statements here ! sub pp_nextstate { my $self = shift; ! my($op, $cx) = @_; ! my @text; ! @text = $op->label . ": " if $op->label; my $seq = $op->cop_seq; while (scalar(@{$self->{'subs_todo'}}) and $seq > $self->{'subs_todo'}[0][0]) { push @text, $self->next_todo; } my $stash = $op->stashpv; if ($stash ne $self->{'curstash'}) { push @text, "package $stash;\n"; --- 1138,1263 ---- return $stash . $name; } ! # Return the name to use for a stash variable. ! # If a lexical with the same name is in scope, it may need to be ! # fully-qualified. ! sub stash_variable { ! my ($self, $prefix, $name) = @_; ! ! return "$prefix$name" if $name =~ /::/; ! ! unless ($prefix eq '$' || $prefix eq '@' || ! $prefix eq '%' || $prefix eq '$#') { ! return "$prefix$name"; ! } ! ! my $v = ($prefix eq '$#' ? '@' : $prefix) . $name; ! return $prefix .$self->{'curstash'}.'::'. $name if $self->lex_in_scope($v); ! return "$prefix$name"; ! } ! ! sub lex_in_scope { ! my ($self, $name) = @_; ! $self->populate_curcvlex() if !defined $self->{'curcvlex'}; ! ! return 0 if !defined($self->{'curcop'}); ! my $seq = $self->{'curcop'}->cop_seq; ! return 0 if !exists $self->{'curcvlex'}{$name}; ! for my $a (@{$self->{'curcvlex'}{$name}}) { ! my ($st, $en) = @$a; ! return 1 if $seq > $st && $seq <= $en; ! } ! return 0; ! } ! ! sub populate_curcvlex { my $self = shift; ! for (my $cv = $self->{'curcv'}; class($cv) eq "CV"; $cv = $cv->OUTSIDE) { ! my @padlist = $cv->PADLIST->ARRAY; ! my @ns = $padlist[0]->ARRAY; ! ! for (my $i=0; $i<@ns; ++$i) { ! next if class($ns[$i]) eq "SPECIAL"; ! next if $ns[$i]->FLAGS & SVpad_OUR; # Skip "our" vars ! if (class($ns[$i]) eq "PV") { ! # Probably that pesky lexical @_ ! next; ! } ! my $name = $ns[$i]->PVX; ! my $seq_st = $ns[$i]->NVX; ! my $seq_en = int($ns[$i]->IVX); ! ! push @{$self->{'curcvlex'}{$name}}, [$seq_st, $seq_en]; ! } ! } ! } ! ! sub find_scope_st { ((find_scope(@_))[0]); } ! sub find_scope_en { ((find_scope(@_))[1]); } ! ! # Recurses down the tree, looking for pad variable introductions and COPs ! sub find_scope { ! my ($self, $op, $scope_st, $scope_en) = @_; ! Carp::cluck() if !defined $op; ! return ($scope_st, $scope_en) unless $op->flags & OPf_KIDS; ! ! for (my $o=$op->first; $$o; $o=$o->sibling) { ! if ($o->name =~ /^pad.v$/ && $o->private & OPpLVAL_INTRO) { ! my $s = int($self->padname_sv($o->targ)->NVX); ! my $e = $self->padname_sv($o->targ)->IVX; ! $scope_st = $s if !defined($scope_st) || $s < $scope_st; ! $scope_en = $e if !defined($scope_en) || $e > $scope_en; ! } ! elsif (is_state($o)) { ! my $c = $o->cop_seq; ! $scope_st = $c if !defined($scope_st) || $c < $scope_st; ! $scope_en = $c if !defined($scope_en) || $c > $scope_en; ! } ! elsif ($o->flags & OPf_KIDS) { ! ($scope_st, $scope_en) = ! $self->find_scope($o, $scope_st, $scope_en) ! } ! } ! ! return ($scope_st, $scope_en); ! } ! ! # Returns a list of subs which should be inserted before the COP ! sub cop_subs { ! my ($self, $op, $out_seq) = @_; my $seq = $op->cop_seq; + # If we have nephews, then our sequence number indicates + # the cop_seq of the end of some sort of scope. + if (class($op->sibling) ne "NULL" && $op->sibling->flags & OPf_KIDS + and my $nseq = $self->find_scope_st($op->sibling) ) { + $seq = $nseq; + } + $seq = $out_seq if defined($out_seq) && $out_seq < $seq; + return $self->seq_subs($seq); + } + + sub seq_subs { + my ($self, $seq) = @_; + my @text; + #push @text, "# ($seq)\n"; + + return "" if !defined $seq; while (scalar(@{$self->{'subs_todo'}}) and $seq > $self->{'subs_todo'}[0][0]) { push @text, $self->next_todo; } + return @text; + } + + # Notice how subs and formats are inserted between statements here; + # also $[ assignments and pragmas. + sub pp_nextstate { + my $self = shift; + my($op, $cx) = @_; + $self->{'curcop'} = $op; + my @text; + push @text, $self->cop_subs($op); + push @text, $op->label . ": " if $op->label; my $stash = $op->stashpv; if ($stash ne $self->{'curstash'}) { push @text, "package $stash;\n"; *************** *** 812,820 **** --- 1267,1341 ---- push @text, "\f#line " . $op->line . ' "' . $op->file, qq'"\n'; } + + if ($self->{'arybase'} != $op->arybase) { + push @text, '$[ = '. $op->arybase .";\n"; + $self->{'arybase'} = $op->arybase; + } + + my $warnings = $op->warnings; + my $warning_bits; + if ($warnings->isa("B::SPECIAL") && $$warnings == 4) { + $warning_bits = $warnings::Bits{"all"} & WARN_MASK; + } + elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) { + $warning_bits = $warnings::NONE; + } + elsif ($warnings->isa("B::SPECIAL")) { + $warning_bits = undef; + } + else { + $warning_bits = $warnings->PV & WARN_MASK; + } + + if (defined ($warning_bits) and + !defined($self->{warnings}) || $self->{'warnings'} ne $warning_bits) { + push @text, declare_warnings($self->{'warnings'}, $warning_bits); + $self->{'warnings'} = $warning_bits; + } + + if ($self->{'hints'} != $op->private) { + push @text, declare_hints($self->{'hints'}, $op->private); + $self->{'hints'} = $op->private; + } + return join("", @text); } + sub declare_warnings { + my ($from, $to) = @_; + if (($to & WARN_MASK) eq warnings::bits("all")) { + return "use warnings;\n"; + } + elsif (($to & WARN_MASK) eq "\0"x length($to)) { + return "no warnings;\n"; + } + return "BEGIN {\${^WARNING_BITS} = ".cstring($to)."}\n"; + } + + sub declare_hints { + my ($from, $to) = @_; + my $use = $to & ~$from; + my $no = $from & ~$to; + my $decls = ""; + for my $pragma (hint_pragmas($use)) { + $decls .= "use $pragma;\n"; + } + for my $pragma (hint_pragmas($no)) { + $decls .= "no $pragma;\n"; + } + return $decls; + } + + sub hint_pragmas { + my ($bits) = @_; + my @pragmas; + push @pragmas, "integer" if $bits & 0x1; + push @pragmas, "strict 'refs'" if $bits & 0x2; + push @pragmas, "bytes" if $bits & 0x8; + return @pragmas; + } + sub pp_dbstate { pp_nextstate(@_) } sub pp_setstate { pp_nextstate(@_) } *************** *** 826,832 **** return $name; } ! sub pp_stub { baseop(@_, "()") } sub pp_wantarray { baseop(@_, "wantarray") } sub pp_fork { baseop(@_, "fork") } sub pp_wait { maybe_targmy(@_, \&baseop, "wait") } --- 1347,1362 ---- return $name; } ! sub pp_stub { ! my $self = shift; ! my($op, $cx, $name) = @_; ! if ($cx) { ! return "()"; ! } ! else { ! return "();"; ! } ! } sub pp_wantarray { baseop(@_, "wantarray") } sub pp_fork { baseop(@_, "fork") } sub pp_wait { maybe_targmy(@_, \&baseop, "wait") } *************** *** 902,907 **** --- 1432,1443 ---- my $kid; if ($op->flags & OPf_KIDS) { $kid = $op->first; + if (defined prototype("CORE::$name") + && prototype("CORE::$name") =~ /^;?\*/ + && $kid->name eq "rv2gv") { + $kid = $kid->first; + } + return $self->maybe_parens_unop($name, $kid, $cx); } else { return $name . ($op->flags & OPf_SPECIAL ? "()" : ""); *************** *** 991,996 **** --- 1527,1543 ---- sub pp_exists { my $self = shift; my($op, $cx) = @_; + my $arg; + if ($op->private & OPpEXISTS_SUB) { + # Checking for the existence of a subroutine + return $self->maybe_parens_func("exists", + $self->pp_rv2cv($op->first, 16), $cx, 16); + } + if ($op->flags & OPf_SPECIAL) { + # Array element, not hash element + return $self->maybe_parens_func("exists", + $self->pp_aelem($op->first, 16), $cx, 16); + } return $self->maybe_parens_func("exists", $self->pp_helem($op->first, 16), $cx, 16); } *************** *** 1000,1009 **** --- 1547,1568 ---- my($op, $cx) = @_; my $arg; if ($op->private & OPpSLICE) { + if ($op->flags & OPf_SPECIAL) { + # Deleting from an array, not a hash + return $self->maybe_parens_func("delete", + $self->pp_aslice($op->first, 16), + $cx, 16); + } return $self->maybe_parens_func("delete", $self->pp_hslice($op->first, 16), $cx, 16); } else { + if ($op->flags & OPf_SPECIAL) { + # Deleting from an array, not a hash + return $self->maybe_parens_func("delete", + $self->pp_aelem($op->first, 16), + $cx, 16); + } return $self->maybe_parens_func("delete", $self->pp_helem($op->first, 16), $cx, 16); *************** *** 1019,1025 **** my $name = $self->const_sv($op->first)->PV; $name =~ s[/][::]g; $name =~ s/\.pm//g; ! return "require($name)"; } else { $self->unop($op, $cx, "require"); } --- 1578,1584 ---- my $name = $self->const_sv($op->first)->PV; $name =~ s[/][::]g; $name =~ s/\.pm//g; ! return "require $name"; } else { $self->unop($op, $cx, "require"); } *************** *** 1091,1097 **** my($op, $cx) = @_; my $kid = $op->first; $kid = $kid->first if $kid->name eq "rv2gv"; # <$fh> ! return "<" . $self->deparse($kid, 1) . ">"; } # Unary operators that can occur as pseudo-listops inside double quotes --- 1650,1657 ---- my($op, $cx) = @_; my $kid = $op->first; $kid = $kid->first if $kid->name eq "rv2gv"; # <$fh> ! return "<" . $self->deparse($kid, 1) . ">" if is_scalar($kid); ! return $self->unop($op, $cx, "readline"); } # Unary operators that can occur as pseudo-listops inside double quotes *************** *** 1155,1162 **** sub pp_ftrwrite { ftst(@_, "-W") } sub pp_ftrexec { ftst(@_, "-X") } sub pp_fteread { ftst(@_, "-r") } ! sub pp_ftewrite { ftst(@_, "-r") } ! sub pp_fteexec { ftst(@_, "-r") } sub pp_ftis { ftst(@_, "-e") } sub pp_fteowned { ftst(@_, "-O") } sub pp_ftrowned { ftst(@_, "-o") } --- 1715,1722 ---- sub pp_ftrwrite { ftst(@_, "-W") } sub pp_ftrexec { ftst(@_, "-X") } sub pp_fteread { ftst(@_, "-r") } ! sub pp_ftewrite { ftst(@_, "-w") } ! sub pp_fteexec { ftst(@_, "-x") } sub pp_ftis { ftst(@_, "-e") } sub pp_fteowned { ftst(@_, "-O") } sub pp_ftrowned { ftst(@_, "-o") } *************** *** 1181,1186 **** --- 1741,1747 ---- sub SWAP_CHILDREN () { 1 } sub ASSIGN () { 2 } # has OP= variant + sub LIST_CONTEXT () { 4 } # Assignment is in list context my(%left, %right); *************** *** 1283,1288 **** --- 1844,1851 ---- ($left, $right) = ($right, $left); } $left = $self->deparse_binop_left($op, $left, $prec); + $left = "($left)" if $flags & LIST_CONTEXT + && $left !~ /^(my|our|local|)[\@\(]/; $right = $self->deparse_binop_right($op, $right, $prec); return $self->maybe_parens("$left $opname$eq $right", $cx, $prec); } *************** *** 1329,1335 **** sub pp_scmp { binop(@_, "cmp", 14) } sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) } ! sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN) } # `.' is special because concats-of-concats are optimized to save copying # by making all but the first concat stacked. The effect is as if the --- 1892,1898 ---- sub pp_scmp { binop(@_, "cmp", 14) } sub pp_sassign { binop(@_, "=", 7, SWAP_CHILDREN) } ! sub pp_aassign { binop(@_, "=", 7, SWAP_CHILDREN | LIST_CONTEXT) } # `.' is special because concats-of-concats are optimized to save copying # by making all but the first concat stacked. The effect is as if the *************** *** 1452,1458 **** my $parens = ($cx >= 5) || $self->{'parens'}; my $kid = $op->first->sibling; return $name if null $kid; ! my $first = $self->deparse($kid, 6); $first = "+$first" if not $parens and substr($first, 0, 1) eq "("; push @exprs, $first; $kid = $kid->sibling; --- 2015,2032 ---- my $parens = ($cx >= 5) || $self->{'parens'}; my $kid = $op->first->sibling; return $name if null $kid; ! my $first; ! if (defined prototype("CORE::$name") ! && prototype("CORE::$name") =~ /^;?\*/ ! && $kid->name eq "rv2gv") { ! $first = $self->deparse($kid->first, 6); ! } ! else { ! $first = $self->deparse($kid, 6); ! } ! if ($name eq "chmod" && $first =~ /^\d+$/) { ! $first = sprintf("%#o", $first); ! } $first = "+$first" if not $parens and substr($first, 0, 1) eq "("; push @exprs, $first; $kid = $kid->sibling; *************** *** 1598,1603 **** --- 2172,2179 ---- $indir = $indir->first; # skip rv2gv if (is_scope($indir)) { $indir = "{" . $self->deparse($indir, 0) . "}"; + } elsif ($indir->name eq "const" && $indir->private & OPpCONST_BARE) { + $indir = $self->const_sv($indir)->PV; } else { $indir = $self->deparse($indir, 24); } *************** *** 1604,1609 **** --- 2180,2192 ---- $indir = $indir . " "; $kid = $kid->sibling; } + if ($name eq "sort" && $op->private & (OPpSORT_NUMERIC | OPpSORT_INTEGER)) { + $indir = ($op->private & OPpSORT_REVERSE) ? '{$b <=> $a} ' + : '{$a <=> $b} '; + } + elsif ($name eq "sort" && $op->private & OPpSORT_REVERSE) { + $indir = '{$b cmp $a} '; + } for (; !null($kid); $kid = $kid->sibling) { $expr = $self->deparse($kid, 6); push @exprs, $expr; *************** *** 1645,1665 **** my($expr, @exprs); my $kid = $op->first->sibling; # skip pushmark my $lop; ! my $local = "either"; # could be local(...) or my(...) for ($lop = $kid; !null($lop); $lop = $lop->sibling) { # This assumes that no other private flags equal 128, and that # OPs that store things other than flags in their op_private, # like OP_AELEMFAST, won't be immediate children of a list. ! unless ($lop->private & OPpLVAL_INTRO or $lop->name eq "undef") { $local = ""; # or not last; } if ($lop->name =~ /^pad[ash]v$/) { # my() ! ($local = "", last) if $local eq "local"; $local = "my"; } elsif ($lop->name ne "undef") { # local() ! ($local = "", last) if $local eq "my"; $local = "local"; } } --- 2228,2262 ---- my($expr, @exprs); my $kid = $op->first->sibling; # skip pushmark my $lop; ! my $local = "either"; # could be local(...), my(...) or our(...) for ($lop = $kid; !null($lop); $lop = $lop->sibling) { # This assumes that no other private flags equal 128, and that # OPs that store things other than flags in their op_private, # like OP_AELEMFAST, won't be immediate children of a list. ! # ! # OP_ENTERSUB can break this logic, so check for it. ! # I suspect that open and exit can too. ! ! if (!($lop->private & (OPpLVAL_INTRO|OPpOUR_INTRO) ! or $lop->name eq "undef") ! or $lop->name eq "entersub" ! or $lop->name eq "exit" ! or $lop->name eq "open") { $local = ""; # or not last; } if ($lop->name =~ /^pad[ash]v$/) { # my() ! ($local = "", last) if $local eq "local" || $local eq "our"; $local = "my"; + } elsif ($lop->name =~ /^(gv|rv2)[ash]v$/ + && $lop->private & OPpOUR_INTRO + or $lop->name eq "null" && $lop->first->name eq "gvsv" + && $lop->first->private & OPpOUR_INTRO) { # our() + ($local = "", last) if $local eq "my" || $local eq "local"; + $local = "our"; } elsif ($lop->name ne "undef") { # local() ! ($local = "", last) if $local eq "my" || $local eq "our"; $local = "local"; } } *************** *** 1737,1743 **** my($op, $cx, $init) = @_; my $enter = $op->first; my $kid = $enter->sibling; ! local($self->{'curstash'}) = $self->{'curstash'}; my $head = ""; my $bare = 0; my $body; --- 2334,2341 ---- my($op, $cx, $init) = @_; my $enter = $op->first; my $kid = $enter->sibling; ! local(@$self{qw'curstash warnings hints'}) ! = @$self{qw'curstash warnings hints'}; my $head = ""; my $bare = 0; my $body; *************** *** 1744,1750 **** my $cond = undef; if ($kid->name eq "lineseq") { # bare or infinite loop if (is_state $kid->last) { # infinite ! $head = "for (;;) "; # shorter than while (1) $cond = ""; } else { $bare = 1; --- 2342,2348 ---- my $cond = undef; if ($kid->name eq "lineseq") { # bare or infinite loop if (is_state $kid->last) { # infinite ! $head = "while (1) "; # Can't use for(;;) if there's a continue $cond = ""; } else { $bare = 1; *************** *** 1798,1804 **** # block (or the last in a bare loop). my $cont_start = $enter->nextop; my $cont; ! if ($$cont_start != $$op and $ {$cont_start->sibling} != $ {$body->last}) { if ($bare) { $cont = $body->last; } else { --- 2396,2402 ---- # block (or the last in a bare loop). my $cont_start = $enter->nextop; my $cont; ! if ($$cont_start != $$op && ${$cont_start->sibling} != ${$body->last}) { if ($bare) { $cont = $body->last; } else { *************** *** 1813,1819 **** for (; $$state != $$cont; $state = $state->sibling) { push @states, $state; } ! $body = $self->lineseq(@states); if (defined $cond and not is_scope $cont and $self->{'expand'} < 3) { $head = "for ($init; $cond; " . $self->deparse($cont, 1) .") "; $cont = "\cK"; --- 2411,2417 ---- for (; $$state != $$cont; $state = $state->sibling) { push @states, $state; } ! $body = $self->lineseq(undef, @states); if (defined $cond and not is_scope $cont and $self->{'expand'} < 3) { $head = "for ($init; $cond; " . $self->deparse($cont, 1) .") "; $cont = "\cK"; *************** *** 1822,1831 **** $self->deparse($cont, 0) . "\n\b}\cK"; } } else { $cont = "\cK"; $body = $self->deparse($body, 0); } ! return $head . "{\n\t" . $body . "\n\b}" . $cont; } sub pp_leaveloop { loop_common(@_, "") } --- 2420,2435 ---- $self->deparse($cont, 0) . "\n\b}\cK"; } } else { + return "" if !defined $body; + if (length $init) { + $head = "for ($init; $cond;) "; + } $cont = "\cK"; $body = $self->deparse($body, 0); } ! $body =~ s/;?$/;\n/; ! ! return $head . "{\n\t" . $body . "\b}" . $cont; } sub pp_leaveloop { loop_common(@_, "") } *************** *** 1834,1840 **** my $self = shift; my($op, $cx) = @_; my $init = $self->deparse($op, 1); ! return $self->loop_common($op->sibling, $cx, $init); } sub pp_leavetry { --- 2438,2444 ---- my $self = shift; my($op, $cx) = @_; my $init = $self->deparse($op, 1); ! return $self->loop_common($op->sibling->first->sibling, $cx, $init); } sub pp_leavetry { *************** *** 1844,1849 **** --- 2448,2455 ---- BEGIN { eval "sub OP_CONST () {" . opnumber("const") . "}" } BEGIN { eval "sub OP_STRINGIFY () {" . opnumber("stringify") . "}" } + BEGIN { eval "sub OP_RV2SV () {" . opnumber("rv2sv") . "}" } + BEGIN { eval "sub OP_LIST () {" . opnumber("list") . "}" } sub pp_null { my $self = shift; *************** *** 1869,1874 **** --- 2475,2482 ---- return $self->maybe_parens($self->deparse($op->first, 20) . " =~ " . $self->deparse($op->first->sibling, 20), $cx, 20); + } elsif ($op->flags & OPf_SPECIAL && $cx == 0 && !$op->targ) { + return "do {\n\t". $self->deparse($op->first, $cx) ."\n\b};"; } else { return $self->deparse($op->first, $cx); } *************** *** 1924,1930 **** my $self = shift; my($op, $cx) = @_; my $gv = $self->gv_or_padgv($op); ! return $self->maybe_local($op, $cx, "\$" . $self->gv_name($gv)); } sub pp_gv { --- 2532,2539 ---- my $self = shift; my($op, $cx) = @_; my $gv = $self->gv_or_padgv($op); ! return $self->maybe_local($op, $cx, $self->stash_variable("\$", ! $self->gv_name($gv))); } sub pp_gv { *************** *** 1938,1952 **** my $self = shift; my($op, $cx) = @_; my $gv = $self->gv_or_padgv($op); ! return "\$" . $self->gv_name($gv) . "[" . $op->private . "]"; } sub rv2x { my $self = shift; my($op, $cx, $type) = @_; my $kid = $op->first; my $str = $self->deparse($kid, 0); ! return $type . (is_scalar($kid) ? $str : "{$str}"); } sub pp_rv2sv { maybe_local(@_, rv2x(@_, "\$")) } --- 2547,2572 ---- my $self = shift; my($op, $cx) = @_; my $gv = $self->gv_or_padgv($op); ! my $name = $self->gv_name($gv); ! $name = $self->{'curstash'}."::$name" ! if $name !~ /::/ && $self->lex_in_scope('@'.$name); ! ! return "\$" . $name . "[" . ! ($op->private + $self->{'arybase'}) . "]"; } sub rv2x { my $self = shift; my($op, $cx, $type) = @_; + + if (class($op) eq 'NULL' || !$op->can("first")) { + Carp::cluck("Unexpected op in pp_rv2x"); + return 'XXX'; + } my $kid = $op->first; my $str = $self->deparse($kid, 0); ! return $self->stash_variable($type, $str) if is_scalar($kid); ! return $type ."{$str}"; } sub pp_rv2sv { maybe_local(@_, rv2x(@_, "\$")) } *************** *** 1966,1972 **** } # skip down to the old, ex-rv2cv ! sub pp_rv2cv { $_[0]->rv2x($_[1]->first->first->sibling, $_[2], "&") } sub pp_rv2av { my $self = shift; --- 2586,2602 ---- } # skip down to the old, ex-rv2cv ! sub pp_rv2cv { ! my ($self, $op, $cx) = @_; ! if (!null($op->first) && $op->first->name eq 'null' && ! $op->first->targ eq OP_LIST) ! { ! return $self->rv2x($op->first->first->sibling, $cx, "&") ! } ! else { ! return $self->rv2x($op, $cx, "") ! } ! } sub pp_rv2av { my $self = shift; *************** *** 2010,2015 **** --- 2640,2652 ---- $array = $self->padany($array); } elsif (is_scope($array)) { # ${expr}[0] $array = "{" . $self->deparse($array, 0) . "}"; + } elsif ($array->name eq "gv") { + $array = $self->gv_name($self->gv_or_padgv($array)); + if ($array !~ /::/) { + my $prefix = ($left eq '[' ? '@' : '%'); + $array = $self->{curstash}.'::'.$array + if $self->lex_in_scope($prefix . $array); + } } elsif (is_scalar $array) { # $x[0], $$x[0], ... $array = $self->deparse($array, 24); } else { *************** *** 2019,2024 **** --- 2656,2690 ---- $left . $self->deparse($idx, 1) . $right; } $idx = $self->deparse($idx, 1); + + # Outer parens in an array index will confuse perl + # if we're interpolating in a regular expression, i.e. + # /$x$foo[(-1)]/ is *not* the same as /$x$foo[-1]/ + # + # If $self->{parens}, then an initial '(' will + # definitely be paired with a final ')'. If + # !$self->{parens}, the misleading parens won't + # have been added in the first place. + # + # [You might think that we could get "(...)...(...)" + # where the initial and final parens do not match + # each other. But we can't, because the above would + # only happen if there's an infix binop between the + # two pairs of parens, and *that* means that the whole + # expression would be parenthesized as well.] + # + $idx =~ s/^\((.*)\)$/$1/ if $self->{'parens'}; + + # Hash-element braces will autoquote a bareword inside themselves. + # We need to make sure that C<$hash{warn()}> doesn't come out as + # C<$hash{warn}>, which has a quite different meaning. Currently + # B::Deparse will always quote strings, even if the string was a + # bareword in the original (i.e. the OPpCONST_BARE flag is ignored + # for constant strings.) So we can cheat slightly here - if we see + # a bareword, we know that it is supposed to be a function call. + # + $idx =~ s/^([A-Za-z_]\w*)$/$1()/; + return "\$" . $array . $left . $idx . $right; } *************** *** 2122,2128 **** } else { $obj = $kid; $kid = $kid->sibling; ! for (; not null $kid->sibling; $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); } $meth = $kid; --- 2788,2795 ---- } else { $obj = $kid; $kid = $kid->sibling; ! for (; !null ($kid->sibling) && $kid->name ne "method_named"; ! $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); } $meth = $kid; *************** *** 2142,2148 **** } my $args = join(", ", @exprs); $kid = $obj . "->" . $meth; ! if ($args) { return $kid . "(" . $args . ")"; # parens mandatory } else { return $kid; --- 2809,2815 ---- } my $args = join(", ", @exprs); $kid = $obj . "->" . $meth; ! if (length $args) { return $kid . "(" . $args . ")"; # parens mandatory } else { return $kid; *************** *** 2232,2238 **** my $prefix = ""; my $amper = ""; my($kid, @exprs); ! if ($op->flags & OPf_SPECIAL) { $prefix = "do "; } elsif ($op->private & OPpENTERSUB_AMPER) { $amper = "&"; --- 2899,2905 ---- my $prefix = ""; my $amper = ""; my($kid, @exprs); ! if ($op->flags & OPf_SPECIAL && !($op->flags & OPf_MOD)) { $prefix = "do "; } elsif ($op->private & OPpENTERSUB_AMPER) { $amper = "&"; *************** *** 2254,2260 **** } $simple = 1; # only calls of named functions can be prototyped $kid = $self->deparse($kid, 24); ! } elsif (is_scalar $kid->first) { $amper = "&"; $kid = $self->deparse($kid, 24); } else { --- 2921,2927 ---- } $simple = 1; # only calls of named functions can be prototyped $kid = $self->deparse($kid, 24); ! } elsif (is_scalar ($kid->first) && $kid->first->name ne 'rv2cv') { $amper = "&"; $kid = $self->deparse($kid, 24); } else { *************** *** 2262,2269 **** my $arrow = is_subscriptable($kid->first) ? "" : "->"; $kid = $self->deparse($kid, 24) . $arrow; } my $args; ! if (defined $proto and not $amper) { ($amper, $args) = $self->check_proto($proto, @exprs); if ($amper eq "&") { $args = join(", ", map($self->deparse($_, 6), @exprs)); --- 2929,2945 ---- my $arrow = is_subscriptable($kid->first) ? "" : "->"; $kid = $self->deparse($kid, 24) . $arrow; } + + # Doesn't matter how many prototypes there are, if + # they haven't happened yet! + my $declared = exists $self->{'subs_declared'}{$kid}; + if (!$declared && defined($proto)) { + # Avoid "too early to check prototype" warning + ($amper, $proto) = ('&'); + } + my $args; ! if ($declared and defined $proto and not $amper) { ($amper, $args) = $self->check_proto($proto, @exprs); if ($amper eq "&") { $args = join(", ", map($self->deparse($_, 6), @exprs)); *************** *** 2278,2286 **** return $prefix . $amper. $kid; } } else { ! if (defined $proto and $proto eq "") { return $kid; ! } elsif (defined $proto and $proto eq "\$") { return $self->maybe_parens_func($kid, $args, $cx, 16); } elsif (defined($proto) && $proto or $simple) { return $self->maybe_parens_func($kid, $args, $cx, 5); --- 2954,2977 ---- return $prefix . $amper. $kid; } } else { ! # glob() invocations can be translated into calls of ! # CORE::GLOBAL::glob with an second parameter, a number. ! # Reverse this. ! if ($kid eq "CORE::GLOBAL::glob") { ! $kid = "glob"; ! $args =~ s/\s*,[^,]+$//; ! } ! ! # It's a syntax error to call CORE::GLOBAL::foo without a prefix, ! # so it must have been translated from a keyword call. Translate ! # it back. ! $kid =~ s/^CORE::GLOBAL:://; ! ! if (!$declared) { ! return "$kid(" . $args . ")"; ! } elsif (defined $proto and $proto eq "") { return $kid; ! } elsif (defined $proto and $proto eq "\$" and is_scalar($exprs[0])) { return $self->maybe_parens_func($kid, $args, $cx, 16); } elsif (defined($proto) && $proto or $simple) { return $self->maybe_parens_func($kid, $args, $cx, 5); *************** *** 2296,2316 **** # but not character escapes sub uninterp { my($str) = @_; ! $str =~ s/(^|[^\\])([\$\@]|\\[uUlLQE])/$1\\$2/g; return $str; } ! # the same, but treat $|, $), and $ at the end of the string differently sub re_uninterp { my($str) = @_; ! $str =~ s/(^|[^\\])(\@|\\[uUlLQE])/$1\\$2/g; ! $str =~ s/(^|[^\\])(\$[^)|])/$1\\$2/g; return $str; } # character escapes, but not delimiters that might need to be escaped ! sub escape_str { # ASCII my($str) = @_; $str =~ s/\a/\\a/g; # $str =~ s/\cH/\\b/g; # \b means someting different in a regex $str =~ s/\t/\\t/g; --- 2987,3069 ---- # but not character escapes sub uninterp { my($str) = @_; ! $str =~ s/(^|\G|[^\\])((?:\\\\)*)([\$\@]|\\[uUlLQE])/$1$2\\$3/g; return $str; } ! { ! my $bal; ! BEGIN { ! use re "eval"; ! # Matches any string which is balanced with respect to {braces} ! $bal = qr( ! (?: ! [^\\{}] ! | \\\\ ! | \\[{}] ! | \{(??{$bal})\} ! )* ! )x; ! } ! ! # the same, but treat $|, $), $( and $ at the end of the string differently sub re_uninterp { my($str) = @_; ! ! $str =~ s/ ! ( ^|\G # $1 ! | [^\\] ! ) ! ! ( # $2 ! (?:\\\\)* ! ) ! ! ( # $3 ! (\(\?\??\{$bal\}\)) # $4 ! | [\$\@] ! (?!\||\)|\(|$) ! | \\[uUlLQE] ! ) ! ! /length($4) ? "$1$2$4" : "$1$2\\$3"/xeg; ! return $str; } + # This is for regular expressions with the /x modifier + # We have to leave comments unmangled. + sub re_uninterp_extended { + my($str) = @_; + + $str =~ s/ + ( ^|\G # $1 + | [^\\] + ) + + ( # $2 + (?:\\\\)* + ) + + ( # $3 + ( \(\?\??\{$bal\}\) # $4 (skip over (?{}) and (??{}) blocks) + | \#[^\n]* # (skip over comments) + ) + | [\$\@] + (?!\||\)|\(|$) + | \\[uUlLQE] + ) + + /length($4) ? "$1$2$4" : "$1$2\\$3"/xeg; + + return $str; + } + } + # character escapes, but not delimiters that might need to be escaped ! sub escape_str { # ASCII, UTF8 my($str) = @_; + $str =~ s/(.)/ord($1)>255 ? sprintf("\\x{%x}", ord($1)) : $1/eg; $str =~ s/\a/\\a/g; # $str =~ s/\cH/\\b/g; # \b means someting different in a regex $str =~ s/\t/\\t/g; *************** *** 2323,2328 **** --- 3076,3091 ---- return $str; } + # For regexes with the /x modifier. + # Leave whitespace unmangled. + sub escape_extended_re { + my($str) = @_; + $str =~ s/(.)/ord($1)>255 ? sprintf("\\x{%x}", ord($1)) : $1/eg; + $str =~ s/([\0\033-\037\177-\377])/'\\' . sprintf("%03o", ord($1))/ge; + $str =~ s/\n/\n\f/g; + return $str; + } + # Don't do this for regexen sub unback { my($str) = @_; *************** *** 2330,2335 **** --- 3093,3108 ---- return $str; } + # Remove backslashes which precede literal control characters, + # to avoid creating ambiguity when we escape the latter. + sub re_unback { + my($str) = @_; + + # the insane complexity here is due to the behaviour of "\c\" + $str =~ s/(^|[^\\]|\\c\\)(?FLAGS & SVf_IOK) { return $sv->int_value; } elsif ($sv->FLAGS & SVf_NOK) { ! return $sv->NV; ! } elsif ($sv->FLAGS & SVf_ROK) { return "\\(" . const($sv->RV) . ")"; # constant folded ! } else { my $str = $sv->PV; if ($str =~ /[^ -~]/) { # ASCII for non-printing return single_delim("qq", '"', uninterp escape_str unback $str); --- 3150,3170 ---- my $sv = shift; if (class($sv) eq "SPECIAL") { return ('undef', '1', '0')[$$sv-1]; # sv_undef, sv_yes, sv_no + } elsif (class($sv) eq "NULL") { + return 'undef'; } elsif ($sv->FLAGS & SVf_IOK) { return $sv->int_value; } elsif ($sv->FLAGS & SVf_NOK) { ! # try the default stringification ! my $r = "".$sv->NV; ! if ($r =~ /e/) { ! # If it's in scientific notation, we might have lost information ! return sprintf("%.20e", $sv->NV); ! } ! return $r; ! } elsif ($sv->FLAGS & SVf_ROK && $sv->can("RV")) { return "\\(" . const($sv->RV) . ")"; # constant folded ! } elsif ($sv->FLAGS & SVf_POK) { my $str = $sv->PV; if ($str =~ /[^ -~]/) { # ASCII for non-printing return single_delim("qq", '"', uninterp escape_str unback $str); *************** *** 2390,2395 **** --- 3171,3178 ---- } else { return single_delim("q", "'", unback $str); } + } else { + return "undef"; } } *************** *** 2405,2410 **** --- 3188,3196 ---- sub pp_const { my $self = shift; my($op, $cx) = @_; + if ($op->private & OPpCONST_ARYBASE) { + return '$['; + } # if ($op->private & OPpCONST_BARE) { # trouble with `=>' autoquoting # return $self->const_sv($op)->PV; # } *************** *** 2419,2432 **** my $op = shift; my $type = $op->name; if ($type eq "const") { ! return uninterp(escape_str(unback($self->const_sv($op)->PV))); } elsif ($type eq "concat") { my $first = $self->dq($op->first); my $last = $self->dq($op->last); # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" ! if ($last =~ /^[{\[\w]/) { ! $first =~ s/([%\$@])([A-Za-z_]\w*)$/${1}{$2}/; ! } return $first . $last; } elsif ($type eq "uc") { return '\U' . $self->dq($op->first->sibling) . '\E'; --- 3205,3222 ---- my $op = shift; my $type = $op->name; if ($type eq "const") { ! return '$[' if $op->private & OPpCONST_ARYBASE; ! return uninterp(escape_str(unback($self->const_sv($op)->as_string))); } elsif ($type eq "concat") { my $first = $self->dq($op->first); my $last = $self->dq($op->last); + # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" ! ($last =~ /^[A-Z\\\^\[\]_?]/ && ! $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc ! || ($last =~ /^[{\[\w_]/ && ! $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/); ! return $first . $last; } elsif ($type eq "uc") { return '\U' . $self->dq($op->first->sibling) . '\E'; *************** *** 2492,2501 **** --- 3282,3294 ---- } } + # Only used by tr///, so backslashes hyphens sub pchr { # ASCII my($n) = @_; if ($n == ord '\\') { return '\\\\'; + } elsif ($n == ord "-") { + return "\\-"; } elsif ($n >= ord(' ') and $n <= ord('~')) { return chr($n); } elsif ($n == ord "\a") { *************** *** 2538,2549 **** return $str; } - # XXX This has trouble with hyphens in the replacement (tr/bac/-AC/), - # and backslashes. - sub tr_decode_byte { my($table, $flags) = @_; ! my(@table) = unpack("s256", $table); my($c, $tr, @from, @to, @delfrom, $delhyphen); if ($table[ord "-"] != -1 and $table[ord("-") - 1] == -1 || $table[ord("-") + 1] == -1) --- 3331,3340 ---- return $str; } sub tr_decode_byte { my($table, $flags) = @_; ! my(@table) = unpack("s*", $table); ! splice @table, 0x100, 1; # Number of subsequent elements my($c, $tr, @from, @to, @delfrom, $delhyphen); if ($table[ord "-"] != -1 and $table[ord("-") - 1] == -1 || $table[ord("-") + 1] == -1) *************** *** 2557,2563 **** $delhyphen = 1; } } ! for ($c = 0; $c < 256; $c++) { $tr = $table[$c]; if ($tr >= 0) { push @from, $c; push @to, $tr; --- 3348,3354 ---- $delhyphen = 1; } } ! for ($c = 0; $c < @table; $c++) { $tr = $table[$c]; if ($tr >= 0) { push @from, $c; push @to, $tr; *************** *** 2589,2594 **** --- 3380,3387 ---- my $x = shift; if ($x == ord "-") { return "\\-"; + } elsif ($x == ord "\\") { + return "\\\\"; } else { return chr $x; } *************** *** 2711,2738 **** # Like dq(), but different sub re_dq { my $self = shift; ! my $op = shift; my $type = $op->name; if ($type eq "const") { ! return re_uninterp($self->const_sv($op)->PV); } elsif ($type eq "concat") { ! my $first = $self->re_dq($op->first); ! my $last = $self->re_dq($op->last); # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" ! if ($last =~ /^[{\[\w]/) { ! $first =~ s/([%\$@])([A-Za-z_]\w*)$/${1}{$2}/; ! } return $first . $last; } elsif ($type eq "uc") { ! return '\U' . $self->re_dq($op->first->sibling) . '\E'; } elsif ($type eq "lc") { ! return '\L' . $self->re_dq($op->first->sibling) . '\E'; } elsif ($type eq "ucfirst") { ! return '\u' . $self->re_dq($op->first->sibling); } elsif ($type eq "lcfirst") { ! return '\l' . $self->re_dq($op->first->sibling); } elsif ($type eq "quotemeta") { ! return '\Q' . $self->re_dq($op->first->sibling) . '\E'; } elsif ($type eq "join") { return $self->deparse($op->last, 26); # was join($", @ary) } else { --- 3504,3539 ---- # Like dq(), but different sub re_dq { my $self = shift; ! my ($op, $extended) = @_; ! my $type = $op->name; if ($type eq "const") { ! return '$[' if $op->private & OPpCONST_ARYBASE; ! my $unbacked = re_unback($self->const_sv($op)->as_string); ! return re_uninterp_extended(escape_extended_re($unbacked)) ! if $extended; ! return re_uninterp(escape_str($unbacked)); } elsif ($type eq "concat") { ! my $first = $self->re_dq($op->first, $extended); ! my $last = $self->re_dq($op->last, $extended); ! # Disambiguate "${foo}bar", "${foo}{bar}", "${foo}[1]" ! ($last =~ /^[A-Z\\\^\[\]_?]/ && ! $first =~ s/([\$@])\^$/${1}{^}/) # "${^}W" etc ! || ($last =~ /^[{\[\w_]/ && ! $first =~ s/([\$@])([A-Za-z_]\w*)$/${1}{$2}/); ! return $first . $last; } elsif ($type eq "uc") { ! return '\U' . $self->re_dq($op->first->sibling, $extended) . '\E'; } elsif ($type eq "lc") { ! return '\L' . $self->re_dq($op->first->sibling, $extended) . '\E'; } elsif ($type eq "ucfirst") { ! return '\u' . $self->re_dq($op->first->sibling, $extended); } elsif ($type eq "lcfirst") { ! return '\l' . $self->re_dq($op->first->sibling, $extended); } elsif ($type eq "quotemeta") { ! return '\Q' . $self->re_dq($op->first->sibling, $extended) . '\E'; } elsif ($type eq "join") { return $self->deparse($op->last, 26); # was join($", @ary) } else { *************** *** 2740,2754 **** } } ! sub pp_regcomp { my $self = shift; ! my($op, $cx) = @_; my $kid = $op->first; $kid = $kid->first if $kid->name eq "regcmaybe"; $kid = $kid->first if $kid->name eq "regcreset"; ! return $self->re_dq($kid); } # osmic acid -- see osmium tetroxide my %matchwords; --- 3541,3596 ---- } } ! sub pure_string { ! my ($self, $op) = @_; ! my $type = $op->name; ! ! if ($type eq 'const') { ! return 1; ! } ! elsif ($type =~ /^[ul]c(first)?$/ || $type eq 'quotemeta') { ! return $self->pure_string($op->first->sibling); ! } ! elsif ($type eq 'join') { ! my $join_op = $op->first->sibling; # Skip pushmark ! return 0 unless $join_op->name eq 'null' && $join_op->targ eq OP_RV2SV; ! ! my $gvop = $join_op->first; ! return 0 unless $gvop->name eq 'gvsv'; ! return 0 unless '"' eq $self->gv_name($self->gv_or_padgv($gvop)); ! ! return 0 unless ${$join_op->sibling} eq ${$op->last}; ! return 0 unless $op->last->name =~ /^(rv2|pad)av$/; ! } ! elsif ($type eq 'concat') { ! return $self->pure_string($op->first) ! && $self->pure_string($op->last); ! } ! elsif (is_scalar($op) || $type =~ /^[ah]elem(fast)?$/) { ! return 1; ! } ! else { ! return 0; ! } ! ! return 1; ! } ! ! sub regcomp { my $self = shift; ! my($op, $cx, $extended) = @_; my $kid = $op->first; $kid = $kid->first if $kid->name eq "regcmaybe"; $kid = $kid->first if $kid->name eq "regcreset"; ! return ($self->re_dq($kid, $extended), 1) if $self->pure_string($kid); ! return ($self->deparse($kid, $cx), 0); } + sub pp_regcomp { + my ($self, $op, $cx) = @_; + return (($self->regcomp($op, $cx, 0))[0]); + } + # osmic acid -- see osmium tetroxide my %matchwords; *************** *** 2766,2775 **** $var = $self->deparse($kid, 20); $kid = $kid->sibling; } if (null $kid) { ! $re = re_uninterp(escape_str($op->precomp)); } else { ! $re = $self->deparse($kid, 1); } my $flags = ""; $flags .= "c" if $op->pmflags & PMf_CONTINUE; --- 3608,3626 ---- $var = $self->deparse($kid, 20); $kid = $kid->sibling; } + my $quote = 1; + my $extended = ($op->pmflags & PMf_EXTENDED); if (null $kid) { ! my $unbacked = re_unback($op->precomp); ! if ($extended) { ! $re = re_uninterp_extended(escape_extended_re($unbacked)); ! } else { ! $re = re_uninterp(escape_str(re_unback($op->precomp))); ! } ! } elsif ($kid->name ne 'regcomp') { ! Carp::cluck("found ".$kid->name." where regcomp expected"); } else { ! ($re, $quote) = $self->regcomp($kid, 1, $extended); } my $flags = ""; $flags .= "c" if $op->pmflags & PMf_CONTINUE; *************** *** 2783,2792 **** if ($op->pmflags & PMf_ONCE) { # only one kind of delimiter works here $re =~ s/\?/\\?/g; $re = "?$re?"; ! } else { $re = single_delim($name, $delim, $re); } ! $re = $re . $flags; if ($binop) { return $self->maybe_parens("$var =~ $re", $cx, 20); } else { --- 3634,3643 ---- if ($op->pmflags & PMf_ONCE) { # only one kind of delimiter works here $re =~ s/\?/\\?/g; $re = "?$re?"; ! } elsif ($quote) { $re = single_delim($name, $delim, $re); } ! $re = $re . $flags if $quote; if ($binop) { return $self->maybe_parens("$var =~ $re", $cx, 20); } else { *************** *** 2804,2814 **** my($kid, @exprs, $ary, $expr); $kid = $op->first; if ($ {$kid->pmreplroot}) { ! $ary = '@' . $self->gv_name($kid->pmreplroot); } for (; !null($kid); $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); } $expr = "split(" . join(", ", @exprs) . ")"; if ($ary) { return $self->maybe_parens("$ary = $expr", $cx, 7); --- 3655,3674 ---- my($kid, @exprs, $ary, $expr); $kid = $op->first; if ($ {$kid->pmreplroot}) { ! $ary = $self->stash_variable('@', $self->gv_name($kid->pmreplroot)); } for (; !null($kid); $kid = $kid->sibling) { push @exprs, $self->deparse($kid, 6); } + + # handle special case of split(), and split(" ") that compiles to /\s+/ + $kid = $op->first; + if ($kid->flags & OPf_SPECIAL + && $exprs[0] eq '/\\s+/' + && $kid->pmflags & PMf_SKIPWHITE ) { + $exprs[0] = '" "'; + } + $expr = "split(" . join(", ", @exprs) . ")"; if ($ary) { return $self->maybe_parens("$ary = $expr", $cx, 7); *************** *** 2853,2862 **** $repl = $self->dq($repl); } } if (null $kid) { ! $re = re_uninterp(escape_str($op->precomp)); } else { ! $re = $self->deparse($kid, 1); } $flags .= "e" if $op->pmflags & PMf_EVAL; $flags .= "g" if $op->pmflags & PMf_GLOBAL; --- 3713,3729 ---- $repl = $self->dq($repl); } } + my $extended = ($op->pmflags & PMf_EXTENDED); if (null $kid) { ! my $unbacked = re_unback($op->precomp); ! if ($extended) { ! $re = re_uninterp_extended(escape_extended_re($unbacked)); ! } ! else { ! $re = re_uninterp(escape_str($unbacked)); ! } } else { ! ($re) = $self->regcomp($kid, 1, $extended); } $flags .= "e" if $op->pmflags & PMf_EVAL; $flags .= "g" if $op->pmflags & PMf_GLOBAL; *************** *** 2864,2870 **** $flags .= "m" if $op->pmflags & PMf_MULTILINE; $flags .= "o" if $op->pmflags & PMf_KEEP; $flags .= "s" if $op->pmflags & PMf_SINGLELINE; ! $flags .= "x" if $op->pmflags & PMf_EXTENDED; $flags = $substwords{$flags} if $substwords{$flags}; if ($binop) { return $self->maybe_parens("$var =~ s" --- 3731,3737 ---- $flags .= "m" if $op->pmflags & PMf_MULTILINE; $flags .= "o" if $op->pmflags & PMf_KEEP; $flags .= "s" if $op->pmflags & PMf_SINGLELINE; ! $flags .= "x" if $extended; $flags = $substwords{$flags} if $substwords{$flags}; if ($binop) { return $self->maybe_parens("$var =~ s" *************** *** 2957,2975 **** C<$x = "$y"> is not the same as C<$x = $y>: the former makes the value of $y into a string before doing the assignment. ! =item B<-u>I ! Normally, B::Deparse deparses the main code of a program, all the subs ! called by the main program (and all the subs called by them, ! recursively), and any other subs in the main:: package. To include ! subs in other packages that aren't called directly, such as AUTOLOAD, ! DESTROY, other subs called automatically by perl, and methods (which ! aren't resolved to subs until runtime), use the B<-u> option. The ! argument to B<-u> is the name of a package, and should follow directly ! after the 'u'. Multiple B<-u> options may be given, separated by ! commas. Note that unlike some other backends, B::Deparse doesn't ! (yet) try to guess automatically when B<-u> is needed -- you must ! invoke it yourself. =item B<-s>I --- 3824,3837 ---- C<$x = "$y"> is not the same as C<$x = $y>: the former makes the value of $y into a string before doing the assignment. ! =item B<-f>I ! Normally, B::Deparse deparses the main code of a program, and all the subs ! defined in the same file. To include subs defined in other files, pass the ! B<-f> option with the filename. You can pass the B<-f> option several times, to ! include more than one secondary file. (Most of the time you don't want to ! use it at all.) You can also use this option to include subs which are ! defined in the scope of a B<#line> directive with two parameters. =item B<-s>I *************** *** 3106,3111 **** --- 3968,4103 ---- options, like B<-u>, don't make sense for a single subroutine, so don't pass them. + =head2 ambient_pragmas + + $deparse->ambient_pragmas(strict => 'all', '$[' => $[); + + The compilation of a subroutine can be affected by a few compiler + directives, B. These are: + + =over 4 + + =item * + + use strict; + + =item * + + use warnings; + + =item * + + Assigning to the special variable $[ + + =item * + + use integer; + + =item * + + use bytes; + + =item * + + use utf8; + + =item * + + use re; + + =back + + Ordinarily, if you use B::Deparse on a subroutine which has + been compiled in the presence of one or more of these pragmas, + the output will include statements to turn on the appropriate + directives. So if you then compile the code returned by coderef2text, + it will behave the same way as the subroutine which you deparsed. + + However, you may know that you intend to use the results in a + particular context, where some pragmas are already in scope. In + this case, you use the B method to describe the + assumptions you wish to make. + + Not all of the options currently have any useful effect. See + L for more details. + + The parameters it accepts are: + + =over 4 + + =item strict + + Takes a string, possibly containing several values separated + by whitespace. The special values "all" and "none" mean what you'd + expect. + + $deparse->ambient_pragmas(strict => 'subs refs'); + + =item $[ + + Takes a number, the value of the array base $[. + + =item bytes + + =item utf8 + + =item integer + + If the value is true, then the appropriate pragma is assumed to + be in the ambient scope, otherwise not. + + =item re + + Takes a string, possibly containing a whitespace-separated list of + values. The values "all" and "none" are special. It's also permissible + to pass an array reference here. + + $deparser->ambient_pragmas(re => 'eval'); + + + =item warnings + + Takes a string, possibly containing a whitespace-separated list of + values. The values "all" and "none" are special, again. It's also + permissible to pass an array reference here. + + $deparser->ambient_pragmas(warnings => [qw[void io]]); + + If one of the values is the string "FATAL", then all the warnings + in that list will be considered fatal, just as with the B + pragma itself. Should you need to specify that some warnings are + fatal, and others are merely enabled, you can pass the B + parameter twice: + + $deparser->ambient_pragmas( + warnings => 'all', + warnings => [FATAL => qw/void io/], + ); + + See L for more information about lexical warnings. + + =item hint_bits + + =item warning_bits + + These two parameters are used to specify the ambient pragmas in + the format used by the special variables $^H and ${^WARNING_BITS}. + + They exist principally so that you can write code like: + + { my ($hint_bits, $warning_bits); + BEGIN {($hint_bits, $warning_bits) = ($^H, ${^WARNING_BITS})} + $deparser->ambient_pragmas ( + hint_bits => $hint_bits, + warning_bits => $warning_bits, + '$[' => 0 + $[ + ); } + + which specifies that the ambient pragmas are exactly those which + are in scope at the point of calling. + + =back + =head2 coderef2text $body = $deparse->coderef2text(\&func) *************** *** 3121,3133 **** =head1 BUGS ! See the 'to do' list at the beginning of the module file. =head1 AUTHOR Stephen McCamant , based on an earlier version by Malcolm Beattie , with ! contributions from Gisle Aas, James Duncan, Albert Dvornik, Hugo van ! der Sanden, Gurusamy Sarathy, and Nick Ing-Simmons. =cut --- 4113,4192 ---- =head1 BUGS ! =over 4 + =item * + + The only pragmas to be completely supported are: C, + C, C, and C. (C<$[>, which + behaves like a pragma, is also supported.) + + Excepting those listed above, we're currently unable to guarantee that + B::Deparse will produce a pragma at the correct point in the program. + Since the effects of pragmas are often lexically scoped, this can mean + that the pragma holds sway over a different portion of the program + than in the input file. + + =item * + + In fact, the above is a specific instance of a more general problem: + we can't guarantee to produce BEGIN blocks or C declarations in + exactly the right place. So if you use a module which affects compilation + (such as by over-riding keywords, overloading constants or whatever) + then the output code might not work as intended. + + This is the most serious outstanding problem, and will be very hard + to fix. + + =item * + + If a keyword is over-ridden, and your program explicitly calls + the built-in version by using CORE::keyword, the output of B::Deparse + will not reflect this. If you run the resulting code, it will call + the over-ridden version rather than the built-in one. (Maybe there + should be an option to B print keyword calls as C.) + + =item * + + C comes out as C, which + causes perl to issue a warning. + + The obvious fix doesn't work, because these are different: + + print (FOO 1, 2, 3), 4, 5, 6; + print FOO (1, 2, 3), 4, 5, 6; + + =item * + + Constants (other than simple strings or numbers) don't work properly. + Pathological examples that fail (and probably always will) include: + + use constant E2BIG => ($!=7); + use constant x=>\$x; print x + + The following could (and should) be made to work: + + use constant regex => qr/blah/; + print regex; + + =item * + + An input file that uses source filtering probably won't be deparsed into + runnable code, because it will still include the B declaration + for the source filtering module, even though the code that is + produced is already ordinary Perl which shouldn't be filtered again. + + =item * + + There are probably many more bugs on non-ASCII platforms (EBCDIC). + + =back + =head1 AUTHOR Stephen McCamant , based on an earlier version by Malcolm Beattie , with ! contributions from Gisle Aas, James Duncan, Albert Dvornik, Robin ! Houston, Hugo van der Sanden, Gurusamy Sarathy, and Nick Ing-Simmons. =cut diff -c /dev/null 'perl-5.7.2/ext/B/Debug.t' Index: ./ext/B/Debug.t *** ./ext/B/Debug.t Thu Jan 1 02:00:00 1970 --- ./ext/B/Debug.t Mon Jul 9 17:09:51 2001 *************** *** 0 **** --- 1,70 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } else { + @INC = '.'; + push @INC, '../lib'; + } + } + + $| = 1; + use warnings; + use strict; + use Config; + + print "1..3\n"; + + my $test = 1; + + sub ok { print "ok $test\n"; $test++ } + + + my $a; + my $Is_VMS = $^O eq 'VMS'; + my $Is_MacOS = $^O eq 'MacOS'; + + my $path = join " ", map { qq["-I$_"] } @INC; + my $redir = $Is_MacOS ? "" : "2>&1"; + + $a = `$^X $path "-MO=Debug" -e 1 $redir`; + print "not " unless $a =~ + /\bLISTOP\b.*\bOP\b.*\bCOP\b.*\bOP\b/s; + ok; + + + $a = `$^X $path "-MO=Terse" -e 1 $redir`; + print "not " unless $a =~ + /\bLISTOP\b.*leave.*\n OP\b.*enter.*\n COP\b.*nextstate.*\n OP\b.*null/s; + ok; + + $a = `$^X $path "-MO=Terse" -ane "s/foo/bar/" $redir`; + $a =~ s/\(0x[^)]+\)//g; + $a =~ s/\[[^\]]+\]//g; + $a =~ s/-e syntax OK//; + $a =~ s/[^a-z ]+//g; + $a =~ s/\s+/ /g; + $a =~ s/\b(s|foo|bar|ullsv)\b\s?//g; + $a =~ s/^\s+//; + $a =~ s/\s+$//; + my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define'; + if ($is_thread) { + $b=<new() or print "not "; + my $i=1; + print "ok " . $i++ . "\n"; + + + # Tell B::Deparse about our ambient pragmas + { my ($hint_bits, $warning_bits); + BEGIN {($hint_bits, $warning_bits) = ($^H, ${^WARNING_BITS})} + $deparse->ambient_pragmas ( + hint_bits => $hint_bits, + warning_bits => $warning_bits, + '$[' => 0 + $[ + ); + } + + $/ = "\n####\n"; + while () { + chomp; + s/#.*$//mg; + + my ($input, $expected); + if (/(.*)\n>>>>\n(.*)/s) { + ($input, $expected) = ($1, $2); + } + else { + ($input, $expected) = ($_, $_); + } + + my $coderef = eval "sub {$input}"; + + if ($@) { + print "not ok " . $i++ . "\n"; + print "# $@"; + } + else { + my $deparsed = $deparse->coderef2text( $coderef ); + my $regex = quotemeta($expected); + do { + no warnings 'misc'; + $regex =~ s/\s+/\s+/g; + }; + + my $ok = ($deparsed =~ /^\{\s*$regex\s*\}$/); + print (($ok ? "ok " : "not ok ") . $i++ . "\n"); + if (!$ok) { + print "# EXPECTED:\n"; + $regex =~ s/^/# /mg; + print "$regex\n"; + + print "\n# GOT: \n"; + $deparsed =~ s/^/# /mg; + print "$deparsed\n"; + } + } + } + + use constant 'c', 'stuff'; + print "not " if (eval "sub ".$deparse->coderef2text(\&c))->() ne 'stuff'; + print "ok " . $i++ . "\n"; + + $a = 0; + print "not " if "{\n (-1) ** \$a;\n}" + ne $deparse->coderef2text(sub{(-1) ** $a }); + print "ok " . $i++ . "\n"; + + # XXX ToDo - constsub that returns a reference + #use constant cr => ['hello']; + #my $string = "sub " . $deparse->coderef2text(\&cr); + #my $val = (eval $string)->(); + #print "not " if ref($val) ne 'ARRAY' || $val->[0] ne 'hello'; + #print "ok " . $i++ . "\n"; + + my $a; + my $Is_VMS = $^O eq 'VMS'; + my $Is_MacOS = $^O eq 'MacOS'; + + my $path = join " ", map { qq["-I$_"] } @INC; + my $redir = $Is_MacOS ? "" : "2>&1"; + + $a = `$^X $path "-MO=Deparse" -anle 1 $redir`; + $a =~ s/-e syntax OK\n//g; + $a =~ s{\\340\\242}{\\s} if (ord("\\") == 224); # EBCDIC, cp 1047 or 037 + $a =~ s{\\274\\242}{\\s} if (ord("\\") == 188); # $^O eq 'posix-bc' + $b = <<'EOF'; + + LINE: while (defined($_ = )) { + chomp $_; + our(@F) = split(" ", $_, 0); + '???'; + } + + EOF + print "# [$a]\n\# vs expected\n# [$b]\nnot " if $a ne $b; + print "ok " . $i++ . "\n"; + + __DATA__ + # 2 + 1; + #### + # 3 + { + no warnings; + '???'; + 2; + } + #### + # 4 + my $test; + ++$test and $test /= 2; + >>>> + my $test; + $test /= 2 if ++$test; + #### + # 5 + -((1, 2) x 2); + #### + # 6 + { + my $test = sub : lvalue { + my $x; + } + ; + } + #### + # 7 + { + my $test = sub : method { + my $x; + } + ; + } + #### + # 8 + { + my $test = sub : locked method { + my $x; + } + ; + } + #### + # 9 + { + 234; + } + continue { + 123; + } + #### + # 10 + my $x; + print $main::x; + #### + # 11 + my @x; + print $main::x[1]; + #### + # 12 + my %x; + $x{warn()}; diff -c 'perl-5.7.1/ext/B/O.pm' 'perl-5.7.2/ext/B/O.pm' Index: ./ext/B/O.pm *** ./ext/B/O.pm Tue Mar 6 04:04:34 2001 --- ./ext/B/O.pm Mon Jul 9 17:09:51 2001 *************** *** 3,21 **** use Carp; sub import { ! my ($class, $backend, @options) = @_; ! eval "use B::$backend ()"; ! if ($@) { ! croak "use of backend $backend failed: $@"; } ! my $compilesub = &{"B::${backend}::compile"}(@options); ! if (ref($compilesub) eq "CODE") { ! minus_c; ! save_BEGINs; ! eval 'CHECK { &$compilesub() }'; ! } else { ! die $compilesub; ! } } 1; --- 3,50 ---- use Carp; sub import { ! my ($class, @options) = @_; ! my ($quiet, $veryquiet) = (0, 0); ! if ($options[0] eq '-q' || $options[0] eq '-qq') { ! $quiet = 1; ! open (SAVEOUT, ">&STDOUT"); ! close STDOUT; ! open (STDOUT, ">", \$O::BEGIN_output); ! if ($options[0] eq '-qq') { ! $veryquiet = 1; ! } ! shift @options; } ! my $backend = shift (@options); ! eval q[ ! BEGIN { ! minus_c; ! save_BEGINs; ! } ! ! CHECK { ! if ($quiet) { ! close STDOUT; ! open (STDOUT, ">&SAVEOUT"); ! close SAVEOUT; ! } ! use B::].$backend.q[ (); ! if ($@) { ! croak "use of backend $backend failed: $@"; ! } ! ! ! my $compilesub = &{"B::${backend}::compile"}(@options); ! if (ref($compilesub) ne "CODE") { ! die $compilesub; ! } ! ! &$compilesub(); ! ! close STDERR if $veryquiet; ! } ! ]; ! die $@ if $@; } 1; *************** *** 28,38 **** =head1 SYNOPSIS ! perl -MO=Backend[,OPTIONS] foo.pl =head1 DESCRIPTION This is the module that is used as a frontend to the Perl Compiler. =head1 CONVENTIONS --- 57,80 ---- =head1 SYNOPSIS ! perl -MO=[-q,]Backend[,OPTIONS] foo.pl =head1 DESCRIPTION This is the module that is used as a frontend to the Perl Compiler. + + If you pass the C<-q> option to the module, then the STDOUT + filehandle will be redirected into the variable C<$O::BEGIN_output> + during compilation. This has the effect that any output printed + to STDOUT by BEGIN blocks or use'd modules will be stored in this + variable rather than printed. It's useful with those backends which + produce output themselves (C, C etc), so that + their output is not confused with that generated by the code + being compiled. + + The C<-qq> option behaves like C<-q>, except that it also closes + STDERR after deparsing has finished. This suppresses the "Syntax OK" + message normally produced by perl. =head1 CONVENTIONS diff -c /dev/null 'perl-5.7.2/ext/B/Showlex.t' Index: ./ext/B/Showlex.t *** ./ext/B/Showlex.t Thu Jan 1 02:00:00 1970 --- ./ext/B/Showlex.t Mon Jul 9 17:09:51 2001 *************** *** 0 **** --- 1,39 ---- + #!./perl + + BEGIN { + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } + } + + $| = 1; + use warnings; + use strict; + use Config; + + print "1..1\n"; + + my $test = 1; + + sub ok { print "ok $test\n"; $test++ } + + my $a; + my $Is_VMS = $^O eq 'VMS'; + my $Is_MacOS = $^O eq 'MacOS'; + + my $path = join " ", map { qq["-I$_"] } @INC; + my $redir = $Is_MacOS ? "" : "2>&1"; + my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define'; + + if ($is_thread) { + print "# use5005threads: test $test skipped\n"; + } else { + $a = `$^X $path "-MO=Showlex" -e "my %one" $redir`; + if (ord('A') != 193) { # ASCIIish + print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%one.*sv_undef.*HV/s; + } + else { # EBCDICish C<1: PVNV (0x1a7ede34) "%\226\225\205"> + print "# [$a]\nnot " unless $a =~ /sv_undef.*PVNV.*%\\[0-9].*sv_undef.*HV/s; + } + } + ok; diff -c /dev/null 'perl-5.7.2/ext/B/Stash.t' Index: ./ext/B/Stash.t *** ./ext/B/Stash.t Thu Jan 1 02:00:00 1970 --- ./ext/B/Stash.t Mon Jul 9 17:09:51 2001 *************** *** 0 **** --- 1,60 ---- + #!./perl + + BEGIN { + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } + } + + $| = 1; + use warnings; + use strict; + use Config; + + print "1..1\n"; + + my $test = 1; + + sub ok { print "ok $test\n"; $test++ } + + + my $a; + my $Is_VMS = $^O eq 'VMS'; + my $Is_MacOS = $^O eq 'MacOS'; + + my $path = join " ", map { qq["-I$_"] } @INC; + my $redir = $Is_MacOS ? "" : "2>&1"; + + + chomp($a = `$^X $path "-MB::Stash" "-Mwarnings" -e1`); + $a = join ',', sort split /,/, $a; + $a =~ s/-u(PerlIO|open)(?:::\w+)?,//g; + $a =~ s/-uWin32,// if $^O eq 'MSWin32'; + $a =~ s/-uNetWare,// if $^O eq 'NetWare'; + $a =~ s/-u(Cwd|File|File::Copy|OS2),//g if $^O eq 'os2'; + $a =~ s/-uCwd,// if $^O eq 'cygwin'; + $b = '-uCarp,-uCarp::Heavy,-uDB,-uExporter,-uExporter::Heavy,-uattributes,' + . '-umain,-ustrict,-uutf8,-uwarnings'; + if ($Is_VMS) { + $a =~ s/-uFile,-uFile::Copy,//; + $a =~ s/-uVMS,-uVMS::Filespec,//; + $a =~ s/-uSocket,//; # Socket is optional/compiler version dependent + } + + { + no strict 'vars'; + use vars '$OS2::is_aout'; + } + if (($Config{static_ext} eq ' ' || + ($Config{static_ext} eq 'Socket' && $Is_VMS)) + && !($^O eq 'os2' and $OS2::is_aout) + ) { + if (ord('A') == 193) { # EBCDIC sort order is qw(a A) not qw(A a) + $b = join ',', sort split /,/, $b; + } + print "# [$a]\n# vs.\n# [$b]\nnot " if $a ne $b; + ok; + } else { + print "ok $test # skipped: one or more static extensions\n"; $test++; + } + diff -c 'perl-5.7.1/ext/B/defsubs_h.PL' 'perl-5.7.2/ext/B/defsubs_h.PL' Index: ./ext/B/defsubs_h.PL *** ./ext/B/defsubs_h.PL Sat Mar 10 23:57:52 2001 --- ./ext/B/defsubs_h.PL Mon Jul 9 17:09:52 2001 *************** *** 13,19 **** GVf_IMPORTED_AV GVf_IMPORTED_HV GVf_IMPORTED_SV GVf_IMPORTED_CV CVf_METHOD CVf_LOCKED CVf_LVALUE ! SVf_IOK SVf_IVisUV SVf_NOK SVf_POK SVf_ROK SVp_IOK SVp_POK SVp_NOK )) { --- 13,19 ---- GVf_IMPORTED_AV GVf_IMPORTED_HV GVf_IMPORTED_SV GVf_IMPORTED_CV CVf_METHOD CVf_LOCKED CVf_LVALUE ! SVpad_OUR SVf_IOK SVf_IVisUV SVf_NOK SVf_POK SVf_ROK SVp_IOK SVp_POK SVp_NOK )) { diff -c 'perl-5.7.1/ext/ByteLoader/ByteLoader.xs' 'perl-5.7.2/ext/ByteLoader/ByteLoader.xs' Index: ./ext/ByteLoader/ByteLoader.xs *** ./ext/ByteLoader/ByteLoader.xs Tue Mar 6 04:04:35 2001 --- ./ext/ByteLoader/ByteLoader.xs Mon Jul 9 17:09:52 2001 *************** *** 117,123 **** PROTOTYPES: ENABLE void ! import(...) PREINIT: SV *sv = newSVpvn ("", 0); PPCODE: --- 117,124 ---- PROTOTYPES: ENABLE void ! import(package="ByteLoader", ...) ! char *package PREINIT: SV *sv = newSVpvn ("", 0); PPCODE: *************** *** 126,131 **** filter_add(byteloader_filter, sv); void ! unimport(...) PPCODE: filter_del(byteloader_filter); --- 127,133 ---- filter_add(byteloader_filter, sv); void ! unimport(package="ByteLoader", ...) ! char *package PPCODE: filter_del(byteloader_filter); diff -c 'perl-5.7.1/ext/ByteLoader/bytecode.h' 'perl-5.7.2/ext/ByteLoader/bytecode.h' Index: ./ext/ByteLoader/bytecode.h *** ./ext/ByteLoader/bytecode.h Tue Mar 6 04:04:35 2001 --- ./ext/ByteLoader/bytecode.h Thu Jul 12 16:46:47 2001 *************** *** 74,80 **** #define BGET_op_tr_array(arg) do { \ unsigned short *ary; \ - int i; \ New(666, ary, 256, unsigned short); \ BGET_FREAD(ary, sizeof(unsigned short), 256); \ arg = (char *) ary; \ --- 74,79 ---- *************** *** 133,140 **** hv_store((HV*)sv, bstate->bs_pv.xpv_pv, bstate->bs_pv.xpv_cur, arg, 0) #define BSET_pv_free(pv) Safefree(pv.xpv_pv) #define BSET_pregcomp(o, arg) \ ! ((PMOP*)o)->op_pmregexp = arg ? \ ! CALLREGCOMP(aTHX_ arg, arg + bstate->bs_pv.xpv_cur, ((PMOP*)o)) : 0 #define BSET_newsv(sv, arg) \ STMT_START { \ sv = (arg == SVt_PVAV ? (SV*)newAV() : \ --- 132,139 ---- hv_store((HV*)sv, bstate->bs_pv.xpv_pv, bstate->bs_pv.xpv_cur, arg, 0) #define BSET_pv_free(pv) Safefree(pv.xpv_pv) #define BSET_pregcomp(o, arg) \ ! (PM_SETRE(((PMOP*)o), (arg ? \ ! CALLREGCOMP(aTHX_ arg, arg + bstate->bs_pv.xpv_cur, ((PMOP*)o)) : 0))) #define BSET_newsv(sv, arg) \ STMT_START { \ sv = (arg == SVt_PVAV ? (SV*)newAV() : \ diff -c /dev/null 'perl-5.7.2/ext/Cwd/Cwd.t' Index: ./ext/Cwd/Cwd.t *** ./ext/Cwd/Cwd.t Thu Jan 1 02:00:00 1970 --- ./ext/Cwd/Cwd.t Mon Jul 9 17:09:52 2001 *************** *** 0 **** --- 1,134 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + use Config; + use Cwd; + use strict; + use warnings; + + print "1..14\n"; + + # check imports + print +(defined(&cwd) && + defined(&getcwd) && + defined(&fastcwd) && + defined(&fastgetcwd) ? + "" : "not "), "ok 1\n"; + print +(!defined(&chdir) && + !defined(&abs_path) && + !defined(&fast_abs_path) ? + "" : "not "), "ok 2\n"; + + # XXX force Cwd to bootsrap its XSUBs since we have set @INC = "../lib" + # XXX and subsequent chdir()s can make them impossible to find + eval { fastcwd }; + + # Must find an external pwd (or equivalent) command. + + my $pwd_cmd = + ($^O eq "MSWin32" || $^O eq "NetWare") ? "cd" : (grep { -x && -f } map { "$_/pwd" } + split m/$Config{path_sep}/, $ENV{PATH})[0]; + + if ($^O eq 'VMS') { $pwd_cmd = 'SHOW DEFAULT'; } + + if (defined $pwd_cmd) { + chomp(my $start = `$pwd_cmd`); + # Win32's cd returns native C:\ style + $start =~ s,\\,/,g if ($^O eq 'MSWin32' || $^O eq "NetWare"); + # DCL SHOW DEFAULT has leading spaces + $start =~ s/^\s+// if $^O eq 'VMS'; + if ($?) { + for (3..6) { + print "ok $_ # Skip: '$pwd_cmd' failed\n"; + } + } else { + my $cwd = cwd; + my $getcwd = getcwd; + my $fastcwd = fastcwd; + my $fastgetcwd = fastgetcwd; + print +($cwd eq $start ? "" : "not "), "ok 3\n"; + print +($getcwd eq $start ? "" : "not "), "ok 4\n"; + print +($fastcwd eq $start ? "" : "not "), "ok 5\n"; + print +($fastgetcwd eq $start ? "" : "not "), "ok 6\n"; + } + } else { + for (3..6) { + print "ok $_ # Skip: no pwd command found\n"; + } + } + + mkdir "pteerslt", 0777; + mkdir "pteerslt/path", 0777; + mkdir "pteerslt/path/to", 0777; + mkdir "pteerslt/path/to/a", 0777; + mkdir "pteerslt/path/to/a/dir", 0777; + Cwd::chdir "pteerslt/path/to/a/dir"; + my $cwd = cwd; + my $getcwd = getcwd; + my $fastcwd = fastcwd; + my $fastgetcwd = fastgetcwd; + my $want = "t/pteerslt/path/to/a/dir"; + print "# cwd = '$cwd'\n"; + print "# getcwd = '$getcwd'\n"; + print "# fastcwd = '$fastcwd'\n"; + print "# fastgetcwd = '$fastgetcwd'\n"; + # This checked out OK on ODS-2 and ODS-5: + $want = "T\.PTEERSLT\.PATH\.TO\.A\.DIR\]" if $^O eq 'VMS'; + print +($cwd =~ m|$want$| ? "" : "not "), "ok 7\n"; + print +($getcwd =~ m|$want$| ? "" : "not "), "ok 8\n"; + print +($fastcwd =~ m|$want$| ? "" : "not "), "ok 9\n"; + print +($fastgetcwd =~ m|$want$| ? "" : "not "), "ok 10\n"; + + # Cwd::chdir should also update $ENV{PWD} + print "#$ENV{PWD}\n"; + print +($ENV{PWD} =~ m|$want$| ? "" : "not "), "ok 11\n"; + Cwd::chdir ".."; rmdir "dir"; + print "#$ENV{PWD}\n"; + Cwd::chdir ".."; rmdir "a"; + print "#$ENV{PWD}\n"; + Cwd::chdir ".."; rmdir "to"; + print "#$ENV{PWD}\n"; + Cwd::chdir ".."; rmdir "path"; + print "#$ENV{PWD}\n"; + Cwd::chdir ".."; rmdir "pteerslt"; + print "#$ENV{PWD}\n"; + if ($^O eq 'VMS') { + # This checked out OK on ODS-2 and ODS-5: + print +($ENV{PWD} =~ m|\bT\]$| ? "" : "not "), "ok 12\n"; + } + else { + print +($ENV{PWD} =~ m|\bt$| ? "" : "not "), "ok 12\n"; + } + + if ($Config{d_symlink}) { + mkdir "pteerslt", 0777; + mkdir "pteerslt/path", 0777; + mkdir "pteerslt/path/to", 0777; + mkdir "pteerslt/path/to/a", 0777; + mkdir "pteerslt/path/to/a/dir", 0777; + symlink "pteerslt/path/to/a/dir" => "linktest"; + + my $abs_path = Cwd::abs_path("linktest"); + my $fast_abs_path = Cwd::fast_abs_path("linktest"); + my $want = "t/pteerslt/path/to/a/dir"; + + print "# abs_path $abs_path\n"; + print "# fast_abs_path $fast_abs_path\n"; + print "# want $want\n"; + print +($abs_path =~ m|$want$| ? "" : "not "), "ok 13\n"; + print +($fast_abs_path =~ m|$want$| ? "" : "not "), "ok 14\n"; + + rmdir "pteerslt/path/to/a/dir"; + rmdir "pteerslt/path/to/a"; + rmdir "pteerslt/path/to"; + rmdir "pteerslt/path"; + rmdir "pteerslt"; + unlink "linktest"; + } else { + print "ok 13 # skipped\n"; + print "ok 14 # skipped\n"; + } diff -c 'perl-5.7.1/ext/Cwd/Cwd.xs' 'perl-5.7.2/ext/Cwd/Cwd.xs' Index: ./ext/Cwd/Cwd.xs *** ./ext/Cwd/Cwd.xs Sat Mar 31 01:56:41 2001 --- ./ext/Cwd/Cwd.xs Mon Jul 9 17:09:52 2001 *************** *** 2,134 **** #include "perl.h" #include "XSUB.h" ! /* Originally written in Perl by John Bazik; rewritten in C by Ben Sugars. ! * Comments from the orignal: ! * This is a faster version of getcwd. It's also more dangerous ! * because you might chdir out of a directory that you can't chdir ! * back into. */ char * ! _cwdxs_fastcwd(void) { ! /* XXX Should we just use getcwd(3) if available? */ ! struct stat statbuf; ! int orig_cdev, orig_cino, cdev, cino, odev, oino, tdev, tino; ! int i = 0, j = 0, k = 0, ndirs = 16, pathlen = 0, namelen; ! DIR *dir; ! Direntry_t *dp; ! char **names, *path; ! Newz(0, names, ndirs, char*); ! if (PerlLIO_lstat(".", &statbuf) < 0) { ! Safefree(names); ! return FALSE; ! } ! orig_cdev = statbuf.st_dev; ! orig_cino = statbuf.st_ino; ! cdev = orig_cdev; ! cino = orig_cino; ! for (;;) { ! odev = cdev; ! oino = cino; ! if (PerlDir_chdir("..") < 0) { ! Safefree(names); ! return FALSE; ! } ! if (PerlLIO_stat(".", &statbuf) < 0) { ! Safefree(names); ! return FALSE; ! } ! cdev = statbuf.st_dev; ! cino = statbuf.st_ino; ! if (odev == cdev && oino == cino) ! break; ! if (!(dir = PerlDir_open("."))) { ! Safefree(names); ! return FALSE; ! } ! while ((dp = PerlDir_read(dir)) != NULL) { ! if (PerlLIO_lstat(dp->d_name, &statbuf) < 0) { ! Safefree(names); ! return FALSE; ! } ! if (strEQ(dp->d_name, ".")) ! continue; ! if (strEQ(dp->d_name, "..")) ! continue; ! tdev = statbuf.st_dev; ! tino = statbuf.st_ino; ! if (tino == oino && tdev == odev) ! break; ! } ! if (!dp) { ! Safefree(names); ! return FALSE; ! } ! if (i >= ndirs) { ! ndirs += 16; ! Renew(names, ndirs, char*); ! } ! #ifdef DIRNAMLEN ! namelen = dp->d_namlen; #else ! namelen = strlen(dp->d_name); #endif - Newz(0, *(names + i), namelen + 1, char); - Copy(dp->d_name, *(names + i), namelen, char); - *(names[i] + namelen) = '\0'; - pathlen += (namelen + 1); - ++i; ! if (PerlDir_close(dir) < 0) { ! Safefree(names); ! return FALSE; ! } ! } ! Newz(0, path, pathlen + 1, char); ! for (j = i - 1; j >= 0; j--) { ! *(path + k) = '/'; ! Copy(names[j], path + k + 1, strlen(names[j]) + 1, char); ! k = k + strlen(names[j]) + 1; ! Safefree(names[j]); ! } ! if (PerlDir_chdir(path) < 0) { ! Safefree(names); ! Safefree(path); ! return FALSE; ! } ! if (PerlLIO_stat(".", &statbuf) < 0) { ! Safefree(names); ! Safefree(path); ! return FALSE; ! } ! cdev = statbuf.st_dev; ! cino = statbuf.st_ino; ! if (cdev != orig_cdev || cino != orig_cino) ! Perl_croak(aTHX_ "Unstable directory path, current directory changed unexpectedly"); ! ! Safefree(names); ! return(path); } - MODULE = Cwd PACKAGE = Cwd ! char * ! _fastcwd() PPCODE: ! char * buf; ! buf = _cwdxs_fastcwd(); ! if (buf) { ! PUSHs(sv_2mortal(newSVpv(buf, 0))); ! Safefree(buf); } else ! XSRETURN_UNDEF; --- 2,247 ---- #include "perl.h" #include "XSUB.h" ! #ifdef I_UNISTD ! # include ! #endif ! ! /* The realpath() implementation from OpenBSD 2.9 (realpath.c 1.4) ! * Renamed here to bsd_realpath() to avoid library conflicts. ! * --jhi 2000-06-20 */ ! ! /* ! * Copyright (c) 1994 ! * The Regents of the University of California. All rights reserved. ! * ! * This code is derived from software contributed to Berkeley by ! * Jan-Simon Pendry. ! * ! * Redistribution and use in source and binary forms, with or without ! * modification, are permitted provided that the following conditions ! * are met: ! * 1. Redistributions of source code must retain the above copyright ! * notice, this list of conditions and the following disclaimer. ! * 2. Redistributions in binary form must reproduce the above copyright ! * notice, this list of conditions and the following disclaimer in the ! * documentation and/or other materials provided with the distribution. ! * 3. All advertising materials mentioning features or use of this software ! * must display the following acknowledgement: ! * This product includes software developed by the University of ! * California, Berkeley and its contributors. ! * 4. Neither the name of the University nor the names of its contributors ! * may be used to endorse or promote products derived from this software ! * without specific prior written permission. ! * ! * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! * SUCH DAMAGE. ! */ ! ! #if defined(LIBC_SCCS) && !defined(lint) ! static char *rcsid = "$OpenBSD: realpath.c,v 1.4 1998/05/18 09:55:19 deraadt Exp $"; ! #endif /* LIBC_SCCS and not lint */ ! ! /* OpenBSD system #includes removed since the Perl ones should do. --jhi */ ! ! #ifndef MAXSYMLINKS ! #define MAXSYMLINKS 8 ! #endif ! ! /* ! * char *realpath(const char *path, char resolved_path[MAXPATHLEN]); ! * ! * Find the real name of path, by removing all ".", ".." and symlink ! * components. Returns (resolved) on success, or (NULL) on failure, ! * in which case the path which caused trouble is left in (resolved). ! */ ! static char * ! bsd_realpath(path, resolved) ! const char *path; ! char *resolved; { ! #ifdef VMS ! return Perl_rmsexpand((char*)path, resolved, NULL, 0); ! #else ! struct stat sb; ! int n, rootd, serrno; ! char *p, *q, wbuf[MAXPATHLEN]; ! int symlinks = 0; ! /* Save the starting point. */ ! #ifdef HAS_FCHDIR ! int fd; ! if ((fd = open(".", O_RDONLY)) < 0) { ! (void)strcpy(resolved, "."); ! return (NULL); ! } ! #else ! char wd[MAXPATHLEN]; ! if (getcwd(wd, MAXPATHLEN - 1) == NULL) { ! (void)strcpy(resolved, "."); ! return (NULL); ! } ! #endif ! /* ! * Find the dirname and basename from the path to be resolved. ! * Change directory to the dirname component. ! * lstat the basename part. ! * if it is a symlink, read in the value and loop. ! * if it is a directory, then change to that directory. ! * get the current directory name and append the basename. ! */ ! (void)strncpy(resolved, path, MAXPATHLEN - 1); ! resolved[MAXPATHLEN - 1] = '\0'; ! loop: ! q = strrchr(resolved, '/'); ! if (q != NULL) { ! p = q + 1; ! if (q == resolved) ! q = "/"; ! else { ! do { ! --q; ! } while (q > resolved && *q == '/'); ! q[1] = '\0'; ! q = resolved; ! } ! if (chdir(q) < 0) ! goto err1; ! } else ! p = resolved; ! #if defined(HAS_LSTAT) && defined(HAS_READLINK) && defined(HAS_SYMLINK) ! /* Deal with the last component. */ ! if (lstat(p, &sb) == 0) { ! if (S_ISLNK(sb.st_mode)) { ! if (++symlinks > MAXSYMLINKS) { ! errno = ELOOP; ! goto err1; ! } ! n = readlink(p, resolved, MAXPATHLEN-1); ! if (n < 0) ! goto err1; ! resolved[n] = '\0'; ! goto loop; ! } ! if (S_ISDIR(sb.st_mode)) { ! if (chdir(p) < 0) ! goto err1; ! p = ""; ! } ! } ! #endif ! /* ! * Save the last component name and get the full pathname of ! * the current directory. ! */ ! (void)strcpy(wbuf, p); ! if (getcwd(resolved, MAXPATHLEN) == 0) ! goto err1; ! /* ! * Join the two strings together, ensuring that the right thing ! * happens if the last component is empty, or the dirname is root. ! */ ! if (resolved[0] == '/' && resolved[1] == '\0') ! rootd = 1; ! else ! rootd = 0; ! ! if (*wbuf) { ! if (strlen(resolved) + strlen(wbuf) + rootd + 1 > MAXPATHLEN) { ! errno = ENAMETOOLONG; ! goto err1; ! } ! if (rootd == 0) ! (void)strcat(resolved, "/"); ! (void)strcat(resolved, wbuf); ! } ! ! /* Go back to where we came from. */ ! #ifdef HAS_FCHDIR ! if (fchdir(fd) < 0) { ! serrno = errno; ! goto err2; ! } #else ! if (chdir(wd) < 0) { ! serrno = errno; ! goto err2; ! } #endif ! /* It's okay if the close fails, what's an fd more or less? */ ! #ifdef HAS_FCHDIR ! (void)close(fd); ! #endif ! return (resolved); ! err1: serrno = errno; ! #ifdef HAS_FCHDIR ! (void)fchdir(fd); ! #else ! (void)chdir(wd); ! #endif ! err2: ! #ifdef HAS_FCHDIR ! (void)close(fd); ! #endif ! errno = serrno; ! return (NULL); ! #endif } MODULE = Cwd PACKAGE = Cwd ! PROTOTYPES: ENABLE ! ! void ! fastcwd() PPCODE: ! { ! dXSTARG; ! getcwd_sv(TARG); ! XSprePUSH; PUSHTARG; ! } ! ! void ! abs_path(pathsv=Nullsv) ! SV *pathsv ! PPCODE: ! { ! dXSTARG; ! char *path; ! STRLEN len; ! char buf[MAXPATHLEN]; ! ! if (pathsv) ! path = SvPV(pathsv, len); ! else { ! path = "."; ! len = 1; } + + if (bsd_realpath(path, buf)) { + sv_setpvn(TARG, buf, strlen(buf)); + SvPOK_only(TARG); + } else ! sv_setsv(TARG, &PL_sv_undef); ! ! XSprePUSH; PUSHTARG; ! } diff -c 'perl-5.7.1/ext/Cwd/Makefile.PL' 'perl-5.7.2/ext/Cwd/Makefile.PL' Index: ./ext/Cwd/Makefile.PL *** ./ext/Cwd/Makefile.PL Sat Mar 31 01:56:41 2001 --- ./ext/Cwd/Makefile.PL Mon Jul 9 17:09:52 2001 *************** *** 1,5 **** use ExtUtils::MakeMaker; WriteMakefile( NAME => 'Cwd', ! VERSION => '2.04', ); --- 1,5 ---- use ExtUtils::MakeMaker; WriteMakefile( NAME => 'Cwd', ! VERSION => '2.05', ); diff -c 'perl-5.7.1/ext/DB_File/Changes' 'perl-5.7.2/ext/DB_File/Changes' Index: ./ext/DB_File/Changes *** ./ext/DB_File/Changes Tue Mar 6 04:04:35 2001 --- ./ext/DB_File/Changes Mon Jul 9 17:09:52 2001 *************** *** 334,336 **** --- 334,357 ---- * Updated dbinfo to support Berkeley DB 3.2 file format changes. + 1.76 15th January 2001 + + * Added instructions for using LD_PRELOAD to get Berkeley DB 2.x to work + with DB_File on Linux. Thanks to Norbert Bollow for sending details of + this approach. + + + 1.77 26th April 2001 + + * AIX is reported to need -lpthreads, so Makefile.PL now checks for AIX and + adds it to the link options. + + * Minor documentation updates. + + * Merged Core patch 9176 + + * Added a patch from Edward Avis that adds support for splice with + recno databases. + + * Modified Makefile.PL to only enable the warnings pragma if using perl + 5.6.1 or better. diff -c 'perl-5.7.1/ext/DB_File/DB_File.pm' 'perl-5.7.2/ext/DB_File/DB_File.pm' Index: ./ext/DB_File/DB_File.pm *** ./ext/DB_File/DB_File.pm Fri Mar 16 04:54:46 2001 --- ./ext/DB_File/DB_File.pm Mon Jul 9 17:09:52 2001 *************** *** 1,10 **** # DB_File.pm -- Perl 5 interface to Berkeley DB # # written by Paul Marquess (Paul.Marquess@btinternet.com) ! # last modified 17th December 2000 ! # version 1.75 # ! # Copyright (c) 1995-2000 Paul Marquess. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. --- 1,10 ---- # DB_File.pm -- Perl 5 interface to Berkeley DB # # written by Paul Marquess (Paul.Marquess@btinternet.com) ! # last modified 26th April 2001 ! # version 1.77 # ! # Copyright (c) 1995-2001 Paul Marquess. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. *************** *** 151,157 **** use Carp; ! $VERSION = "1.75" ; #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE; $DB_BTREE = new DB_File::BTREEINFO ; --- 151,157 ---- use Carp; ! $VERSION = "1.77" ; #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE; $DB_BTREE = new DB_File::BTREEINFO ; *************** *** 307,312 **** --- 307,477 ---- } } + + sub SPLICE + { + my $self = shift; + my $offset = shift; + if (not defined $offset) { + carp 'Use of uninitialized value in splice'; + $offset = 0; + } + + my $length = @_ ? shift : 0; + # Carping about definedness comes _after_ the OFFSET sanity check. + # This is so we get the same error messages as Perl's splice(). + # + + my @list = @_; + + my $size = $self->FETCHSIZE(); + + # 'If OFFSET is negative then it start that far from the end of + # the array.' + # + if ($offset < 0) { + my $new_offset = $size + $offset; + if ($new_offset < 0) { + die "Modification of non-creatable array value attempted, " + . "subscript $offset"; + } + $offset = $new_offset; + } + + if ($offset > $size) { + $offset = $size; + } + + if (not defined $length) { + carp 'Use of uninitialized value in splice'; + $length = 0; + } + + # 'If LENGTH is omitted, removes everything from OFFSET onward.' + if (not defined $length) { + $length = $size - $offset; + } + + # 'If LENGTH is negative, leave that many elements off the end of + # the array.' + # + if ($length < 0) { + $length = $size - $offset + $length; + + if ($length < 0) { + # The user must have specified a length bigger than the + # length of the array passed in. But perl's splice() + # doesn't catch this, it just behaves as for length=0. + # + $length = 0; + } + } + + if ($length > $size - $offset) { + $length = $size - $offset; + } + + # $num_elems holds the current number of elements in the database. + my $num_elems = $size; + + # 'Removes the elements designated by OFFSET and LENGTH from an + # array,'... + # + my @removed = (); + foreach (0 .. $length - 1) { + my $old; + my $status = $self->get($offset, $old); + if ($status != 0) { + my $msg = "error from Berkeley DB on get($offset, \$old)"; + if ($status == 1) { + $msg .= ' (no such element?)'; + } + else { + $msg .= ": error status $status"; + if (defined $! and $! ne '') { + $msg .= ", message $!"; + } + } + die $msg; + } + push @removed, $old; + + $status = $self->del($offset); + if ($status != 0) { + my $msg = "error from Berkeley DB on del($offset)"; + if ($status == 1) { + $msg .= ' (no such element?)'; + } + else { + $msg .= ": error status $status"; + if (defined $! and $! ne '') { + $msg .= ", message $!"; + } + } + die $msg; + } + + -- $num_elems; + } + + # ...'and replaces them with the elements of LIST, if any.' + my $pos = $offset; + while (defined (my $elem = shift @list)) { + my $old_pos = $pos; + my $status; + if ($pos >= $num_elems) { + $status = $self->put($pos, $elem); + } + else { + $status = $self->put($pos, $elem, $self->R_IBEFORE); + } + + if ($status != 0) { + my $msg = "error from Berkeley DB on put($pos, $elem, ...)"; + if ($status == 1) { + $msg .= ' (no such element?)'; + } + else { + $msg .= ", error status $status"; + if (defined $! and $! ne '') { + $msg .= ", message $!"; + } + } + die $msg; + } + + die "pos unexpectedly changed from $old_pos to $pos with R_IBEFORE" + if $old_pos != $pos; + + ++ $pos; + ++ $num_elems; + } + + if (wantarray) { + # 'In list context, returns the elements removed from the + # array.' + # + return @removed; + } + elsif (defined wantarray and not wantarray) { + # 'In scalar context, returns the last element removed, or + # undef if no elements are removed.' + # + if (@removed) { + my $last = pop @removed; + return "$last"; + } + else { + return undef; + } + } + elsif (not defined wantarray) { + # Void context + } + else { die } + } + sub ::DB_File::splice { &SPLICE } + sub find_dup { croak "Usage: \$db->find_dup(key,value)\n" *************** *** 414,419 **** --- 579,585 ---- $X->push(list); $a = $X->shift; $X->unshift(list); + @r = $X->splice(offset, length, elements); # DBM Filters $old_filter = $db->filter_store_key ( sub { ... } ) ; *************** *** 475,481 **** =head2 Using DB_File with Berkeley DB version 2 or 3 Although B is intended to be used with Berkeley DB version 1, ! it can also be used with version 2.or 3 In this case the interface is limited to the functionality provided by Berkeley DB 1.x. Anywhere the version 2 or 3 interface differs, B arranges for it to work like version 1. This feature allows B scripts that were built --- 641,647 ---- =head2 Using DB_File with Berkeley DB version 2 or 3 Although B is intended to be used with Berkeley DB version 1, ! it can also be used with version 2 or 3. In this case the interface is limited to the functionality provided by Berkeley DB 1.x. Anywhere the version 2 or 3 interface differs, B arranges for it to work like version 1. This feature allows B scripts that were built *************** *** 486,493 **** B The database file format has changed in both Berkeley DB version 2 and 3. If you cannot recreate your databases, you must dump ! any existing databases with the C utility that comes with ! Berkeley DB. Once you have rebuilt DB_File to use Berkeley DB version 2 or 3, your databases can be recreated using C. Refer to the Berkeley DB documentation for further details. --- 652,659 ---- B The database file format has changed in both Berkeley DB version 2 and 3. If you cannot recreate your databases, you must dump ! any existing databases with either the C or the C ! utility that comes with Berkeley DB. Once you have rebuilt DB_File to use Berkeley DB version 2 or 3, your databases can be recreated using C. Refer to the Berkeley DB documentation for further details. *************** *** 675,681 **** use vars qw( %h $k $v ) ; unlink "fruit" ; ! tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0640, $DB_HASH or die "Cannot open file 'fruit': $!\n"; # Add a few key/value pairs to the file --- 841,847 ---- use vars qw( %h $k $v ) ; unlink "fruit" ; ! tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0666, $DB_HASH or die "Cannot open file 'fruit': $!\n"; # Add a few key/value pairs to the file *************** *** 736,742 **** $DB_BTREE->{'compare'} = \&Compare ; unlink "tree" ; ! tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0640, $DB_BTREE or die "Cannot open file 'tree': $!\n" ; # Add a key/value pair to the file --- 902,908 ---- $DB_BTREE->{'compare'} = \&Compare ; unlink "tree" ; ! tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open file 'tree': $!\n" ; # Add a key/value pair to the file *************** *** 801,807 **** # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file --- 967,973 ---- # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file *************** *** 856,862 **** # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file --- 1022,1028 ---- # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file *************** *** 927,933 **** # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE or die "Cannot open $filename: $!\n"; my $cnt = $x->get_dup("Wall") ; --- 1093,1099 ---- # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; my $cnt = $x->get_dup("Wall") ; *************** *** 977,983 **** # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE or die "Cannot open $filename: $!\n"; $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; --- 1143,1149 ---- # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; *************** *** 1016,1022 **** # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE or die "Cannot open $filename: $!\n"; $x->del_dup("Wall", "Larry") ; --- 1182,1188 ---- # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; $x->del_dup("Wall", "Larry") ; *************** *** 1069,1075 **** $filename = "tree" ; unlink $filename ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file --- 1235,1241 ---- $filename = "tree" ; unlink $filename ; ! $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file *************** *** 1149,1154 **** --- 1315,1323 ---- still have bval default to C<"\n"> for variable length records, and space for fixed length records. + Also note that the bval option only allows you to specify a single byte + as a delimeter. + =head2 A Simple Example Here is a simple example that uses RECNO (if you are using a version *************** *** 1163,1169 **** unlink $filename ; my @h ; ! tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_RECNO or die "Cannot open file 'text': $!\n" ; # Add a few key/value pairs to the file --- 1332,1338 ---- unlink $filename ; my @h ; ! tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_RECNO or die "Cannot open file 'text': $!\n" ; # Add a few key/value pairs to the file *************** *** 1237,1242 **** --- 1406,1415 ---- Returns the number of elements in the array. + =item B<$X-Esplice(offset, length, elements);> + + Returns a splice of the the array. + =back =head2 Another Example *************** *** 1255,1261 **** unlink $file ; ! $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0640, $DB_RECNO or die "Cannot open file $file: $!\n" ; # first create a text file to play with --- 1428,1434 ---- unlink $file ; ! $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0666, $DB_RECNO or die "Cannot open file $file: $!\n" ; # first create a text file to play with *************** *** 1675,1681 **** The locking technique went like this. ! $db = tie(%db, 'DB_File', '/tmp/foo.db', O_CREAT|O_RDWR, 0644) || die "dbcreat /tmp/foo.db $!"; $fd = $db->fd; open(DB_FH, "+<&=$fd") || die "dup $!"; --- 1848,1854 ---- The locking technique went like this. ! $db = tie(%db, 'DB_File', '/tmp/foo.db', O_CREAT|O_RDWR, 0666) || die "dbcreat /tmp/foo.db $!"; $fd = $db->fd; open(DB_FH, "+<&=$fd") || die "dup $!"; *************** *** 2033,2039 **** =head1 COPYRIGHT ! Copyright (c) 1995-1999 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. --- 2206,2212 ---- =head1 COPYRIGHT ! Copyright (c) 1995-2001 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff -c 'perl-5.7.1/ext/DB_File/DB_File.xs' 'perl-5.7.2/ext/DB_File/DB_File.xs' Index: ./ext/DB_File/DB_File.xs *** ./ext/DB_File/DB_File.xs Tue Mar 6 04:04:35 2001 --- ./ext/DB_File/DB_File.xs Mon Jul 9 17:09:53 2001 *************** *** 3,14 **** DB_File.xs -- Perl 5 interface to Berkeley DB written by Paul Marquess ! last modified 17 December 2000 ! version 1.75 All comments/suggestions/problems are welcome ! Copyright (c) 1995-2000 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. --- 3,14 ---- DB_File.xs -- Perl 5 interface to Berkeley DB written by Paul Marquess ! last modified 26th April 2001 ! version 1.77 All comments/suggestions/problems are welcome ! Copyright (c) 1995-2001 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. *************** *** 90,98 **** --- 90,101 ---- Added suppport to allow DB_File to be built with Berkeley DB 3.2 -- btree_compare, btree_prefix and hash_cb needed to be changed. + 1.76 - No change to DB_File.xs + 1.77 - Tidied up a few types used in calling newSVpvn. */ + #define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" *************** *** 116,127 **** --- 119,154 ---- # define DEFSV GvSV(defgv) #endif + /* Mention DB_VERSION_MAJOR_CFG, DB_VERSION_MINOR_CFG, and + DB_VERSION_PATCH_CFG here so that Configure pulls them all in. */ + /* Being the Berkeley DB we prefer the (which will be * shortly #included by the ) __attribute__ to the possibly * already defined __attribute__, for example by GNUC or by Perl. */ + #if DB_VERSION_MAJOR_CFG < 2 + #undef __attribute__ + /* Since we dropped the gccish definition of __attribute__ we will want + * to redefine dNOOP, however (so that dTHX continues to work). Yes, + * all this means that we can't do attribute checking on the DB_File, + * boo, hiss. */ + #undef dNOOP + #define dNOOP extern int Perl___notused + /* Ditto for dXSARGS. */ + #undef dXSARGS + #define dXSARGS \ + dSP; dMARK; \ + I32 ax = mark - PL_stack_base + 1; \ + I32 items = sp - mark + + #endif + + /* avoid -Wall; DB_File xsubs never make use of `ix' setup for ALIASes */ + #undef dXSI32 + #define dXSI32 dNOOP + /* If Perl has been compiled with Threads support,the symbol op will be defined here. This clashes with a field name in db.h, so get rid of it. */ *************** *** 517,528 **** dTHX; #endif dSP ; ! void * data1, * data2 ; int retval ; int count ; ! data1 = key1->data ; ! data2 = key2->data ; #ifndef newSVpvn /* As newSVpv will assume that the data pointer is a null terminated C --- 544,555 ---- dTHX; #endif dSP ; ! char * data1, * data2 ; int retval ; int count ; ! data1 = (char *) key1->data ; ! data2 = (char *) key2->data ; #ifndef newSVpvn /* As newSVpv will assume that the data pointer is a null terminated C *************** *** 588,599 **** dTHX; #endif dSP ; ! void * data1, * data2 ; int retval ; int count ; ! data1 = key1->data ; ! data2 = key2->data ; #ifndef newSVpvn /* As newSVpv will assume that the data pointer is a null terminated C --- 615,626 ---- dTHX; #endif dSP ; ! char * data1, * data2 ; int retval ; int count ; ! data1 = (char *) key1->data ; ! data2 = (char *) key2->data ; #ifndef newSVpvn /* As newSVpv will assume that the data pointer is a null terminated C *************** *** 1687,1697 **** OUTPUT: RETVAL ! int db_FETCH(db, key, flags=0) DB_File db DBTKEY key u_int flags CODE: { DBT value ; --- 1714,1726 ---- OUTPUT: RETVAL ! void db_FETCH(db, key, flags=0) DB_File db DBTKEY key u_int flags + PREINIT: + int RETVAL; CODE: { DBT value ; *************** *** 1714,1722 **** CurrentDB = db ; ! int db_FIRSTKEY(db) DB_File db CODE: { DBTKEY key ; --- 1743,1753 ---- CurrentDB = db ; ! void db_FIRSTKEY(db) DB_File db + PREINIT: + int RETVAL; CODE: { DBTKEY key ; *************** *** 1730,1739 **** OutputKey(ST(0), key) ; } ! int db_NEXTKEY(db, key) DB_File db DBTKEY key CODE: { DBT value ; --- 1761,1772 ---- OutputKey(ST(0), key) ; } ! void db_NEXTKEY(db, key) DB_File db DBTKEY key + PREINIT: + int RETVAL; CODE: { DBT value ; *************** *** 1759,1765 **** DBT value ; int i ; int One ; - DB * Db = db->dbp ; STRLEN n_a; DBT_clear(key) ; --- 1792,1797 ---- *************** *** 1782,1788 **** #ifdef DB_VERSION_MAJOR RETVAL = (db->cursor->c_put)(db->cursor, &key, &value, DB_BEFORE) ; #else ! RETVAL = (Db->put)(Db, &key, &value, R_IBEFORE) ; #endif if (RETVAL != 0) break; --- 1814,1820 ---- #ifdef DB_VERSION_MAJOR RETVAL = (db->cursor->c_put)(db->cursor, &key, &value, DB_BEFORE) ; #else ! RETVAL = (db->dbp->put)(db->dbp, &key, &value, R_IBEFORE) ; #endif if (RETVAL != 0) break; *************** *** 1791,1800 **** OUTPUT: RETVAL ! I32 pop(db) DB_File db ALIAS: POP = 1 CODE: { DBTKEY key ; --- 1823,1834 ---- OUTPUT: RETVAL ! void pop(db) DB_File db ALIAS: POP = 1 + PREINIT: + I32 RETVAL; CODE: { DBTKEY key ; *************** *** 1818,1827 **** } } ! I32 shift(db) DB_File db ALIAS: SHIFT = 1 CODE: { DBT value ; --- 1852,1863 ---- } } ! void shift(db) DB_File db ALIAS: SHIFT = 1 + PREINIT: + I32 RETVAL; CODE: { DBT value ; *************** *** 1962,1977 **** int db_fd(db) DB_File db - int status = 0 ; CODE: CurrentDB = db ; #ifdef DB_VERSION_MAJOR RETVAL = -1 ; ! status = (db->in_memory ! ? -1 ! : ((db->dbp)->fd)(db->dbp, &RETVAL) ) ; ! if (status != 0) ! RETVAL = -1 ; #else RETVAL = (db->in_memory ? -1 --- 1998,2015 ---- int db_fd(db) DB_File db CODE: CurrentDB = db ; #ifdef DB_VERSION_MAJOR RETVAL = -1 ; ! { ! int status = 0 ; ! status = (db->in_memory ! ? -1 ! : ((db->dbp)->fd)(db->dbp, &RETVAL) ) ; ! if (status != 0) ! RETVAL = -1 ; ! } #else RETVAL = (db->in_memory ? -1 diff -c /dev/null 'perl-5.7.2/ext/DB_File/t/db-btree.t' Index: ./ext/DB_File/t/db-btree.t *** ./ext/DB_File/t/db-btree.t Thu Jan 1 02:00:00 1970 --- ./ext/DB_File/t/db-btree.t Mon Jul 9 17:09:53 2001 *************** *** 0 **** --- 1,1296 ---- + #!./perl -w + + BEGIN { + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bDB_File\b/) { + print "1..0 # Skip: DB_File was not built\n"; + exit 0; + } + } + + use warnings; + use strict; + use DB_File; + use Fcntl; + + print "1..157\n"; + + sub ok + { + my $no = shift ; + my $result = shift ; + + print "not " unless $result ; + print "ok $no\n" ; + } + + sub lexical + { + my(@a) = unpack ("C*", $a) ; + my(@b) = unpack ("C*", $b) ; + + my $len = (@a > @b ? @b : @a) ; + my $i = 0 ; + + foreach $i ( 0 .. $len -1) { + return $a[$i] - $b[$i] if $a[$i] != $b[$i] ; + } + + return @a - @b ; + } + + { + package Redirect ; + use Symbol ; + + sub new + { + my $class = shift ; + my $filename = shift ; + my $fh = gensym ; + open ($fh, ">$filename") || die "Cannot open $filename: $!" ; + my $real_stdout = select($fh) ; + return bless [$fh, $real_stdout ] ; + + } + sub DESTROY + { + my $self = shift ; + close $self->[0] ; + select($self->[1]) ; + } + } + + sub docat + { + my $file = shift; + #local $/ = undef unless wantarray ; + open(CAT,$file) || die "Cannot open $file: $!"; + my @result = ; + close(CAT); + wantarray ? @result : join("", @result) ; + } + + sub docat_del + { + my $file = shift; + #local $/ = undef unless wantarray ; + open(CAT,$file) || die "Cannot open $file: $!"; + my @result = ; + close(CAT); + unlink $file ; + wantarray ? @result : join("", @result) ; + } + + + my $db185mode = ($DB_File::db_version == 1 && ! $DB_File::db_185_compat) ; + my $null_keys_allowed = ($DB_File::db_ver < 2.004010 + || $DB_File::db_ver >= 3.1 ); + + my $Dfile = "dbbtree.tmp"; + unlink $Dfile; + + umask(0); + + # Check the interface to BTREEINFO + + my $dbh = new DB_File::BTREEINFO ; + ok(1, ! defined $dbh->{flags}) ; + ok(2, ! defined $dbh->{cachesize}) ; + ok(3, ! defined $dbh->{psize}) ; + ok(4, ! defined $dbh->{lorder}) ; + ok(5, ! defined $dbh->{minkeypage}) ; + ok(6, ! defined $dbh->{maxkeypage}) ; + ok(7, ! defined $dbh->{compare}) ; + ok(8, ! defined $dbh->{prefix}) ; + + $dbh->{flags} = 3000 ; + ok(9, $dbh->{flags} == 3000) ; + + $dbh->{cachesize} = 9000 ; + ok(10, $dbh->{cachesize} == 9000); + + $dbh->{psize} = 400 ; + ok(11, $dbh->{psize} == 400) ; + + $dbh->{lorder} = 65 ; + ok(12, $dbh->{lorder} == 65) ; + + $dbh->{minkeypage} = 123 ; + ok(13, $dbh->{minkeypage} == 123) ; + + $dbh->{maxkeypage} = 1234 ; + ok(14, $dbh->{maxkeypage} == 1234 ); + + $dbh->{compare} = 1234 ; + ok(15, $dbh->{compare} == 1234) ; + + $dbh->{prefix} = 1234 ; + ok(16, $dbh->{prefix} == 1234 ); + + # Check that an invalid entry is caught both for store & fetch + eval '$dbh->{fred} = 1234' ; + ok(17, $@ =~ /^DB_File::BTREEINFO::STORE - Unknown element 'fred' at/ ) ; + eval 'my $q = $dbh->{fred}' ; + ok(18, $@ =~ /^DB_File::BTREEINFO::FETCH - Unknown element 'fred' at/ ) ; + + # Now check the interface to BTREE + + my ($X, %h) ; + ok(19, $X = tie(%h, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE )) ; + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + ok(20, ($mode & 0777) == ($^O eq 'os2' ? 0666 : 0640) || $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'NetWare'); + + my ($key, $value, $i); + while (($key,$value) = each(%h)) { + $i++; + } + ok(21, !$i ) ; + + $h{'goner1'} = 'snork'; + + $h{'abc'} = 'ABC'; + ok(22, $h{'abc'} eq 'ABC' ); + ok(23, ! defined $h{'jimmy'} ) ; + ok(24, ! exists $h{'jimmy'} ) ; + ok(25, defined $h{'abc'} ) ; + + $h{'def'} = 'DEF'; + $h{'jkl','mno'} = "JKL\034MNO"; + $h{'a',2,3,4,5} = join("\034",'A',2,3,4,5); + $h{'a'} = 'A'; + + #$h{'b'} = 'B'; + $X->STORE('b', 'B') ; + + $h{'c'} = 'C'; + + #$h{'d'} = 'D'; + $X->put('d', 'D') ; + + $h{'e'} = 'E'; + $h{'f'} = 'F'; + $h{'g'} = 'X'; + $h{'h'} = 'H'; + $h{'i'} = 'I'; + + $h{'goner2'} = 'snork'; + delete $h{'goner2'}; + + + # IMPORTANT - $X must be undefined before the untie otherwise the + # underlying DB close routine will not get called. + undef $X ; + untie(%h); + + # tie to the same file again + ok(26, $X = tie(%h,'DB_File',$Dfile, O_RDWR, 0640, $DB_BTREE)) ; + + # Modify an entry from the previous tie + $h{'g'} = 'G'; + + $h{'j'} = 'J'; + $h{'k'} = 'K'; + $h{'l'} = 'L'; + $h{'m'} = 'M'; + $h{'n'} = 'N'; + $h{'o'} = 'O'; + $h{'p'} = 'P'; + $h{'q'} = 'Q'; + $h{'r'} = 'R'; + $h{'s'} = 'S'; + $h{'t'} = 'T'; + $h{'u'} = 'U'; + $h{'v'} = 'V'; + $h{'w'} = 'W'; + $h{'x'} = 'X'; + $h{'y'} = 'Y'; + $h{'z'} = 'Z'; + + $h{'goner3'} = 'snork'; + + delete $h{'goner1'}; + $X->DELETE('goner3'); + + my @keys = keys(%h); + my @values = values(%h); + + ok(27, $#keys == 29 && $#values == 29) ; + + $i = 0 ; + while (($key,$value) = each(%h)) { + if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) { + $key =~ y/a-z/A-Z/; + $i++ if $key eq $value; + } + } + + ok(28, $i == 30) ; + + @keys = ('blurfl', keys(%h), 'dyick'); + ok(29, $#keys == 31) ; + + #Check that the keys can be retrieved in order + my @b = keys %h ; + my @c = sort lexical @b ; + ok(30, ArrayCompare(\@b, \@c)) ; + + $h{'foo'} = ''; + ok(31, $h{'foo'} eq '' ) ; + + # Berkeley DB from version 2.4.10 to 3.0 does not allow null keys. + # This feature was reenabled in version 3.1 of Berkeley DB. + my $result = 0 ; + if ($null_keys_allowed) { + $h{''} = 'bar'; + $result = ( $h{''} eq 'bar' ); + } + else + { $result = 1 } + ok(32, $result) ; + + # check cache overflow and numeric keys and contents + my $ok = 1; + for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; } + for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; } + ok(33, $ok); + + ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + ok(34, $size > 0 ); + + @h{0..200} = 200..400; + my @foo = @h{0..200}; + ok(35, join(':',200..400) eq join(':',@foo) ); + + # Now check all the non-tie specific stuff + + + # Check R_NOOVERWRITE flag will make put fail when attempting to overwrite + # an existing record. + + my $status = $X->put( 'x', 'newvalue', R_NOOVERWRITE) ; + ok(36, $status == 1 ); + + # check that the value of the key 'x' has not been changed by the + # previous test + ok(37, $h{'x'} eq 'X' ); + + # standard put + $status = $X->put('key', 'value') ; + ok(38, $status == 0 ); + + #check that previous put can be retrieved + $value = 0 ; + $status = $X->get('key', $value) ; + ok(39, $status == 0 ); + ok(40, $value eq 'value' ); + + # Attempting to delete an existing key should work + + $status = $X->del('q') ; + ok(41, $status == 0 ); + if ($null_keys_allowed) { + $status = $X->del('') ; + } else { + $status = 0 ; + } + ok(42, $status == 0 ); + + # Make sure that the key deleted, cannot be retrieved + ok(43, ! defined $h{'q'}) ; + ok(44, ! defined $h{''}) ; + + undef $X ; + untie %h ; + + ok(45, $X = tie(%h, 'DB_File',$Dfile, O_RDWR, 0640, $DB_BTREE )); + + # Attempting to delete a non-existant key should fail + + $status = $X->del('joe') ; + ok(46, $status == 1 ); + + # Check the get interface + + # First a non-existing key + $status = $X->get('aaaa', $value) ; + ok(47, $status == 1 ); + + # Next an existing key + $status = $X->get('a', $value) ; + ok(48, $status == 0 ); + ok(49, $value eq 'A' ); + + # seq + # ### + + # use seq to find an approximate match + $key = 'ke' ; + $value = '' ; + $status = $X->seq($key, $value, R_CURSOR) ; + ok(50, $status == 0 ); + ok(51, $key eq 'key' ); + ok(52, $value eq 'value' ); + + # seq when the key does not match + $key = 'zzz' ; + $value = '' ; + $status = $X->seq($key, $value, R_CURSOR) ; + ok(53, $status == 1 ); + + + # use seq to set the cursor, then delete the record @ the cursor. + + $key = 'x' ; + $value = '' ; + $status = $X->seq($key, $value, R_CURSOR) ; + ok(54, $status == 0 ); + ok(55, $key eq 'x' ); + ok(56, $value eq 'X' ); + $status = $X->del(0, R_CURSOR) ; + ok(57, $status == 0 ); + $status = $X->get('x', $value) ; + ok(58, $status == 1 ); + + # ditto, but use put to replace the key/value pair. + $key = 'y' ; + $value = '' ; + $status = $X->seq($key, $value, R_CURSOR) ; + ok(59, $status == 0 ); + ok(60, $key eq 'y' ); + ok(61, $value eq 'Y' ); + + $key = "replace key" ; + $value = "replace value" ; + $status = $X->put($key, $value, R_CURSOR) ; + ok(62, $status == 0 ); + ok(63, $key eq 'replace key' ); + ok(64, $value eq 'replace value' ); + $status = $X->get('y', $value) ; + ok(65, 1) ; # hard-wire to always pass. the previous test ($status == 1) + # only worked because of a bug in 1.85/6 + + # use seq to walk forwards through a file + + $status = $X->seq($key, $value, R_FIRST) ; + ok(66, $status == 0 ); + my $previous = $key ; + + $ok = 1 ; + while (($status = $X->seq($key, $value, R_NEXT)) == 0) + { + ($ok = 0), last if ($previous cmp $key) == 1 ; + } + + ok(67, $status == 1 ); + ok(68, $ok == 1 ); + + # use seq to walk backwards through a file + $status = $X->seq($key, $value, R_LAST) ; + ok(69, $status == 0 ); + $previous = $key ; + + $ok = 1 ; + while (($status = $X->seq($key, $value, R_PREV)) == 0) + { + ($ok = 0), last if ($previous cmp $key) == -1 ; + #print "key = [$key] value = [$value]\n" ; + } + + ok(70, $status == 1 ); + ok(71, $ok == 1 ); + + + # check seq FIRST/LAST + + # sync + # #### + + $status = $X->sync ; + ok(72, $status == 0 ); + + + # fd + # ## + + $status = $X->fd ; + ok(73, $status != 0 ); + + + undef $X ; + untie %h ; + + unlink $Dfile; + + # Now try an in memory file + my $Y; + ok(74, $Y = tie(%h, 'DB_File',undef, O_RDWR|O_CREAT, 0640, $DB_BTREE )); + + # fd with an in memory file should return failure + $status = $Y->fd ; + ok(75, $status == -1 ); + + + undef $Y ; + untie %h ; + + # Duplicate keys + my $bt = new DB_File::BTREEINFO ; + $bt->{flags} = R_DUP ; + my ($YY, %hh); + ok(76, $YY = tie(%hh, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $bt )) ; + + $hh{'Wall'} = 'Larry' ; + $hh{'Wall'} = 'Stone' ; # Note the duplicate key + $hh{'Wall'} = 'Brick' ; # Note the duplicate key + $hh{'Wall'} = 'Brick' ; # Note the duplicate key and value + $hh{'Smith'} = 'John' ; + $hh{'mouse'} = 'mickey' ; + + # first work in scalar context + ok(77, scalar $YY->get_dup('Unknown') == 0 ); + ok(78, scalar $YY->get_dup('Smith') == 1 ); + ok(79, scalar $YY->get_dup('Wall') == 4 ); + + # now in list context + my @unknown = $YY->get_dup('Unknown') ; + ok(80, "@unknown" eq "" ); + + my @smith = $YY->get_dup('Smith') ; + ok(81, "@smith" eq "John" ); + + { + my @wall = $YY->get_dup('Wall') ; + my %wall ; + @wall{@wall} = @wall ; + ok(82, (@wall == 4 && $wall{'Larry'} && $wall{'Stone'} && $wall{'Brick'}) ); + } + + # hash + my %unknown = $YY->get_dup('Unknown', 1) ; + ok(83, keys %unknown == 0 ); + + my %smith = $YY->get_dup('Smith', 1) ; + ok(84, keys %smith == 1 && $smith{'John'}) ; + + my %wall = $YY->get_dup('Wall', 1) ; + ok(85, keys %wall == 3 && $wall{'Larry'} == 1 && $wall{'Stone'} == 1 + && $wall{'Brick'} == 2); + + undef $YY ; + untie %hh ; + unlink $Dfile; + + + # test multiple callbacks + my $Dfile1 = "btree1" ; + my $Dfile2 = "btree2" ; + my $Dfile3 = "btree3" ; + + my $dbh1 = new DB_File::BTREEINFO ; + $dbh1->{compare} = sub { + no warnings 'numeric' ; + $_[0] <=> $_[1] } ; + + my $dbh2 = new DB_File::BTREEINFO ; + $dbh2->{compare} = sub { $_[0] cmp $_[1] } ; + + my $dbh3 = new DB_File::BTREEINFO ; + $dbh3->{compare} = sub { length $_[0] <=> length $_[1] } ; + + + my (%g, %k); + tie(%h, 'DB_File',$Dfile1, O_RDWR|O_CREAT, 0640, $dbh1 ) ; + tie(%g, 'DB_File',$Dfile2, O_RDWR|O_CREAT, 0640, $dbh2 ) ; + tie(%k, 'DB_File',$Dfile3, O_RDWR|O_CREAT, 0640, $dbh3 ) ; + + my @Keys = qw( 0123 12 -1234 9 987654321 def ) ; + my (@srt_1, @srt_2, @srt_3); + { + no warnings 'numeric' ; + @srt_1 = sort { $a <=> $b } @Keys ; + } + @srt_2 = sort { $a cmp $b } @Keys ; + @srt_3 = sort { length $a <=> length $b } @Keys ; + + foreach (@Keys) { + $h{$_} = 1 ; + $g{$_} = 1 ; + $k{$_} = 1 ; + } + + sub ArrayCompare + { + my($a, $b) = @_ ; + + return 0 if @$a != @$b ; + + foreach (1 .. length @$a) + { + return 0 unless $$a[$_] eq $$b[$_] ; + } + + 1 ; + } + + ok(86, ArrayCompare (\@srt_1, [keys %h]) ); + ok(87, ArrayCompare (\@srt_2, [keys %g]) ); + ok(88, ArrayCompare (\@srt_3, [keys %k]) ); + + untie %h ; + untie %g ; + untie %k ; + unlink $Dfile1, $Dfile2, $Dfile3 ; + + # clear + # ##### + + ok(89, tie(%h, 'DB_File', $Dfile1, O_RDWR|O_CREAT, 0640, $DB_BTREE ) ); + foreach (1 .. 10) + { $h{$_} = $_ * 100 } + + # check that there are 10 elements in the hash + $i = 0 ; + while (($key,$value) = each(%h)) { + $i++; + } + ok(90, $i == 10); + + # now clear the hash + %h = () ; + + # check it is empty + $i = 0 ; + while (($key,$value) = each(%h)) { + $i++; + } + ok(91, $i == 0); + + untie %h ; + unlink $Dfile1 ; + + { + # check that attempting to tie an array to a DB_BTREE will fail + + my $filename = "xyz" ; + my @x ; + eval { tie @x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE ; } ; + ok(92, $@ =~ /^DB_File can only tie an associative array to a DB_BTREE database/) ; + unlink $filename ; + } + + { + # sub-class test + + package Another ; + + use warnings ; + use strict ; + + open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ; + print FILE <<'EOM' ; + + package SubDB ; + + use warnings ; + use strict ; + use vars qw( @ISA @EXPORT) ; + + require Exporter ; + use DB_File; + @ISA=qw(DB_File); + @EXPORT = @DB_File::EXPORT ; + + sub STORE { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::STORE($key, $value * 2) ; + } + + sub FETCH { + my $self = shift ; + my $key = shift ; + $self->SUPER::FETCH($key) - 1 ; + } + + sub put { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::put($key, $value * 3) ; + } + + sub get { + my $self = shift ; + $self->SUPER::get($_[0], $_[1]) ; + $_[1] -= 2 ; + } + + sub A_new_method + { + my $self = shift ; + my $key = shift ; + my $value = $self->FETCH($key) ; + return "[[$value]]" ; + } + + 1 ; + EOM + + close FILE ; + + BEGIN { push @INC, '.'; } + eval 'use SubDB ; '; + main::ok(93, $@ eq "") ; + my %h ; + my $X ; + eval ' + $X = tie(%h, "SubDB","dbbtree.tmp", O_RDWR|O_CREAT, 0640, $DB_BTREE ); + ' ; + + main::ok(94, $@ eq "") ; + + my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ; + main::ok(95, $@ eq "") ; + main::ok(96, $ret == 5) ; + + my $value = 0; + $ret = eval '$X->put("joe", 4) ; $X->get("joe", $value) ; return $value' ; + main::ok(97, $@ eq "") ; + main::ok(98, $ret == 10) ; + + $ret = eval ' R_NEXT eq main::R_NEXT ' ; + main::ok(99, $@ eq "" ) ; + main::ok(100, $ret == 1) ; + + $ret = eval '$X->A_new_method("joe") ' ; + main::ok(101, $@ eq "") ; + main::ok(102, $ret eq "[[11]]") ; + + undef $X; + untie(%h); + unlink "SubDB.pm", "dbbtree.tmp" ; + + } + + { + # DBM Filter tests + use warnings ; + use strict ; + my (%h, $db) ; + my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + unlink $Dfile; + + sub checkOutput + { + my($fk, $sk, $fv, $sv) = @_ ; + return + $fetch_key eq $fk && $store_key eq $sk && + $fetch_value eq $fv && $store_value eq $sv && + $_ eq 'original' ; + } + + ok(103, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) ); + + $db->filter_fetch_key (sub { $fetch_key = $_ }) ; + $db->filter_store_key (sub { $store_key = $_ }) ; + $db->filter_fetch_value (sub { $fetch_value = $_}) ; + $db->filter_store_value (sub { $store_value = $_ }) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + # fk sk fv sv + ok(104, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(105, $h{"fred"} eq "joe"); + # fk sk fv sv + ok(106, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(107, $db->FIRSTKEY() eq "fred") ; + # fk sk fv sv + ok(108, checkOutput( "fred", "", "", "")) ; + + # replace the filters, but remember the previous set + my ($old_fk) = $db->filter_fetch_key + (sub { $_ = uc $_ ; $fetch_key = $_ }) ; + my ($old_sk) = $db->filter_store_key + (sub { $_ = lc $_ ; $store_key = $_ }) ; + my ($old_fv) = $db->filter_fetch_value + (sub { $_ = "[$_]"; $fetch_value = $_ }) ; + my ($old_sv) = $db->filter_store_value + (sub { s/o/x/g; $store_value = $_ }) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"Fred"} = "Joe" ; + # fk sk fv sv + ok(109, checkOutput( "", "fred", "", "Jxe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(110, $h{"Fred"} eq "[Jxe]"); + # fk sk fv sv + ok(111, checkOutput( "", "fred", "[Jxe]", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(112, $db->FIRSTKEY() eq "FRED") ; + # fk sk fv sv + ok(113, checkOutput( "FRED", "", "", "")) ; + + # put the original filters back + $db->filter_fetch_key ($old_fk); + $db->filter_store_key ($old_sk); + $db->filter_fetch_value ($old_fv); + $db->filter_store_value ($old_sv); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(114, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(115, $h{"fred"} eq "joe"); + ok(116, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(117, $db->FIRSTKEY() eq "fred") ; + ok(118, checkOutput( "fred", "", "", "")) ; + + # delete the filters + $db->filter_fetch_key (undef); + $db->filter_store_key (undef); + $db->filter_fetch_value (undef); + $db->filter_store_value (undef); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(119, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(120, $h{"fred"} eq "joe"); + ok(121, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(122, $db->FIRSTKEY() eq "fred") ; + ok(123, checkOutput( "", "", "", "")) ; + + undef $db ; + untie %h; + unlink $Dfile; + } + + { + # DBM Filter with a closure + + use warnings ; + use strict ; + my (%h, $db) ; + + unlink $Dfile; + ok(124, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) ); + + my %result = () ; + + sub Closure + { + my ($name) = @_ ; + my $count = 0 ; + my @kept = () ; + + return sub { ++$count ; + push @kept, $_ ; + $result{$name} = "$name - $count: [@kept]" ; + } + } + + $db->filter_store_key(Closure("store key")) ; + $db->filter_store_value(Closure("store value")) ; + $db->filter_fetch_key(Closure("fetch key")) ; + $db->filter_fetch_value(Closure("fetch value")) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + ok(125, $result{"store key"} eq "store key - 1: [fred]"); + ok(126, $result{"store value"} eq "store value - 1: [joe]"); + ok(127, ! defined $result{"fetch key"} ); + ok(128, ! defined $result{"fetch value"} ); + ok(129, $_ eq "original") ; + + ok(130, $db->FIRSTKEY() eq "fred") ; + ok(131, $result{"store key"} eq "store key - 1: [fred]"); + ok(132, $result{"store value"} eq "store value - 1: [joe]"); + ok(133, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(134, ! defined $result{"fetch value"} ); + ok(135, $_ eq "original") ; + + $h{"jim"} = "john" ; + ok(136, $result{"store key"} eq "store key - 2: [fred jim]"); + ok(137, $result{"store value"} eq "store value - 2: [joe john]"); + ok(138, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(139, ! defined $result{"fetch value"} ); + ok(140, $_ eq "original") ; + + ok(141, $h{"fred"} eq "joe"); + ok(142, $result{"store key"} eq "store key - 3: [fred jim fred]"); + ok(143, $result{"store value"} eq "store value - 2: [joe john]"); + ok(144, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(145, $result{"fetch value"} eq "fetch value - 1: [joe]"); + ok(146, $_ eq "original") ; + + undef $db ; + untie %h; + unlink $Dfile; + } + + { + # DBM Filter recursion detection + use warnings ; + use strict ; + my (%h, $db) ; + unlink $Dfile; + + ok(147, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) ); + + $db->filter_store_key (sub { $_ = $h{$_} }) ; + + eval '$h{1} = 1234' ; + ok(148, $@ =~ /^recursion detected in filter_store_key at/ ); + + undef $db ; + untie %h; + unlink $Dfile; + } + + + { + # Examples from the POD + + + my $file = "xyzt" ; + { + my $redirect = new Redirect $file ; + + # BTREE example 1 + ### + + use warnings FATAL => qw(all) ; + use strict ; + use DB_File ; + + my %h ; + + sub Compare + { + my ($key1, $key2) = @_ ; + "\L$key1" cmp "\L$key2" ; + } + + # specify the Perl sub that will do the comparison + $DB_BTREE->{'compare'} = \&Compare ; + + unlink "tree" ; + tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0640, $DB_BTREE + or die "Cannot open file 'tree': $!\n" ; + + # Add a key/value pair to the file + $h{'Wall'} = 'Larry' ; + $h{'Smith'} = 'John' ; + $h{'mouse'} = 'mickey' ; + $h{'duck'} = 'donald' ; + + # Delete + delete $h{"duck"} ; + + # Cycle through the keys printing them in order. + # Note it is not necessary to sort the keys as + # the btree will have kept them in order automatically. + foreach (keys %h) + { print "$_\n" } + + untie %h ; + + unlink "tree" ; + } + + delete $DB_BTREE->{'compare'} ; + + ok(149, docat_del($file) eq <<'EOM') ; + mouse + Smith + Wall + EOM + + { + my $redirect = new Redirect $file ; + + # BTREE example 2 + ### + + use warnings FATAL => qw(all) ; + use strict ; + use DB_File ; + + use vars qw($filename %h ) ; + + $filename = "tree" ; + unlink $filename ; + + # Enable duplicate records + $DB_BTREE->{'flags'} = R_DUP ; + + tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE + or die "Cannot open $filename: $!\n"; + + # Add some key/value pairs to the file + $h{'Wall'} = 'Larry' ; + $h{'Wall'} = 'Brick' ; # Note the duplicate key + $h{'Wall'} = 'Brick' ; # Note the duplicate key and value + $h{'Smith'} = 'John' ; + $h{'mouse'} = 'mickey' ; + + # iterate through the associative array + # and print each key/value pair. + foreach (keys %h) + { print "$_ -> $h{$_}\n" } + + untie %h ; + + unlink $filename ; + } + + ok(150, docat_del($file) eq ($db185mode ? <<'EOM' : <<'EOM') ) ; + Smith -> John + Wall -> Brick + Wall -> Brick + Wall -> Brick + mouse -> mickey + EOM + Smith -> John + Wall -> Larry + Wall -> Larry + Wall -> Larry + mouse -> mickey + EOM + + { + my $redirect = new Redirect $file ; + + # BTREE example 3 + ### + + use warnings FATAL => qw(all) ; + use strict ; + use DB_File ; + + use vars qw($filename $x %h $status $key $value) ; + + $filename = "tree" ; + unlink $filename ; + + # Enable duplicate records + $DB_BTREE->{'flags'} = R_DUP ; + + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE + or die "Cannot open $filename: $!\n"; + + # Add some key/value pairs to the file + $h{'Wall'} = 'Larry' ; + $h{'Wall'} = 'Brick' ; # Note the duplicate key + $h{'Wall'} = 'Brick' ; # Note the duplicate key and value + $h{'Smith'} = 'John' ; + $h{'mouse'} = 'mickey' ; + + # iterate through the btree using seq + # and print each key/value pair. + $key = $value = 0 ; + for ($status = $x->seq($key, $value, R_FIRST) ; + $status == 0 ; + $status = $x->seq($key, $value, R_NEXT) ) + { print "$key -> $value\n" } + + + undef $x ; + untie %h ; + } + + ok(151, docat_del($file) eq ($db185mode == 1 ? <<'EOM' : <<'EOM') ) ; + Smith -> John + Wall -> Brick + Wall -> Brick + Wall -> Larry + mouse -> mickey + EOM + Smith -> John + Wall -> Larry + Wall -> Brick + Wall -> Brick + mouse -> mickey + EOM + + + { + my $redirect = new Redirect $file ; + + # BTREE example 4 + ### + + use warnings FATAL => qw(all) ; + use strict ; + use DB_File ; + + use vars qw($filename $x %h ) ; + + $filename = "tree" ; + + # Enable duplicate records + $DB_BTREE->{'flags'} = R_DUP ; + + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE + or die "Cannot open $filename: $!\n"; + + my $cnt = $x->get_dup("Wall") ; + print "Wall occurred $cnt times\n" ; + + my %hash = $x->get_dup("Wall", 1) ; + print "Larry is there\n" if $hash{'Larry'} ; + print "There are $hash{'Brick'} Brick Walls\n" ; + + my @list = sort $x->get_dup("Wall") ; + print "Wall => [@list]\n" ; + + @list = $x->get_dup("Smith") ; + print "Smith => [@list]\n" ; + + @list = $x->get_dup("Dog") ; + print "Dog => [@list]\n" ; + + undef $x ; + untie %h ; + } + + ok(152, docat_del($file) eq <<'EOM') ; + Wall occurred 3 times + Larry is there + There are 2 Brick Walls + Wall => [Brick Brick Larry] + Smith => [John] + Dog => [] + EOM + + { + my $redirect = new Redirect $file ; + + # BTREE example 5 + ### + + use warnings FATAL => qw(all) ; + use strict ; + use DB_File ; + + use vars qw($filename $x %h $found) ; + + my $filename = "tree" ; + + # Enable duplicate records + $DB_BTREE->{'flags'} = R_DUP ; + + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE + or die "Cannot open $filename: $!\n"; + + $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; + print "Larry Wall is $found there\n" ; + + $found = ( $x->find_dup("Wall", "Harry") == 0 ? "" : "not") ; + print "Harry Wall is $found there\n" ; + + undef $x ; + untie %h ; + } + + ok(153, docat_del($file) eq <<'EOM') ; + Larry Wall is there + Harry Wall is not there + EOM + + { + my $redirect = new Redirect $file ; + + # BTREE example 6 + ### + + use warnings FATAL => qw(all) ; + use strict ; + use DB_File ; + + use vars qw($filename $x %h $found) ; + + my $filename = "tree" ; + + # Enable duplicate records + $DB_BTREE->{'flags'} = R_DUP ; + + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE + or die "Cannot open $filename: $!\n"; + + $x->del_dup("Wall", "Larry") ; + + $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; + print "Larry Wall is $found there\n" ; + + undef $x ; + untie %h ; + + unlink $filename ; + } + + ok(154, docat_del($file) eq <<'EOM') ; + Larry Wall is not there + EOM + + { + my $redirect = new Redirect $file ; + + # BTREE example 7 + ### + + use warnings FATAL => qw(all) ; + use strict ; + use DB_File ; + use Fcntl ; + + use vars qw($filename $x %h $st $key $value) ; + + sub match + { + my $key = shift ; + my $value = 0; + my $orig_key = $key ; + $x->seq($key, $value, R_CURSOR) ; + print "$orig_key\t-> $key\t-> $value\n" ; + } + + $filename = "tree" ; + unlink $filename ; + + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_BTREE + or die "Cannot open $filename: $!\n"; + + # Add some key/value pairs to the file + $h{'mouse'} = 'mickey' ; + $h{'Wall'} = 'Larry' ; + $h{'Walls'} = 'Brick' ; + $h{'Smith'} = 'John' ; + + + $key = $value = 0 ; + print "IN ORDER\n" ; + for ($st = $x->seq($key, $value, R_FIRST) ; + $st == 0 ; + $st = $x->seq($key, $value, R_NEXT) ) + + { print "$key -> $value\n" } + + print "\nPARTIAL MATCH\n" ; + + match "Wa" ; + match "A" ; + match "a" ; + + undef $x ; + untie %h ; + + unlink $filename ; + + } + + ok(155, docat_del($file) eq <<'EOM') ; + IN ORDER + Smith -> John + Wall -> Larry + Walls -> Brick + mouse -> mickey + + PARTIAL MATCH + Wa -> Wall -> Larry + A -> Smith -> John + a -> mouse -> mickey + EOM + + } + + #{ + # # R_SETCURSOR + # use strict ; + # my (%h, $db) ; + # unlink $Dfile; + # + # ok(156, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE ) ); + # + # $h{abc} = 33 ; + # my $k = "newest" ; + # my $v = 44 ; + # my $status = $db->put($k, $v, R_SETCURSOR) ; + # print "status = [$status]\n" ; + # ok(157, $status == 0) ; + # $status = $db->del($k, R_CURSOR) ; + # print "status = [$status]\n" ; + # ok(158, $status == 0) ; + # $k = "newest" ; + # ok(159, $db->get($k, $v, R_CURSOR)) ; + # + # ok(160, keys %h == 1) ; + # + # undef $db ; + # untie %h; + # unlink $Dfile; + #} + + { + # Bug ID 20001013.009 + # + # test that $hash{KEY} = undef doesn't produce the warning + # Use of uninitialized value in null operation + use warnings ; + use strict ; + use DB_File ; + + unlink $Dfile; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + tie %h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_BTREE + or die "Can't open file: $!\n" ; + $h{ABC} = undef; + ok(156, $a eq "") ; + untie %h ; + unlink $Dfile; + } + + { + # test that %hash = () doesn't produce the warning + # Argument "" isn't numeric in entersub + use warnings ; + use strict ; + use DB_File ; + + unlink $Dfile; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + tie %h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_BTREE + or die "Can't open file: $!\n" ; + %h = (); ; + ok(157, $a eq "") ; + untie %h ; + unlink $Dfile; + } + + exit ; diff -c /dev/null 'perl-5.7.2/ext/DB_File/t/db-hash.t' Index: ./ext/DB_File/t/db-hash.t *** ./ext/DB_File/t/db-hash.t Thu Jan 1 02:00:00 1970 --- ./ext/DB_File/t/db-hash.t Mon Jul 9 17:09:53 2001 *************** *** 0 **** --- 1,743 ---- + #!./perl -w + + BEGIN { + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bDB_File\b/) { + print "1..0 # Skip: DB_File was not built\n"; + exit 0; + } + } + + use strict; + use warnings; + use DB_File; + use Fcntl; + + print "1..111\n"; + + sub ok + { + my $no = shift ; + my $result = shift ; + + print "not " unless $result ; + print "ok $no\n" ; + } + + { + package Redirect ; + use Symbol ; + + sub new + { + my $class = shift ; + my $filename = shift ; + my $fh = gensym ; + open ($fh, ">$filename") || die "Cannot open $filename: $!" ; + my $real_stdout = select($fh) ; + return bless [$fh, $real_stdout ] ; + + } + sub DESTROY + { + my $self = shift ; + close $self->[0] ; + select($self->[1]) ; + } + } + + sub docat_del + { + my $file = shift; + local $/ = undef; + open(CAT,$file) || die "Cannot open $file: $!"; + my $result = ; + close(CAT); + unlink $file ; + return $result; + } + + my $Dfile = "dbhash.tmp"; + my $null_keys_allowed = ($DB_File::db_ver < 2.004010 + || $DB_File::db_ver >= 3.1 ); + + unlink $Dfile; + + umask(0); + + # Check the interface to HASHINFO + + my $dbh = new DB_File::HASHINFO ; + + ok(1, ! defined $dbh->{bsize}) ; + ok(2, ! defined $dbh->{ffactor}) ; + ok(3, ! defined $dbh->{nelem}) ; + ok(4, ! defined $dbh->{cachesize}) ; + ok(5, ! defined $dbh->{hash}) ; + ok(6, ! defined $dbh->{lorder}) ; + + $dbh->{bsize} = 3000 ; + ok(7, $dbh->{bsize} == 3000 ); + + $dbh->{ffactor} = 9000 ; + ok(8, $dbh->{ffactor} == 9000 ); + + $dbh->{nelem} = 400 ; + ok(9, $dbh->{nelem} == 400 ); + + $dbh->{cachesize} = 65 ; + ok(10, $dbh->{cachesize} == 65 ); + + $dbh->{hash} = "abc" ; + ok(11, $dbh->{hash} eq "abc" ); + + $dbh->{lorder} = 1234 ; + ok(12, $dbh->{lorder} == 1234 ); + + # Check that an invalid entry is caught both for store & fetch + eval '$dbh->{fred} = 1234' ; + ok(13, $@ =~ /^DB_File::HASHINFO::STORE - Unknown element 'fred' at/ ); + eval 'my $q = $dbh->{fred}' ; + ok(14, $@ =~ /^DB_File::HASHINFO::FETCH - Unknown element 'fred' at/ ); + + + # Now check the interface to HASH + my ($X, %h); + ok(15, $X = tie(%h, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) ); + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + ok(16, ($mode & 0777) == ($^O eq 'os2' ? 0666 : 0640) || $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'NetWare'); + + my ($key, $value, $i); + while (($key,$value) = each(%h)) { + $i++; + } + ok(17, !$i ); + + $h{'goner1'} = 'snork'; + + $h{'abc'} = 'ABC'; + ok(18, $h{'abc'} eq 'ABC' ); + ok(19, !defined $h{'jimmy'} ); + ok(20, !exists $h{'jimmy'} ); + ok(21, exists $h{'abc'} ); + + $h{'def'} = 'DEF'; + $h{'jkl','mno'} = "JKL\034MNO"; + $h{'a',2,3,4,5} = join("\034",'A',2,3,4,5); + $h{'a'} = 'A'; + + #$h{'b'} = 'B'; + $X->STORE('b', 'B') ; + + $h{'c'} = 'C'; + + #$h{'d'} = 'D'; + $X->put('d', 'D') ; + + $h{'e'} = 'E'; + $h{'f'} = 'F'; + $h{'g'} = 'X'; + $h{'h'} = 'H'; + $h{'i'} = 'I'; + + $h{'goner2'} = 'snork'; + delete $h{'goner2'}; + + + # IMPORTANT - $X must be undefined before the untie otherwise the + # underlying DB close routine will not get called. + undef $X ; + untie(%h); + + + # tie to the same file again, do not supply a type - should default to HASH + ok(22, $X = tie(%h,'DB_File',$Dfile, O_RDWR, 0640) ); + + # Modify an entry from the previous tie + $h{'g'} = 'G'; + + $h{'j'} = 'J'; + $h{'k'} = 'K'; + $h{'l'} = 'L'; + $h{'m'} = 'M'; + $h{'n'} = 'N'; + $h{'o'} = 'O'; + $h{'p'} = 'P'; + $h{'q'} = 'Q'; + $h{'r'} = 'R'; + $h{'s'} = 'S'; + $h{'t'} = 'T'; + $h{'u'} = 'U'; + $h{'v'} = 'V'; + $h{'w'} = 'W'; + $h{'x'} = 'X'; + $h{'y'} = 'Y'; + $h{'z'} = 'Z'; + + $h{'goner3'} = 'snork'; + + delete $h{'goner1'}; + $X->DELETE('goner3'); + + my @keys = keys(%h); + my @values = values(%h); + + ok(23, $#keys == 29 && $#values == 29) ; + + $i = 0 ; + while (($key,$value) = each(%h)) { + if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) { + $key =~ y/a-z/A-Z/; + $i++ if $key eq $value; + } + } + + ok(24, $i == 30) ; + + @keys = ('blurfl', keys(%h), 'dyick'); + ok(25, $#keys == 31) ; + + $h{'foo'} = ''; + ok(26, $h{'foo'} eq '' ); + + # Berkeley DB from version 2.4.10 to 3.0 does not allow null keys. + # This feature was reenabled in version 3.1 of Berkeley DB. + my $result = 0 ; + if ($null_keys_allowed) { + $h{''} = 'bar'; + $result = ( $h{''} eq 'bar' ); + } + else + { $result = 1 } + ok(27, $result) ; + + # check cache overflow and numeric keys and contents + my $ok = 1; + for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; } + for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; } + ok(28, $ok ); + + ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + ok(29, $size > 0 ); + + @h{0..200} = 200..400; + my @foo = @h{0..200}; + ok(30, join(':',200..400) eq join(':',@foo) ); + + + # Now check all the non-tie specific stuff + + # Check NOOVERWRITE will make put fail when attempting to overwrite + # an existing record. + + my $status = $X->put( 'x', 'newvalue', R_NOOVERWRITE) ; + ok(31, $status == 1 ); + + # check that the value of the key 'x' has not been changed by the + # previous test + ok(32, $h{'x'} eq 'X' ); + + # standard put + $status = $X->put('key', 'value') ; + ok(33, $status == 0 ); + + #check that previous put can be retrieved + $value = 0 ; + $status = $X->get('key', $value) ; + ok(34, $status == 0 ); + ok(35, $value eq 'value' ); + + # Attempting to delete an existing key should work + + $status = $X->del('q') ; + ok(36, $status == 0 ); + + # Make sure that the key deleted, cannot be retrieved + { + no warnings 'uninitialized' ; + ok(37, $h{'q'} eq undef ); + } + + # Attempting to delete a non-existant key should fail + + $status = $X->del('joe') ; + ok(38, $status == 1 ); + + # Check the get interface + + # First a non-existing key + $status = $X->get('aaaa', $value) ; + ok(39, $status == 1 ); + + # Next an existing key + $status = $X->get('a', $value) ; + ok(40, $status == 0 ); + ok(41, $value eq 'A' ); + + # seq + # ### + + # ditto, but use put to replace the key/value pair. + + # use seq to walk backwards through a file - check that this reversed is + + # check seq FIRST/LAST + + # sync + # #### + + $status = $X->sync ; + ok(42, $status == 0 ); + + + # fd + # ## + + $status = $X->fd ; + ok(43, $status != 0 ); + + undef $X ; + untie %h ; + + unlink $Dfile; + + # clear + # ##### + + ok(44, tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) ); + foreach (1 .. 10) + { $h{$_} = $_ * 100 } + + # check that there are 10 elements in the hash + $i = 0 ; + while (($key,$value) = each(%h)) { + $i++; + } + ok(45, $i == 10); + + # now clear the hash + %h = () ; + + # check it is empty + $i = 0 ; + while (($key,$value) = each(%h)) { + $i++; + } + ok(46, $i == 0); + + untie %h ; + unlink $Dfile ; + + + # Now try an in memory file + ok(47, $X = tie(%h, 'DB_File',undef, O_RDWR|O_CREAT, 0640, $DB_HASH ) ); + + # fd with an in memory file should return fail + $status = $X->fd ; + ok(48, $status == -1 ); + + undef $X ; + untie %h ; + + { + # check ability to override the default hashing + my %x ; + my $filename = "xyz" ; + my $hi = new DB_File::HASHINFO ; + $::count = 0 ; + $hi->{hash} = sub { ++$::count ; length $_[0] } ; + ok(49, tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $hi ) ; + $h{"abc"} = 123 ; + ok(50, $h{"abc"} == 123) ; + untie %x ; + unlink $filename ; + ok(51, $::count >0) ; + } + + { + # check that attempting to tie an array to a DB_HASH will fail + + my $filename = "xyz" ; + my @x ; + eval { tie @x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $DB_HASH ; } ; + ok(52, $@ =~ /^DB_File can only tie an associative array to a DB_HASH database/) ; + unlink $filename ; + } + + { + # sub-class test + + package Another ; + + use warnings ; + use strict ; + + open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ; + print FILE <<'EOM' ; + + package SubDB ; + + use warnings ; + use strict ; + use vars qw( @ISA @EXPORT) ; + + require Exporter ; + use DB_File; + @ISA=qw(DB_File); + @EXPORT = @DB_File::EXPORT ; + + sub STORE { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::STORE($key, $value * 2) ; + } + + sub FETCH { + my $self = shift ; + my $key = shift ; + $self->SUPER::FETCH($key) - 1 ; + } + + sub put { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::put($key, $value * 3) ; + } + + sub get { + my $self = shift ; + $self->SUPER::get($_[0], $_[1]) ; + $_[1] -= 2 ; + } + + sub A_new_method + { + my $self = shift ; + my $key = shift ; + my $value = $self->FETCH($key) ; + return "[[$value]]" ; + } + + 1 ; + EOM + + close FILE ; + + BEGIN { push @INC, '.'; } + eval 'use SubDB ; '; + main::ok(53, $@ eq "") ; + my %h ; + my $X ; + eval ' + $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640, $DB_HASH ); + ' ; + + main::ok(54, $@ eq "") ; + + my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ; + main::ok(55, $@ eq "") ; + main::ok(56, $ret == 5) ; + + my $value = 0; + $ret = eval '$X->put("joe", 4) ; $X->get("joe", $value) ; return $value' ; + main::ok(57, $@ eq "") ; + main::ok(58, $ret == 10) ; + + $ret = eval ' R_NEXT eq main::R_NEXT ' ; + main::ok(59, $@ eq "" ) ; + main::ok(60, $ret == 1) ; + + $ret = eval '$X->A_new_method("joe") ' ; + main::ok(61, $@ eq "") ; + main::ok(62, $ret eq "[[11]]") ; + + undef $X; + untie(%h); + unlink "SubDB.pm", "dbhash.tmp" ; + + } + + { + # DBM Filter tests + use warnings ; + use strict ; + my (%h, $db) ; + my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + unlink $Dfile; + + sub checkOutput + { + my($fk, $sk, $fv, $sv) = @_ ; + return + $fetch_key eq $fk && $store_key eq $sk && + $fetch_value eq $fv && $store_value eq $sv && + $_ eq 'original' ; + } + + ok(63, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) ); + + $db->filter_fetch_key (sub { $fetch_key = $_ }) ; + $db->filter_store_key (sub { $store_key = $_ }) ; + $db->filter_fetch_value (sub { $fetch_value = $_}) ; + $db->filter_store_value (sub { $store_value = $_ }) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + # fk sk fv sv + ok(64, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(65, $h{"fred"} eq "joe"); + # fk sk fv sv + ok(66, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(67, $db->FIRSTKEY() eq "fred") ; + # fk sk fv sv + ok(68, checkOutput( "fred", "", "", "")) ; + + # replace the filters, but remember the previous set + my ($old_fk) = $db->filter_fetch_key + (sub { $_ = uc $_ ; $fetch_key = $_ }) ; + my ($old_sk) = $db->filter_store_key + (sub { $_ = lc $_ ; $store_key = $_ }) ; + my ($old_fv) = $db->filter_fetch_value + (sub { $_ = "[$_]"; $fetch_value = $_ }) ; + my ($old_sv) = $db->filter_store_value + (sub { s/o/x/g; $store_value = $_ }) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"Fred"} = "Joe" ; + # fk sk fv sv + ok(69, checkOutput( "", "fred", "", "Jxe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(70, $h{"Fred"} eq "[Jxe]"); + # fk sk fv sv + ok(71, checkOutput( "", "fred", "[Jxe]", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(72, $db->FIRSTKEY() eq "FRED") ; + # fk sk fv sv + ok(73, checkOutput( "FRED", "", "", "")) ; + + # put the original filters back + $db->filter_fetch_key ($old_fk); + $db->filter_store_key ($old_sk); + $db->filter_fetch_value ($old_fv); + $db->filter_store_value ($old_sv); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(74, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(75, $h{"fred"} eq "joe"); + ok(76, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(77, $db->FIRSTKEY() eq "fred") ; + ok(78, checkOutput( "fred", "", "", "")) ; + + # delete the filters + $db->filter_fetch_key (undef); + $db->filter_store_key (undef); + $db->filter_fetch_value (undef); + $db->filter_store_value (undef); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(79, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(80, $h{"fred"} eq "joe"); + ok(81, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(82, $db->FIRSTKEY() eq "fred") ; + ok(83, checkOutput( "", "", "", "")) ; + + undef $db ; + untie %h; + unlink $Dfile; + } + + { + # DBM Filter with a closure + + use warnings ; + use strict ; + my (%h, $db) ; + + unlink $Dfile; + ok(84, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) ); + + my %result = () ; + + sub Closure + { + my ($name) = @_ ; + my $count = 0 ; + my @kept = () ; + + return sub { ++$count ; + push @kept, $_ ; + $result{$name} = "$name - $count: [@kept]" ; + } + } + + $db->filter_store_key(Closure("store key")) ; + $db->filter_store_value(Closure("store value")) ; + $db->filter_fetch_key(Closure("fetch key")) ; + $db->filter_fetch_value(Closure("fetch value")) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + ok(85, $result{"store key"} eq "store key - 1: [fred]"); + ok(86, $result{"store value"} eq "store value - 1: [joe]"); + ok(87, ! defined $result{"fetch key"} ); + ok(88, ! defined $result{"fetch value"} ); + ok(89, $_ eq "original") ; + + ok(90, $db->FIRSTKEY() eq "fred") ; + ok(91, $result{"store key"} eq "store key - 1: [fred]"); + ok(92, $result{"store value"} eq "store value - 1: [joe]"); + ok(93, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(94, ! defined $result{"fetch value"} ); + ok(95, $_ eq "original") ; + + $h{"jim"} = "john" ; + ok(96, $result{"store key"} eq "store key - 2: [fred jim]"); + ok(97, $result{"store value"} eq "store value - 2: [joe john]"); + ok(98, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(99, ! defined $result{"fetch value"} ); + ok(100, $_ eq "original") ; + + ok(101, $h{"fred"} eq "joe"); + ok(102, $result{"store key"} eq "store key - 3: [fred jim fred]"); + ok(103, $result{"store value"} eq "store value - 2: [joe john]"); + ok(104, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(105, $result{"fetch value"} eq "fetch value - 1: [joe]"); + ok(106, $_ eq "original") ; + + undef $db ; + untie %h; + unlink $Dfile; + } + + { + # DBM Filter recursion detection + use warnings ; + use strict ; + my (%h, $db) ; + unlink $Dfile; + + ok(107, $db = tie(%h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) ); + + $db->filter_store_key (sub { $_ = $h{$_} }) ; + + eval '$h{1} = 1234' ; + ok(108, $@ =~ /^recursion detected in filter_store_key at/ ); + + undef $db ; + untie %h; + unlink $Dfile; + } + + + { + # Examples from the POD + + my $file = "xyzt" ; + { + my $redirect = new Redirect $file ; + + use warnings FATAL => qw(all); + use strict ; + use DB_File ; + use vars qw( %h $k $v ) ; + + unlink "fruit" ; + tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0640, $DB_HASH + or die "Cannot open file 'fruit': $!\n"; + + # Add a few key/value pairs to the file + $h{"apple"} = "red" ; + $h{"orange"} = "orange" ; + $h{"banana"} = "yellow" ; + $h{"tomato"} = "red" ; + + # Check for existence of a key + print "Banana Exists\n\n" if $h{"banana"} ; + + # Delete a key/value pair. + delete $h{"apple"} ; + + # print the contents of the file + while (($k, $v) = each %h) + { print "$k -> $v\n" } + + untie %h ; + + unlink "fruit" ; + } + + ok(109, docat_del($file) eq <<'EOM') ; + Banana Exists + + orange -> orange + tomato -> red + banana -> yellow + EOM + + } + + { + # Bug ID 20001013.009 + # + # test that $hash{KEY} = undef doesn't produce the warning + # Use of uninitialized value in null operation + use warnings ; + use strict ; + use DB_File ; + + unlink $Dfile; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + tie %h, 'DB_File', $Dfile or die "Can't open file: $!\n" ; + $h{ABC} = undef; + ok(110, $a eq "") ; + untie %h ; + unlink $Dfile; + } + + { + # test that %hash = () doesn't produce the warning + # Argument "" isn't numeric in entersub + use warnings ; + use strict ; + use DB_File ; + + unlink $Dfile; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + tie %h, 'DB_File', $Dfile or die "Can't open file: $!\n" ; + %h = (); ; + ok(111, $a eq "") ; + untie %h ; + unlink $Dfile; + } + + exit ; diff -c /dev/null 'perl-5.7.2/ext/DB_File/t/db-recno.t' Index: ./ext/DB_File/t/db-recno.t *** ./ext/DB_File/t/db-recno.t Thu Jan 1 02:00:00 1970 --- ./ext/DB_File/t/db-recno.t Mon Jul 9 17:09:53 2001 *************** *** 0 **** --- 1,889 ---- + #!./perl -w + + BEGIN { + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bDB_File\b/) { + print "1..0 # Skip: DB_File was not built\n"; + exit 0; + } + } + + use DB_File; + use Fcntl; + use strict ; + use warnings; + use vars qw($dbh $Dfile $bad_ones $FA) ; + + # full tied array support started in Perl 5.004_57 + # Double check to see if it is available. + + { + sub try::TIEARRAY { bless [], "try" } + sub try::FETCHSIZE { $FA = 1 } + $FA = 0 ; + my @a ; + tie @a, 'try' ; + my $a = @a ; + } + + + sub ok + { + my $no = shift ; + my $result = shift ; + + print "not " unless $result ; + print "ok $no\n" ; + + return $result ; + } + + { + package Redirect ; + use Symbol ; + + sub new + { + my $class = shift ; + my $filename = shift ; + my $fh = gensym ; + open ($fh, ">$filename") || die "Cannot open $filename: $!" ; + my $real_stdout = select($fh) ; + return bless [$fh, $real_stdout ] ; + + } + sub DESTROY + { + my $self = shift ; + close $self->[0] ; + select($self->[1]) ; + } + } + + sub docat + { + my $file = shift; + local $/ = undef; + open(CAT,$file) || die "Cannot open $file:$!"; + my $result = ; + close(CAT); + return $result; + } + + sub docat_del + { + my $file = shift; + local $/ = undef; + open(CAT,$file) || die "Cannot open $file: $!"; + my $result = ; + close(CAT); + unlink $file ; + return $result; + } + + sub bad_one + { + print STDERR <{bval}) ; + ok(2, ! defined $dbh->{cachesize}) ; + ok(3, ! defined $dbh->{psize}) ; + ok(4, ! defined $dbh->{flags}) ; + ok(5, ! defined $dbh->{lorder}) ; + ok(6, ! defined $dbh->{reclen}) ; + ok(7, ! defined $dbh->{bfname}) ; + + $dbh->{bval} = 3000 ; + ok(8, $dbh->{bval} == 3000 ); + + $dbh->{cachesize} = 9000 ; + ok(9, $dbh->{cachesize} == 9000 ); + + $dbh->{psize} = 400 ; + ok(10, $dbh->{psize} == 400 ); + + $dbh->{flags} = 65 ; + ok(11, $dbh->{flags} == 65 ); + + $dbh->{lorder} = 123 ; + ok(12, $dbh->{lorder} == 123 ); + + $dbh->{reclen} = 1234 ; + ok(13, $dbh->{reclen} == 1234 ); + + $dbh->{bfname} = 1234 ; + ok(14, $dbh->{bfname} == 1234 ); + + + # Check that an invalid entry is caught both for store & fetch + eval '$dbh->{fred} = 1234' ; + ok(15, $@ =~ /^DB_File::RECNOINFO::STORE - Unknown element 'fred' at/ ); + eval 'my $q = $dbh->{fred}' ; + ok(16, $@ =~ /^DB_File::RECNOINFO::FETCH - Unknown element 'fred' at/ ); + + # Now check the interface to RECNOINFO + + my $X ; + my @h ; + ok(17, $X = tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ; + + ok(18, ((stat($Dfile))[2] & 0777) == ($^O eq 'os2' ? 0666 : 0640) + || $^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'amigaos') ; + + #my $l = @h ; + my $l = $X->length ; + ok(19, ($FA ? @h == 0 : !$l) ); + + my @data = qw( a b c d ever f g h i j k longername m n o p) ; + + $h[0] = shift @data ; + ok(20, $h[0] eq 'a' ); + + my $ i; + foreach (@data) + { $h[++$i] = $_ } + + unshift (@data, 'a') ; + + ok(21, defined $h[1] ); + ok(22, ! defined $h[16] ); + ok(23, $FA ? @h == @data : $X->length == @data ); + + + # Overwrite an entry & check fetch it + $h[3] = 'replaced' ; + $data[3] = 'replaced' ; + ok(24, $h[3] eq 'replaced' ); + + #PUSH + my @push_data = qw(added to the end) ; + ($FA ? push(@h, @push_data) : $X->push(@push_data)) ; + push (@data, @push_data) ; + ok(25, $h[++$i] eq 'added' ); + ok(26, $h[++$i] eq 'to' ); + ok(27, $h[++$i] eq 'the' ); + ok(28, $h[++$i] eq 'end' ); + + # POP + my $popped = pop (@data) ; + my $value = ($FA ? pop @h : $X->pop) ; + ok(29, $value eq $popped) ; + + # SHIFT + $value = ($FA ? shift @h : $X->shift) ; + my $shifted = shift @data ; + ok(30, $value eq $shifted ); + + # UNSHIFT + + # empty list + ($FA ? unshift @h,() : $X->unshift) ; + ok(31, ($FA ? @h == @data : $X->length == @data )); + + my @new_data = qw(add this to the start of the array) ; + $FA ? unshift (@h, @new_data) : $X->unshift (@new_data) ; + unshift (@data, @new_data) ; + ok(32, $FA ? @h == @data : $X->length == @data ); + ok(33, $h[0] eq "add") ; + ok(34, $h[1] eq "this") ; + ok(35, $h[2] eq "to") ; + ok(36, $h[3] eq "the") ; + ok(37, $h[4] eq "start") ; + ok(38, $h[5] eq "of") ; + ok(39, $h[6] eq "the") ; + ok(40, $h[7] eq "array") ; + ok(41, $h[8] eq $data[8]) ; + + # SPLICE + + # Now both arrays should be identical + + my $ok = 1 ; + my $j = 0 ; + foreach (@data) + { + $ok = 0, last if $_ ne $h[$j ++] ; + } + ok(42, $ok ); + + # Neagtive subscripts + + # get the last element of the array + ok(43, $h[-1] eq $data[-1] ); + ok(44, $h[-1] eq $h[ ($FA ? @h : $X->length) -1] ); + + # get the first element using a negative subscript + eval '$h[ - ( $FA ? @h : $X->length)] = "abcd"' ; + ok(45, $@ eq "" ); + ok(46, $h[0] eq "abcd" ); + + # now try to read before the start of the array + eval '$h[ - (1 + ($FA ? @h : $X->length))] = 1234' ; + ok(47, $@ =~ '^Modification of non-creatable array value attempted' ); + + # IMPORTANT - $X must be undefined before the untie otherwise the + # underlying DB close routine will not get called. + undef $X ; + untie(@h); + + unlink $Dfile; + + + { + # Check bval defaults to \n + + my @h = () ; + my $dbh = new DB_File::RECNOINFO ; + ok(48, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ; + $h[0] = "abc" ; + $h[1] = "def" ; + $h[3] = "ghi" ; + untie @h ; + my $x = docat($Dfile) ; + unlink $Dfile; + ok(49, $x eq "abc\ndef\n\nghi\n") ; + } + + { + # Change bval + + my @h = () ; + my $dbh = new DB_File::RECNOINFO ; + $dbh->{bval} = "-" ; + ok(50, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ; + $h[0] = "abc" ; + $h[1] = "def" ; + $h[3] = "ghi" ; + untie @h ; + my $x = docat($Dfile) ; + unlink $Dfile; + my $ok = ($x eq "abc-def--ghi-") ; + bad_one() unless $ok ; + ok(51, $ok) ; + } + + { + # Check R_FIXEDLEN with default bval (space) + + my @h = () ; + my $dbh = new DB_File::RECNOINFO ; + $dbh->{flags} = R_FIXEDLEN ; + $dbh->{reclen} = 5 ; + ok(52, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ; + $h[0] = "abc" ; + $h[1] = "def" ; + $h[3] = "ghi" ; + untie @h ; + my $x = docat($Dfile) ; + unlink $Dfile; + my $ok = ($x eq "abc def ghi ") ; + bad_one() unless $ok ; + ok(53, $ok) ; + } + + { + # Check R_FIXEDLEN with user-defined bval + + my @h = () ; + my $dbh = new DB_File::RECNOINFO ; + $dbh->{flags} = R_FIXEDLEN ; + $dbh->{bval} = "-" ; + $dbh->{reclen} = 5 ; + ok(54, tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $dbh ) ; + $h[0] = "abc" ; + $h[1] = "def" ; + $h[3] = "ghi" ; + untie @h ; + my $x = docat($Dfile) ; + unlink $Dfile; + my $ok = ($x eq "abc--def-------ghi--") ; + bad_one() unless $ok ; + ok(55, $ok) ; + } + + { + # check that attempting to tie an associative array to a DB_RECNO will fail + + my $filename = "xyz" ; + my %x ; + eval { tie %x, 'DB_File', $filename, O_RDWR|O_CREAT, 0640, $DB_RECNO ; } ; + ok(56, $@ =~ /^DB_File can only tie an array to a DB_RECNO database/) ; + unlink $filename ; + } + + { + # sub-class test + + package Another ; + + use warnings ; + use strict ; + + open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ; + print FILE <<'EOM' ; + + package SubDB ; + + use warnings ; + use strict ; + use vars qw( @ISA @EXPORT) ; + + require Exporter ; + use DB_File; + @ISA=qw(DB_File); + @EXPORT = @DB_File::EXPORT ; + + sub STORE { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::STORE($key, $value * 2) ; + } + + sub FETCH { + my $self = shift ; + my $key = shift ; + $self->SUPER::FETCH($key) - 1 ; + } + + sub put { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::put($key, $value * 3) ; + } + + sub get { + my $self = shift ; + $self->SUPER::get($_[0], $_[1]) ; + $_[1] -= 2 ; + } + + sub A_new_method + { + my $self = shift ; + my $key = shift ; + my $value = $self->FETCH($key) ; + return "[[$value]]" ; + } + + 1 ; + EOM + + close FILE ; + + BEGIN { push @INC, '.'; } + eval 'use SubDB ; '; + main::ok(57, $@ eq "") ; + my @h ; + my $X ; + eval ' + $X = tie(@h, "SubDB","recno.tmp", O_RDWR|O_CREAT, 0640, $DB_RECNO ); + ' ; + + main::ok(58, $@ eq "") ; + + my $ret = eval '$h[3] = 3 ; return $h[3] ' ; + main::ok(59, $@ eq "") ; + main::ok(60, $ret == 5) ; + + my $value = 0; + $ret = eval '$X->put(1, 4) ; $X->get(1, $value) ; return $value' ; + main::ok(61, $@ eq "") ; + main::ok(62, $ret == 10) ; + + $ret = eval ' R_NEXT eq main::R_NEXT ' ; + main::ok(63, $@ eq "" ) ; + main::ok(64, $ret == 1) ; + + $ret = eval '$X->A_new_method(1) ' ; + main::ok(65, $@ eq "") ; + main::ok(66, $ret eq "[[11]]") ; + + undef $X; + untie(@h); + unlink "SubDB.pm", "recno.tmp" ; + + } + + { + + # test $# + my $self ; + unlink $Dfile; + ok(67, $self = tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ; + $h[0] = "abc" ; + $h[1] = "def" ; + $h[2] = "ghi" ; + $h[3] = "jkl" ; + ok(68, $FA ? $#h == 3 : $self->length() == 4) ; + undef $self ; + untie @h ; + my $x = docat($Dfile) ; + ok(69, $x eq "abc\ndef\nghi\njkl\n") ; + + # $# sets array to same length + ok(70, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ; + if ($FA) + { $#h = 3 } + else + { $self->STORESIZE(4) } + ok(71, $FA ? $#h == 3 : $self->length() == 4) ; + undef $self ; + untie @h ; + $x = docat($Dfile) ; + ok(72, $x eq "abc\ndef\nghi\njkl\n") ; + + # $# sets array to bigger + ok(73, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ; + if ($FA) + { $#h = 6 } + else + { $self->STORESIZE(7) } + ok(74, $FA ? $#h == 6 : $self->length() == 7) ; + undef $self ; + untie @h ; + $x = docat($Dfile) ; + ok(75, $x eq "abc\ndef\nghi\njkl\n\n\n\n") ; + + # $# sets array smaller + ok(76, $self = tie @h, 'DB_File', $Dfile, O_RDWR, 0640, $DB_RECNO ) ; + if ($FA) + { $#h = 2 } + else + { $self->STORESIZE(3) } + ok(77, $FA ? $#h == 2 : $self->length() == 3) ; + undef $self ; + untie @h ; + $x = docat($Dfile) ; + ok(78, $x eq "abc\ndef\nghi\n") ; + + unlink $Dfile; + + + } + + { + # DBM Filter tests + use warnings ; + use strict ; + my (@h, $db) ; + my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + unlink $Dfile; + + sub checkOutput + { + my($fk, $sk, $fv, $sv) = @_ ; + return + $fetch_key eq $fk && $store_key eq $sk && + $fetch_value eq $fv && $store_value eq $sv && + $_ eq 'original' ; + } + + ok(79, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ); + + $db->filter_fetch_key (sub { $fetch_key = $_ }) ; + $db->filter_store_key (sub { $store_key = $_ }) ; + $db->filter_fetch_value (sub { $fetch_value = $_}) ; + $db->filter_store_value (sub { $store_value = $_ }) ; + + $_ = "original" ; + + $h[0] = "joe" ; + # fk sk fv sv + ok(80, checkOutput( "", 0, "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(81, $h[0] eq "joe"); + # fk sk fv sv + ok(82, checkOutput( "", 0, "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(83, $db->FIRSTKEY() == 0) ; + # fk sk fv sv + ok(84, checkOutput( 0, "", "", "")) ; + + # replace the filters, but remember the previous set + my ($old_fk) = $db->filter_fetch_key + (sub { ++ $_ ; $fetch_key = $_ }) ; + my ($old_sk) = $db->filter_store_key + (sub { $_ *= 2 ; $store_key = $_ }) ; + my ($old_fv) = $db->filter_fetch_value + (sub { $_ = "[$_]"; $fetch_value = $_ }) ; + my ($old_sv) = $db->filter_store_value + (sub { s/o/x/g; $store_value = $_ }) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h[1] = "Joe" ; + # fk sk fv sv + ok(85, checkOutput( "", 2, "", "Jxe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(86, $h[1] eq "[Jxe]"); + # fk sk fv sv + ok(87, checkOutput( "", 2, "[Jxe]", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(88, $db->FIRSTKEY() == 1) ; + # fk sk fv sv + ok(89, checkOutput( 1, "", "", "")) ; + + # put the original filters back + $db->filter_fetch_key ($old_fk); + $db->filter_store_key ($old_sk); + $db->filter_fetch_value ($old_fv); + $db->filter_store_value ($old_sv); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h[0] = "joe" ; + ok(90, checkOutput( "", 0, "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(91, $h[0] eq "joe"); + ok(92, checkOutput( "", 0, "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(93, $db->FIRSTKEY() == 0) ; + ok(94, checkOutput( 0, "", "", "")) ; + + # delete the filters + $db->filter_fetch_key (undef); + $db->filter_store_key (undef); + $db->filter_fetch_value (undef); + $db->filter_store_value (undef); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h[0] = "joe" ; + ok(95, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(96, $h[0] eq "joe"); + ok(97, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(98, $db->FIRSTKEY() == 0) ; + ok(99, checkOutput( "", "", "", "")) ; + + undef $db ; + untie @h; + unlink $Dfile; + } + + { + # DBM Filter with a closure + + use warnings ; + use strict ; + my (@h, $db) ; + + unlink $Dfile; + ok(100, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ); + + my %result = () ; + + sub Closure + { + my ($name) = @_ ; + my $count = 0 ; + my @kept = () ; + + return sub { ++$count ; + push @kept, $_ ; + $result{$name} = "$name - $count: [@kept]" ; + } + } + + $db->filter_store_key(Closure("store key")) ; + $db->filter_store_value(Closure("store value")) ; + $db->filter_fetch_key(Closure("fetch key")) ; + $db->filter_fetch_value(Closure("fetch value")) ; + + $_ = "original" ; + + $h[0] = "joe" ; + ok(101, $result{"store key"} eq "store key - 1: [0]"); + ok(102, $result{"store value"} eq "store value - 1: [joe]"); + ok(103, ! defined $result{"fetch key"} ); + ok(104, ! defined $result{"fetch value"} ); + ok(105, $_ eq "original") ; + + ok(106, $db->FIRSTKEY() == 0 ) ; + ok(107, $result{"store key"} eq "store key - 1: [0]"); + ok(108, $result{"store value"} eq "store value - 1: [joe]"); + ok(109, $result{"fetch key"} eq "fetch key - 1: [0]"); + ok(110, ! defined $result{"fetch value"} ); + ok(111, $_ eq "original") ; + + $h[7] = "john" ; + ok(112, $result{"store key"} eq "store key - 2: [0 7]"); + ok(113, $result{"store value"} eq "store value - 2: [joe john]"); + ok(114, $result{"fetch key"} eq "fetch key - 1: [0]"); + ok(115, ! defined $result{"fetch value"} ); + ok(116, $_ eq "original") ; + + ok(117, $h[0] eq "joe"); + ok(118, $result{"store key"} eq "store key - 3: [0 7 0]"); + ok(119, $result{"store value"} eq "store value - 2: [joe john]"); + ok(120, $result{"fetch key"} eq "fetch key - 1: [0]"); + ok(121, $result{"fetch value"} eq "fetch value - 1: [joe]"); + ok(122, $_ eq "original") ; + + undef $db ; + untie @h; + unlink $Dfile; + } + + { + # DBM Filter recursion detection + use warnings ; + use strict ; + my (@h, $db) ; + unlink $Dfile; + + ok(123, $db = tie(@h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ); + + $db->filter_store_key (sub { $_ = $h[0] }) ; + + eval '$h[1] = 1234' ; + ok(124, $@ =~ /^recursion detected in filter_store_key at/ ); + + undef $db ; + untie @h; + unlink $Dfile; + } + + + { + # Examples from the POD + + my $file = "xyzt" ; + { + my $redirect = new Redirect $file ; + + use warnings FATAL => qw(all); + use strict ; + use DB_File ; + + my $filename = "text" ; + unlink $filename ; + + my @h ; + my $x = tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0640, $DB_RECNO + or die "Cannot open file 'text': $!\n" ; + + # Add a few key/value pairs to the file + $h[0] = "orange" ; + $h[1] = "blue" ; + $h[2] = "yellow" ; + + $FA ? push @h, "green", "black" + : $x->push("green", "black") ; + + my $elements = $FA ? scalar @h : $x->length ; + print "The array contains $elements entries\n" ; + + my $last = $FA ? pop @h : $x->pop ; + print "popped $last\n" ; + + $FA ? unshift @h, "white" + : $x->unshift("white") ; + my $first = $FA ? shift @h : $x->shift ; + print "shifted $first\n" ; + + # Check for existence of a key + print "Element 1 Exists with value $h[1]\n" if $h[1] ; + + # use a negative index + print "The last element is $h[-1]\n" ; + print "The 2nd last element is $h[-2]\n" ; + + undef $x ; + untie @h ; + + unlink $filename ; + } + + ok(125, docat_del($file) eq <<'EOM') ; + The array contains 5 entries + popped black + shifted white + Element 1 Exists with value blue + The last element is green + The 2nd last element is yellow + EOM + + my $save_output = "xyzt" ; + { + my $redirect = new Redirect $save_output ; + + use warnings FATAL => qw(all); + use strict ; + use vars qw(@h $H $file $i) ; + use DB_File ; + use Fcntl ; + + $file = "text" ; + + unlink $file ; + + $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0640, $DB_RECNO + or die "Cannot open file $file: $!\n" ; + + # first create a text file to play with + $h[0] = "zero" ; + $h[1] = "one" ; + $h[2] = "two" ; + $h[3] = "three" ; + $h[4] = "four" ; + + + # Print the records in order. + # + # The length method is needed here because evaluating a tied + # array in a scalar context does not return the number of + # elements in the array. + + print "\nORIGINAL\n" ; + foreach $i (0 .. $H->length - 1) { + print "$i: $h[$i]\n" ; + } + + # use the push & pop methods + $a = $H->pop ; + $H->push("last") ; + print "\nThe last record was [$a]\n" ; + + # and the shift & unshift methods + $a = $H->shift ; + $H->unshift("first") ; + print "The first record was [$a]\n" ; + + # Use the API to add a new record after record 2. + $i = 2 ; + $H->put($i, "Newbie", R_IAFTER) ; + + # and a new record before record 1. + $i = 1 ; + $H->put($i, "New One", R_IBEFORE) ; + + # delete record 3 + $H->del(3) ; + + # now print the records in reverse order + print "\nREVERSE\n" ; + for ($i = $H->length - 1 ; $i >= 0 ; -- $i) + { print "$i: $h[$i]\n" } + + # same again, but use the API functions instead + print "\nREVERSE again\n" ; + my ($s, $k, $v) = (0, 0, 0) ; + for ($s = $H->seq($k, $v, R_LAST) ; + $s == 0 ; + $s = $H->seq($k, $v, R_PREV)) + { print "$k: $v\n" } + + undef $H ; + untie @h ; + + unlink $file ; + } + + ok(126, docat_del($save_output) eq <<'EOM') ; + + ORIGINAL + 0: zero + 1: one + 2: two + 3: three + 4: four + + The last record was [four] + The first record was [zero] + + REVERSE + 5: last + 4: three + 3: Newbie + 2: one + 1: New One + 0: first + + REVERSE again + 5: last + 4: three + 3: Newbie + 2: one + 1: New One + 0: first + EOM + + } + + { + # Bug ID 20001013.009 + # + # test that $hash{KEY} = undef doesn't produce the warning + # Use of uninitialized value in null operation + use warnings ; + use strict ; + use DB_File ; + + unlink $Dfile; + my @h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO + or die "Can't open file: $!\n" ; + $h[0] = undef; + ok(127, $a eq "") ; + untie @h ; + unlink $Dfile; + } + + { + # test that %hash = () doesn't produce the warning + # Argument "" isn't numeric in entersub + use warnings ; + use strict ; + use DB_File ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + unlink $Dfile; + my @h ; + + tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0664, $DB_RECNO + or die "Can't open file: $!\n" ; + @h = (); ; + ok(128, $a eq "") ; + untie @h ; + unlink $Dfile; + } + + exit ; diff -c 'perl-5.7.1/ext/DB_File/version.c' 'perl-5.7.2/ext/DB_File/version.c' Index: ./ext/DB_File/version.c *** ./ext/DB_File/version.c Tue Mar 6 04:04:36 2001 --- ./ext/DB_File/version.c Mon Jul 9 17:09:53 2001 *************** *** 8,14 **** All comments/suggestions/problems are welcome ! Copyright (c) 1995-2000 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. --- 8,14 ---- All comments/suggestions/problems are welcome ! Copyright (c) 1995-2001 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. *************** *** 22,27 **** --- 22,28 ---- */ + #define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" diff -c 'perl-5.7.1/ext/Data/Dumper/Dumper.xs' 'perl-5.7.2/ext/Data/Dumper/Dumper.xs' Index: ./ext/Data/Dumper/Dumper.xs *** ./ext/Data/Dumper/Dumper.xs Thu Mar 29 17:25:11 2001 --- ./ext/Data/Dumper/Dumper.xs Mon Jul 9 17:09:53 2001 *************** *** 190,202 **** AV *seenentry = Nullav; char *iname; STRLEN inamelen, idlen = 0; - U32 flags; U32 realtype; if (!val) return 0; - flags = SvFLAGS(val); realtype = SvTYPE(val); if (SvGMAGICAL(val)) --- 190,200 ---- *************** *** 221,227 **** } ival = SvRV(val); - flags = SvFLAGS(ival); realtype = SvTYPE(ival); (void) sprintf(id, "0x%lx", (unsigned long)ival); idlen = strlen(id); --- 219,224 ---- *************** *** 776,784 **** HV *seenhv = Nullhv; AV *postav, *todumpav, *namesav; I32 level = 0; ! I32 indent, terse, useqq, i, imax, postlen; SV **svp; ! SV *val, *name, *pad, *xpad, *apad, *sep, *tmp, *varname; SV *freezer, *toaster, *bless; I32 purity, deepcopy, quotekeys, maxdepth = 0; char tmpbuf[1024]; --- 773,781 ---- HV *seenhv = Nullhv; AV *postav, *todumpav, *namesav; I32 level = 0; ! I32 indent, terse, i, imax, postlen; SV **svp; ! SV *val, *name, *pad, *xpad, *apad, *sep, *varname; SV *freezer, *toaster, *bless; I32 purity, deepcopy, quotekeys, maxdepth = 0; char tmpbuf[1024]; *************** *** 811,821 **** todumpav = namesav = Nullav; seenhv = Nullhv; ! val = pad = xpad = apad = sep = tmp = varname = freezer = toaster = bless = &PL_sv_undef; name = sv_newmortal(); indent = 2; ! terse = useqq = purity = deepcopy = 0; quotekeys = 1; retval = newSVpvn("", 0); --- 808,818 ---- todumpav = namesav = Nullav; seenhv = Nullhv; ! val = pad = xpad = apad = sep = varname = freezer = toaster = bless = &PL_sv_undef; name = sv_newmortal(); indent = 2; ! terse = purity = deepcopy = 0; quotekeys = 1; retval = newSVpvn("", 0); *************** *** 835,842 **** --- 832,841 ---- purity = SvIV(*svp); if ((svp = hv_fetch(hv, "terse", 5, FALSE))) terse = SvTRUE(*svp); + #if 0 /* useqq currently unused */ if ((svp = hv_fetch(hv, "useqq", 5, FALSE))) useqq = SvTRUE(*svp); + #endif if ((svp = hv_fetch(hv, "pad", 3, FALSE))) pad = *svp; if ((svp = hv_fetch(hv, "xpad", 4, FALSE))) diff -c /dev/null 'perl-5.7.2/ext/Data/Dumper/t/dumper.t' Index: ./ext/Data/Dumper/t/dumper.t *** ./ext/Data/Dumper/t/dumper.t Thu Jan 1 02:00:00 1970 --- ./ext/Data/Dumper/t/dumper.t Mon Jul 9 17:09:54 2001 *************** *** 0 **** --- 1,810 ---- + #!./perl -w + # + # testsuite for Data::Dumper + # + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bData\/Dumper\b/) { + print "1..0 # Skip: Data::Dumper was not built\n"; + exit 0; + } + } + + use Data::Dumper; + use Config; + my $Is_ebcdic = defined($Config{'ebcdic'}) && $Config{'ebcdic'} eq 'define'; + + $Data::Dumper::Pad = "#"; + my $TMAX; + my $XS; + my $TNUM = 0; + my $WANT = ''; + + sub TEST { + my $string = shift; + my $t = eval $string; + ++$TNUM; + $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g + if ($WANT =~ /deadbeef/); + if ($Is_ebcdic) { + # these data need massaging with non ascii character sets + # because of hashing order differences + $WANT = join("\n",sort(split(/\n/,$WANT))); + $WANT =~ s/\,$//mg; + $t = join("\n",sort(split(/\n/,$t))); + $t =~ s/\,$//mg; + } + print( ($t eq $WANT and not $@) ? "ok $TNUM\n" + : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n"); + + ++$TNUM; + eval "$t"; + print $@ ? "not ok $TNUM\n# \$@ says: $@\n" : "ok $TNUM\n"; + + $t = eval $string; + ++$TNUM; + $t =~ s/([A-Z]+)\(0x[0-9a-f]+\)/$1(0xdeadbeef)/g + if ($WANT =~ /deadbeef/); + if ($Is_ebcdic) { + # here too there are hashing order differences + $WANT = join("\n",sort(split(/\n/,$WANT))); + $WANT =~ s/\,$//mg; + $t = join("\n",sort(split(/\n/,$t))); + $t =~ s/\,$//mg; + } + print( ($t eq $WANT and not $@) ? "ok $TNUM\n" + : "not ok $TNUM\n--Expected--\n$WANT\n--Got--\n$@$t\n"); + } + + if (defined &Data::Dumper::Dumpxs) { + print "### XS extension loaded, will run XS tests\n"; + $TMAX = 186; $XS = 1; + } + else { + print "### XS extensions not loaded, will NOT run XS tests\n"; + $TMAX = 93; $XS = 0; + } + + print "1..$TMAX\n"; + + ############# + ############# + + @c = ('c'); + $c = \@c; + $b = {}; + $a = [1, $b, $c]; + $b->{a} = $a; + $b->{b} = $a->[1]; + $b->{c} = $a->[2]; + + ############# 1 + ## + $WANT = <<'EOT'; + #$a = [ + # 1, + # { + # 'c' => [ + # 'c' + # ], + # 'a' => $a, + # 'b' => $a->[1] + # }, + # $a->[1]{'c'} + # ]; + #$b = $a->[1]; + #$c = $a->[1]{'c'}; + EOT + + TEST q(Data::Dumper->Dump([$a,$b,$c], [qw(a b c)])); + TEST q(Data::Dumper->Dumpxs([$a,$b,$c], [qw(a b c)])) if $XS; + + + ############# 7 + ## + $WANT = <<'EOT'; + #@a = ( + # 1, + # { + # 'c' => [ + # 'c' + # ], + # 'a' => [], + # 'b' => {} + # }, + # [] + # ); + #$a[1]{'a'} = \@a; + #$a[1]{'b'} = $a[1]; + #$a[2] = $a[1]{'c'}; + #$b = $a[1]; + EOT + + $Data::Dumper::Purity = 1; # fill in the holes for eval + TEST q(Data::Dumper->Dump([$a, $b], [qw(*a b)])); # print as @a + TEST q(Data::Dumper->Dumpxs([$a, $b], [qw(*a b)])) if $XS; + + ############# 13 + ## + $WANT = <<'EOT'; + #%b = ( + # 'c' => [ + # 'c' + # ], + # 'a' => [ + # 1, + # {}, + # [] + # ], + # 'b' => {} + # ); + #$b{'a'}[1] = \%b; + #$b{'a'}[2] = $b{'c'}; + #$b{'b'} = \%b; + #$a = $b{'a'}; + EOT + + TEST q(Data::Dumper->Dump([$b, $a], [qw(*b a)])); # print as %b + TEST q(Data::Dumper->Dumpxs([$b, $a], [qw(*b a)])) if $XS; + + ############# 19 + ## + $WANT = <<'EOT'; + #$a = [ + # 1, + # { + # 'c' => [], + # 'a' => [], + # 'b' => {} + # }, + # [] + #]; + #$a->[1]{'c'} = \@c; + #$a->[1]{'a'} = $a; + #$a->[1]{'b'} = $a->[1]; + #$a->[2] = \@c; + #$b = $a->[1]; + EOT + + $Data::Dumper::Indent = 1; + TEST q( + $d = Data::Dumper->new([$a,$b], [qw(a b)]); + $d->Seen({'*c' => $c}); + $d->Dump; + ); + if ($XS) { + TEST q( + $d = Data::Dumper->new([$a,$b], [qw(a b)]); + $d->Seen({'*c' => $c}); + $d->Dumpxs; + ); + } + + + ############# 25 + ## + $WANT = <<'EOT'; + #$a = [ + # #0 + # 1, + # #1 + # { + # c => [ + # #0 + # 'c' + # ], + # a => $a, + # b => $a->[1] + # }, + # #2 + # $a->[1]{c} + # ]; + #$b = $a->[1]; + EOT + + $d->Indent(3); + $d->Purity(0)->Quotekeys(0); + TEST q( $d->Reset; $d->Dump ); + + TEST q( $d->Reset; $d->Dumpxs ) if $XS; + + ############# 31 + ## + $WANT = <<'EOT'; + #$VAR1 = [ + # 1, + # { + # 'c' => [ + # 'c' + # ], + # 'a' => [], + # 'b' => {} + # }, + # [] + #]; + #$VAR1->[1]{'a'} = $VAR1; + #$VAR1->[1]{'b'} = $VAR1->[1]; + #$VAR1->[2] = $VAR1->[1]{'c'}; + EOT + + TEST q(Dumper($a)); + TEST q(Data::Dumper::DumperX($a)) if $XS; + + ############# 37 + ## + $WANT = <<'EOT'; + #[ + # 1, + # { + # c => [ + # 'c' + # ], + # a => $VAR1, + # b => $VAR1->[1] + # }, + # $VAR1->[1]{c} + #] + EOT + + { + local $Data::Dumper::Purity = 0; + local $Data::Dumper::Quotekeys = 0; + local $Data::Dumper::Terse = 1; + TEST q(Dumper($a)); + TEST q(Data::Dumper::DumperX($a)) if $XS; + } + + + ############# 43 + ## + $WANT = <<'EOT'; + #$VAR1 = { + # "reftest" => \\1, + # "abc\0'\efg" => "mno\0" + #}; + EOT + + $foo = { "abc\000\'\efg" => "mno\000", + "reftest" => \\1, + }; + { + local $Data::Dumper::Useqq = 1; + TEST q(Dumper($foo)); + } + + $WANT = <<"EOT"; + #\$VAR1 = { + # 'reftest' => \\\\1, + # 'abc\0\\'\efg' => 'mno\0' + #}; + EOT + + { + local $Data::Dumper::Useqq = 1; + TEST q(Data::Dumper::DumperX($foo)) if $XS; # cheat + } + + + + ############# + ############# + + { + package main; + use Data::Dumper; + $foo = 5; + @foo = (-10,\*foo); + %foo = (a=>1,b=>\$foo,c=>\@foo); + $foo{d} = \%foo; + $foo[2] = \%foo; + + ############# 49 + ## + $WANT = <<'EOT'; + #$foo = \*::foo; + #*::foo = \5; + #*::foo = [ + # #0 + # -10, + # #1 + # do{my $o}, + # #2 + # { + # 'c' => [], + # 'a' => 1, + # 'b' => do{my $o}, + # 'd' => {} + # } + # ]; + #*::foo{ARRAY}->[1] = $foo; + #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY}; + #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR}; + #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2]; + #*::foo = *::foo{ARRAY}->[2]; + #@bar = @{*::foo{ARRAY}}; + #%baz = %{*::foo{ARRAY}->[2]}; + EOT + + $Data::Dumper::Purity = 1; + $Data::Dumper::Indent = 3; + TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])); + TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS; + + ############# 55 + ## + $WANT = <<'EOT'; + #$foo = \*::foo; + #*::foo = \5; + #*::foo = [ + # -10, + # do{my $o}, + # { + # 'c' => [], + # 'a' => 1, + # 'b' => do{my $o}, + # 'd' => {} + # } + #]; + #*::foo{ARRAY}->[1] = $foo; + #*::foo{ARRAY}->[2]{'c'} = *::foo{ARRAY}; + #*::foo{ARRAY}->[2]{'b'} = *::foo{SCALAR}; + #*::foo{ARRAY}->[2]{'d'} = *::foo{ARRAY}->[2]; + #*::foo = *::foo{ARRAY}->[2]; + #$bar = *::foo{ARRAY}; + #$baz = *::foo{ARRAY}->[2]; + EOT + + $Data::Dumper::Indent = 1; + TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])); + TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS; + + ############# 61 + ## + $WANT = <<'EOT'; + #@bar = ( + # -10, + # \*::foo, + # {} + #); + #*::foo = \5; + #*::foo = \@bar; + #*::foo = { + # 'c' => [], + # 'a' => 1, + # 'b' => do{my $o}, + # 'd' => {} + #}; + #*::foo{HASH}->{'c'} = \@bar; + #*::foo{HASH}->{'b'} = *::foo{SCALAR}; + #*::foo{HASH}->{'d'} = *::foo{HASH}; + #$bar[2] = *::foo{HASH}; + #%baz = %{*::foo{HASH}}; + #$foo = $bar[1]; + EOT + + TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo'])); + TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['*bar', '*baz', '*foo'])) if $XS; + + ############# 67 + ## + $WANT = <<'EOT'; + #$bar = [ + # -10, + # \*::foo, + # {} + #]; + #*::foo = \5; + #*::foo = $bar; + #*::foo = { + # 'c' => [], + # 'a' => 1, + # 'b' => do{my $o}, + # 'd' => {} + #}; + #*::foo{HASH}->{'c'} = $bar; + #*::foo{HASH}->{'b'} = *::foo{SCALAR}; + #*::foo{HASH}->{'d'} = *::foo{HASH}; + #$bar->[2] = *::foo{HASH}; + #$baz = *::foo{HASH}; + #$foo = $bar->[1]; + EOT + + TEST q(Data::Dumper->Dump([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo'])); + TEST q(Data::Dumper->Dumpxs([\\@foo, \\%foo, \\*foo], ['bar', 'baz', 'foo'])) if $XS; + + ############# 73 + ## + $WANT = <<'EOT'; + #$foo = \*::foo; + #@bar = ( + # -10, + # $foo, + # { + # c => \@bar, + # a => 1, + # b => \5, + # d => $bar[2] + # } + #); + #%baz = %{$bar[2]}; + EOT + + $Data::Dumper::Purity = 0; + $Data::Dumper::Quotekeys = 0; + TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])); + TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['*foo', '*bar', '*baz'])) if $XS; + + ############# 79 + ## + $WANT = <<'EOT'; + #$foo = \*::foo; + #$bar = [ + # -10, + # $foo, + # { + # c => $bar, + # a => 1, + # b => \5, + # d => $bar->[2] + # } + #]; + #$baz = $bar->[2]; + EOT + + TEST q(Data::Dumper->Dump([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])); + TEST q(Data::Dumper->Dumpxs([\\*foo, \\@foo, \\%foo], ['foo', 'bar', 'baz'])) if $XS; + + } + + ############# + ############# + { + package main; + @dogs = ( 'Fido', 'Wags' ); + %kennel = ( + First => \$dogs[0], + Second => \$dogs[1], + ); + $dogs[2] = \%kennel; + $mutts = \%kennel; + $mutts = $mutts; # avoid warning + + ############# 85 + ## + $WANT = <<'EOT'; + #%kennels = ( + # Second => \'Wags', + # First => \'Fido' + #); + #@dogs = ( + # ${$kennels{First}}, + # ${$kennels{Second}}, + # \%kennels + #); + #%mutts = %kennels; + EOT + + TEST q( + $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts], + [qw(*kennels *dogs *mutts)] ); + $d->Dump; + ); + if ($XS) { + TEST q( + $d = Data::Dumper->new([\\%kennel, \\@dogs, $mutts], + [qw(*kennels *dogs *mutts)] ); + $d->Dumpxs; + ); + } + + ############# 91 + ## + $WANT = <<'EOT'; + #%kennels = %kennels; + #@dogs = @dogs; + #%mutts = %kennels; + EOT + + TEST q($d->Dump); + TEST q($d->Dumpxs) if $XS; + + ############# 97 + ## + $WANT = <<'EOT'; + #%kennels = ( + # Second => \'Wags', + # First => \'Fido' + #); + #@dogs = ( + # ${$kennels{First}}, + # ${$kennels{Second}}, + # \%kennels + #); + #%mutts = %kennels; + EOT + + + TEST q($d->Reset; $d->Dump); + if ($XS) { + TEST q($d->Reset; $d->Dumpxs); + } + + ############# 103 + ## + $WANT = <<'EOT'; + #@dogs = ( + # 'Fido', + # 'Wags', + # { + # Second => \$dogs[1], + # First => \$dogs[0] + # } + #); + #%kennels = %{$dogs[2]}; + #%mutts = %{$dogs[2]}; + EOT + + TEST q( + $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts], + [qw(*dogs *kennels *mutts)] ); + $d->Dump; + ); + if ($XS) { + TEST q( + $d = Data::Dumper->new([\\@dogs, \\%kennel, $mutts], + [qw(*dogs *kennels *mutts)] ); + $d->Dumpxs; + ); + } + + ############# 109 + ## + TEST q($d->Reset->Dump); + if ($XS) { + TEST q($d->Reset->Dumpxs); + } + + ############# 115 + ## + $WANT = <<'EOT'; + #@dogs = ( + # 'Fido', + # 'Wags', + # { + # Second => \'Wags', + # First => \'Fido' + # } + #); + #%kennels = ( + # Second => \'Wags', + # First => \'Fido' + #); + EOT + + TEST q( + $d = Data::Dumper->new( [\@dogs, \%kennel], [qw(*dogs *kennels)] ); + $d->Deepcopy(1)->Dump; + ); + if ($XS) { + TEST q($d->Reset->Dumpxs); + } + + } + + { + + sub z { print "foo\n" } + $c = [ \&z ]; + + ############# 121 + ## + $WANT = <<'EOT'; + #$a = $b; + #$c = [ + # $b + #]; + EOT + + TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dump;); + TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'b' => \&z})->Dumpxs;) + if $XS; + + ############# 127 + ## + $WANT = <<'EOT'; + #$a = \&b; + #$c = [ + # \&b + #]; + EOT + + TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dump;); + TEST q(Data::Dumper->new([\&z,$c],['a','c'])->Seen({'*b' => \&z})->Dumpxs;) + if $XS; + + ############# 133 + ## + $WANT = <<'EOT'; + #*a = \&b; + #@c = ( + # \&b + #); + EOT + + TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dump;); + TEST q(Data::Dumper->new([\&z,$c],['*a','*c'])->Seen({'*b' => \&z})->Dumpxs;) + if $XS; + + } + + { + $a = []; + $a->[1] = \$a->[0]; + + ############# 139 + ## + $WANT = <<'EOT'; + #@a = ( + # undef, + # do{my $o} + #); + #$a[1] = \$a[0]; + EOT + + TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dump;); + TEST q(Data::Dumper->new([$a],['*a'])->Purity(1)->Dumpxs;) + if $XS; + } + + { + $a = \\\\\'foo'; + $b = $$$a; + + ############# 145 + ## + $WANT = <<'EOT'; + #$a = \\\\\'foo'; + #$b = ${${$a}}; + EOT + + TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;); + TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;) + if $XS; + } + + { + $a = [{ a => \$b }, { b => undef }]; + $b = [{ c => \$b }, { d => \$a }]; + + ############# 151 + ## + $WANT = <<'EOT'; + #$a = [ + # { + # a => \[ + # { + # c => do{my $o} + # }, + # { + # d => \[] + # } + # ] + # }, + # { + # b => undef + # } + #]; + #${$a->[0]{a}}->[0]->{c} = $a->[0]{a}; + #${${$a->[0]{a}}->[1]->{d}} = $a; + #$b = ${$a->[0]{a}}; + EOT + + TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dump;); + TEST q(Data::Dumper->new([$a,$b],['a','b'])->Purity(1)->Dumpxs;) + if $XS; + } + + { + $a = [[[[\\\\\'foo']]]]; + $b = $a->[0][0]; + $c = $${$b->[0][0]}; + + ############# 157 + ## + $WANT = <<'EOT'; + #$a = [ + # [ + # [ + # [ + # \\\\\'foo' + # ] + # ] + # ] + #]; + #$b = $a->[0][0]; + #$c = ${${$a->[0][0][0][0]}}; + EOT + + TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dump;); + TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Purity(1)->Dumpxs;) + if $XS; + } + + { + $f = "pearl"; + $e = [ $f ]; + $d = { 'e' => $e }; + $c = [ $d ]; + $b = { 'c' => $c }; + $a = { 'b' => $b }; + + ############# 163 + ## + $WANT = <<'EOT'; + #$a = { + # b => { + # c => [ + # { + # e => 'ARRAY(0xdeadbeef)' + # } + # ] + # } + #}; + #$b = $a->{b}; + #$c = $a->{b}{c}; + EOT + + TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dump;); + TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(4)->Dumpxs;) + if $XS; + + ############# 169 + ## + $WANT = <<'EOT'; + #$a = { + # b => 'HASH(0xdeadbeef)' + #}; + #$b = $a->{b}; + #$c = [ + # 'HASH(0xdeadbeef)' + #]; + EOT + + TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dump;); + TEST q(Data::Dumper->new([$a,$b,$c],['a','b','c'])->Maxdepth(1)->Dumpxs;) + if $XS; + } + + { + $a = \$a; + $b = [$a]; + + ############# 175 + ## + $WANT = <<'EOT'; + #$b = [ + # \$b->[0] + #]; + EOT + + TEST q(Data::Dumper->new([$b],['b'])->Purity(0)->Dump;); + TEST q(Data::Dumper->new([$b],['b'])->Purity(0)->Dumpxs;) + if $XS; + + ############# 181 + ## + $WANT = <<'EOT'; + #$b = [ + # \do{my $o} + #]; + #${$b->[0]} = $b->[0]; + EOT + + + TEST q(Data::Dumper->new([$b],['b'])->Purity(1)->Dump;); + TEST q(Data::Dumper->new([$b],['b'])->Purity(1)->Dumpxs;) + if $XS; + } diff -c /dev/null 'perl-5.7.2/ext/Data/Dumper/t/overload.t' Index: ./ext/Data/Dumper/t/overload.t *** ./ext/Data/Dumper/t/overload.t Thu Jan 1 02:00:00 1970 --- ./ext/Data/Dumper/t/overload.t Mon Jul 9 17:09:54 2001 *************** *** 0 **** --- 1,35 ---- + #!./perl -w + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bData\/Dumper\b/) { + print "1..0 # Skip: Data::Dumper was not built\n"; + exit 0; + } + } + + use Data::Dumper; + + print "1..1\n"; + + package Foo; + use overload '""' => 'as_string'; + + sub new { bless { foo => "bar" }, shift } + sub as_string { "%%%%" } + + package main; + + my $f = Foo->new; + + print "#\$f=$f\n"; + + $_ = Dumper($f); + s/^/#/mg; + print $_; + + print "not " unless /bar/ && /Foo/; + print "ok 1\n"; + diff -c 'perl-5.7.1/ext/Devel/DProf/DProf.xs' 'perl-5.7.2/ext/Devel/DProf/DProf.xs' Index: ./ext/Devel/DProf/DProf.xs *** ./ext/Devel/DProf/DProf.xs Tue Mar 6 04:04:36 2001 --- ./ext/Devel/DProf/DProf.xs Mon Jul 9 17:09:54 2001 *************** *** 87,93 **** U32 total; U32 lastid; U32 default_perldb; ! U32 depth; #ifdef OS2 ULONG frequ; long long start_cnt; --- 87,93 ---- U32 total; U32 lastid; U32 default_perldb; ! UV depth; #ifdef OS2 ULONG frequ; long long start_cnt; *************** *** 384,390 **** int i, j, k = 0; HV *oldstash = PL_curstash; struct tms t1, t2; ! clock_t realtime1, realtime2; U32 ototal = g_total; U32 ostack = g_SAVE_STACK; U32 operldb = PL_perldb; --- 384,390 ---- int i, j, k = 0; HV *oldstash = PL_curstash; struct tms t1, t2; ! clock_t realtime1 = 0, realtime2 = 0; U32 ototal = g_total; U32 ostack = g_SAVE_STACK; U32 operldb = PL_perldb; *************** *** 497,503 **** warn("garbled call depth when profiling"); } else { ! I32 marks = g_depth - need_depth; /* warn("Check_depth: got %d, expected %d\n", g_depth, need_depth); */ while (marks--) { --- 497,503 ---- warn("garbled call depth when profiling"); } else { ! IV marks = g_depth - need_depth; /* warn("Check_depth: got %d, expected %d\n", g_depth, need_depth); */ while (marks--) { *************** *** 513,519 **** XS(XS_DB_sub) { ! dXSARGS; dORIGMARK; SV *Sub = GvSV(PL_DBsub); /* name of current sub */ --- 513,519 ---- XS(XS_DB_sub) { ! dMARK; dORIGMARK; SV *Sub = GvSV(PL_DBsub); /* name of current sub */ *************** *** 530,536 **** DBG_SUB_NOTIFY("XS DBsub(%s)\n", SvPV_nolen(Sub)); ! SAVEDESTRUCTOR_X(check_depth, (void*)g_depth); g_depth++; prof_mark(aTHX_ OP_ENTERSUB); --- 530,536 ---- DBG_SUB_NOTIFY("XS DBsub(%s)\n", SvPV_nolen(Sub)); ! SAVEDESTRUCTOR_X(check_depth, INT2PTR(void*,g_depth)); g_depth++; prof_mark(aTHX_ OP_ENTERSUB); diff -c 'perl-5.7.1/ext/Devel/Peek/Peek.pm' 'perl-5.7.2/ext/Devel/Peek/Peek.pm' Index: ./ext/Devel/Peek/Peek.pm *** ./ext/Devel/Peek/Peek.pm Fri Mar 16 04:54:46 2001 --- ./ext/Devel/Peek/Peek.pm Mon Jul 9 17:09:54 2001 *************** *** 4,10 **** package Devel::Peek; # Underscore to allow older Perls to access older version from CPAN ! $VERSION = '1.00_01'; require Exporter; use XSLoader (); --- 4,10 ---- package Devel::Peek; # Underscore to allow older Perls to access older version from CPAN ! $VERSION = '1.00_02'; require Exporter; use XSLoader (); diff -c /dev/null 'perl-5.7.2/ext/Devel/Peek/Peek.t' Index: ./ext/Devel/Peek/Peek.t *** ./ext/Devel/Peek/Peek.t Thu Jan 1 02:00:00 1970 --- ./ext/Devel/Peek/Peek.t Mon Jul 9 17:09:54 2001 *************** *** 0 **** --- 1,308 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bPeek\b/) { + print "1..0 # Skip: Devel::Peek was not built\n"; + exit 0; + } + } + + use Devel::Peek; + + print "1..17\n"; + + our $DEBUG = 0; + open(SAVERR, ">&STDERR") or die "Can't dup STDERR: $!"; + + sub do_test { + my $pattern = pop; + if (open(OUT,">peek$$")) { + open(STDERR, ">&OUT") or die "Can't dup OUT: $!"; + Dump($_[1]); + open(STDERR, ">&SAVERR") or die "Can't restore STDERR: $!"; + close(OUT); + if (open(IN, "peek$$")) { + local $/; + $pattern =~ s/\$ADDR/0x[[:xdigit:]]+/g; + print $pattern, "\n" if $DEBUG; + my $dump = ; + print $dump, "\n" if $DEBUG; + print "[$dump] vs [$pattern]\nnot " unless $dump =~ /$pattern/ms; + print "ok $_[0]\n"; + close(IN); + } else { + die "$0: failed to open peek$$: !\n"; + } + } else { + die "$0: failed to create peek$$: $!\n"; + } + } + + our $a; + our $b; + my $c; + local $d = 0; + + do_test( 1, + $a = "foo", + 'SV = PV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(POK,pPOK\\) + PV = $ADDR "foo"\\\0 + CUR = 3 + LEN = 4' + ); + + do_test( 2, + "bar", + 'SV = PV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(.*POK,READONLY,pPOK\\) + PV = $ADDR "bar"\\\0 + CUR = 3 + LEN = 4'); + + do_test( 3, + $b = 123, + 'SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(IOK,pIOK\\) + IV = 123'); + + do_test( 4, + 456, + 'SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(.*IOK,READONLY,pIOK\\) + IV = 456'); + + do_test( 5, + $c = 456, + 'SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(PADBUSY,PADMY,IOK,pIOK\\) + IV = 456'); + + do_test( 6, + $c + $d, + 'SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(PADTMP,IOK,pIOK\\) + IV = 456'); + + ($d = "789") += 0.1; + + do_test( 7, + $d, + 'SV = PVNV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(NOK,pNOK\\) + IV = 0 + NV = 789\\.(?:1(?:000+\d+)?|0999+\d+) + PV = $ADDR "789"\\\0 + CUR = 3 + LEN = 4'); + + do_test( 8, + 0xabcd, + 'SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(.*IOK,READONLY,pIOK\\) + IV = 43981'); + + do_test( 9, + undef, + 'SV = NULL\\(0x0\\) at $ADDR + REFCNT = 1 + FLAGS = \\(\\)'); + + do_test(10, + \$a, + 'SV = RV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(ROK\\) + RV = $ADDR + SV = PV\\($ADDR\\) at $ADDR + REFCNT = 2 + FLAGS = \\(POK,pPOK\\) + PV = $ADDR "foo"\\\0 + CUR = 3 + LEN = 4'); + + do_test(11, + [$b,$c], + 'SV = RV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(ROK\\) + RV = $ADDR + SV = PVAV\\($ADDR\\) at $ADDR + REFCNT = 2 + FLAGS = \\(\\) + IV = 0 + NV = 0 + ARRAY = $ADDR + FILL = 1 + MAX = 1 + ARYLEN = 0x0 + FLAGS = \\(REAL\\) + Elt No. 0 + SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(IOK,pIOK\\) + IV = 123 + Elt No. 1 + SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(IOK,pIOK\\) + IV = 456'); + + do_test(12, + {$b=>$c}, + 'SV = RV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(ROK\\) + RV = $ADDR + SV = PVHV\\($ADDR\\) at $ADDR + REFCNT = 2 + FLAGS = \\(SHAREKEYS\\) + IV = 1 + NV = 0 + ARRAY = $ADDR \\(0:7, 1:1\\) + hash quality = 100.0% + KEYS = 1 + FILL = 1 + MAX = 7 + RITER = -1 + EITER = 0x0 + Elt "123" HASH = $ADDR + SV = IV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(IOK,pIOK\\) + IV = 456'); + + do_test(13, + sub(){@_}, + 'SV = RV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(ROK\\) + RV = $ADDR + SV = PVCV\\($ADDR\\) at $ADDR + REFCNT = 2 + FLAGS = \\(PADBUSY,PADMY,POK,pPOK,ANON\\) + IV = 0 + NV = 0 + PROTOTYPE = "" + COMP_STASH = $ADDR\\t"main" + START = $ADDR ===> \\d+ + ROOT = $ADDR + XSUB = 0x0 + XSUBANY = 0 + GVGV::GV = $ADDR\\t"main" :: "__ANON__[^"]*" + FILE = ".*\\b(?i:peek\\.t)" + DEPTH = 0 + (?: MUTEXP = $ADDR + OWNER = $ADDR + )? FLAGS = 0x4 + PADLIST = $ADDR + OUTSIDE = $ADDR \\(MAIN\\)'); + + do_test(14, + \&do_test, + 'SV = RV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(ROK\\) + RV = $ADDR + SV = PVCV\\($ADDR\\) at $ADDR + REFCNT = (3|4) + FLAGS = \\(\\) + IV = 0 + NV = 0 + COMP_STASH = $ADDR\\t"main" + START = $ADDR ===> \\d+ + ROOT = $ADDR + XSUB = 0x0 + XSUBANY = 0 + GVGV::GV = $ADDR\\t"main" :: "do_test" + FILE = ".*\\b(?i:peek\\.t)" + DEPTH = 1 + (?: MUTEXP = $ADDR + OWNER = $ADDR + )? FLAGS = 0x0 + PADLIST = $ADDR + \\d+\\. $ADDR \\("\\$pattern" \\d+-\\d+\\) + \\d+\\. $ADDR \\(FAKE "\\$DEBUG" 0-\\d+\\) + \\d+\\. $ADDR \\("\\$dump" \\d+-\\d+\\) + OUTSIDE = $ADDR \\(MAIN\\)'); + + do_test(15, + qr(tic), + 'SV = RV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(ROK\\) + RV = $ADDR + SV = PVMG\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(OBJECT,RMG\\) + IV = 0 + NV = 0 + PV = 0 + MAGIC = $ADDR + MG_VIRTUAL = $ADDR + MG_TYPE = PERL_MAGIC_qr\(r\) + MG_OBJ = $ADDR + STASH = $ADDR\\t"Regexp"'); + + do_test(16, + (bless {}, "Tac"), + 'SV = RV\\($ADDR\\) at $ADDR + REFCNT = 1 + FLAGS = \\(ROK\\) + RV = $ADDR + SV = PVHV\\($ADDR\\) at $ADDR + REFCNT = 2 + FLAGS = \\(OBJECT,SHAREKEYS\\) + IV = 0 + NV = 0 + STASH = $ADDR\\t"Tac" + ARRAY = 0x0 + KEYS = 0 + FILL = 0 + MAX = 7 + RITER = -1 + EITER = 0x0'); + + do_test(17, + *a, + 'SV = PVGV\\($ADDR\\) at $ADDR + REFCNT = 5 + FLAGS = \\(GMG,SMG,MULTI(?:,IN_PAD)?\\) + IV = 0 + NV = 0 + MAGIC = $ADDR + MG_VIRTUAL = &PL_vtbl_glob + MG_TYPE = PERL_MAGIC_glob\(\*\) + MG_OBJ = $ADDR + NAME = "a" + NAMELEN = 1 + GvSTASH = $ADDR\\t"main" + GP = $ADDR + SV = $ADDR + REFCNT = 1 + IO = 0x0 + FORM = 0x0 + AV = 0x0 + HV = 0x0 + CV = 0x0 + CVGEN = 0x0 + GPFLAGS = 0x0 + LINE = \\d+ + FILE = ".*\\b(?i:peek\\.t)" + FLAGS = $ADDR + EGV = $ADDR\\t"a"'); + + END { + 1 while unlink("peek$$"); + } diff -c 'perl-5.7.1/ext/Devel/Peek/Peek.xs' 'perl-5.7.2/ext/Devel/Peek/Peek.xs' Index: ./ext/Devel/Peek/Peek.xs *** ./ext/Devel/Peek/Peek.xs Tue Mar 6 04:04:37 2001 --- ./ext/Devel/Peek/Peek.xs Mon Jul 9 17:09:54 2001 *************** *** 10,16 **** return Nullsv; #else SV* sva; ! SV* sv, *dbg; SV* ret = newRV_noinc((SV*)newAV()); register SV* svend; int tm = 0, tref = 0, ts = 0, ta = 0, tas = 0; --- 10,16 ---- return Nullsv; #else SV* sva; ! SV* sv; SV* ret = newRV_noinc((SV*)newAV()); register SV* svend; int tm = 0, tref = 0, ts = 0, ta = 0, tas = 0; *************** *** 151,158 **** fill_mstats(SV *sv, int level) { dTHX; - int nbuckets; - struct mstats_buffer buf; if (SvREADONLY(sv)) croak("Cannot modify a readonly value"); --- 151,156 ---- *************** *** 216,222 **** warn("FIXME: internal mstats buffer too short"); for (type = 0; type < (level ? 4 : 2); type++) { ! UV *p, *p1; AV *av; int i; static const char *types[4] = { --- 214,220 ---- warn("FIXME: internal mstats buffer too short"); for (type = 0; type < (level ? 4 : 2); type++) { ! UV *p = 0, *p1 = 0; AV *av; int i; static const char *types[4] = { *************** *** 229,235 **** croak("Unexpected value for the key '%s' in the mstats hash", types[type]); if (!SvOK(*svp)) { av = newAV(); ! SvUPGRADE(*svp, SVt_RV); SvRV(*svp) = (SV*)av; SvROK_on(*svp); } else --- 227,233 ---- croak("Unexpected value for the key '%s' in the mstats hash", types[type]); if (!SvOK(*svp)) { av = newAV(); ! (void)SvUPGRADE(*svp, SVt_RV); SvRV(*svp) = (SV*)av; SvROK_on(*svp); } else diff -c 'perl-5.7.1/ext/Digest/MD5/MD5.xs' 'perl-5.7.2/ext/Digest/MD5/MD5.xs' Index: ./ext/Digest/MD5/MD5.xs Prereq: 1.26 *** ./ext/Digest/MD5/MD5.xs Fri Mar 23 04:30:39 2001 --- ./ext/Digest/MD5/MD5.xs Mon Jul 9 17:09:54 2001 *************** *** 1,5 **** - /* $Id: MD5.xs,v 1.26 2000/09/18 14:27:44 gisle Exp $ */ - /* * This library is free software; you can redistribute it and/or * modify it under the same terms as Perl itself. --- 1,3 ---- *************** *** 44,50 **** } #endif ! /*#define MD5_DEBUG /**/ /* Perl does not guarantee that U32 is exactly 32 bits. Some system * has no integral type with exactly 32 bits. For instance, A Cray has --- 42,49 ---- } #endif ! /* Define this to turn on verbose debugging prints */ ! #undef MD5_DEBUG /* Perl does not guarantee that U32 is exactly 32 bits. Some system * has no integral type with exactly 32 bits. For instance, A Cray has *************** *** 137,143 **** /* F, G, H and I are basic MD5 functions. */ ! #define F(x, y, z) (((x) & ((y) ^ (z)) ^ (z))) #define G(x, y, z) F(z, x, y) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) --- 136,142 ---- /* F, G, H and I are basic MD5 functions. */ ! #define F(x, y, z) ((((x) & ((y) ^ (z))) ^ (z))) #define G(x, y, z) F(z, x, y) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) *************** *** 195,201 **** --- 194,202 ---- static void MD5Transform(MD5_CTX* ctx, const U8* buf, STRLEN blocks) { + #ifdef MD5_DEBUG static int tcount = 0; + #endif U32 A = ctx->A; U32 B = ctx->B; *************** *** 553,559 **** STRLEN len; PPCODE: for (i = 1; i < items; i++) { ! data = (unsigned char *)(SvPV(ST(i), len)); MD5Update(context, data, len); } XSRETURN(1); /* self */ --- 554,560 ---- STRLEN len; PPCODE: for (i = 1; i < items; i++) { ! data = (unsigned char *)(SvPVbyte(ST(i), len)); MD5Update(context, data, len); } XSRETURN(1); /* self */ *************** *** 618,624 **** PPCODE: MD5Init(&ctx); for (i = 0; i < items; i++) { ! data = (unsigned char *)(SvPV(ST(i), len)); MD5Update(&ctx, data, len); } MD5Final(digeststr, &ctx); --- 619,625 ---- PPCODE: MD5Init(&ctx); for (i = 0; i < items; i++) { ! data = (unsigned char *)(SvPVbyte(ST(i), len)); MD5Update(&ctx, data, len); } MD5Final(digeststr, &ctx); diff -c 'perl-5.7.1/ext/Digest/MD5/Makefile.PL' 'perl-5.7.2/ext/Digest/MD5/Makefile.PL' Index: ./ext/Digest/MD5/Makefile.PL *** ./ext/Digest/MD5/Makefile.PL Fri Apr 6 16:41:10 2001 --- ./ext/Digest/MD5/Makefile.PL Mon Jul 9 17:09:54 2001 *************** *** 10,21 **** --- 10,31 ---- if !($Config{'byteorder'} eq '1234' || $Config{'byteorder'} eq '4321'); } + my @optimize = (); + if ($^O eq 'VMS') { + if (defined($Config{ccname})) { + if ($Config{ccversion} <= 50390006 && grep(/VMS_VAX/, @INC) && ($Config{ccname} eq 'DEC')) { + @optimize = ("OPTIMIZE","/Optimize=(NODISJOINT)"); + } + } + } WriteMakefile( 'NAME' => 'Digest::MD5', 'VERSION_FROM' => 'MD5.pm', + MAN3PODS => {}, # Pods will be built by installman. @extra, 'dist' => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, + @optimize ); exit; diff -c /dev/null 'perl-5.7.2/ext/Digest/MD5/t/aaa.t' Index: ./ext/Digest/MD5/t/aaa.t *** ./ext/Digest/MD5/t/aaa.t Thu Jan 1 02:00:00 1970 --- ./ext/Digest/MD5/t/aaa.t Mon Jul 9 17:09:54 2001 *************** *** 0 **** --- 1,552 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + use strict; + print "1..256\n"; + + use Digest::MD5 qw(md5_hex); + + my $Is_EBCDIC = ord('A') == 193; + + my $testno = 0; + while () { + if (!$Is_EBCDIC) { + next if /^EBCDIC/; + } + else { + next if !/^EBCDIC/; + s/^EBCDIC,\w+#//; + } + my($hexdigest, $message) = split; + $message =~ s/\"//g; + + my $failed; + $failed++ unless md5_hex($message) eq $hexdigest; + $failed++ unless Digest::MD5->new->add(split(//, $message))->digest + eq pack("H*", $hexdigest); + + print "not " if $failed; + print "ok ", ++$testno, "\n"; + } + + + + # This data was generated with: + # + # perl -e 'for (1..256) { system("md5sum --string=" . ("a" x $_)); }' + # + __END__ + 0cc175b9c0f1b6a831c399e269772661 "a" + 4124bc0a9335c27f086f24ba207a4912 "aa" + 47bce5c74f589f4867dbd57e9ca9f808 "aaa" + 74b87337454200d4d33f80c4663dc5e5 "aaaa" + 594f803b380a41396ed63dca39503542 "aaaaa" + 0b4e7a0e5fe84ad35fb5f95b9ceeac79 "aaaaaa" + 5d793fc5b00a2348c3fb9ab59e5ca98a "aaaaaaa" + 3dbe00a167653a1aaee01d93e77e730e "aaaaaaaa" + 552e6a97297c53e592208cf97fbb3b60 "aaaaaaaaa" + e09c80c42fda55f9d992e59ca6b3307d "aaaaaaaaaa" + d57f21e6a273781dbf8b7657940f3b03 "aaaaaaaaaaa" + 45e4812014d83dde5666ebdf5a8ed1ed "aaaaaaaaaaaa" + c162de19c4c3731ca3428769d0cd593d "aaaaaaaaaaaaa" + 451599a5f9afa91a0f2097040a796f3d "aaaaaaaaaaaaaa" + 12f9cf6998d52dbe773b06f848bb3608 "aaaaaaaaaaaaaaa" + 23ca472302f49b3ea5592b146a312da0 "aaaaaaaaaaaaaaaa" + 88e42e96cc71151b6e1938a1699b0a27 "aaaaaaaaaaaaaaaaa" + 2c60c24e7087e18e45055a33f9a5be91 "aaaaaaaaaaaaaaaaaa" + 639d76897485360b3147e66e0a8a3d6c "aaaaaaaaaaaaaaaaaaa" + 22d42eb002cefa81e9ad604ea57bc01d "aaaaaaaaaaaaaaaaaaaa" + bd049f221af82804c5a2826809337c9b "aaaaaaaaaaaaaaaaaaaaa" + ff49cfac3968dbce26ebe7d4823e58bd "aaaaaaaaaaaaaaaaaaaaaa" + d95dbfee231e34cccb8c04444412ed7d "aaaaaaaaaaaaaaaaaaaaaaa" + 40edae4bad0e5bf6d6c2dc5615a86afb "aaaaaaaaaaaaaaaaaaaaaaaa" + a5a8bfa3962f49330227955e24a2e67c "aaaaaaaaaaaaaaaaaaaaaaaaa" + ae791f19bdf77357ff10bb6b0e97e121 "aaaaaaaaaaaaaaaaaaaaaaaaaa" + aaab9c59a88bf0bdfcb170546c5459d6 "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + b0f0545856af1a340acdedce23c54b97 "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + f7ce3d7d44f3342107d884bfa90c966a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 59e794d45697b360e18ba972bada0123 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3b0845db57c200be6052466f87b2198a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 5eca9bd3eb07c006cd43ae48dfde7fd3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b4f13cb081e412f44e99742cb128a1a5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4c660346451b8cf91ef50f4634458d41 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 11db24dc3f6c2145701db08625dd6d76 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 80dad3aad8584778352c68ab06250327 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 1227fe415e79db47285cb2689c93963f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8e084f489f1bdf08c39f98ff6447ce6d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 08b2f2b0864bac1ba1585043362cbec9 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4697843037d962f62a5a429e611e0f5f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 10c4da18575c092b486f8ab96c01c02f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + af205d729450b663f48b11d839a1c8df "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0d3f91798fac6ee279ec2485b25f1124 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4c3c7c067634daec9716a80ea886d123 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + d1e358e6e3b707282cdd06e919f7e08c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8c6ded4f0af86e0a7e301f8a716c4363 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4c2d8bcb02d982d7cb77f649c0a2dea8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + bdb662f765cd310f2a547cab1cfecef6 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 08ff5f7301d30200ab89169f6afdb7af "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 6eb6a030bcce166534b95bc2ab45d9cf "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 1bb77918e5695c944be02c16ae29b25e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b6fe77c19f0f0f4946c761d62585bfea "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e9e7e260dce84ffa6e0e7eb5fd9d37fc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + eced9e0b81ef2bba605cbc5e2e76a1d0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ef1772b6dff9a122358552954ad0df65 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3b0c8ac703f828b04c6c197006d17218 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 652b906d60af96844ebd21b674f35e93 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + dc2f2f2462a0d72358b2f99389458606 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 762fc2665994b217c52c3c2eb7d9f406 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + cc7ed669cf88f201c3297c6a91e1d18d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + cced11f7bbbffea2f718903216643648 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 24612f0ce2c9d2cf2b022ef1e027a54f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b06521f39153d618550606be297466d5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 014842d480b571495a4a0363793f7367 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + c743a45e0d2e6a95cb859adae0248435 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + def5d97e01e1219fb2fc8da6c4d6ba2f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 92cb737f8687ccb93022fdb411a77cca "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + a0d1395c7fb36247bfe2d49376d9d133 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ab75504250558b788f99d1ebd219abf2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0f5c6c4e740bfcc08c3c26ccb2673d46 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + cddd19bec7f310d8c87149ef47a1828f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 96b39b8b95e016c79d104d83395b8133 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + f1fc0b14ff8fa674b02344577e23eeb1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0e8d28a1cafa3ffcff22afd480cce7d8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 448539ffc17e1e81005b65581855cef4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 61e39aae7c53e6e77db2e4405d9fb157 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 618a426895ee6133a372bebd1129b63e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 046c90690c9e36578b9d4a7e1d249c75 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + aadab38075c43296ee7e12466ebb03e3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b15af9cdabbaea0516866a33d8fd0f98 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 986e6938ed767a8ae9530eef54bfe5f1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7ae25a72b71a42ccbc5477fd989cd512 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 98d34e50d4aa7a893cc7919a91acb0e3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3fc53fc22ea40f1a0afd78fc2cd9aa0f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 923e37c738b9d7b1526f70b65229cc3d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b3966b7a08e5d46fd0774b797ba78dc2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + f50c7286b540bb181db1d6e05a51a296 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4efd6c8826e65a61f82af954d431b59b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ef1031e79e7a15a4470a5e98b23781b5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 067876bfd0df0f4c5002780ec85e6f8c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 789851dfa4c03563e9cef5f7bc050a7e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + baf934720818ee49477e74fc644faa5e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 9a0ea77ca26d2c121ddcc179edb76308 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 20c825561572e33d026f99ddfd999538 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 464c461455c5a927079a13609c20b637 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + cf37d42f89b6adb0e1a9e99104501b82 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + d266af45e3d06b70d9f52e2df4344186 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + f8b59fa22eb0ba944e2b7aa24d67b681 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0918d7c2f9062743450a86eae9dde1a3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 36a92cc94a9e0fa21f625f8bfb007adf "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 681d73898dad5685d48b5e8438bc3a66 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 337ccef058459c3c16411381778da0c4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 6ccdfcc742862036ce07583633c5f77e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ddfa1adc974649dc5b414be86def7457 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 650ebc28ad85f11aa4b63b6ee565b89d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e4571793bcaba284017eeabd8df85697 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4fc040d354ad9ba5e4f62862109d3e17 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 25814274e02aa7cc03d6314eb703e655 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 11378ecaee0089c840d26352704027e3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 86f950bfcd824d5546da01c40576db31 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 089f243d1e831c5879aa375ee364a06e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 9146ef3527c7cfcc66dc615c3986e391 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + d727cfdfc9ed0347e6917a68b982f7bc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + da8f45e1fdc12deecfe56aeb5288796e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 29cfcf52d8250a253a535cf7989c7bd2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0f6eb555b8e3c35411eebe9348594193 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + a922439f963e7e59040e4756992c6f1b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 81f8453cf3f7e5ee5479c777e5a8d80c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8a7bd0732ed6a28ce75f6dabc90e1613 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 5f61c0ccad4cac44c75ff505e1f1e537 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + f6acfca2d47c87f2b14ca038234d3614 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 269fc62c517f3d55c368152addca57e7 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 50587cb16413da779b35508018721647 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 5e4a3ecfdaa4636b84a39b6a7be7c047 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + c5339dc2af6bf595580281ffb07353f6 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e51176a47347e167ed0ed766b6de1a0c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 020406e1d05cdc2aa287641f7ae2cc39 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e510683b3f5ffe4093d021808bc6ff70 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b325dc1c6f5e7a2b7cf465b9feab7948 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e016e4ccc7fdaea56fc377600b58c4cb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3870ec709d2fc64b255d65be3123ad69 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + a92bde1f862c3fe797ecd69510bbd266 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 04daa146f3a2256fdcbf015c0f67e168 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3d13c8bf627421ccc937aa1c9ac87bf1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 247dc7ffc545e4dda64ae12def481c4e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 2dfd4def392ee9563241b7db7eb7c346 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + d11a18a4743a1a0a699d1704efb74a0d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 55b62fabd9c77d44d86e992eeeb093e6 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 9a72cf7d0bd5ae2907c79f91837e3ced "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + d3828cce1835534475029202ebd799e4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b0bebbf0015658d4740679f263a3f01f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 02368ebf1f53bc4634211b1693021666 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 04960f7d18960e348372949e4baa9752 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + c6041e7a86d407e9402b175670519260 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 439fd4c056bec1d14acd393746f6ae59 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 81a855120e04494c5a6c874a2360fd57 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ef57bd47a964dc3aadd959c4131e64ac "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0b0ab27b16cbba267c141fe0f4ee9189 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + abccd84f340bfe4ba59095cc3d5ca6ad "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + bc620e8c15265f195c8818e2f3e3c58b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + fdcd84c4143286f6fc70c69208acd18d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 50e05071e773b1e9f3009a4a559ce6b2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 9e69c7a6c1863fbba2532f09ba665bde "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 47a962111aa5187eeef3d17a278d95f2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + c13e57e33526bc713b5a1825f92651bc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 72b392f15593e42404b38e5c889fa75e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 5327acd3278274265d44e22ccfc4042c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 930dcac6da160b2a4c51879da76d3417 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 41292c326f926f1534ead47fe302f0a0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 2bdecb5cf6b69a00f7832299ef2fb5a5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8bf93e9e8a3e4396de3f211c788e177e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + eea9cb566e19d6a7f55fbae78d94ef2a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3b8452700a829dec78397aa5c0458dd3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7950059f699eaea1e0a1759340d7c153 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 40840c5f1de00f17a8e70d5bd4d00af2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 80f86f6af38be9ca8e40c2dc44491a0a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7aab2c2e72c77163e7102412dc332125 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + bfd6869ae2ee2fe2675846d341eaa67d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7e4d976f6d552d1d5bac7e2693dc8759 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 37d9884c32abfc6f372ee899434e64ad "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e362cd83a4b49d81ac6788b7839a56fd "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 9203cbb93b25d80b9d1b75e3c6c4b0dc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 77441eda11554ec5b915d942605f66ed "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e0fe0c02b5c9c5afe10ab9d6a3769efe "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + cc7682cf11b214e928f3df899772e789 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ade0901d347afb25ecf9df4955bb8061 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 987379587cbe8e94b7057269232ff826 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + fd44a60101b04b7ddbc2b4e9b509ca1f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 53107a7f1e6f13a2e63239b6f2bf0ef1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0b82cdd562f26aaa2459610a7ba8cd76 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 79f12de7255e9c8c0ec9a9be45ee6210 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 92338d8de02ed7aa8b3adc9120b94e71 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8fc48efda580fce85b8705d540e8382e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 63642b027ee89938c922722650f2eb9b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + fe54daa473502e9cc2c26dd66d564eab "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b90f3d4b7dcd8cdd8d96cb14695f4793 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3e73392e7a03bca45b67650d79a8fc63 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7fe51f2642dffbabc33eea2fcc2039ba "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + bc33790e52f99718cf920329961ee753 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 54d1e41ebac5db7886f01ab0afb65b17 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 16e2824f7a3f00ef0028994182071953 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 234c07907df5019d5f40f03936939bce "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8ea3af1d9476fa0b6c04ce4f3a336c03 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e95b69eae07d498d484afc771d1c45fc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + f22a673abbc4372544ba37b51a5f5a91 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7e6161eb1be7b06928c536fada91b7f1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4dfe3c301e88fff67822e1cfcfece43f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + edda210ac6645fbf5815eb4c58821f6d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 6a514de2bf1926129b08f9234cd0115e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 887f30b43b2867f4a9accceee7d16e6c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 15936442c22dab9b685de350bfe75971 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 281a39e10bab29f1f2dead149a1f3f87 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 04d5f8a53b0eeda82d3c0ccafd02c98e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + a91e6b80fe9d6db74fac76c7a67f065a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 30334486fa9841044afb07f2573107a5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0183c0cf15a3c2ed97d326f421b6d62c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4dc2a01b2161653753019b5228f765f8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 71ef2dbdec7f78005354abebbfec8d8f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + a1d1cd1446c113726ba50cc86d8b6519 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + ed6da79cfd13ece051c4cb7c88e80c2e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + d2047852ce178d4ddb7978da3883f9c5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + d75382e07dd096b618faeeac033eefff "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 3fb48e286d462dcc237c3335aa63ba14 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 55b959972677ea06c4d0e32f7fb2f10a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0a479c3623cfb9745e54d3376d0b9ae2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7825ad1ba19db7eec57d88b16936f32f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 833ccf25509cb423a4aa98accb15512d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + cae9609b05a9782610a5a43d7cd4b8ff "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 6c303e1da7f8a3032d13fe995847a722 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 4c47143a568e30ecde86dafe3bcb0558 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 9c48f0592f504b86360cfb6de00203b3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e1524f5686f170209366f9723880d9b0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + a96164a43a192543d40e538b9e9e4ece "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b774a4f788458a60e131d998705e4a06 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 1e97f0a7dfd3fac6ae585acdcf51a549 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b6364c77b6dd495c2a7f6b0211ac6fce "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 5d22315e78df2bc4146aa66f6c405dbb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 2a773d5b04e910612543a42deeaaaa62 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0165449ac66b086accdec3051e0b691e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 54884ba571054eae72b2a5271828a1fc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 520fb61f8625ea916d72a54a37937bc6 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 7717f05d6e424a2c7a20ab7977b21ec8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b64e4f62e3e14317e3a90f9ff2cde576 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + a49128259cfe50ba3bed80bbd11add7f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b10cb153b79c2e4af6a8431c265aa82d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 2e50fee6f574241042bdfabfdd46a153 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 5d5656a09b98c24edd01c530d3aad5e2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 5ac1e1609d82274371c349d5b7875298 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + b7b40d64ffccebd78abcf522376b3aae "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8619933469d908a2d4a2d890909bea43 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 591a0ee6dccd872b46ae184eb0f9450e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 8cd256a02c8c5c1676e9220e655d9ac4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + e48c0e2ed3e4e299a6e62e5416eb6d83 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + f30f75dce71e757ee562218c1efa0645 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 06bd7e90c0410dacb155732cf956f520 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 531a0a821a9304c215f1829b880306f1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 93f4621c0b88499297ec3f8fbb3fb9c4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 6af3d61e2e3ef8e189cffbea802c7e69 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + df84d21c884f99d6764d9bca4dec26e1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 1bdbdf1c9087c796394bcda5789f7206 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 21f5b107cda33036590a19419afd7fb6 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 0eae304c738191613302fb6721ea3605 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + abed9cdef66dcec954b87124ba18c1ab "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + dfde09457e2017e31d4ecfaea010db8f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 46bc249a5a8fc5d622cf12c42c463ae0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + 81109eec5aa1a284fb5327b10e9c16b9 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#cd25041f9f36811b04ab3015805fe816 "a" + EBCDIC,1047#762b8b87733ee724b8cb751c3b956ea7 "aa" + EBCDIC,1047#f39105ec557abe624399862897a127ed "aaa" + EBCDIC,1047#b825cfc3203d45d01156b8e06ae74901 "aaaa" + EBCDIC,1047#a497a05975af505878aa98b26bd329dd "aaaaa" + EBCDIC,1047#90420f3fc7d64c6cdd7a3bf218b004b1 "aaaaaa" + EBCDIC,1047#b3d7a168407b1613f08f186dc3744a72 "aaaaaaa" + EBCDIC,1047#b7b4ab251d9cc8dc9fc562272a1c7f44 "aaaaaaaa" + EBCDIC,1047#eb974f5cd9b8100dad8e9b82bbdb4a7a "aaaaaaaaa" + EBCDIC,1047#cd675880a60d9c2095fe48981959ea5b "aaaaaaaaaa" + EBCDIC,1047#8396c227248d77e1ebb478b4c44ee8e8 "aaaaaaaaaaa" + EBCDIC,1047#ae59cf65c1c722b8ea6f6e770b20315f "aaaaaaaaaaaa" + EBCDIC,1047#d1550adc6c6f2baeb5da9e2acd75eea1 "aaaaaaaaaaaaa" + EBCDIC,1047#bddd60dbf174785c39827c71ecb29706 "aaaaaaaaaaaaaa" + EBCDIC,1047#d0ef1bc67b2d761513ad8c1f92ca7a2b "aaaaaaaaaaaaaaa" + EBCDIC,1047#dd613bdc90e1e71e57e40931cf3803c1 "aaaaaaaaaaaaaaaa" + EBCDIC,1047#3810ed84a3fabf136b9f5c2de3c802ca "aaaaaaaaaaaaaaaaa" + EBCDIC,1047#a41d584a36ba74526057338e4240b31d "aaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e361a7b2e6adb9df91ed794f39c31a8f "aaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#dc089d8d25773e879ce759357394f63b "aaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#096bdd77ddd6393b5ff2878813ebc9c3 "aaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e457d06769e51e7b34314c1fa885534b "aaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#ae3399b847ef9ce11d958a8926afa2a3 "aaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#be65d5ac6ebe81410cca55c2ad70e672 "aaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#108e4c3887db4178e5ea72782fb105d2 "aaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#d6ccc43d376b6ded51af488d1f56a872 "aaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e208a35fdf88de1da8ec8411888b807e "aaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#bf09c576c720c32342308fae413347ae "aaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#aac629ca1ec1d5908fe85d6eeb352765 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#845a64111840e9db26e8f5032d59187d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#db38d8cf4f7037e6a150cc35e385972c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#2586f6fcb6ffb1578a94f8c9c2944b40 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#cb63decd219ee21068b330d321061434 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#d98cca1ccf230b2619ae6f452ab18325 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f99e8a5e800a9c1b78b9c7181fa4113d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c60d314815b0d438fe8cf18a62d8680d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#1256f52d15ab93e69c75d6cc9986fa49 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#7e6b1236d08400ec5723b76f3b883b2a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#bae076b34373156e51196c8170fff549 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b957a14baa9ab970516e5e3fe30560c5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8209c722c9d86984bde35f31e64de4c9 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#ad6abdadefb6809ef9db323939dad44e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#91ae6c863369dbfb13c688b9e5290929 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#770e940a6f11de3a3897031c7040573f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#2d07c71e6709d908992a19ee8fcd70c7 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e748dc11e3b2984e0888782ecc9fa43f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#99573ce268b1f9e32e18319922380b2b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#68951bca944217c5a17d54d9fe296ee9 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#53addd1728c3fd60ba02e29ff7eac4d8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#7c4abc37772402388c8d792351ae3163 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#a21011fb1a5c1f06dfc23c1b9b921506 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5ce00db35364620dc75696426b9c7948 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#50a785cbcd6cb70322f32062bcfc8940 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#92e6ad1aa09ecde0becf66dc9f356549 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#bb769fed437ab5471f0453bdf0de6ca2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#49d68b22125368b152dd80773b1053cd "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8c7ce5f0c7ed40ec25df22b68d1725f3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#344d80c1906e9e728e0cc9703fc60803 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#630a45b11cc72d8e36aca0e180241cb4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#1c9ba16c5be8d48b5d8fe1a8dd1b6999 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#74bb8337e8e9a3d114eb266437302949 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#134ddd06fa362804c9f8cf02111826bd "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#1ffd548f057ed474c0d3b53ee1f8ce1b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#487823e5089b40d8c66a6a7fc613c26c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#a40e0c6392e974bc6e258fb7530b9ec3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#dccf88078dcb7501156e17b6f5b90bd0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9012cdfe170301d3c8d11d9dab87bf96 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#046d4f6709367aa9be3452dc5dd03601 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#237b85d7be428836b0835e3f7411d0d0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#32022ea076ffe7496da0b64b2482b963 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c68b3e8c7c88bf10003deaf652549f1c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e648925002262503def112984215d21d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#192328de11913688d002f01326071abb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#42f7138b1f7ed2121098f3e418406e7b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#cb64c10607f961b2714a3b104e487838 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#0a8fb4023704d318e53a6047531477f3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#2c9a5487397c8245fe8a52684fa50554 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#26efb364f1da859fbc71744d2c62570e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#3359363d24960feaa2f05ea1b403ddcc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#be9304d0a6297a1a1c7b02cbf177fe0c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#badb0d02141d35349b3b2838cb6450cc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#75261d10ee76bfc016f98a868e535e49 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#d85006031896657b7215ed1f64f002b9 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#2db85d6ffa2287e42c0e55a72900dd4f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f8ce69fabcf5d5013aaede9c90a7e4c0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5749ef4b7f6347c3cf9e8af2dc48093e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#afd1f87f6522f82f7d260909db38f84c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#690a229786930ec741404c83738f0e87 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#a1f02fbe5b1815f5d68ebfa5c5b8cdda "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4e75faba6d50d6f3341b3623f3457c83 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#af0eed7206c2aba4622b15a826b3cf48 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#984236c86e268a506dda56886d4589aa "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#256f33cc0cd5d0d700b959143f8b81fb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#a4f4a73bdf53bd03ec2bf406df8c5bf1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#bac0c7bb84f581a8ca67e49ecb7eabdc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c1be2bc056a5abfff888f562f7420b8b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#6db1e154a0feeb290d6f9b6ca78b9faa "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#163fa1f68d79b511aa832e4d513c0d75 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f00e90ba697aa55722c87b51652b515f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#ba925e3f1584bb930da28396334dfb06 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#6a43780f9f36e80e977d31e6ee055ccf "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f07953ebdb37e911069ab4dc1d11b691 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#0f21a8a924546d121d479c2ae9b22788 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#6c857bf152348cc6a8d63ef4bb3a8b22 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#afc61c11e9730f9221e5b013cb75e36b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#7c762743838df21dbe61883325e4de3e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#a78d17621ef736358cf69909fe1841ae "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#687559a1f8bb2799d3f7e57ceb0f816e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#0a5eb0bcfc8888839b3b4f986e91db7c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#232c4a6355062f36d5b18a18453ba936 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5ec9bdfb872d07265113dd94eaf7a9ea "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f3c9f677ab5404ed16b029067a8d632f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#290997df4163f9f37994048b7f750ecb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9d482b2d64d165eaf1796bddb15ffc43 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f7e059c707e4156d59bef9c887731b75 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#dec244a8f0d45814f8968492cae063ae "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#a153d558a8bed15abe61d6de1345200c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c4c4155e9855435000915b9028af57ad "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#3bf4740880459875fc6625d3e8b9702b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b73a90ab965e8254aeb1ed8995ccf551 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#143a255cfc206e135b23ed557c6b8c7d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#1600b994bf10eeb85772e0f5811ed661 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#7becfd6e439108f896d34012bc3c879f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9fb1155e1c1529943d378bc79ce7248a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#210f27a4c085f4c50b119a9f530dbe64 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c03e534627aec7638f2ef7136a987afb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#056ff6dcf19eff62af1f7eaf68fdb868 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#78ebdbcbd1cf873ac5bc3317bc333d74 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#379ed8c06d6533b0ae397bd9bcc88727 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#68202ec0f97b3d04145ad8143b36bbec "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f2e8c8f3ab9832adae73d6694b5aa6b5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4dd0228d79bab138ae330137ceac9547 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#db509dc0a6d9a43323f200c3944fdd47 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#91e5620a3fbe4a7dbddc6328024f57e6 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#cebbeb507c5b8534898b394c3cb6dbab "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#eaa83adae76b4e5a38361a7943b2fc51 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#cf3fe145cdd9d906dff484591bebb099 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5ee68f513d294e242dfd84066a489ad4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#1452349d5b61efaf5f86f6c67ae1e67d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4a6d9c83bb7f0418977302f41861c674 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#1c82f764bc22e2b43aa64c86152576c5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#94046ff34b09f2d5cd1ecc145f8b67f9 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#2f9b4413a963175dbf6c0e79fbafc13f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#fdcfd05667569a819bd43a32f3f0034c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#977ffabd477e827a170211d989121719 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#eb42e9022bad24209923768cd295da59 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#34daced153754389b0a3dd457aaa580f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4d4ac318fd2765150cdd3a1fd9046f76 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5f3779e31d8b4ecc587ef2aa620990cb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#538a0f0a41a77491368d12d280b67ffc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#2b8bea1be2920657faea5d2f306df93e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#fdb162676ff37cafbb0b37f4a34e1f05 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#79b031eae2e5d593ad9e1765c1b32311 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9a9d79d611f3f97dac3f1f16aeb95810 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#eca47f4f27f10c6e50bc02e96c1305e0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c27a036a378a0c37e551623253de6c86 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#846248b2d8ba9a2845a5b5a6160ea043 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#37f6c0bb5c1c76a018bd92d6267d5f52 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c71638a87de7d0b7ff178235d368ca87 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c1769c2dafefeb4400d8aaaad7be13e2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c2170ff8ba444a468ecc92c68e156876 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#87d372bb84572d2c33e910a8f39a46c3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e198c2b2ad83adf6d2edb90918afb140 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#dc89c07be1a85973ce4a75fdd70b945f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8213ffd54a231c594058b572f12ed2ce "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#64a275192c6bbaf330994498212ff235 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e718b792be6311e0248a537ba6d5e84c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b7ee2cd790ed748aa3ac632e2c30fe08 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#6a97471085d1e13858f7febbc8762a40 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#d82fa7cf3fe39751e88cc6a4c5ea0a80 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4d3ea68fdfb845be4aa12eef1868ac54 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b24417be7632f1db1f37c00f2be59372 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#79f7f0088af39859c26e8dd422102e4a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8e7c80a85e3a76bb83d81e12122d699c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#ffb596a208a1b81b17cf86e809ea9b15 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#a3e78c5e9bd595ea8457b25b7ae5ee7c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#200b9de7d5ebd0a74deb6d501fa9c273 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#75865e9d3111b6e17ba1e1b586c520e0 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f13640a7b68db8d2bd853a95c371f4e7 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4525f0da220d5e730ad91070c819ca6a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#3f9c9eb19f1fd6aefeb3d736d5f37cbb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e3344f64ba3436948b3de13081c98eb9 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#18b50889733a1e896e8fd2e460e98d7f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#918a86710bc529f44f022d5f891107a1 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4aaea2b4f2cfcfef3a5f6be8996b2a3e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#af899efcace3138fea64764015e265f6 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#d472112d115b9bfb34a65cc6683109fc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f2a42d47b187fc7a250f771ebcda779b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#43442e458f65b5dc6b84181fb70f0e36 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#051771335f34ad905c1af28c429e23e2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c2c23e86aac60a7d8cb2f2d9a011b525 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4276f514d2e9b5cf511a01b16d5bd7ad "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#43011a7d9ad322984e3617859eb37ee7 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9b7e0d04de1c0121bd261a15cf9bb806 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#bc1e0269ae34e27ed0534a8ab5146324 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#85fa07daa4541779d7c8436a737802cf "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5d1db871938d1dcc8a72509411dada31 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e679a912e400a1c078e657be492a672c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b17718a20096befcee63c2b55bbc5399 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4786015b6aa47e81752f4e2aa59061d5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#7f3793d46edf449ce5800d568ef6e83f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8f992f2bc222fdc9ecf86eb0c984948b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#aec900f38434e9fb7ded9d33f9a59b66 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#de3fe519c53310d2a8970a4ed2bcc937 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#02bf7d064c621689246886752ddc08bc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c306bdf0469814bf38b2cadc896489a3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9f84e151ea29f14871b63454585cbc78 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#cc4fd08ed3768b08646bfa6c332a6156 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#d35126a1dc2ae4b93ac67a442961a752 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4c2ed17f95f823071289b94c7efe53f2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#63e071ca26135f7e27d76fa57d015dbe "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4e506bd75c0d1391a0dd36adc18b3485 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b8a9a5bf97ce5fc88a24c128bb75536e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#97e8bb790b164bc3bdb7189630748841 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#3c7a2d742d599f4fac9231c5264967ee "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#0483a8dc4b24d3d26f0d3bf0402486c5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#86022bc208c5bbded89bbaeae88e6dbf "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c7a3f500cfe98f8c1959922b381b9438 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#bff3067df4cfff43007bea69f2380d6a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e34a5c41f51ea6d1f1b187e90d940b59 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c8468cae7c8a2a999a0a164f68b759eb "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4bccb2bff1862782004398afff2289b4 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9710683ca0b5cbf10c3df249bfa85d7a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5a705ab132807ce9605b98444622abf3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#dd53ab3422160f933f9723cd3cb53b5a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#bad7e8a4aeea40f8642a0ca1cdfcc61b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#4c0df2b1456694b51a5c809f34f959a8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f330498cabce39dd03eb02d6c983281f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#915ff5f5c93e0a7833be8cc529108216 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b8facb5253a2b7e091c0a6c18d48e368 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8ebdd257c3bc052f9c837f90fb1879cf "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#42d2cf830ee626939580323a824a4099 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#0d364adcb48ee9db07828ce127355a0b "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#14d9170b8f9ead33ec4da94d66b6b74a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#0327eff7ae5d6b5966def78e593ff5f7 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#f08ac509f43f8e34008a65c3f47d29aa "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#7dc9cdc33fb9a0d70e1409357b086783 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#5f079c22e843c3426bcf03efbd0fc54d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8422781e8a9390246920556090a9559d "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#0cc485a5c828b2cdc895f38b5c3b386e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#2259886c34c2e8adf2b3552bd47a3d6e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c96af44682d38aa7e4b86954c883f8dc "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#85bfdfeff05f7120bd5821ac6668694e "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#b4083c69629ec95f6397cd5844edaf90 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#666550654d7c9e6b8a3118d9dc64bace "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#eef83a6cad3d9a8d963d468cb037ccce "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c2fd346804a8c9c80a08312d7b9d17f3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#6521b944a119cd1f787ff75c1452db74 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#805638adfdb3bf9591fd28dfadba697a "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#e62d07301fd3c0bdb5f7ce0e49e4b5d3 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#49b46e007e0c79c047f655b1b46167c2 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#8811ec9d3b878d168975ed835b3acaa8 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#9b4e8b089d75d1fe3567bcc97b4379d5 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c279605bdcfee9b4976eb57a9eb0d5fd "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#3e362e6f8c5eb3aa7530ef9722dda11c "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + EBCDIC,1047#c54a2d44c8a73ab63d892b8b3d1c336f "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" diff -c /dev/null 'perl-5.7.2/ext/Digest/MD5/t/align.t' Index: ./ext/Digest/MD5/t/align.t *** ./ext/Digest/MD5/t/align.t Thu Jan 1 02:00:00 1970 --- ./ext/Digest/MD5/t/align.t Mon Jul 9 17:09:54 2001 *************** *** 0 **** --- 1,20 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + # Test that md5 works on unaligned memory blocks + + print "1..1\n"; + + use strict; + use Digest::MD5 qw(md5_hex); + + my $str = "\100" x 20; + substr($str, 0, 1, ""); # chopping off first char makes the string unaligned + + #use Devel::Peek; Dump($str); + + print "not " unless md5_hex($str) eq "c7ebb510e59ee96f404f288d14cc656a"; + print "ok 1\n"; + diff -c /dev/null 'perl-5.7.2/ext/Digest/MD5/t/badfile.t' Index: ./ext/Digest/MD5/t/badfile.t *** ./ext/Digest/MD5/t/badfile.t Thu Jan 1 02:00:00 1970 --- ./ext/Digest/MD5/t/badfile.t Mon Jul 9 17:09:54 2001 *************** *** 0 **** --- 1,26 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + # Digest::MD5 2.07 and older used to trigger a core dump when + # passed an illegal file handle that failed to open. + + print "1..2\n"; + + use Digest::MD5 (); + + $md5 = Digest::MD5->new; + + eval { + use vars qw(*FOO); + $md5->addfile(*FOO); + }; + print "not " unless $@ =~ /^Bad filehandle: FOO/; + print "ok 1\n"; + + open(BAR, "none-existing-file.$$"); + $md5->addfile(*BAR); + + print "not " unless $md5->hexdigest eq "d41d8cd98f00b204e9800998ecf8427e"; + print "ok 2\n"; diff -c /dev/null 'perl-5.7.2/ext/Digest/MD5/t/files.t' Index: ./ext/Digest/MD5/t/files.t *** ./ext/Digest/MD5/t/files.t Thu Jan 1 02:00:00 1970 --- ./ext/Digest/MD5/t/files.t Mon Jul 9 17:09:54 2001 *************** *** 0 **** --- 1,150 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + print "1..2\n"; + + use strict; + use Digest::MD5 qw(md5 md5_hex md5_base64); + + # + # This is the output of: 'md5sum MD5.pm MD5.xs' + # + my $EXPECT; + + if (ord('A') == 193) { # EBCDIC + $EXPECT = <updir; + while (@path) { + $path = File::Spec->catdir($path, shift @path); + } + $file = File::Spec->catfile($path, $last); + my $md5bin = pack("H*", $md5hex); + my $md5b64; + if ($B64) { + $md5b64 = MIME::Base64::encode($md5bin, ""); + chop($md5b64); chop($md5b64); # remove padding + } + my $failed; + + if (digest_file($file, 'digest') ne $md5bin) { + print "$file: Bad digest\n"; + $failed++; + } + + if (digest_file($file, 'hexdigest') ne $md5hex) { + print "$file: Bad hexdigest\n"; + $failed++; + } + + if ($B64 && digest_file($file, 'b64digest') ne $md5b64) { + print "$file: Bad b64digest\n"; + $failed++; + } + + my $data = cat_file($file); + if (md5($data) ne $md5bin) { + print "$file: md5() failed\n"; + $failed++; + } + if (md5_hex($data) ne $md5hex) { + print "$file: md5_hex() failed\n"; + $failed++; + } + if ($B64 && md5_base64($data) ne $md5b64) { + print "$file: md5_base64() failed\n"; + $failed++; + } + + if (Digest::MD5->new->add($data)->digest ne $md5bin) { + print "$file: MD5->new->add(...)->digest failed\n"; + $failed++; + } + if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) { + print "$file: MD5->new->add(...)->hexdigest failed\n"; + $failed++; + } + if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) { + print "$file: MD5->new->add(...)->b64digest failed\n"; + $failed++; + } + + my @data = split //, $data; + if (md5(@data) ne $md5bin) { + print "$file: md5(\@data) failed\n"; + $failed++; + } + if (Digest::MD5->new->add(@data)->digest ne $md5bin) { + print "$file: MD5->new->add(\@data)->digest failed\n"; + $failed++; + } + my $md5 = Digest::MD5->new; + for (@data) { + $md5->add($_); + } + if ($md5->digest ne $md5bin) { + print "$file: $md5->add()-loop failed\n"; + $failed++; + } + + print "not " if $failed; + print "ok ", ++$testno, "\n"; + } + + + sub digest_file + { + my($file, $method) = @_; + $method ||= "digest"; + #print "$file $method\n"; + + open(FILE, $file) or die "Can't open $file: $!"; + # Digests avove are generated on UNIX without CRLF + # so leave handles in text mode + # binmode(FILE); + my $digest = Digest::MD5->new->addfile(*FILE)->$method(); + close(FILE); + + $digest; + } + + sub cat_file + { + my($file) = @_; + local $/; # slurp + open(FILE, $file) or die "Can't open $file: $!"; + # Digests avove are generated on UNIX without CRLF + # so leave handles in text mode + # binmode(FILE); + my $tmp = ; + close(FILE); + $tmp; + } + diff -c 'perl-5.7.1/ext/DynaLoader/DynaLoader_pm.PL' 'perl-5.7.2/ext/DynaLoader/DynaLoader_pm.PL' Index: ./ext/DynaLoader/DynaLoader_pm.PL *** ./ext/DynaLoader/DynaLoader_pm.PL Tue Mar 6 04:04:37 2001 --- ./ext/DynaLoader/DynaLoader_pm.PL Mon Jul 9 17:09:55 2001 *************** *** 80,87 **** @dl_require_symbols = (); # names of symbols we need @dl_resolve_using = (); # names of files to link with @dl_library_path = (); # path to look for files ! @dl_librefs = (); # things we have loaded ! @dl_modules = (); # Modules we have loaded # This is a fix to support DLD's unfortunate desire to relink -lc @dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs"; --- 80,89 ---- @dl_require_symbols = (); # names of symbols we need @dl_resolve_using = (); # names of files to link with @dl_library_path = (); # path to look for files ! ! #XSLoader.pm may have added elements before we were required ! #@dl_librefs = (); # things we have loaded ! #@dl_modules = (); # Modules we have loaded # This is a fix to support DLD's unfortunate desire to relink -lc @dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs"; diff -c 'perl-5.7.1/ext/DynaLoader/dl_aix.xs' 'perl-5.7.2/ext/DynaLoader/dl_aix.xs' Index: ./ext/DynaLoader/dl_aix.xs Prereq: 1.5 *** ./ext/DynaLoader/dl_aix.xs Wed Mar 28 18:57:46 2001 --- ./ext/DynaLoader/dl_aix.xs Mon Jul 9 17:09:55 2001 *************** *** 14,19 **** --- 14,34 ---- #define PERLIO_NOT_STDIO 0 /* + * On AIX 4.3 and above the emulation layer is not needed any more, and + * indeed if perl uses its emulation and perl is linked into apache + * which is supposed to use the native dlopen conflicts arise. + * Jens-Uwe Mager jum@helios.de + */ + #ifdef USE_NATIVE_DLOPEN + + #include "EXTERN.h" + #include "perl.h" + #include "XSUB.h" + #include + + #else + + /* * @(#)dlfcn.c 1.5 revision of 93/02/14 20:14:17 * This is an unpublished work copyright (c) 1992 Helios Software GmbH * 3000 Hannover 1, Germany *************** *** 94,99 **** --- 109,121 ---- # define FREAD(p,s,n,ldptr) fread(p,s,n,IOPTR(ldptr)) #endif + #ifndef RTLD_LAZY + # define RTLD_LAZY 0 + #endif + #ifndef RTLD_GLOBAL + # define RTLD_GLOBAL 0 + #endif + /* * We simulate dlopen() et al. through a call to load. Because AIX has * no call to find an exported symbol we read the loader section of the *************** *** 632,637 **** --- 654,660 ---- safefree(buf); return ret; } + #endif /* USE_NATIVE_DLOPEN */ /* dl_dlopen.xs * *************** *** 677,683 **** DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); if (flags & 0x01) Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename); ! RETVAL = dlopen(filename, 1) ; DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL)); ST(0) = sv_newmortal() ; if (RETVAL == NULL) --- 700,706 ---- DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); if (flags & 0x01) Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename); ! RETVAL = dlopen(filename, RTLD_GLOBAL|RTLD_LAZY) ; DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL)); ST(0) = sv_newmortal() ; if (RETVAL == NULL) diff -c 'perl-5.7.1/ext/DynaLoader/dl_dlopen.xs' 'perl-5.7.2/ext/DynaLoader/dl_dlopen.xs' Index: ./ext/DynaLoader/dl_dlopen.xs *** ./ext/DynaLoader/dl_dlopen.xs Tue Mar 6 04:04:38 2001 --- ./ext/DynaLoader/dl_dlopen.xs Mon Jul 9 17:09:55 2001 *************** *** 155,166 **** (void)dl_private_init(aTHX); ! void * dl_load_file(filename, flags=0) char * filename int flags PREINIT: int mode = RTLD_LAZY; CODE: { #if defined(DLOPEN_WONT_DO_RELATIVE_PATHS) --- 155,167 ---- (void)dl_private_init(aTHX); ! void dl_load_file(filename, flags=0) char * filename int flags PREINIT: int mode = RTLD_LAZY; + void *handle; CODE: { #if defined(DLOPEN_WONT_DO_RELATIVE_PATHS) *************** *** 184,196 **** Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename); #endif DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); ! RETVAL = dlopen(filename, mode) ; ! DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) RETVAL)); ST(0) = sv_newmortal() ; ! if (RETVAL == NULL) SaveError(aTHX_ "%s",dlerror()) ; else ! sv_setiv( ST(0), PTR2IV(RETVAL)); } --- 185,197 ---- Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename); #endif DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); ! handle = dlopen(filename, mode) ; ! DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%lx\n", (unsigned long) handle)); ST(0) = sv_newmortal() ; ! if (handle == NULL) SaveError(aTHX_ "%s",dlerror()) ; else ! sv_setiv( ST(0), PTR2IV(handle)); } *************** *** 207,216 **** RETVAL ! void * dl_find_symbol(libhandle, symbolname) void * libhandle char * symbolname CODE: #ifdef DLSYM_NEEDS_UNDERSCORE symbolname = Perl_form_nocontext("_%s", symbolname); --- 208,219 ---- RETVAL ! void dl_find_symbol(libhandle, symbolname) void * libhandle char * symbolname + PREINIT: + void *sym; CODE: #ifdef DLSYM_NEEDS_UNDERSCORE symbolname = Perl_form_nocontext("_%s", symbolname); *************** *** 218,236 **** DLDEBUG(2, PerlIO_printf(Perl_debug_log, "dl_find_symbol(handle=%lx, symbol=%s)\n", (unsigned long) libhandle, symbolname)); ! RETVAL = dlsym(libhandle, symbolname); DLDEBUG(2, PerlIO_printf(Perl_debug_log, ! " symbolref = %lx\n", (unsigned long) RETVAL)); ST(0) = sv_newmortal() ; ! if (RETVAL == NULL) SaveError(aTHX_ "%s",dlerror()) ; else ! sv_setiv( ST(0), PTR2IV(RETVAL)); void dl_undef_symbols() ! PPCODE: --- 221,239 ---- DLDEBUG(2, PerlIO_printf(Perl_debug_log, "dl_find_symbol(handle=%lx, symbol=%s)\n", (unsigned long) libhandle, symbolname)); ! sym = dlsym(libhandle, symbolname); DLDEBUG(2, PerlIO_printf(Perl_debug_log, ! " symbolref = %lx\n", (unsigned long) sym)); ST(0) = sv_newmortal() ; ! if (sym == NULL) SaveError(aTHX_ "%s",dlerror()) ; else ! sv_setiv( ST(0), PTR2IV(sym)); void dl_undef_symbols() ! CODE: diff -c 'perl-5.7.1/ext/DynaLoader/dl_mpeix.xs' 'perl-5.7.2/ext/DynaLoader/dl_mpeix.xs' Index: ./ext/DynaLoader/dl_mpeix.xs *** ./ext/DynaLoader/dl_mpeix.xs Tue Mar 6 04:04:38 2001 --- ./ext/DynaLoader/dl_mpeix.xs Mon Jul 9 17:09:55 2001 *************** *** 51,57 **** PREINIT: char buf[PATH_MAX + 3]; p_mpe_dld obj = NULL; ! int i; CODE: DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename, flags)); --- 51,57 ---- PREINIT: char buf[PATH_MAX + 3]; p_mpe_dld obj = NULL; ! CODE: DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename, flags)); diff -c 'perl-5.7.1/ext/DynaLoader/dlutils.c' 'perl-5.7.2/ext/DynaLoader/dlutils.c' Index: ./ext/DynaLoader/dlutils.c *** ./ext/DynaLoader/dlutils.c Tue Mar 6 04:04:39 2001 --- ./ext/DynaLoader/dlutils.c Mon Jul 9 17:09:55 2001 *************** *** 27,33 **** #define DLDEBUG(level,code) #endif ! /* Close all dlopen'd files */ static void dl_unload_all_files(pTHXo_ void *unused) --- 27,33 ---- #define DLDEBUG(level,code) #endif ! #ifdef DL_UNLOAD_ALL_AT_EXIT /* Close all dlopen'd files */ static void dl_unload_all_files(pTHXo_ void *unused) *************** *** 51,57 **** } } } ! static void dl_generic_private_init(pTHXo) /* called by dl_*.xs dl_private_init() */ --- 51,57 ---- } } } ! #endif static void dl_generic_private_init(pTHXo) /* called by dl_*.xs dl_private_init() */ diff -c /dev/null 'perl-5.7.2/ext/Encode.t' Index: ./ext/Encode.t *** ./ext/Encode.t Thu Jan 1 02:00:00 1970 --- ./ext/Encode.t Mon Jul 9 17:09:55 2001 *************** *** 0 **** --- 1,122 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\Encode\b/) { + print "1..0 # Skip: Encode was not built\n"; + exit 0; + } + } + use Test; + use Encode qw(from_to encode decode encode_utf8 decode_utf8 find_encoding); + use charnames qw(greek); + my @encodings = grep(/iso-?8859/,Encode::encodings()); + my $n = 2; + my @character_set = ('0'..'9', 'A'..'Z', 'a'..'z'); + my @source = qw(ascii iso8859-1 cp1250); + my @destiny = qw(cp1047 cp37 posix-bc); + my @ebcdic_sets = qw(cp1047 cp37 posix-bc); + plan test => 38+$n*@encodings + 2*@source*@destiny*@character_set + 2*@ebcdic_sets*256; + my $str = join('',map(chr($_),0x20..0x7E)); + my $cpy = $str; + ok(length($str),from_to($cpy,'iso8859-1','Unicode'),"Length Wrong"); + ok($cpy,$str,"ASCII mangled by translating from iso8859-1 to Unicode"); + $cpy = $str; + ok(from_to($cpy,'Unicode','iso8859-1'),length($str),"Length wrong"); + ok($cpy,$str,"ASCII mangled by translating from Unicode to iso8859-1"); + + $str = join('',map(chr($_),0xa0..0xff)); + $cpy = $str; + ok(length($str),from_to($cpy,'iso8859-1','Unicode'),"Length Wrong"); + + my $sym = Encode->getEncoding('symbol'); + my $uni = $sym->decode(encode(ascii => 'a')); + ok("\N{alpha}",substr($uni,0,1),"alpha does not map to symbol 'a'"); + $str = $sym->encode("\N{Beta}"); + ok("B",decode(ascii => substr($str,0,1)),"Symbol 'B' does not map to Beta"); + + foreach my $enc (qw(symbol dingbats ascii),@encodings) + { + my $tab = Encode->getEncoding($enc); + ok(1,defined($tab),"Could not load $enc"); + $str = join('',map(chr($_),0x20..0x7E)); + $uni = $tab->decode($str); + $cpy = $tab->encode($uni); + ok($cpy,$str,"$enc mangled translating to Unicode and back"); + } + + # On ASCII based machines see if we can map several codepoints from + # three distinct ASCII sets to three distinct EBCDIC coded character sets. + # On EBCDIC machines see if we can map from three EBCDIC sets to three + # distinct ASCII sets. + + my @expectation = (240..249, 193..201,209..217,226..233, 129..137,145..153,162..169); + if (ord('A') != 65) { + my @temp = @destiny; + @destiny = @source; + @source = @temp; + undef(@temp); + @expectation = (48..57, 65..90, 97..122); + } + + foreach my $to (@destiny) + { + foreach my $from (@source) + { + my @expected = @expectation; + foreach my $chr (@character_set) + { + my $native_chr = $chr; + my $cpy = $chr; + my $rc = from_to($cpy,$from,$to); + ok(1,$rc,"Could not translate from $from to $to"); + ok(ord($cpy),shift(@expected),"mangled translating $native_chr from $from to $to"); + } + } + } + + # On either ASCII or EBCDIC machines ensure we can take the full one + # byte repetoire to EBCDIC sets and back. + + my $enc_as = 'iso8859-1'; + foreach my $enc_eb (@ebcdic_sets) + { + foreach my $ord (0..255) + { + $str = chr($ord); + my $rc = from_to($str,$enc_as,$enc_eb); + $rc += from_to($str,$enc_eb,$enc_as); + ok($rc,2,"return code for $ord $enc_eb -> $enc_as -> $enc_eb was not obtained"); + ok($ord,ord($str),"$enc_as mangled translating $ord to $enc_eb and back"); + } + } + + my $mime = find_encoding('iso-8859-2'); + ok(defined($mime),1,"Cannot find MIME-ish'iso-8859-2'"); + my $x11 = find_encoding('iso8859-2'); + ok(defined($x11),1,"Cannot find X11-ish 'iso8859-2'"); + ok($mime,$x11,"iso8598-2 and iso-8859-2 not same"); + my $spc = find_encoding('iso 8859-2'); + ok(defined($spc),1,"Cannot find 'iso 8859-2'"); + ok($spc,$mime,"iso 8859-2 and iso-8859-2 not same"); + + for my $i (256,128,129,256) + { + my $c = chr($i); + my $s = "$c\n".sprintf("%02X",$i); + ok(utf8::valid($s),1,"concat of $i botched"); + utf8::upgrade($s); + ok(utf8::valid($s),1,"concat of $i botched"); + } + + # Spot check a few points in/out of utf8 + for my $i (0x41,128,256,0x20AC) + { + my $c = chr($i); + my $o = encode_utf8($c); + ok(decode_utf8($o),$c,"decode_utf8 not inverse of encode_utf8 for $i"); + ok(encode('utf8',$c),$o,"utf8 encode by name broken for $i"); + ok(decode('utf8',$o),$c,"utf8 decode by name broken for $i"); + } + + diff -c 'perl-5.7.1/ext/Encode/Encode.pm' 'perl-5.7.2/ext/Encode/Encode.pm' Index: ./ext/Encode/Encode.pm *** ./ext/Encode/Encode.pm Sat Apr 7 01:59:26 2001 --- ./ext/Encode/Encode.pm Tue Jul 10 07:15:26 2001 *************** *** 42,48 **** --- 42,51 ---- our %encoding; my @alias; # ordered matching list my %alias; # cached known aliases + # 0 1 2 3 4 5 6 7 8 9 10 + our @latin2iso_num = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 ); + sub encodings { my ($class) = @_; *************** *** 60,66 **** my $alias = $alias[$i]; my $val = $alias[$i+1]; my $new; - if (ref($alias) eq 'Regexp' && $_ =~ $alias) { $new = eval $val; --- 63,68 ---- *************** *** 100,109 **** # Allow variants of iso-8859-1 etc. define_alias( qr/^iso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' ); # Allow latin-1 style names as well ! # 0 1 2 3 4 5 6 7 8 9 10 ! my @latin2iso_num = ( 0, 1, 2, 3, 4, 9, 10, 13, 14, 15, 16 ); ! define_alias( qr/^latin[-_]?(\d+)$/i => '"iso-8859-$latin2iso_num[$1]"' ); # Common names for non-latin prefered MIME names define_alias( 'ascii' => 'US-ascii', --- 102,117 ---- # Allow variants of iso-8859-1 etc. define_alias( qr/^iso[-_]?(\d+)[-_](\d+)$/i => '"iso-$1-$2"' ); + # At least HP-UX has these. + define_alias( qr/^iso8859(\d+)$/i => '"iso-8859-$1"' ); + + # This is a font issue, not an encoding issue. + # (The currency symbol of the Latin 1 upper half + # has been redefined as the euro symbol.) + define_alias( qr/^(.+)\@euro$/i => '"$1"' ); + # Allow latin-1 style names as well ! define_alias( qr/^(?:iso[-_]?)?latin[-_]?(\d+)$/i => '"iso-8859-$latin2iso_num[$1]"' ); # Common names for non-latin prefered MIME names define_alias( 'ascii' => 'US-ascii', *************** *** 112,119 **** 'greek' => 'iso-8859-7', 'hebrew' => 'iso-8859-8'); ! define_alias( 'ibm-1047' => 'cp1047'); # Map white space and _ to '-' define_alias( qr/^(\S+)[\s_]+(.*)$/i => '"$1-$2"' ); --- 120,137 ---- 'greek' => 'iso-8859-7', 'hebrew' => 'iso-8859-8'); ! # At least AIX has IBM-NNN (surprisingly...) instead of cpNNN. ! define_alias( qr/^ibm[-_]?(\d\d\d\d?)$/i => '"cp$1"'); + # Standardize on the dashed versions. + define_alias( qr/^utf8$/i => 'utf-8' ); + define_alias( qr/^koi8r$/i => 'koi8-r' ); + + # TODO: the HP-UX '8' encodings: arabic8 greek8 hebrew8 roman8 turkish8 + # TODO: the Thai Encoding tis620 + # TODO: the Chinese Encoding gb18030 + # TODO: what is the Japanese 'ujis' encoding seen in some Linuxes? + # Map white space and _ to '-' define_alias( qr/^(\S+)[\s_]+(.*)$/i => '"$1-$2"' ); *************** *** 136,141 **** --- 154,163 ---- { my ($class,$name) = @_; my $enc; + if (ref($name) && $name->can('new_sequence')) + { + return $name; + } if (exists $encoding{$name}) { return $encoding{$name}; *************** *** 358,372 **** =head1 DESCRIPTION ! The C module provides the interfaces between perl's strings ! and the rest of the system. Perl strings are sequences of B. The repertoire of characters that Perl can represent is at least that ! defined by the Unicode Consortium. On most platforms the ordinal values ! of the characters (as returned by C) is the "Unicode codepoint" for ! the character (the exceptions are those platforms where the legacy ! encoding is some variant of EBCDIC rather than a super-set of ASCII ! - see L). Traditionaly computer data has been moved around in 8-bit chunks often called "bytes". These chunks are also known as "octets" in --- 380,394 ---- =head1 DESCRIPTION ! The C module provides the interfaces between Perl's strings ! and the rest of the system. Perl strings are sequences of B. The repertoire of characters that Perl can represent is at least that ! defined by the Unicode Consortium. On most platforms the ordinal ! values of the characters (as returned by C) is the "Unicode ! codepoint" for the character (the exceptions are those platforms where ! the legacy encoding is some variant of EBCDIC rather than a super-set ! of ASCII - see L). Traditionaly computer data has been moved around in 8-bit chunks often called "bytes". These chunks are also known as "octets" in *************** *** 375,383 **** computer languages but also "binary" data being the machines representation of numbers, pixels in an image - or just about anything. ! When perl is processing "binary data" the programmer wants perl to process ! "sequences of bytes". This is not a problem for perl - as a byte has 256 ! possible values it easily fits in perl's much larger "logical character". =head2 TERMINOLOGY --- 397,405 ---- computer languages but also "binary" data being the machines representation of numbers, pixels in an image - or just about anything. ! When Perl is processing "binary data" the programmer wants Perl to process ! "sequences of bytes". This is not a problem for Perl - as a byte has 256 ! possible values it easily fits in Perl's much larger "logical character". =head2 TERMINOLOGY *************** *** 386,402 **** =item * I: a character in the range 0..(2**32-1) (or more). ! (What perl's strings are made of.) =item * I: a character in the range 0..255 ! (A special case of a perl character.) =item * I: 8 bits of data, with ordinal values 0..255 ! (Term for bytes passed to or from a non-perl context, e.g. disk file.) =back --- 408,424 ---- =item * I: a character in the range 0..(2**32-1) (or more). ! (What Perl's strings are made of.) =item * I: a character in the range 0..255 ! (A special case of a Perl character.) =item * I: 8 bits of data, with ordinal values 0..255 ! (Term for bytes passed to or from a non-Perl context, e.g. disk file.) =back *************** *** 426,432 **** =item * Fixed length 16-bit encodings Each character is two octets so may have a repertoire of up to ! 65,536 characters. Unicode's UCS-2 is an example. Also used for encodings for East Asian languages. =item * Fixed length 32-bit encodings. --- 448,454 ---- =item * Fixed length 16-bit encodings Each character is two octets so may have a repertoire of up to ! 65 536 characters. Unicode's UCS-2 is an example. Also used for encodings for East Asian languages. =item * Fixed length 32-bit encodings. *************** *** 456,463 **** a different "embedded" encoding. These schemes are very flexible and can handle mixed languages but are ! very complex to process (and have state). ! No escape encodings are implemented for perl yet. =back --- 478,485 ---- a different "embedded" encoding. These schemes are very flexible and can handle mixed languages but are ! very complex to process (and have state). No escape encodings are ! implemented for Perl yet. =back *************** *** 469,476 **** =item 1. By name ! Encoding names are strings with characters taken from a restricted repertoire. ! See L. =item 2. As an object --- 491,498 ---- =item 1. By name ! Encoding names are strings with characters taken from a restricted ! repertoire. See L. =item 2. As an object *************** *** 481,489 **** =head2 Encoding Names Encoding names are case insensitive. White space in names is ignored. ! In addition an encoding may have aliases. Each encoding has one "canonical" name. ! The "canonical" name is chosen from the names of the encoding by picking ! the first in the following sequence: =over 4 --- 503,511 ---- =head2 Encoding Names Encoding names are case insensitive. White space in names is ignored. ! In addition an encoding may have aliases. Each encoding has one ! "canonical" name. The "canonical" name is chosen from the names of ! the encoding by picking the first in the following sequence: =over 4 *************** *** 509,541 **** $bytes = encode(ENCODING, $string[, CHECK]) ! Encodes string from perl's internal form into I and returns a ! sequence of octets. ! See L. =item * $string = decode(ENCODING, $bytes[, CHECK]) ! Decode sequence of octets assumed to be in I into perls internal ! form and returns the resuting string. ! See L. =back =head2 Handling Malformed Data If CHECK is not set, C is returned. If the data is supposed to ! be UTF-8, an optional lexical warning (category utf8) is given. ! If CHECK is true but not a code reference, dies. ! It would desirable to have a way to indicate that transform should use the ! encodings "replacement character" - no such mechanism is defined yet. It is also planned to allow I to be a code reference. ! This is not yet implemented as there are design issues with what its arguments ! should be and how it returns its results. =over 4 --- 531,582 ---- $bytes = encode(ENCODING, $string[, CHECK]) ! Encodes string from Perl's internal form into I and returns ! a sequence of octets. For CHECK see L. =item * $string = decode(ENCODING, $bytes[, CHECK]) ! Decode sequence of octets assumed to be in I into Perl's ! internal form and returns the resulting string. For CHECK see ! L. + =item * + + from_to($string, FROM_ENCODING, TO_ENCODING[, CHECK]) + + Convert B the data between two encodings. How did the data + in $string originally get to be in FROM_ENCODING? Either using + encode() or through PerlIO: See L. For CHECK + see L. + + For example to convert ISO 8859-1 data to UTF-8: + + from_to($data, "iso-8859-1", "utf-8"); + + and to convert it back: + + from_to($data, "utf-8", "iso-8859-1"); + + Note that because the conversion happens in place, the data to be + converted cannot be a string constant, it must be a scalar variable. + =back =head2 Handling Malformed Data If CHECK is not set, C is returned. If the data is supposed to ! be UTF-8, an optional lexical warning (category utf8) is given. If ! CHECK is true but not a code reference, dies. ! It would desirable to have a way to indicate that transform should use ! the encodings "replacement character" - no such mechanism is defined yet. It is also planned to allow I to be a code reference. ! This is not yet implemented as there are design issues with what its ! arguments should be and how it returns its results. =over 4 *************** *** 556,566 **** =item Scheme 2 ! Passed original string, and an index into it of the problem area, ! and output string so far. ! Appends what it will to output string and returns new index into ! original string. ! e.g. sub fixup { # my ($s,$i,$d) = @_; --- 597,605 ---- =item Scheme 2 ! Passed original string, and an index into it of the problem area, and ! output string so far. Appends what it will to output string and ! returns new index into original string. For example: sub fixup { # my ($s,$i,$d) = @_; *************** *** 569,577 **** return $_[1]+1; } ! This scheme gives maximal control to the fixup routine but is more complicated ! to code, and may need internals of Encode to be tweaked to keep original ! string intact. =item Other Schemes --- 608,616 ---- return $_[1]+1; } ! This scheme gives maximal control to the fixup routine but is more ! complicated to code, and may need internals of Encode to be tweaked to ! keep original string intact. =item Other Schemes *************** *** 586,596 **** =head2 UTF-8 / utf8 The Unicode consortium defines the UTF-8 standard as a way of encoding ! the entire Unicode repertiore as sequences of octets. This encoding ! is expected to become very widespread. Perl can use this form internaly ! to represent strings, so conversions to and from this form are particularly ! efficient (as octets in memory do not have to change, just the meta-data ! that tells perl how to treat them). =over 4 --- 625,635 ---- =head2 UTF-8 / utf8 The Unicode consortium defines the UTF-8 standard as a way of encoding ! the entire Unicode repertiore as sequences of octets. This encoding is ! expected to become very widespread. Perl can use this form internaly ! to represent strings, so conversions to and from this form are ! particularly efficient (as octets in memory do not have to change, ! just the meta-data that tells Perl how to treat them). =over 4 *************** *** 598,604 **** $bytes = encode_utf8($string); ! The characters that comprise string are encoded in perl's superset of UTF-8 and the resulting octets returned as a sequence of bytes. All possible characters have a UTF-8 representation so this function cannot fail. --- 637,643 ---- $bytes = encode_utf8($string); ! The characters that comprise string are encoded in Perl's superset of UTF-8 and the resulting octets returned as a sequence of bytes. All possible characters have a UTF-8 representation so this function cannot fail. *************** *** 606,630 **** $string = decode_utf8($bytes [,CHECK]); ! The sequence of octets represented by $bytes is decoded from UTF-8 into ! a sequence of logical characters. Not all sequences of octets form valid ! UTF-8 encodings, so it is possible for this call to fail. ! See L. =back =head2 Other Encodings of Unicode ! UTF-16 is similar to UCS-2, 16 bit or 2-byte chunks. ! UCS-2 can only represent 0..0xFFFF, while UTF-16 has a "surogate pair" ! scheme which allows it to cover the whole Unicode range. Encode implements big-endian UCS-2 aliased to "iso-10646-1" as that ! happens to be the name used by that representation when used with X11 fonts. UTF-32 or UCS-4 is 32-bit or 4-byte chunks. Perl's logical characters can be considered as being in this form without encoding. An encoding ! to transfer strings in this form (e.g. to write them to a file) would need to pack('L',map(chr($_),split(//,$string))); # native or --- 645,671 ---- $string = decode_utf8($bytes [,CHECK]); ! The sequence of octets represented by $bytes is decoded from UTF-8 ! into a sequence of logical characters. Not all sequences of octets ! form valid UTF-8 encodings, so it is possible for this call to fail. ! For CHECK see L. =back =head2 Other Encodings of Unicode ! UTF-16 is similar to UCS-2, 16 bit or 2-byte chunks. UCS-2 can only ! represent 0..0xFFFF, while UTF-16 has a "surrogate pair" scheme which ! allows it to cover the whole Unicode range. Encode implements big-endian UCS-2 aliased to "iso-10646-1" as that ! happens to be the name used by that representation when used with X11 ! fonts. UTF-32 or UCS-4 is 32-bit or 4-byte chunks. Perl's logical characters can be considered as being in this form without encoding. An encoding ! to transfer strings in this form (e.g. to write them to a file) would ! need to pack('L',map(chr($_),split(//,$string))); # native or *************** *** 636,643 **** No UTF-32 encodings are implemented yet. ! Both UCS-2 and UCS-4 style encodings can have "byte order marks" by representing ! the code point 0xFFFE as the very first thing in a file. =head2 Listing available encodings --- 677,684 ---- No UTF-32 encodings are implemented yet. ! Both UCS-2 and UCS-4 style encodings can have "byte order marks" by ! representing the code point 0xFFFE as the very first thing in a file. =head2 Listing available encodings *************** *** 651,658 **** use Encode qw(define_alias); define_alias( newName => ENCODING); ! Allows newName to be used as am alias for ENCODING. ENCODING may be either the ! name of an encoding or and encoding object (as above). Currently I can be specified in the following ways: --- 692,699 ---- use Encode qw(define_alias); define_alias( newName => ENCODING); ! Allows newName to be used as am alias for ENCODING. ENCODING may be ! either the name of an encoding or and encoding object (as above). Currently I can be specified in the following ways: *************** *** 664,673 **** define_alias( qr/^iso8859-(\d+)$/i => '"iso-8859-$1"' ); ! In this case if I is not a reference it is C-ed to allow ! C<$1> etc. to be subsituted. ! The example is one way to names as used in X11 font names to alias the MIME names for the ! iso-8859-* family. =item As a code reference, e.g.: --- 705,714 ---- define_alias( qr/^iso8859-(\d+)$/i => '"iso-8859-$1"' ); ! In this case if I is not a reference it is C-ed to ! allow C<$1> etc. to be subsituted. The example is one way to names as ! used in X11 font names to alias the MIME names for the iso-8859-* ! family. =item As a code reference, e.g.: *************** *** 674,711 **** define_alias( sub { return /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } , ''); In this case C<$_> will be set to the name that is being looked up and ! I is passed to the sub as its first argument. ! The example is another way to names as used in X11 font names to alias the MIME names for ! the iso-8859-* family. =back =head2 Defining Encodings ! use Encode qw(define_alias); ! define_encoding( $object, 'canonicalName' [,alias...]); ! Causes I to be associated with I<$object>. ! The object should provide the interface described in L below. ! If more than two arguments are provided then additional arguments are taken ! as aliases for I<$object> as for C. =head1 Encoding and IO It is very common to want to do encoding transformations when reading or writing files, network connections, pipes etc. ! If perl is configured to use the new 'perlio' IO system then C provides a "layer" (See L) which can transform data as it is read or written. ! open(my $ilyad,'>:encoding(iso-8859-7)','ilyad.greek'); ! print $ilyad @epic; In addition the new IO system can also be configured to read/write UTF-8 encoded characters (as noted above this is efficient): ! open(my $fh,'>:utf8','anything'); ! print $fh "Any \x{0021} string \N{SMILEY FACE}\n"; Either of the above forms of "layer" specifications can be made the default for a lexical scope with the C pragma. See L. --- 715,759 ---- define_alias( sub { return /^iso8859-(\d+)$/i ? "iso-8859-$1" : undef } , ''); In this case C<$_> will be set to the name that is being looked up and ! I is passed to the sub as its first argument. The example ! is another way to names as used in X11 font names to alias the MIME ! names for the iso-8859-* family. =back =head2 Defining Encodings ! use Encode qw(define_alias); ! define_encoding( $object, 'canonicalName' [,alias...]); ! Causes I to be associated with I<$object>. The object ! should provide the interface described in L ! below. If more than two arguments are provided then additional ! arguments are taken as aliases for I<$object> as for C. =head1 Encoding and IO It is very common to want to do encoding transformations when reading or writing files, network connections, pipes etc. ! If Perl is configured to use the new 'perlio' IO system then C provides a "layer" (See L) which can transform data as it is read or written. ! Here is how the blind poet would modernise the encoding: + use Encode; + open(my $iliad,'<:encoding(iso-8859-7)','iliad.greek'); + open(my $utf8,'>:utf8','iliad.utf8'); + my @epic = <$iliad>; + print $utf8 @epic; + close($utf8); + close($illiad); + In addition the new IO system can also be configured to read/write UTF-8 encoded characters (as noted above this is efficient): ! open(my $fh,'>:utf8','anything'); ! print $fh "Any \x{0021} string \N{SMILEY FACE}\n"; Either of the above forms of "layer" specifications can be made the default for a lexical scope with the C pragma. See L. *************** *** 712,732 **** Once a handle is open is layers can be altered using C. ! Without any such configuration, or if perl itself is built using system's own IO, then write operations assume that file handle accepts only I and will C if a character larger than 255 is written to the handle. When reading, each octet from the handle becomes a byte-in-a-character. Note that this default is the same ! behaviour as bytes-only languages (including perl before v5.6) would have, ! and is sufficient to handle native 8-bit encodings e.g. iso-8859-1, ! EBCDIC etc. and any legacy mechanisms for handling other encodings ! and binary data. ! In other cases it is the programs responsibility ! to transform characters into bytes using the API above before ! doing writes, and to transform the bytes read from a handle into characters ! before doing "character operations" (e.g. C, C, ...). =head1 Encoding How to ... To do: --- 760,799 ---- Once a handle is open is layers can be altered using C. ! Without any such configuration, or if Perl itself is built using system's own IO, then write operations assume that file handle accepts only I and will C if a character larger than 255 is written to the handle. When reading, each octet from the handle becomes a byte-in-a-character. Note that this default is the same ! behaviour as bytes-only languages (including Perl before v5.6) would ! have, and is sufficient to handle native 8-bit encodings ! e.g. iso-8859-1, EBCDIC etc. and any legacy mechanisms for handling ! other encodings and binary data. ! In other cases it is the programs responsibility to transform ! characters into bytes using the API above before doing writes, and to ! transform the bytes read from a handle into characters before doing ! "character operations" (e.g. C, C, ...). + You can also use PerlIO to convert larger amounts of data you don't + want to bring into memory. For example to convert between ISO 8859-1 + (Latin 1) and UTF-8 (or UTF-EBCDIC in EBCDIC machines): + + open(F, "<:encoding(iso-8859-1)", "data.txt") or die $!; + open(G, ">:utf8", "data.utf") or die $!; + while () { print G } + + # Could also do "print G " but that would pull + # the whole file into memory just to write it out again. + + More examples: + + open(my $f, "<:encoding(cp1252)") + open(my $g, ">:encoding(iso-8859-2)") + open(my $h, ">:encoding(latin9)") # iso-8859-15 + + See L for more information. + =head1 Encoding How to ... To do: *************** *** 739,752 **** =item * UTF-8 strings in binary data. ! =item * perl/Encode wrappers on non-Unicode XS modules. =back =head1 Messing with Perl's Internals ! The following API uses parts of perl's internals in the current implementation. ! As such they are efficient, but may change. =over 4 --- 806,819 ---- =item * UTF-8 strings in binary data. ! =item * Perl/Encode wrappers on non-Unicode XS modules. =back =head1 Messing with Perl's Internals ! The following API uses parts of Perl's internals in the current ! implementation. As such they are efficient, but may change. =over 4 *************** *** 753,768 **** =item * is_utf8(STRING [, CHECK]) [INTERNAL] Test whether the UTF-8 flag is turned on in the STRING. ! If CHECK is true, also checks the data in STRING for being ! well-formed UTF-8. Returns true if successful, false otherwise. =item * valid_utf8(STRING) ! [INTERNAL] Test whether STRING is in a consistent state. ! Will return true if string is held as bytes, or is well-formed UTF-8 ! and has the UTF-8 flag on. ! Main reason for this routine is to allow perl's testsuite to check ! that operations have left strings in a consistent state. =item * --- 820,835 ---- =item * is_utf8(STRING [, CHECK]) [INTERNAL] Test whether the UTF-8 flag is turned on in the STRING. ! If CHECK is true, also checks the data in STRING for being well-formed ! UTF-8. Returns true if successful, false otherwise. =item * valid_utf8(STRING) ! [INTERNAL] Test whether STRING is in a consistent state. Will return ! true if string is held as bytes, or is well-formed UTF-8 and has the ! UTF-8 flag on. Main reason for this routine is to allow Perl's ! testsuite to check that operations have left strings in a consistent ! state. =item * *************** *** 795,804 **** The string form may go away in the future. The string form occurs when C has scanned C<@INC> for loadable encodings but has not actually loaded the encoding in question. This is because the ! current "loading" process is all perl and a bit slow. ! Once an encoding is loaded then value of the hash is object which implements ! the encoding. The object should provide the following interface: =over 4 --- 862,872 ---- The string form may go away in the future. The string form occurs when C has scanned C<@INC> for loadable encodings but has not actually loaded the encoding in question. This is because the ! current "loading" process is all Perl and a bit slow. ! Once an encoding is loaded then value of the hash is object which ! implements the encoding. The object should provide the following ! interface: =over 4 *************** *** 808,862 **** =item -Enew_sequence ! This is a placeholder for encodings with state. It should return an object ! which implements this interface, all current implementations return the ! original object. =item -Eencode($string,$check) ! Should return the octet sequence representing I<$string>. If I<$check> is true ! it should modify I<$string> in place to remove the converted part (i.e. ! the whole string unless there is an error). ! If an error occurs it should return the octet sequence for the ! fragment of string that has been converted, and modify $string in-place ! to remove the converted part leaving it starting with the problem fragment. ! If check is is false then C should make a "best effort" to convert ! the string - for example by using a replacement character. =item -Edecode($octets,$check) ! Should return the string that I<$octets> represents. If I<$check> is true ! it should modify I<$octets> in place to remove the converted part (i.e. ! the whole sequence unless there is an error). ! If an error occurs it should return the fragment of string ! that has been converted, and modify $octets in-place to remove the converted part leaving it starting with the problem fragment. ! If check is is false then C should make a "best effort" to convert ! the string - for example by using Unicode's "\x{FFFD}" as a replacement character. =back ! It should be noted that the check behaviour is different from the outer ! public API. The logic is that the "unchecked" case is useful when ! encoding is part of a stream which may be reporting errors (e.g. STDERR). ! In such cases it is desirable to get everything through somehow without ! causing additional errors which obscure the original one. Also the encoding ! is best placed to know what the correct replacement character is, so if that ! is the desired behaviour then letting low level code do it is the most efficient. ! In contrast if check is true, the scheme above allows the encoding to do as ! much as it can and tell layer above how much that was. What is lacking ! at present is a mechanism to report what went wrong. The most likely interface ! will be an additional method call to the object, or perhaps ! (to avoid forcing per-stream objects on otherwise stateless encodings) ! and additional parameter. ! It is also highly desirable that encoding classes inherit from C ! as a base class. This allows that class to define additional behaviour for ! all encoding objects. For example built in Unicode, UCS-2 and UTF-8 classes ! use : package Encode::MyEncoding; use base qw(Encode::Encoding); --- 876,932 ---- =item -Enew_sequence ! This is a placeholder for encodings with state. It should return an ! object which implements this interface, all current implementations ! return the original object. =item -Eencode($string,$check) ! Should return the octet sequence representing I<$string>. If I<$check> ! is true it should modify I<$string> in place to remove the converted ! part (i.e. the whole string unless there is an error). If an error ! occurs it should return the octet sequence for the fragment of string ! that has been converted, and modify $string in-place to remove the ! converted part leaving it starting with the problem fragment. ! If check is is false then C should make a "best effort" to ! convert the string - for example by using a replacement character. =item -Edecode($octets,$check) ! Should return the string that I<$octets> represents. If I<$check> is ! true it should modify I<$octets> in place to remove the converted part ! (i.e. the whole sequence unless there is an error). If an error ! occurs it should return the fragment of string that has been ! converted, and modify $octets in-place to remove the converted part leaving it starting with the problem fragment. ! If check is is false then C should make a "best effort" to ! convert the string - for example by using Unicode's "\x{FFFD}" as a ! replacement character. =back ! It should be noted that the check behaviour is different from the ! outer public API. The logic is that the "unchecked" case is useful ! when encoding is part of a stream which may be reporting errors ! (e.g. STDERR). In such cases it is desirable to get everything ! through somehow without causing additional errors which obscure the ! original one. Also the encoding is best placed to know what the ! correct replacement character is, so if that is the desired behaviour ! then letting low level code do it is the most efficient. ! In contrast if check is true, the scheme above allows the encoding to ! do as much as it can and tell layer above how much that was. What is ! lacking at present is a mechanism to report what went wrong. The most ! likely interface will be an additional method call to the object, or ! perhaps (to avoid forcing per-stream objects on otherwise stateless ! encodings) and additional parameter. ! It is also highly desirable that encoding classes inherit from ! C as a base class. This allows that class to define ! additional behaviour for all encoding objects. For example built in ! Unicode, UCS-2 and UTF-8 classes use : package Encode::MyEncoding; use base qw(Encode::Encoding); *************** *** 863,889 **** __PACKAGE__->Define(qw(myCanonical myAlias)); ! To create an object with bless {Name => ...},$class, and call define_encoding. ! They inherit their C method from C. =head2 Compiled Encodings ! F provides a class C which provides the interface described ! above. It calls a generic octet-sequence to octet-sequence "engine" that is ! driven by tables (defined in F). The same engine is used for both ! encode and decode. C's C forces perl's characters to their UTF-8 form ! and then treats them as just another multibyte encoding. C's C transforms ! the sequence and then turns the UTF-8-ness flag as that is the form that the tables ! are defined to produce. For details of the engine see the comments in F. ! The tables are produced by the perl script F (the name needs to change so ! we can eventually install it somewhere). F can currently read two formats: =over 4 =item *.enc ! This is a coined format used by Tcl. It is documented in Encode/EncodeFormat.pod. =item *.ucm --- 933,965 ---- __PACKAGE__->Define(qw(myCanonical myAlias)); ! To create an object with bless {Name => ...},$class, and call ! define_encoding. They inherit their C method from ! C. =head2 Compiled Encodings ! F provides a class C which provides the ! interface described above. It calls a generic octet-sequence to ! octet-sequence "engine" that is driven by tables (defined in ! F). The same engine is used for both encode and ! decode. C's C forces Perl's characters to their ! UTF-8 form and then treats them as just another multibyte ! encoding. C's C transforms the sequence and then ! turns the UTF-8-ness flag as that is the form that the tables are ! defined to produce. For details of the engine see the comments in ! F. ! The tables are produced by the Perl script F (the name needs ! to change so we can eventually install it somewhere). F can ! currently read two formats: =over 4 =item *.enc ! This is a coined format used by Tcl. It is documented in ! Encode/EncodeFormat.pod. =item *.ucm *************** *** 907,920 **** =item *.xs ! In theory this allows encodings to be stand-alone loadable perl extensions. ! The process has not yet been tested. The plan is to use this approach ! for large East Asian encodings. =back ! The set of encodings built-in to F/F is determined by ! F. The current set is as follows: =over 4 --- 983,996 ---- =item *.xs ! In theory this allows encodings to be stand-alone loadable Perl ! extensions. The process has not yet been tested. The plan is to use ! this approach for large East Asian encodings. =back ! The set of encodings built-in to F/F is ! determined by F. The current set is as follows: =over 4 *************** *** 924,946 **** =item IBM-1047 and two other variants of EBCDIC. ! These are the same variants that are supported by EBCDIC perl as "native" encodings. ! They are included to prove "reversibility" of some constructs in EBCDIC perl. =item symbol and dingbats as used by Tk on X11. ! (The reason Encode got started was to support perl/Tk.) =back ! That set is rather ad. hoc. and has been driven by the needs of the tests rather ! than the needs of typical applications. It is likely to be rationalized. =head1 SEE ALSO ! L, L, L =cut - - --- 1000,1022 ---- =item IBM-1047 and two other variants of EBCDIC. ! These are the same variants that are supported by EBCDIC Perl as ! "native" encodings. They are included to prove "reversibility" of ! some constructs in EBCDIC Perl. =item symbol and dingbats as used by Tk on X11. ! (The reason Encode got started was to support Perl/Tk.) =back ! That set is rather ad hoc and has been driven by the needs of the ! tests rather than the needs of typical applications. It is likely ! to be rationalized. =head1 SEE ALSO ! L, L, L, L =cut diff -c 'perl-5.7.1/ext/Encode/Encode.xs' 'perl-5.7.2/ext/Encode/Encode.xs' Index: ./ext/Encode/Encode.xs *** ./ext/Encode/Encode.xs Fri Mar 30 05:02:58 2001 --- ./ext/Encode/Encode.xs Mon Jul 9 17:09:56 2001 *************** *** 1,3 **** --- 1,5 ---- + #define PERL_NO_GET_CONTEXT + #include "EXTERN.h" #include "perl.h" #include "XSUB.h" *************** *** 7,13 **** #include "EBCDIC.h" #include "Symbols.h" ! #define UNIMPLEMENTED(x,y) y x (SV *sv, char *encoding) { \ Perl_croak(aTHX_ "panic_unimplemented"); \ return (y)0; /* fool picky compilers */ \ } --- 9,16 ---- #include "EBCDIC.h" #include "Symbols.h" ! ! #define UNIMPLEMENTED(x,y) y x (SV *sv, char *encoding) {dTHX; \ Perl_croak(aTHX_ "panic_unimplemented"); \ return (y)0; /* fool picky compilers */ \ } *************** *** 51,56 **** --- 54,60 ---- SV * PerlIOEncode_getarg(PerlIO *f) { + dTHX; PerlIOEncode *e = PerlIOSelf(f,PerlIOEncode); SV *sv = &PL_sv_undef; if (e->enc) *************** *** 534,539 **** --- 538,544 ---- STRLEN len; U8 *s = (U8*)SvPV(sv, len); + RETVAL = 0; if (SvTRUE(check)) { /* Must do things the slow way */ U8 *dest; diff -c /dev/null 'perl-5.7.2/ext/Encode/Encode/7bit-jis.enc' Index: ./ext/Encode/Encode/7bit-jis.enc *** ./ext/Encode/Encode/7bit-jis.enc Thu Jan 1 02:00:00 1970 --- ./ext/Encode/Encode/7bit-jis.enc Mon Jul 9 17:09:56 2001 *************** *** 0 **** --- 1,12 ---- + # Encoding file: 7bit-jis, escape-driven + E + name 7bit-jis + init {} + final {} + ascii \x1b(B + ascii \x1b(J + 7bit-kana \x1b(I + jis0208 \x1b$B + jis0208 \x1b$@ + jis0208 \x1b&@\x1b$B + jis0212 \x1b$(D diff -c /dev/null 'perl-5.7.2/ext/Encode/Encode/7bit-kana.enc' Index: ./ext/Encode/Encode/7bit-kana.enc *** ./ext/Encode/Encode/7bit-kana.enc Thu Jan 1 02:00:00 1970 --- ./ext/Encode/Encode/7bit-kana.enc Tue Jul 10 05:00:49 2001 *************** *** 0 **** --- 1,20 ---- + # Encoding file: 7bit-kana, single-byte + S + 0025 0 1 + 00 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FF61FF62FF63FF64FF65FF66FF67FF68FF69FF6AFF6BFF6CFF6DFF6EFF6F + FF70FF71FF72FF73FF74FF75FF76FF77FF78FF79FF7AFF7BFF7CFF7DFF7EFF7F + FF80FF81FF82FF83FF84FF85FF86FF87FF88FF89FF8AFF8BFF8CFF8DFF8EFF8F + FF90FF91FF92FF93FF94FF95FF96FF97FF98FF99FF9AFF9BFF9CFF9DFF9EFF9F + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 diff -c /dev/null 'perl-5.7.2/ext/Encode/Encode/7bit-kr.enc' Index: ./ext/Encode/Encode/7bit-kr.enc *** ./ext/Encode/Encode/7bit-kr.enc Thu Jan 1 02:00:00 1970 --- ./ext/Encode/Encode/7bit-kr.enc Mon Jul 9 17:09:56 2001 *************** *** 0 **** --- 1,7 ---- + # Encoding file: 7bit-kr, escape-driven + E + name 7bit-kr + init \x1b$)C + final {} + ascii \x0f + ksc5601 \x0e diff -c /dev/null 'perl-5.7.2/ext/Encode/Encode/HZ.enc' Index: ./ext/Encode/Encode/HZ.enc *** ./ext/Encode/Encode/HZ.enc Thu Jan 1 02:00:00 1970 --- ./ext/Encode/Encode/HZ.enc Tue Jul 10 05:09:23 2001 *************** *** 0 **** --- 1,7 ---- + # Encoding file: HZ, HanZi + H + name HZ + init {} + final {} + ascii \x7e\x7d + gb2312 \x7e\x7b diff -c 'perl-5.7.1/ext/Encode/Encode/Tcl.pm' 'perl-5.7.2/ext/Encode/Encode/Tcl.pm' Index: ./ext/Encode/Encode/Tcl.pm *** ./ext/Encode/Encode/Tcl.pm Fri Mar 9 16:46:09 2001 --- ./ext/Encode/Encode/Tcl.pm Tue Jul 10 05:00:50 2001 *************** *** 78,85 **** $type = substr($line,0,1); last unless $type eq '#'; } ! my $class = ref($obj).('::'.(($type eq 'E') ? 'Escape' : 'Table')); ! carp "Loading $file"; bless $obj,$class; return $obj if $obj->read($fh,$obj->name,$type); } --- 78,85 ---- $type = substr($line,0,1); last unless $type eq '#'; } ! my $class = ref($obj).('::'.(($type eq 'H') ? 'HanZi' : ($type eq 'E') ? 'Escape' : 'Table')); ! # carp "Loading $file"; bless $obj,$class; return $obj if $obj->read($fh,$obj->name,$type); } *************** *** 110,116 **** sub read { my ($obj,$fh,$name,$type) = @_; ! my $rep = $obj->can("rep_$type"); my ($def,$sym,$pages) = split(/\s+/,scalar(<$fh>)); my @touni; my %fmuni; --- 110,116 ---- sub read { my ($obj,$fh,$name,$type) = @_; ! my($rep, @leading); my ($def,$sym,$pages) = split(/\s+/,scalar(<$fh>)); my @touni; my %fmuni; *************** *** 122,127 **** --- 122,128 ---- chomp($line); my $page = hex($line); my @page; + $leading[$page] = 1 if $page; my $ch = $page * 256; for (my $i = 0; $i < 16; $i++) { *************** *** 131,137 **** my $val = hex(substr($line,0,4,'')); if ($val || !$ch) { ! my $uch = chr($val); push(@page,$uch); $fmuni{$uch} = $ch; $count++; --- 132,138 ---- my $val = hex(substr($line,0,4,'')); if ($val || !$ch) { ! my $uch = pack('U', $val); # chr($val); push(@page,$uch); $fmuni{$uch} = $ch; $count++; *************** *** 145,150 **** --- 146,153 ---- } $touni[$page] = \@page; } + $rep = $type ne 'M' ? $obj->can("rep_$type") : + sub { ($_[0] > 255) || $leading[$_[0]] ? 'n' : 'C'}; $obj->{'Rep'} = $rep; $obj->{'ToUni'} = \@touni; $obj->{'FmUni'} = \%fmuni; *************** *** 157,169 **** sub rep_D { 'n' } ! sub rep_M { ($_[0] > 255) ? 'n' : 'C' } sub representation { my ($obj,$ch) = @_; $ch = 0 unless @_ > 1; ! $obj-{'Rep'}->($ch); } sub decode --- 160,172 ---- sub rep_D { 'n' } ! #sub rep_M { ($_[0] > 255) ? 'n' : 'C' } sub representation { my ($obj,$ch) = @_; $ch = 0 unless @_ > 1; ! $obj->{'Rep'}->($ch); } sub decode *************** *** 171,177 **** my ($obj,$str,$chk) = @_; my $rep = $obj->{'Rep'}; my $touni = $obj->{'ToUni'}; ! my $uni = ''; while (length($str)) { my $ch = ord(substr($str,0,1,'')); --- 174,180 ---- my ($obj,$str,$chk) = @_; my $rep = $obj->{'Rep'}; my $touni = $obj->{'ToUni'}; ! my $uni; while (length($str)) { my $ch = ord(substr($str,0,1,'')); *************** *** 201,209 **** { my ($obj,$uni,$chk) = @_; my $fmuni = $obj->{'FmUni'}; - my $str = ''; my $def = $obj->{'Def'}; my $rep = $obj->{'Rep'}; while (length($uni)) { my $ch = substr($uni,0,1,''); --- 204,212 ---- { my ($obj,$uni,$chk) = @_; my $fmuni = $obj->{'FmUni'}; my $def = $obj->{'Def'}; my $rep = $obj->{'Rep'}; + my $str; while (length($uni)) { my $ch = substr($uni,0,1,''); *************** *** 226,251 **** sub read { ! my ($class,$fh,$name) = @_; ! my %self = (Name => $name, Num => 0); while (<$fh>) { my ($key,$val) = /^(\S+)\s+(.*)$/; $val =~ s/^\{(.*?)\}/$1/g; $val =~ s/\\x([0-9a-f]{2})/chr(hex($1))/ge; ! $self{$key} = $val; } ! return bless \%self,$class; } sub decode { ! croak("Not implemented yet"); } sub encode { ! croak("Not implemented yet"); } 1; --- 229,473 ---- sub read { ! my ($obj,$fh,$name) = @_; ! my(%tbl, @seq, $enc, @esc); while (<$fh>) { my ($key,$val) = /^(\S+)\s+(.*)$/; $val =~ s/^\{(.*?)\}/$1/g; $val =~ s/\\x([0-9a-f]{2})/chr(hex($1))/ge; ! if($enc = Encode->getEncoding($key)){ ! $tbl{$val} = ref($enc) eq 'Encode::Tcl' ? $enc->loadEncoding : $enc; ! push @seq, $val; ! }else{ ! $obj->{$key} = $val; ! } ! if($val =~ /^\e(.*)/){ push(@esc, quotemeta $1) } } ! $obj->{'Seq'} = \@seq; # escape sequences ! $obj->{'Tbl'} = \%tbl; # encoding tables ! $obj->{'Esc'} = join('|', @esc); # regex of sequences following ESC ! return $obj; } sub decode { ! my ($obj,$str,$chk) = @_; ! my $tbl = $obj->{'Tbl'}; ! my $seq = $obj->{'Seq'}; ! my $esc = $obj->{'Esc'}; ! my $ini = $obj->{'init'}; ! my $fin = $obj->{'final'}; ! my $std = $seq->[0]; ! my $cur = $std; ! my $uni; ! while (length($str)){ ! my $uch = substr($str,0,1,''); ! if($uch eq "\e"){ ! if($str =~ s/^($esc)//) ! { ! my $esc = "\e$1"; ! $cur = $tbl->{$esc} ? $esc : ! ($esc eq $ini || $esc eq $fin) ? $std : ! $cur; ! } ! else ! { ! $str =~ s/^([\x20-\x2F]*[\x30-\x7E])//; ! carp "unknown escape sequence: ESC $1"; ! } ! next; ! } ! if($uch eq "\x0e" || $uch eq "\x0f"){ ! $cur = $uch and next; ! } ! if(ref($tbl->{$cur}) eq 'Encode::XS'){ ! $uni .= $tbl->{$cur}->decode($uch); ! next; ! } ! my $ch = ord($uch); ! my $rep = $tbl->{$cur}->{'Rep'}; ! my $touni = $tbl->{$cur}->{'ToUni'}; ! my $x; ! if (&$rep($ch) eq 'C') ! { ! $x = $touni->[0][$ch]; ! } ! else ! { ! $x = $touni->[$ch][ord(substr($str,0,1,''))]; ! } ! unless (defined $x) ! { ! last if $chk; ! # What do we do here ? ! $x = ''; ! } ! $uni .= $x; ! } ! $_[1] = $str if $chk; ! return $uni; } sub encode { ! my ($obj,$uni,$chk) = @_; ! my $tbl = $obj->{'Tbl'}; ! my $seq = $obj->{'Seq'}; ! my $ini = $obj->{'init'}; ! my $fin = $obj->{'final'}; ! my $std = $seq->[0]; ! my $str = $ini; ! my $pre = $std; ! my $cur = $pre; ! ! while (length($uni)){ ! my $ch = chr(ord(substr($uni,0,1,''))); ! my $x; ! foreach my $e_seq ($std, $pre, @$seq){ ! $x = ref($tbl->{$e_seq}) eq 'Encode::XS' ! ? $tbl->{$e_seq}->encode($ch,1) ! : $tbl->{$e_seq}->{FmUni}->{$ch}; ! $cur = $e_seq and last if defined $x; ! } ! if(ref($tbl->{$cur}) ne 'Encode::XS') ! { ! my $def = $tbl->{$cur}->{'Def'}; ! my $rep = $tbl->{$cur}->{'Rep'}; ! unless (defined $x){ ! last if ($chk); ! $x = $def; ! } ! $x = pack(&$rep($x),$x); ! } ! $str .= $cur eq $pre ? $x : ($pre = $cur).$x; ! } ! $str .= $std unless $cur eq $std; ! $str .= $fin; ! $_[1] = $uni if $chk; ! return $str; ! } ! ! package Encode::Tcl::HanZi; ! use base 'Encode::Encoding'; ! ! use Carp; ! ! sub read ! { ! my ($obj,$fh,$name) = @_; ! my(%tbl, @seq, $enc); ! while (<$fh>) ! { ! my ($key,$val) = /^(\S+)\s+(.*)$/; ! $val =~ s/^\{(.*?)\}/$1/g; ! $val =~ s/\\x([0-9a-f]{2})/chr(hex($1))/ge; ! if($enc = Encode->getEncoding($key)){ ! $tbl{$val} = ref($enc) eq 'Encode::Tcl' ? $enc->loadEncoding : $enc; ! push @seq, $val; ! }else{ ! $obj->{$key} = $val; ! } ! } ! $obj->{'Seq'} = \@seq; # escape sequences ! $obj->{'Tbl'} = \%tbl; # encoding tables ! return $obj; ! } ! ! sub decode ! { ! my ($obj,$str,$chk) = @_; ! my $tbl = $obj->{'Tbl'}; ! my $seq = $obj->{'Seq'}; ! my $std = $seq->[0]; ! my $cur = $std; ! my $uni; ! while (length($str)){ ! my $uch = substr($str,0,1,''); ! if($uch eq "~"){ ! if($str =~ s/^\cJ//) ! { ! next; ! } ! elsif($str =~ s/^\~//) ! { ! 1; ! } ! elsif($str =~ s/^([{}])//) ! { ! $cur = "~$1"; ! next; ! } ! else ! { ! $str =~ s/^([^~])//; ! carp "unknown HanZi escape sequence: ~$1"; ! next; ! } ! } ! if(ref($tbl->{$cur}) eq 'Encode::XS'){ ! $uni .= $tbl->{$cur}->decode($uch); ! next; ! } ! my $ch = ord($uch); ! my $rep = $tbl->{$cur}->{'Rep'}; ! my $touni = $tbl->{$cur}->{'ToUni'}; ! my $x; ! if (&$rep($ch) eq 'C') ! { ! $x = $touni->[0][$ch]; ! } ! else ! { ! $x = $touni->[$ch][ord(substr($str,0,1,''))]; ! } ! unless (defined $x) ! { ! last if $chk; ! # What do we do here ? ! $x = ''; ! } ! $uni .= $x; ! } ! $_[1] = $str if $chk; ! return $uni; ! } ! ! sub encode ! { ! my ($obj,$uni,$chk) = @_; ! my $tbl = $obj->{'Tbl'}; ! my $seq = $obj->{'Seq'}; ! my $std = $seq->[0]; ! my $str; ! my $pre = $std; ! my $cur = $pre; ! ! while (length($uni)){ ! my $ch = chr(ord(substr($uni,0,1,''))); ! my $x; ! foreach my $e_seq (@$seq){ ! $x = ref($tbl->{$e_seq}) eq 'Encode::XS' ! ? $tbl->{$e_seq}->encode($ch,1) ! : $tbl->{$e_seq}->{FmUni}->{$ch}; ! $cur = $e_seq and last if defined $x; ! } ! if(ref($tbl->{$cur}) ne 'Encode::XS') ! { ! my $def = $tbl->{$cur}->{'Def'}; ! my $rep = $tbl->{$cur}->{'Rep'}; ! unless (defined $x){ ! last if ($chk); ! $x = $def; ! } ! $x = pack(&$rep($x),$x); ! } ! $str .= $cur eq $pre ? $x : ($pre = $cur).$x; ! $str .= '~' if $x eq '~'; # to '~~' ! } ! $str .= $std unless $cur eq $std; ! $_[1] = $uni if $chk; ! return $str; } 1; diff -c /dev/null 'perl-5.7.2/ext/Encode/Encode/Tcl.t' Index: ./ext/Encode/Encode/Tcl.t *** ./ext/Encode/Encode/Tcl.t Thu Jan 1 02:00:00 1970 --- ./ext/Encode/Encode/Tcl.t Tue Jul 10 05:00:50 2001 *************** *** 0 **** --- 1,184 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bEncode\b/) { + print "1..0 # Skip: Encode was not built\n"; + exit 0; + } + } + use Test; + use Encode qw(encode decode); + use Encode::Tcl; + + my @encodings = qw(euc-cn euc-jp euc-kr big5 shiftjis); # CJK + my $n = 2; + + my %greek = ( + 'euc-cn' => [0xA6A1..0xA6B8,0xA6C1..0xA6D8], + 'euc-jp' => [0xA6A1..0xA6B8,0xA6C1..0xA6D8], + 'euc-kr' => [0xA5C1..0xA5D8,0xA5E1..0xA5F8], + 'big5' => [0xA344..0xA35B,0xA35C..0xA373], + 'shiftjis' => [0x839F..0x83B6,0x83BF..0x83D6], + 'utf8' => [0x0391..0x03A1,0x03A3..0x03A9,0x03B1..0x03C1,0x03C3..0x03C9], + ); + my @greek = qw( + ALPHA BETA GAMMA DELTA EPSILON ZETA ETA + THETA IOTA KAPPA LAMBDA MU NU XI OMICRON + PI RHO SIGMA TAU UPSILON PHI CHI PSI OMEGA + alpha beta gamma delta epsilon zeta eta + theta iota kappa lambda mu nu xi omicron + pi rho sigma tau upsilon phi chi psi omega + ); + + my %ideodigit = ( # cjk ideograph 'one' to 'ten' + 'euc-cn' => [qw(d2bb b6fe c8fd cbc4 cee5 c1f9 c6df b0cb bec5 caae)], + 'euc-jp' => [qw(b0ec c6f3 bbb0 bbcd b8de cfbb bcb7 c8ac b6e5 bdbd)], + 'euc-kr' => [qw(ece9 eca3 dfb2 decc e7e9 d7bf f6d2 f8a2 cefa e4a8)], + 'big5' => [qw(a440 a447 a454 a57c a4ad a4bb a443 a44b a445 a451)], + 'shiftjis' => [qw(88ea 93f1 8e4f 8e6c 8cdc 985a 8eb5 94aa 8be3 8f5c)], + 'utf8' => [qw(4e00 4e8c 4e09 56db 4e94 516d 4e03 516b 4e5d 5341)], + ); + my @ideodigit = qw(one two three four five six seven eight nine ten); + + my $jis = '7bit-jis'; + my $kr = 'iso2022-kr'; + my %esc_str; + + $esc_str{$jis} = {qw( + 1b24422422242424262428242a1b2842 + 3042304430463048304a + 1b284931323334355d1b2842 + ff71ff72ff73ff74ff75ff9d + 1b2442467c4b5c1b2842 + 65e5672c + 3132331b244234413b7a1b28425065726c + 0031003200336f225b57005000650072006c + 546573740a1b24422546253925481b28420a + 0054006500730074000a30c630b930c8000a + )}; + + $esc_str{$kr} = {qw( + 1b2429430e2a22213e0f410d0a + 304200b10041000d000a + 1b2429430e3021332a34593673383639593b673e46405a0f0d0a + ac00b098b2e4b77cb9c8bc14c0acc544c790000d000a + 1b2429434142430d0a + 004100420043000d000a + )}; + + my $num_esc = $n * keys(%esc_str); + foreach (values %esc_str){ $num_esc += $n * keys %$_ } + + my $hz = 'HZ'; # HanZi + + my @hz_txt = ( + "~~in GB.~{<:Ky2;S{#,NpJ)l6HK!#~}Bye.~~", + "~~in GB.~{<:Ky2;S{#,~}~\cJ~{NpJ)l6HK!#~}Bye.~~", + "~~in GB.~\cJ~{<:Ky2;S{#,NpJ)l6HK!#~}~\cJBye.~~", + ); + + my $hz_exp = '007e0069006e002000470042002e5df162404e0d6b32' + . 'ff0c52ff65bd65bc4eba3002004200790065002e007e'; + + plan test => $n*@encodings + $n*@encodings*@greek + + $n*@encodings*@ideodigit + $num_esc + $n + @hz_txt; + + foreach my $enc (@encodings) + { + my $tab = Encode->getEncoding($enc); + ok(1,defined($tab),"Could not load $enc"); + my $str = join('',map(chr($_),0x20..0x7E)); + my $uni = $tab->decode($str); + my $cpy = $tab->encode($uni); + ok($cpy,$str,"$enc mangled translating to Unicode and back"); + } + + foreach my $enc (@encodings) + { + my $tab = Encode->getEncoding($enc); + foreach my $gk (0..$#greek) + { + my $uni = unpack 'U', $tab->decode(pack 'n', $greek{$enc}[$gk]); + ok($uni,$greek{'utf8'}[$gk], + "$enc mangled translating to Unicode GREEK $greek[$gk]"); + my $cpy = unpack 'n',$tab->encode(pack 'U',$uni); + ok($cpy,$greek{$enc}[$gk], + "$enc mangled translating from Unicode GREEK $greek[$gk]"); + } + } + + foreach my $enc (@encodings) + { + my $tab = Encode->getEncoding($enc); + foreach my $id (0..$#ideodigit) + { + my $uni = unpack 'U',$tab->decode(pack 'H*', $ideodigit{$enc}[$id]); + ok($uni,hex($ideodigit{'utf8'}[$id]), + "$enc mangled translating to Unicode CJK IDEOGRAPH $ideodigit[$id]"); + my $cpy = lc unpack 'H*', $tab->encode(pack 'U',$uni); + ok($cpy,$ideodigit{$enc}[$id], + "$enc mangled translating from Unicode CJK IDEOGRAPH $ideodigit[$id]"); + } + } + + { + sub to_unicode + { + my $enc = shift; + return unpack('H*', pack 'n*', unpack 'U*', + decode $enc, pack 'H*', join '', @_); + } + + sub from_unicode + { + my $enc = shift; + return unpack('H*', encode $enc, + pack 'U*', unpack 'n*', pack 'H*', join '', @_); + } + + foreach my $enc (sort keys %esc_str) + { + my $tab = Encode->getEncoding($enc); + ok(1,defined($tab),"Could not load $enc"); + my %strings = %{ $esc_str{$enc} }; + foreach my $estr (sort keys %strings) + { + my $ustr = to_unicode($enc, $estr); + ok($ustr, $strings{$estr}, + "$enc mangled translating to Unicode"); + ok(from_unicode($enc, $ustr), $estr, + "$enc mangled translating from Unicode"); + } + ok(to_unicode($enc, keys %strings), join('', values %strings), + "$enc mangled translating to Unicode"); + } + } + + + { + my $hz_to_unicode = sub + { + return unpack('H*', pack 'n*', unpack 'U*', decode $hz, shift); + }; + + my $hz_from_unicode = sub + { + return encode($hz, pack 'U*', unpack 'n*', pack 'H*', shift); + }; + + foreach my $enc ($hz) + { + my $tab = Encode->getEncoding($enc); + ok(1,defined($tab),"Could not load $enc"); + + ok(&$hz_from_unicode($hz_exp), $hz_txt[0], + "$enc mangled translating from Unicode"); + + foreach my $str (@hz_txt) + { + ok(&$hz_to_unicode($str), $hz_exp, + "$enc mangled translating to Unicode"); + } + } + } diff -c 'perl-5.7.1/ext/Encode/Encode/iso2022-jp.enc' 'perl-5.7.2/ext/Encode/Encode/iso2022-jp.enc' Index: ./ext/Encode/Encode/iso2022-jp.enc *** ./ext/Encode/Encode/iso2022-jp.enc Tue Mar 6 04:04:45 2001 --- ./ext/Encode/Encode/iso2022-jp.enc Tue Jul 10 05:00:50 2001 *************** *** 3,12 **** name iso2022-jp init {} final {} ! iso8859-1 \x1b(B ! jis0201 \x1b(J ! jis0208 \x1b$@ jis0208 \x1b$B ! jis0212 \x1b$(D ! gb2312 \x1b$A ! ksc5601 \x1b$(C --- 3,9 ---- name iso2022-jp init {} final {} ! ascii \x1b(B ! ascii \x1b(J jis0208 \x1b$B ! jis0208 \x1b$@ diff -c 'perl-5.7.1/ext/Encode/Encode/iso2022-kr.enc' 'perl-5.7.2/ext/Encode/Encode/iso2022-kr.enc' Index: ./ext/Encode/Encode/iso2022-kr.enc *** ./ext/Encode/Encode/iso2022-kr.enc Tue Mar 6 04:04:45 2001 --- ./ext/Encode/Encode/iso2022-kr.enc Tue Jul 10 05:00:50 2001 *************** *** 3,7 **** name iso2022-kr init \x1b$)C final {} ! iso8859-1 \x0f ksc5601 \x0e --- 3,7 ---- name iso2022-kr init \x1b$)C final {} ! ascii \x0f ksc5601 \x0e diff -c /dev/null 'perl-5.7.2/ext/Errno/Errno.t' Index: ./ext/Errno/Errno.t *** ./ext/Errno/Errno.t Thu Jan 1 02:00:00 1970 --- ./ext/Errno/Errno.t Mon Jul 9 17:10:01 2001 *************** *** 0 **** --- 1,54 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } else { + @INC = '../lib'; + } + } + } + + use Errno; + + print "1..5\n"; + + print "not " unless @Errno::EXPORT_OK; + print "ok 1\n"; + die unless @Errno::EXPORT_OK; + + $err = $Errno::EXPORT_OK[0]; + $num = &{"Errno::$err"}; + + print "not " unless &{"Errno::$err"} == $num; + print "ok 2\n"; + + $! = $num; + print "not " unless $!{$err}; + print "ok 3\n"; + + $! = 0; + print "not " if $!{$err}; + print "ok 4\n"; + + $s1 = join(",",sort keys(%!)); + $s2 = join(",",sort @Errno::EXPORT_OK); + + if($s1 ne $s2) { + my @s1 = keys(%!); + my @s2 = @Errno::EXPORT_OK; + my(%s1,%s2); + @s1{@s1} = (); + @s2{@s2} = (); + delete @s2{@s1}; + delete @s1{@s2}; + print "# These are only in \%!\n"; + print "# ",join(" ",map { "'$_'" } keys %s1),"\n"; + print "# These are only in \@EXPORT_OK\n"; + print "# ",join(" ",map { "'$_'" } keys %s2),"\n"; + print "not "; + } + + print "ok 5\n"; diff -c 'perl-5.7.1/ext/Errno/Errno_pm.PL' 'perl-5.7.2/ext/Errno/Errno_pm.PL' Index: ./ext/Errno/Errno_pm.PL *** ./ext/Errno/Errno_pm.PL Thu Apr 5 15:58:44 2001 --- ./ext/Errno/Errno_pm.PL Mon Jul 9 17:10:01 2001 *************** *** 2,8 **** use Config; use strict; ! our $VERSION = "1.111"; my %err = (); --- 2,8 ---- use Config; use strict; ! our $VERSION = "1.09_00"; my %err = (); *************** *** 27,33 **** warn "Cannot open '$file'"; return; } ! } elsif ($Config{gccversion} ne '') { # With the -dM option, gcc outputs every #define it finds unless(open(FH,"$Config{cc} -E -dM $Config{cppflags} $file |")) { warn "Cannot open '$file'"; --- 27,37 ---- warn "Cannot open '$file'"; return; } ! } elsif ($Config{gccversion} ne '' ! # OpenSTEP has gcc 2.7.2.1 which recognizes but ! # doesn't implement the -dM flag. ! && $^O ne 'openstep' && $^O ne 'next' ! ) { # With the -dM option, gcc outputs every #define it finds unless(open(FH,"$Config{cc} -E -dM $Config{cppflags} $file |")) { warn "Cannot open '$file'"; *************** *** 107,118 **** open(CPPI,"> errno.c") or die "Cannot open errno.c"; ! print CPPI "#include \n"; close(CPPI); # invoke CPP and read the output ! if ($^O eq 'MSWin32') { open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; } else { --- 111,126 ---- open(CPPI,"> errno.c") or die "Cannot open errno.c"; ! if ($^O eq 'NetWare') { ! print CPPI "#include \n"; ! } else { ! print CPPI "#include \n"; ! } close(CPPI); # invoke CPP and read the output ! if ($^O eq 'MSWin32' || $^O eq 'NetWare') { open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; } else { *************** *** 122,128 **** } my $pat; ! if ($^O eq 'MSWin32' and $Config{cc} =~ /^bcc/i) { $pat = '^/\*\s+(.+)\s+\d+\s*:\s+\*/'; } else { --- 130,136 ---- } my $pat; ! if (($^O eq 'MSWin32' || $^O eq 'NetWare') and $Config{cc} =~ /^bcc/i) { $pat = '^/\*\s+(.+)\s+\d+\s*:\s+\*/'; } else { *************** *** 129,135 **** $pat = '^#\s*(?:line)?\s*\d+\s+"([^"]+)"'; } while() { ! if ($^O eq 'os2' or $^O eq 'MSWin32') { if (/$pat/o) { my $f = $1; $f =~ s,\\\\,/,g; --- 137,143 ---- $pat = '^#\s*(?:line)?\s*\d+\s+"([^"]+)"'; } while() { ! if ($^O eq 'os2' or $^O eq 'MSWin32' or $^O eq 'NetWare') { if (/$pat/o) { my $f = $1; $f =~ s,\\\\,/,g; *************** *** 157,163 **** open(CPPI,"> errno.c") or die "Cannot open errno.c"; ! print CPPI "#include \n"; foreach $err (keys %err) { print CPPI '"',$err,'" [[',$err,']]',"\n"; --- 165,175 ---- open(CPPI,"> errno.c") or die "Cannot open errno.c"; ! if ($^O eq 'NetWare') { ! print CPPI "#include \n"; ! } else { ! print CPPI "#include \n"; ! } foreach $err (keys %err) { print CPPI '"',$err,'" [[',$err,']]',"\n"; *************** *** 173,179 **** $cpp =~ s/sys\$input//i; open(CPPO,"$cpp errno.c |") or die "Cannot exec $Config{cppstdin}"; ! } elsif ($^O eq 'MSWin32') { open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; } else { --- 185,191 ---- $cpp =~ s/sys\$input//i; open(CPPO,"$cpp errno.c |") or die "Cannot exec $Config{cppstdin}"; ! } elsif ($^O eq 'MSWin32' || $^O eq 'NetWare') { open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; } else { diff -c 'perl-5.7.1/ext/Fcntl/Fcntl.pm' 'perl-5.7.2/ext/Fcntl/Fcntl.pm' Index: ./ext/Fcntl/Fcntl.pm *** ./ext/Fcntl/Fcntl.pm Tue Mar 6 04:04:50 2001 --- ./ext/Fcntl/Fcntl.pm Mon Jul 9 17:10:01 2001 *************** *** 60,66 **** require Exporter; use XSLoader (); @ISA = qw(Exporter); ! $VERSION = "1.03"; # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) @EXPORT = --- 60,66 ---- require Exporter; use XSLoader (); @ISA = qw(Exporter); ! $VERSION = "1.04"; # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) @EXPORT = *************** *** 201,217 **** sub AUTOLOAD { (my $constname = $AUTOLOAD) =~ s/.*:://; ! my $val = constant($constname); ! if ($! != 0) { ! if ($! =~ /Invalid/ || $!{EINVAL}) { ! $AutoLoader::AUTOLOAD = $AUTOLOAD; ! goto &AutoLoader::AUTOLOAD; ! } ! else { ! my ($pack,$file,$line) = caller; ! die "Your vendor has not defined Fcntl macro $constname, used at $file line $line. ! "; ! } } *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; --- 201,211 ---- sub AUTOLOAD { (my $constname = $AUTOLOAD) =~ s/.*:://; ! die "&Fcntl::constant not defined" if $constname eq 'constant'; ! my ($error, $val) = constant($constname); ! if ($error) { ! my (undef,$file,$line) = caller; ! die "$error at $file line $line.\n"; } *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; diff -c /dev/null 'perl-5.7.2/ext/Fcntl/Fcntl.t' Index: ./ext/Fcntl/Fcntl.t *** ./ext/Fcntl/Fcntl.t Thu Jan 1 02:00:00 1970 --- ./ext/Fcntl/Fcntl.t Mon Jul 9 17:10:01 2001 *************** *** 0 **** --- 1,46 ---- + #!./perl + + # A modest test: exercises only O_WRONLY, O_CREAT, and O_RDONLY. + # Have to be modest to be portable: could possibly extend testing + # also to O_RDWR and O_APPEND, but dunno about the portability of, + # say, O_TRUNC and O_EXCL, not to mention O_NONBLOCK. + + use Fcntl; + + print "1..6\n"; + + print "ok 1\n"; + + if (sysopen(my $wo, "fcntl$$", O_WRONLY|O_CREAT)) { + print "ok 2\n"; + if (syswrite($wo, "foo") == 3) { + print "ok 3\n"; + close($wo); + if (sysopen(my $ro, "fcntl$$", O_RDONLY)) { + print "ok 4\n"; + if (sysread($ro, my $read, 3)) { + print "ok 5\n"; + if ($read eq "foo") { + print "ok 6\n"; + } else { + print "not ok 6 # content '$read' not ok\n"; + } + } else { + print "not ok 5 # sysread failed: $!\n"; + } + } else { + print "not ok 4 # sysopen O_RDONLY failed: $!\n"; + } + close($ro); + } else { + print "not ok 3 # syswrite failed: $!\n"; + } + close($wo); + } else { + print "not ok 2 # sysopen O_WRONLY failed: $!\n"; + } + + END { + 1 while unlink "fcntl$$"; + } + diff -c 'perl-5.7.1/ext/Fcntl/Fcntl.xs' 'perl-5.7.2/ext/Fcntl/Fcntl.xs' Index: ./ext/Fcntl/Fcntl.xs *** ./ext/Fcntl/Fcntl.xs Tue Mar 6 04:04:50 2001 --- ./ext/Fcntl/Fcntl.xs Mon Jul 9 17:10:01 2001 *************** *** 33,782 **** --AD October 16, 1995 */ ! static IV ! constant(char *name) ! { ! errno = 0; ! switch (*(name++)) { ! case '_': ! if (strEQ(name, "S_IFMT")) /* Yes, on name _S_IFMT return S_IFMT. */ ! #ifdef S_IFMT ! return S_IFMT; ! #else ! goto not_there; ! #endif ! break; ! case 'F': ! if (*name == '_') { ! name++; ! if (strEQ(name, "ALLOCSP")) ! #ifdef F_ALLOCSP ! return F_ALLOCSP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ALLOCSP64")) ! #ifdef F_ALLOCSP64 ! return F_ALLOCSP64; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "COMPAT")) ! #ifdef F_COMPAT ! return F_COMPAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DUP2FD")) ! #ifdef F_DUP2FD ! return F_DUP2FD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DUPFD")) ! #ifdef F_DUPFD ! return F_DUPFD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EXLCK")) ! #ifdef F_EXLCK ! return F_EXLCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FREESP")) ! #ifdef F_FREESP ! return F_FREESP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FREESP64")) ! #ifdef F_FREESP64 ! return F_FREESP64; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FSYNC")) ! #ifdef F_FSYNC ! return F_FSYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FSYNC64")) ! #ifdef F_FSYNC64 ! return F_FSYNC64; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GETFD")) ! #ifdef F_GETFD ! return F_GETFD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GETFL")) ! #ifdef F_GETFL ! return F_GETFL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GETLK")) ! #ifdef F_GETLK ! return F_GETLK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GETLK64")) ! #ifdef F_GETLK64 ! return F_GETLK64; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GETOWN")) ! #ifdef F_GETOWN ! return F_GETOWN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NODNY")) ! #ifdef F_NODNY ! return F_NODNY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "POSIX")) ! #ifdef F_POSIX ! return F_POSIX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RDACC")) ! #ifdef F_RDACC ! return F_RDACC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RDDNY")) ! #ifdef F_RDDNY ! return F_RDDNY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RDLCK")) ! #ifdef F_RDLCK ! return F_RDLCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RWACC")) ! #ifdef F_RWACC ! return F_RWACC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RWDNY")) ! #ifdef F_RWDNY ! return F_RWDNY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SETFD")) ! #ifdef F_SETFD ! return F_SETFD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SETFL")) ! #ifdef F_SETFL ! return F_SETFL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SETLK")) ! #ifdef F_SETLK ! return F_SETLK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SETLK64")) ! #ifdef F_SETLK64 ! return F_SETLK64; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SETLKW")) ! #ifdef F_SETLKW ! return F_SETLKW; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SETLKW64")) ! #ifdef F_SETLKW64 ! return F_SETLKW64; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SETOWN")) ! #ifdef F_SETOWN ! return F_SETOWN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SHARE")) ! #ifdef F_SHARE ! return F_SHARE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SHLCK")) ! #ifdef F_SHLCK ! return F_SHLCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "UNLCK")) ! #ifdef F_UNLCK ! return F_UNLCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "UNSHARE")) ! #ifdef F_UNSHARE ! return F_UNSHARE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "WRACC")) ! #ifdef F_WRACC ! return F_WRACC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "WRDNY")) ! #ifdef F_WRDNY ! return F_WRDNY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "WRLCK")) ! #ifdef F_WRLCK ! return F_WRLCK; ! #else ! goto not_there; ! #endif ! errno = EINVAL; ! return 0; ! } ! if (strEQ(name, "APPEND")) ! #ifdef FAPPEND ! return FAPPEND; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ASYNC")) ! #ifdef FASYNC ! return FASYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CREAT")) ! #ifdef FCREAT ! return FCREAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "D_CLOEXEC")) ! #ifdef FD_CLOEXEC ! return FD_CLOEXEC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DEFER")) ! #ifdef FDEFER ! return FDEFER; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DSYNC")) ! #ifdef FDSYNC ! return FDSYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EXCL")) ! #ifdef FEXCL ! return FEXCL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LARGEFILE")) ! #ifdef FLARGEFILE ! return FLARGEFILE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NDELAY")) ! #ifdef FNDELAY ! return FNDELAY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NONBLOCK")) ! #ifdef FNONBLOCK ! return FNONBLOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RSYNC")) ! #ifdef FRSYNC ! return FRSYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SYNC")) ! #ifdef FSYNC ! return FSYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TRUNC")) ! #ifdef FTRUNC ! return FTRUNC; ! #else ! goto not_there; ! #endif ! break; ! case 'L': ! if (strnEQ(name, "OCK_", 4)) { ! /* We support flock() on systems which don't have it, so ! always supply the constants. */ ! name += 4; ! if (strEQ(name, "SH")) ! #ifdef LOCK_SH ! return LOCK_SH; ! #else ! return 1; ! #endif ! if (strEQ(name, "EX")) ! #ifdef LOCK_EX ! return LOCK_EX; ! #else ! return 2; ! #endif ! if (strEQ(name, "NB")) ! #ifdef LOCK_NB ! return LOCK_NB; ! #else ! return 4; ! #endif ! if (strEQ(name, "UN")) ! #ifdef LOCK_UN ! return LOCK_UN; ! #else ! return 8; ! #endif ! } else ! goto not_there; ! break; ! case 'O': ! if (name[0] == '_') { ! name++; ! if (strEQ(name, "ACCMODE")) ! #ifdef O_ACCMODE ! return O_ACCMODE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "APPEND")) ! #ifdef O_APPEND ! return O_APPEND; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ASYNC")) ! #ifdef O_ASYNC ! return O_ASYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "BINARY")) ! #ifdef O_BINARY ! return O_BINARY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CREAT")) ! #ifdef O_CREAT ! return O_CREAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DEFER")) ! #ifdef O_DEFER ! return O_DEFER; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DIRECT")) ! #ifdef O_DIRECT ! return O_DIRECT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DIRECTORY")) ! #ifdef O_DIRECTORY ! return O_DIRECTORY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DSYNC")) ! #ifdef O_DSYNC ! return O_DSYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EXCL")) ! #ifdef O_EXCL ! return O_EXCL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EXLOCK")) ! #ifdef O_EXLOCK ! return O_EXLOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LARGEFILE")) ! #ifdef O_LARGEFILE ! return O_LARGEFILE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NDELAY")) ! #ifdef O_NDELAY ! return O_NDELAY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NOCTTY")) ! #ifdef O_NOCTTY ! return O_NOCTTY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NOFOLLOW")) ! #ifdef O_NOFOLLOW ! return O_NOFOLLOW; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NOINHERIT")) ! #ifdef O_NOINHERIT ! return O_NOINHERIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NONBLOCK")) ! #ifdef O_NONBLOCK ! return O_NONBLOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RANDOM")) ! #ifdef O_RANDOM ! return O_RANDOM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RAW")) ! #ifdef O_RAW ! return O_RAW; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RDONLY")) ! #ifdef O_RDONLY ! return O_RDONLY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RDWR")) ! #ifdef O_RDWR ! return O_RDWR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RSYNC")) ! #ifdef O_RSYNC ! return O_RSYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SEQUENTIAL")) ! #ifdef O_SEQUENTIAL ! return O_SEQUENTIAL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SHLOCK")) ! #ifdef O_SHLOCK ! return O_SHLOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SYNC")) ! #ifdef O_SYNC ! return O_SYNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TEMPORARY")) ! #ifdef O_TEMPORARY ! return O_TEMPORARY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TEXT")) ! #ifdef O_TEXT ! return O_TEXT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TRUNC")) ! #ifdef O_TRUNC ! return O_TRUNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "WRONLY")) ! #ifdef O_WRONLY ! return O_WRONLY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ALIAS")) ! #ifdef O_ALIAS ! return O_ALIAS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "RSRC")) ! #ifdef O_RSRC ! return O_RSRC; ! #else ! goto not_there; ! #endif ! } else ! goto not_there; ! break; ! case 'S': ! switch (*(name++)) { ! case '_': ! if (strEQ(name, "ISUID")) ! #ifdef S_ISUID ! return S_ISUID; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ISGID")) ! #ifdef S_ISGID ! return S_ISGID; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ISVTX")) ! #ifdef S_ISVTX ! return S_ISVTX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ISTXT")) ! #ifdef S_ISTXT ! return S_ISTXT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFREG")) ! #ifdef S_IFREG ! return S_IFREG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFDIR")) ! #ifdef S_IFDIR ! return S_IFDIR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFLNK")) ! #ifdef S_IFLNK ! return S_IFLNK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFSOCK")) ! #ifdef S_IFSOCK ! return S_IFSOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFBLK")) ! #ifdef S_IFBLK ! return S_IFBLK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFCHR")) ! #ifdef S_IFCHR ! return S_IFCHR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFIFO")) ! #ifdef S_IFIFO ! return S_IFIFO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IFWHT")) ! #ifdef S_IFWHT ! return S_IFWHT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENFMT")) ! #ifdef S_ENFMT ! return S_ENFMT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IRUSR")) ! #ifdef S_IRUSR ! return S_IRUSR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IWUSR")) ! #ifdef S_IWUSR ! return S_IWUSR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IXUSR")) ! #ifdef S_IXUSR ! return S_IXUSR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IRWXU")) ! #ifdef S_IRWXU ! return S_IRWXU; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IRGRP")) ! #ifdef S_IRGRP ! return S_IRGRP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IWGRP")) ! #ifdef S_IWGRP ! return S_IWGRP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IXGRP")) ! #ifdef S_IXGRP ! return S_IXGRP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IRWXG")) ! #ifdef S_IRWXG ! return S_IRWXG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IROTH")) ! #ifdef S_IROTH ! return S_IROTH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IWOTH")) ! #ifdef S_IWOTH ! return S_IWOTH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IXOTH")) ! #ifdef S_IXOTH ! return S_IXOTH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IRWXO")) ! #ifdef S_IRWXO ! return S_IRWXO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IREAD")) ! #ifdef S_IREAD ! return S_IREAD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IWRITE")) ! #ifdef S_IWRITE ! return S_IWRITE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IEXEC")) ! #ifdef S_IEXEC ! return S_IEXEC; ! #else ! goto not_there; ! #endif ! break; ! case 'E': ! if (strEQ(name, "EK_CUR")) ! #ifdef SEEK_CUR ! return SEEK_CUR; ! #else ! return 1; ! #endif ! if (strEQ(name, "EK_END")) ! #ifdef SEEK_END ! return SEEK_END; ! #else ! return 2; ! #endif ! if (strEQ(name, "EK_SET")) ! #ifdef SEEK_SET ! return SEEK_SET; ! #else ! return 0; ! #endif ! break; ! } ! } ! errno = EINVAL; ! return 0; - not_there: - errno = ENOENT; - return 0; - } - - MODULE = Fcntl PACKAGE = Fcntl ! IV ! constant(name) ! char * name ! --- 33,40 ---- --AD October 16, 1995 */ ! #include "constants.c" MODULE = Fcntl PACKAGE = Fcntl ! INCLUDE: constants.xs diff -c 'perl-5.7.1/ext/Fcntl/Makefile.PL' 'perl-5.7.2/ext/Fcntl/Makefile.PL' Index: ./ext/Fcntl/Makefile.PL *** ./ext/Fcntl/Makefile.PL Tue Mar 6 04:04:50 2001 --- ./ext/Fcntl/Makefile.PL Mon Jul 9 17:10:01 2001 *************** *** 1,8 **** --- 1,37 ---- use ExtUtils::MakeMaker; + use ExtUtils::Constant 0.07 'WriteConstants'; WriteMakefile( NAME => 'Fcntl', MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'Fcntl.pm', + realclean => {FILES=> 'constants.c constants.xs'}, ); + my @names = (qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FD_CLOEXEC FEXCL FLARGEFILE + FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC F_ALLOCSP F_ALLOCSP64 + F_COMPAT F_DUP2FD F_DUPFD F_EXLCK F_FREESP F_FREESP64 F_FSYNC + F_FSYNC64 F_GETFD F_GETFL F_GETLK F_GETLK64 F_GETOWN F_NODNY + F_POSIX F_RDACC F_RDDNY F_RDLCK F_RWACC F_RWDNY F_SETFD F_SETFL + F_SETLK F_SETLK64 F_SETLKW F_SETLKW64 F_SETOWN F_SHARE F_SHLCK + F_UNLCK F_UNSHARE F_WRACC F_WRDNY F_WRLCK O_ACCMODE O_ALIAS + O_APPEND O_ASYNC O_BINARY O_CREAT O_DEFER O_DIRECT O_DIRECTORY + O_DSYNC O_EXCL O_EXLOCK O_LARGEFILE O_NDELAY O_NOCTTY O_NOFOLLOW + O_NOINHERIT O_NONBLOCK O_RANDOM O_RAW O_RDONLY O_RDWR O_RSRC + O_RSYNC O_SEQUENTIAL O_SHLOCK O_SYNC O_TEMPORARY O_TEXT O_TRUNC + O_WRONLY S_ENFMT S_IEXEC S_IFBLK S_IFCHR S_IFDIR S_IFIFO S_IFLNK + S_IFREG S_IFSOCK S_IFWHT S_IREAD S_IRGRP S_IROTH S_IRUSR S_IRWXG + S_IRWXO S_IRWXU S_ISGID S_ISTXT S_ISUID S_ISVTX S_IWGRP S_IWOTH + S_IWRITE S_IWUSR S_IXGRP S_IXOTH S_IXUSR), + {name=>"LOCK_SH", default=>["IV", "1"]}, + {name=>"LOCK_EX", default=>["IV", "2"]}, + {name=>"LOCK_NB", default=>["IV", "4"]}, + {name=>"LOCK_UN", default=>["IV", "8"]}, + {name=>"SEEK_SET", default=>["IV", "0"]}, + {name=>"SEEK_CUR", default=>["IV", "1"]}, + {name=>"SEEK_END", default=>["IV", "2"]}, + {name=>"_S_IFMT", macro=>"S_IFMT", value=>"S_IFMT"}); + WriteConstants( + NAME => 'Fcntl', + NAMES => \@names, + ); diff -c /dev/null 'perl-5.7.2/ext/Fcntl/syslfs.t' Index: ./ext/Fcntl/syslfs.t *** ./ext/Fcntl/syslfs.t Thu Jan 1 02:00:00 1970 --- ./ext/Fcntl/syslfs.t Mon Jul 9 17:10:01 2001 *************** *** 0 **** --- 1,267 ---- + # NOTE: this file tests how large files (>2GB) work with raw system IO. + # stdio: open(), tell(), seek(), print(), read() is tested in t/op/lfs.t. + # If you modify/add tests here, remember to update also t/op/lfs.t. + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + # Don't bother if there are no quad offsets. + if ($Config{lseeksize} < 8) { + print "1..0 # Skip: no 64-bit file offsets\n"; + exit(0); + } + require Fcntl; import Fcntl qw(/^O_/ /^SEEK_/); + } + + use strict; + + $| = 1; + + our @s; + our $fail; + + sub zap { + close(BIG); + unlink("big"); + unlink("big1"); + unlink("big2"); + } + + sub bye { + zap(); + exit(0); + } + + my $explained; + + sub explain { + unless ($explained++) { + print < + + Make bsd_glob() return an error (GLOB_NOSPACE) when the pattern expands + to a size bigger than the system constant C (usually found in + limits.h). If your system does not define this constant, bsd_glob() uses + C or C<_POSIX_ARG_MAX> where available (in that + order). You can inspect these values using the standard C + extension. =item C diff -c 'perl-5.7.1/ext/File/Glob/Glob.xs' 'perl-5.7.2/ext/File/Glob/Glob.xs' Index: ./ext/File/Glob/Glob.xs *** ./ext/File/Glob/Glob.xs Wed Mar 21 02:43:04 2001 --- ./ext/File/Glob/Glob.xs Mon Jul 9 17:10:02 2001 *************** *** 7,160 **** /* XXX: need some thread awareness */ static int GLOB_ERROR = 0; ! static double ! constant(char *name, int arg) ! { ! errno = 0; ! if (strlen(name) <= 5) ! goto not_there; ! switch (*(name+5)) { ! case 'A': ! if (strEQ(name, "GLOB_ABEND")) ! #ifdef GLOB_ABEND ! return GLOB_ABEND; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GLOB_ALPHASORT")) ! #ifdef GLOB_ALPHASORT ! return GLOB_ALPHASORT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GLOB_ALTDIRFUNC")) ! #ifdef GLOB_ALTDIRFUNC ! return GLOB_ALTDIRFUNC; ! #else ! goto not_there; ! #endif ! break; ! case 'B': ! if (strEQ(name, "GLOB_BRACE")) ! #ifdef GLOB_BRACE ! return GLOB_BRACE; ! #else ! goto not_there; ! #endif ! break; ! case 'C': ! break; ! case 'D': ! break; ! case 'E': ! if (strEQ(name, "GLOB_ERR")) ! #ifdef GLOB_ERR ! return GLOB_ERR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GLOB_ERROR")) ! return GLOB_ERROR; ! break; ! case 'F': ! break; ! case 'G': ! break; ! case 'H': ! break; ! case 'I': ! break; ! case 'J': ! break; ! case 'K': ! break; ! case 'L': ! break; ! case 'M': ! if (strEQ(name, "GLOB_MARK")) ! #ifdef GLOB_MARK ! return GLOB_MARK; ! #else ! goto not_there; ! #endif ! break; ! case 'N': ! if (strEQ(name, "GLOB_NOCASE")) ! #ifdef GLOB_NOCASE ! return GLOB_NOCASE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GLOB_NOCHECK")) ! #ifdef GLOB_NOCHECK ! return GLOB_NOCHECK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GLOB_NOMAGIC")) ! #ifdef GLOB_NOMAGIC ! return GLOB_NOMAGIC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GLOB_NOSORT")) ! #ifdef GLOB_NOSORT ! return GLOB_NOSORT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GLOB_NOSPACE")) ! #ifdef GLOB_NOSPACE ! return GLOB_NOSPACE; ! #else ! goto not_there; ! #endif ! break; ! case 'O': ! break; ! case 'P': ! break; ! case 'Q': ! if (strEQ(name, "GLOB_QUOTE")) ! #ifdef GLOB_QUOTE ! return GLOB_QUOTE; ! #else ! goto not_there; ! #endif ! break; ! case 'R': ! break; ! case 'S': ! break; ! case 'T': ! if (strEQ(name, "GLOB_TILDE")) ! #ifdef GLOB_TILDE ! return GLOB_TILDE; ! #else ! goto not_there; ! #endif ! break; ! case 'U': ! break; ! case 'V': ! break; ! case 'W': ! break; ! case 'X': ! break; ! case 'Y': ! break; ! case 'Z': ! break; ! } ! errno = EINVAL; ! return 0; - not_there: - errno = ENOENT; - return 0; - } - #ifdef WIN32 #define errfunc NULL #else --- 7,14 ---- /* XXX: need some thread awareness */ static int GLOB_ERROR = 0; ! #include "constants.c" #ifdef WIN32 #define errfunc NULL #else *************** *** 201,208 **** bsd_globfree(&pglob); } ! double ! constant(name,arg) ! char *name ! int arg ! PROTOTYPE: $$ --- 55,58 ---- bsd_globfree(&pglob); } ! INCLUDE: constants.xs diff -c 'perl-5.7.1/ext/File/Glob/Makefile.PL' 'perl-5.7.2/ext/File/Glob/Makefile.PL' Index: ./ext/File/Glob/Makefile.PL *** ./ext/File/Glob/Makefile.PL Tue Mar 6 04:04:50 2001 --- ./ext/File/Glob/Makefile.PL Mon Jul 9 17:10:02 2001 *************** *** 1,9 **** --- 1,11 ---- use ExtUtils::MakeMaker; + use ExtUtils::Constant 0.08 'WriteConstants'; WriteMakefile( NAME => 'File::Glob', VERSION_FROM => 'Glob.pm', MAN3PODS => {}, # Pods will be built by installman. OBJECT => 'bsd_glob$(OBJ_EXT) Glob$(OBJ_EXT)', + realclean => {FILES=> 'constants.c constants.xs'}, ## uncomment for glob debugging (will cause make test to fail) # DEFINE => '-DGLOB_DEBUG', *************** *** 19,21 **** --- 21,32 ---- } $inherited; } + + WriteConstants( + NAME => 'File::Glob', + NAMES => [qw(GLOB_ABEND GLOB_ALPHASORT GLOB_ALTDIRFUNC GLOB_BRACE GLOB_ERR + GLOB_LIMIT GLOB_MARK GLOB_NOCASE GLOB_NOCHECK GLOB_NOMAGIC + GLOB_NOSORT GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE), + {name=>"GLOB_ERROR", macro=>1}], + BREAKOUT_AT => 8, + ); diff -c 'perl-5.7.1/ext/File/Glob/bsd_glob.c' 'perl-5.7.2/ext/File/Glob/bsd_glob.c' Index: ./ext/File/Glob/bsd_glob.c Prereq: 8.3 *** ./ext/File/Glob/bsd_glob.c Sun Apr 1 22:53:11 2001 --- ./ext/File/Glob/bsd_glob.c Mon Jul 9 17:10:02 2001 *************** *** 32,37 **** --- 32,40 ---- #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93"; + /* most changes between the version above and the one below have been ported: + static char sscsid[]= "$OpenBSD: glob.c,v 1.8.10.1 2001/04/10 jason Exp $"; + */ #endif /* LIBC_SCCS and not lint */ /* *************** *** 70,76 **** #ifdef I_PWD # include #else ! #ifdef HAS_PASSWD struct passwd *getpwnam(char *); struct passwd *getpwuid(Uid_t); #endif --- 73,79 ---- #ifdef I_PWD # include #else ! #if defined(HAS_PASSWD) && !defined(VMS) struct passwd *getpwnam(char *); struct passwd *getpwuid(Uid_t); #endif *************** *** 87,92 **** --- 90,119 ---- # endif #endif + #ifdef I_LIMITS + #include + #endif + + #ifndef ARG_MAX + # ifdef MACOS_TRADITIONAL + # define ARG_MAX 65536 /* Mac OS is actually unlimited */ + # else + # ifdef _SC_ARG_MAX + # define ARG_MAX (sysconf(_SC_ARG_MAX)) + # else + # ifdef _POSIX_ARG_MAX + # define ARG_MAX _POSIX_ARG_MAX + # else + # ifdef WIN32 + # define ARG_MAX 14500 /* from VC's limits.h */ + # else + # define ARG_MAX 4096 /* from POSIX, be conservative */ + # endif + # endif + # endif + # endif + #endif + #define BG_DOLLAR '$' #define BG_DOT '.' #define BG_EOS '\0' *************** *** 146,165 **** static int compare(const void *, const void *); static int ci_compare(const void *, const void *); ! static void g_Ctoc(const Char *, char *); static int g_lstat(Char *, Stat_t *, glob_t *); static DIR *g_opendir(Char *, glob_t *); static Char *g_strchr(Char *, int); - #ifdef notdef - static Char *g_strcat(Char *, const Char *); - #endif static int g_stat(Char *, Stat_t *, glob_t *); static int glob0(const Char *, glob_t *); ! static int glob1(Char *, glob_t *); ! static int glob2(Char *, Char *, Char *, glob_t *); ! static int glob3(Char *, Char *, Char *, Char *, glob_t *); ! static int globextend(const Char *, glob_t *); ! static const Char * globtilde(const Char *, Char *, glob_t *); static int globexp1(const Char *, glob_t *); static int globexp2(const Char *, const Char *, glob_t *, int *); static int match(Char *, Char *, Char *, int); --- 173,192 ---- static int compare(const void *, const void *); static int ci_compare(const void *, const void *); ! static int g_Ctoc(const Char *, char *, STRLEN); static int g_lstat(Char *, Stat_t *, glob_t *); static DIR *g_opendir(Char *, glob_t *); static Char *g_strchr(Char *, int); static int g_stat(Char *, Stat_t *, glob_t *); static int glob0(const Char *, glob_t *); ! static int glob1(Char *, Char *, glob_t *, size_t *); ! static int glob2(Char *, Char *, Char *, Char *, Char *, Char *, ! glob_t *, size_t *); ! static int glob3(Char *, Char *, Char *, Char *, Char *, Char *, ! Char *, Char *, glob_t *, size_t *); ! static int globextend(const Char *, glob_t *, size_t *); ! static const Char * ! globtilde(const Char *, Char *, size_t, glob_t *); static int globexp1(const Char *, glob_t *); static int globexp2(const Char *, const Char *, glob_t *, int *); static int match(Char *, Char *, Char *, int); *************** *** 185,191 **** { const U8 *patnext; int c; ! Char *bufnext, *bufend, patbuf[MAXPATHLEN+1]; patnext = (U8 *) pattern; if (!(flags & GLOB_APPEND)) { --- 212,218 ---- { const U8 *patnext; int c; ! Char *bufnext, *bufend, patbuf[MAXPATHLEN]; patnext = (U8 *) pattern; if (!(flags & GLOB_APPEND)) { *************** *** 199,205 **** pglob->gl_matchc = 0; bufnext = patbuf; ! bufend = bufnext + MAXPATHLEN; #ifdef DOSISH /* Nasty hack to treat patterns like "C:*" correctly. In this * case, the * should match any file in the current directory --- 226,232 ---- pglob->gl_matchc = 0; bufnext = patbuf; ! bufend = bufnext + MAXPATHLEN - 1; #ifdef DOSISH /* Nasty hack to treat patterns like "C:*" correctly. In this * case, the * should match any file in the current directory *************** *** 207,213 **** * colon specially, so it looks for files beginning "C:" in * the current directory. To fix this, change the pattern to * add an explicit "./" at the start (just after the drive ! * letter and colon - ie change to "C:./*"). */ if (isalpha(pattern[0]) && pattern[1] == ':' && pattern[2] != BG_SEP && pattern[2] != BG_SEP2 && --- 234,240 ---- * colon specially, so it looks for files beginning "C:" in * the current directory. To fix this, change the pattern to * add an explicit "./" at the start (just after the drive ! * letter and colon - ie change to "C:./"). */ if (isalpha(pattern[0]) && pattern[1] == ':' && pattern[2] != BG_SEP && pattern[2] != BG_SEP2 && *************** *** 239,251 **** --patnext; } *bufnext++ = c | M_PROTECT; ! } ! else *bufnext++ = c; ! } ! else ! while (bufnext < bufend && (c = *patnext++) != BG_EOS) ! *bufnext++ = c; *bufnext = BG_EOS; if (flags & GLOB_BRACE) --- 266,276 ---- --patnext; } *bufnext++ = c | M_PROTECT; ! } else *bufnext++ = c; ! } else ! while (bufnext < bufend && (c = *patnext++) != BG_EOS) ! *bufnext++ = c; *bufnext = BG_EOS; if (flags & GLOB_BRACE) *************** *** 259,265 **** * invoke the standard globbing routine to glob the rest of the magic * characters */ ! static int globexp1(const Char *pattern, glob_t *pglob) { const Char* ptr = pattern; int rv; --- 284,291 ---- * invoke the standard globbing routine to glob the rest of the magic * characters */ ! static int ! globexp1(const Char *pattern, glob_t *pglob) { const Char* ptr = pattern; int rv; *************** *** 281,297 **** * If it succeeds then it invokes globexp1 with the new pattern. * If it fails then it tries to glob the rest of the pattern and returns. */ ! static int globexp2(const Char *ptr, const Char *pattern, ! glob_t *pglob, int *rv) { int i; Char *lm, *ls; const Char *pe, *pm, *pl; ! Char patbuf[MAXPATHLEN + 1]; /* copy part up to the brace */ for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++) ! continue; ls = lm; /* Find the balanced brace */ --- 307,325 ---- * If it succeeds then it invokes globexp1 with the new pattern. * If it fails then it tries to glob the rest of the pattern and returns. */ ! static int ! globexp2(const Char *ptr, const Char *pattern, ! glob_t *pglob, int *rv) { int i; Char *lm, *ls; const Char *pe, *pm, *pl; ! Char patbuf[MAXPATHLEN]; /* copy part up to the brace */ for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++) ! ; ! *lm = BG_EOS; ls = lm; /* Find the balanced brace */ *************** *** 299,305 **** if (*pe == BG_LBRACKET) { /* Ignore everything between [] */ for (pm = pe++; *pe != BG_RBRACKET && *pe != BG_EOS; pe++) ! continue; if (*pe == BG_EOS) { /* * We could not find a matching BG_RBRACKET. --- 327,333 ---- if (*pe == BG_LBRACKET) { /* Ignore everything between [] */ for (pm = pe++; *pe != BG_RBRACKET && *pe != BG_EOS; pe++) ! ; if (*pe == BG_EOS) { /* * We could not find a matching BG_RBRACKET. *************** *** 307,314 **** */ pe = pm; } ! } ! else if (*pe == BG_LBRACE) i++; else if (*pe == BG_RBRACE) { if (i == 0) --- 335,341 ---- */ pe = pm; } ! } else if (*pe == BG_LBRACE) i++; else if (*pe == BG_RBRACE) { if (i == 0) *************** *** 322,333 **** return 0; } ! for (i = 0, pl = pm = ptr; pm <= pe; pm++) switch (*pm) { case BG_LBRACKET: /* Ignore everything between [] */ for (pl = pm++; *pm != BG_RBRACKET && *pm != BG_EOS; pm++) ! continue; if (*pm == BG_EOS) { /* * We could not find a matching BG_RBRACKET. --- 349,360 ---- return 0; } ! for (i = 0, pl = pm = ptr; pm <= pe; pm++) { switch (*pm) { case BG_LBRACKET: /* Ignore everything between [] */ for (pl = pm++; *pm != BG_RBRACKET && *pm != BG_EOS; pm++) ! ; if (*pm == BG_EOS) { /* * We could not find a matching BG_RBRACKET. *************** *** 343,350 **** case BG_RBRACE: if (i) { ! i--; ! break; } /* FALLTHROUGH */ case BG_COMMA: --- 370,377 ---- case BG_RBRACE: if (i) { ! i--; ! break; } /* FALLTHROUGH */ case BG_COMMA: *************** *** 353,365 **** else { /* Append the current string */ for (lm = ls; (pl < pm); *lm++ = *pl++) ! continue; /* * Append the rest of the pattern after the * closing brace */ ! for (pl = pe + 1; (*lm++ = *pl++) != BG_EOS;) ! continue; /* Expand the current pattern */ #ifdef GLOB_DEBUG --- 380,393 ---- else { /* Append the current string */ for (lm = ls; (pl < pm); *lm++ = *pl++) ! ; ! /* * Append the rest of the pattern after the * closing brace */ ! for (pl = pe + 1; (*lm++ = *pl++) != BG_EOS; ) ! ; /* Expand the current pattern */ #ifdef GLOB_DEBUG *************** *** 375,380 **** --- 403,409 ---- default: break; } + } *rv = 0; return 0; } *************** *** 385,407 **** * expand tilde from the passwd file. */ static const Char * ! globtilde(const Char *pattern, Char *patbuf, glob_t *pglob) { struct passwd *pwd; char *h; const Char *p; ! Char *b; if (*pattern != BG_TILDE || !(pglob->gl_flags & GLOB_TILDE)) return pattern; /* Copy up to the end of the string or / */ ! for (p = pattern + 1, h = (char *) patbuf; *p && *p != BG_SLASH; ! *h++ = *p++) ! continue; *h = BG_EOS; if (((char *) patbuf)[0] == BG_EOS) { /* * handle a plain ~ or ~/ by expanding $HOME --- 414,442 ---- * expand tilde from the passwd file. */ static const Char * ! globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob) { struct passwd *pwd; char *h; const Char *p; ! Char *b, *eb; if (*pattern != BG_TILDE || !(pglob->gl_flags & GLOB_TILDE)) return pattern; /* Copy up to the end of the string or / */ ! eb = &patbuf[patbuf_len - 1]; ! for (p = pattern + 1, h = (char *) patbuf; ! h < (char*)eb && *p && *p != BG_SLASH; *h++ = *p++) ! ; *h = BG_EOS; + #if 0 + if (h == (char *)eb) + return what; + #endif + if (((char *) patbuf)[0] == BG_EOS) { /* * handle a plain ~ or ~/ by expanding $HOME *************** *** 417,424 **** return pattern; #endif } ! } ! else { /* * Expand a ~user */ --- 452,458 ---- return pattern; #endif } ! } else { /* * Expand a ~user */ *************** *** 433,444 **** } /* Copy the home directory */ ! for (b = patbuf; *h; *b++ = *h++) ! continue; /* Append the rest of the pattern */ ! while ((*b++ = *p++) != BG_EOS) ! continue; return patbuf; } --- 467,479 ---- } /* Copy the home directory */ ! for (b = patbuf; b < eb && *h; *b++ = *h++) ! ; /* Append the rest of the pattern */ ! while (b < eb && (*b++ = *p++) != BG_EOS) ! ; ! *b = BG_EOS; return patbuf; } *************** *** 456,470 **** { const Char *qpat, *qpatnext; int c, err, oldflags, oldpathc; ! Char *bufnext, patbuf[MAXPATHLEN+1]; #ifdef MACOS_TRADITIONAL if ( (*pattern == BG_TILDE) && (pglob->gl_flags & GLOB_TILDE) ) { ! return(globextend(pattern, pglob)); } #endif ! qpat = globtilde(pattern, patbuf, pglob); qpatnext = qpat; oldflags = pglob->gl_flags; oldpathc = pglob->gl_pathc; --- 491,506 ---- { const Char *qpat, *qpatnext; int c, err, oldflags, oldpathc; ! Char *bufnext, patbuf[MAXPATHLEN]; ! size_t limit = 0; #ifdef MACOS_TRADITIONAL if ( (*pattern == BG_TILDE) && (pglob->gl_flags & GLOB_TILDE) ) { ! return(globextend(pattern, pglob, &limit)); } #endif ! qpat = globtilde(pattern, patbuf, MAXPATHLEN, pglob); qpatnext = qpat; oldflags = pglob->gl_flags; oldpathc = pglob->gl_pathc; *************** *** 510,516 **** * to avoid exponential behavior */ if (bufnext == patbuf || bufnext[-1] != M_ALL) ! *bufnext++ = M_ALL; break; default: *bufnext++ = CHAR(c); --- 546,552 ---- * to avoid exponential behavior */ if (bufnext == patbuf || bufnext[-1] != M_ALL) ! *bufnext++ = M_ALL; break; default: *bufnext++ = CHAR(c); *************** *** 522,528 **** qprintf("glob0:", patbuf); #endif /* GLOB_DEBUG */ ! if ((err = glob1(patbuf, pglob)) != 0) { pglob->gl_flags = oldflags; return(err); } --- 558,564 ---- qprintf("glob0:", patbuf); #endif /* GLOB_DEBUG */ ! if ((err = glob1(patbuf, patbuf+MAXPATHLEN-1, pglob, &limit)) != 0) { pglob->gl_flags = oldflags; return(err); } *************** *** 542,548 **** printf("calling globextend from glob0\n"); #endif /* GLOB_DEBUG */ pglob->gl_flags = oldflags; ! return(globextend(qpat, pglob)); } else if (!(pglob->gl_flags & GLOB_NOSORT)) qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc, --- 578,584 ---- printf("calling globextend from glob0\n"); #endif /* GLOB_DEBUG */ pglob->gl_flags = oldflags; ! return(globextend(qpat, pglob, &limit)); } else if (!(pglob->gl_flags & GLOB_NOSORT)) qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc, *************** *** 556,574 **** static int ci_compare(const void *p, const void *q) { ! const char *pp = *(const char **)p; ! const char *qq = *(const char **)q; ! int ci; ! while (*pp && *qq) { ! if (tolower(*pp) != tolower(*qq)) ! break; ! ++pp; ! ++qq; ! } ! ci = tolower(*pp) - tolower(*qq); ! if (ci == 0) ! return compare(p, q); ! return ci; } static int --- 592,610 ---- static int ci_compare(const void *p, const void *q) { ! const char *pp = *(const char **)p; ! const char *qq = *(const char **)q; ! int ci; ! while (*pp && *qq) { ! if (toLOWER(*pp) != toLOWER(*qq)) ! break; ! ++pp; ! ++qq; ! } ! ci = toLOWER(*pp) - toLOWER(*qq); ! if (ci == 0) ! return compare(p, q); ! return ci; } static int *************** *** 578,591 **** } static int ! glob1(Char *pattern, glob_t *pglob) { ! Char pathbuf[MAXPATHLEN+1]; /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */ if (*pattern == BG_EOS) return(0); ! return(glob2(pathbuf, pathbuf, pattern, pglob)); } /* --- 614,629 ---- } static int ! glob1(Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp) { ! Char pathbuf[MAXPATHLEN]; /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */ if (*pattern == BG_EOS) return(0); ! return(glob2(pathbuf, pathbuf+MAXPATHLEN-1, ! pathbuf, pathbuf+MAXPATHLEN-1, ! pattern, pattern_last, pglob, limitp)); } /* *************** *** 594,600 **** * meta characters. */ static int ! glob2(Char *pathbuf, Char *pathend, Char *pattern, glob_t *pglob) { Stat_t sb; Char *p, *q; --- 632,639 ---- * meta characters. */ static int ! glob2(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last, ! Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp) { Stat_t sb; Char *p, *q; *************** *** 607,613 **** for (anymeta = 0;;) { if (*pattern == BG_EOS) { /* End of pattern? */ *pathend = BG_EOS; - if (g_lstat(pathbuf, &sb, pglob)) return(0); --- 646,651 ---- *************** *** 616,625 **** #ifdef DOSISH && pathend[-1] != BG_SEP2 #endif ! ) && (S_ISDIR(sb.st_mode) ! || (S_ISLNK(sb.st_mode) && (g_stat(pathbuf, &sb, pglob) == 0) && S_ISDIR(sb.st_mode)))) { *pathend++ = BG_SEP; *pathend = BG_EOS; } --- 654,665 ---- #ifdef DOSISH && pathend[-1] != BG_SEP2 #endif ! ) && (S_ISDIR(sb.st_mode) || ! (S_ISLNK(sb.st_mode) && (g_stat(pathbuf, &sb, pglob) == 0) && S_ISDIR(sb.st_mode)))) { + if (pathend+1 > pathend_last) + return (1); *pathend++ = BG_SEP; *pathend = BG_EOS; } *************** *** 627,633 **** #ifdef GLOB_DEBUG printf("calling globextend from glob2\n"); #endif /* GLOB_DEBUG */ ! return(globextend(pathbuf, pglob)); } /* Find end of next segment, copy tentatively to pathend. */ --- 667,673 ---- #ifdef GLOB_DEBUG printf("calling globextend from glob2\n"); #endif /* GLOB_DEBUG */ ! return(globextend(pathbuf, pglob, limitp)); } /* Find end of next segment, copy tentatively to pathend. */ *************** *** 640,645 **** --- 680,687 ---- ) { if (ismeta(*p)) anymeta = 1; + if (q+1 > pathend_last) + return (1); *q++ = *p++; } *************** *** 650,666 **** #ifdef DOSISH || *pattern == BG_SEP2 #endif ! ) *pathend++ = *pattern++; ! } else /* Need expansion, recurse. */ ! return(glob3(pathbuf, pathend, pattern, p, pglob)); } /* NOTREACHED */ } static int ! glob3(Char *pathbuf, Char *pathend, Char *pattern, ! Char *restpattern, glob_t *pglob) { register Direntry_t *dp; DIR *dirp; --- 692,715 ---- #ifdef DOSISH || *pattern == BG_SEP2 #endif ! ) { ! if (pathend+1 > pathend_last) ! return (1); *pathend++ = *pattern++; ! } ! } else ! /* Need expansion, recurse. */ ! return(glob3(pathbuf, pathbuf_last, pathend, ! pathend_last, pattern, pattern_last, ! p, pattern_last, pglob, limitp)); } /* NOTREACHED */ } static int ! glob3(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last, ! Char *pattern, Char *pattern_last, ! Char *restpattern, Char *restpattern_last, glob_t *pglob, size_t *limitp) { register Direntry_t *dp; DIR *dirp; *************** *** 676,703 **** */ Direntry_t *(*readdirfunc)(DIR*); *pathend = BG_EOS; errno = 0; #ifdef VMS { ! Char *q = pathend; ! if (q - pathbuf > 5) { ! q -= 5; ! if (q[0] == '.' && tolower(q[1]) == 'd' && tolower(q[2]) == 'i' ! && tolower(q[3]) == 'r' && q[4] == '/') ! { ! q[0] = '/'; ! q[1] = BG_EOS; ! pathend = q+1; ! } ! } } #endif if ((dirp = g_opendir(pathbuf, pglob)) == NULL) { /* TODO: don't call for ENOENT or ENOTDIR? */ if (pglob->gl_errfunc) { ! g_Ctoc(pathbuf, buf); if (pglob->gl_errfunc(buf, errno) || (pglob->gl_flags & GLOB_ERR)) return (GLOB_ABEND); --- 725,756 ---- */ Direntry_t *(*readdirfunc)(DIR*); + if (pathend > pathend_last) + return (1); *pathend = BG_EOS; errno = 0; #ifdef VMS { ! Char *q = pathend; ! if (q - pathbuf > 5) { ! q -= 5; ! if (q[0] == '.' && ! tolower(q[1]) == 'd' && tolower(q[2]) == 'i' && ! tolower(q[3]) == 'r' && q[4] == '/') ! { ! q[0] = '/'; ! q[1] = BG_EOS; ! pathend = q+1; ! } ! } } #endif if ((dirp = g_opendir(pathbuf, pglob)) == NULL) { /* TODO: don't call for ENOENT or ENOTDIR? */ if (pglob->gl_errfunc) { ! if (g_Ctoc(pathbuf, buf, sizeof(buf))) ! return (GLOB_ABEND); if (pglob->gl_errfunc(buf, errno) || (pglob->gl_flags & GLOB_ERR)) return (GLOB_ABEND); *************** *** 710,716 **** /* Search directory for matching names. */ if (pglob->gl_flags & GLOB_ALTDIRFUNC) ! readdirfunc = (Direntry_t *(*)(DIR *))pglob->gl_readdir; else readdirfunc = my_readdir; while ((dp = (*readdirfunc)(dirp))) { --- 763,769 ---- /* Search directory for matching names. */ if (pglob->gl_flags & GLOB_ALTDIRFUNC) ! readdirfunc = (Direntry_t *(*)(DIR *))pglob->gl_readdir; else readdirfunc = my_readdir; while ((dp = (*readdirfunc)(dirp))) { *************** *** 720,733 **** /* Initial BG_DOT must be matched literally. */ if (dp->d_name[0] == BG_DOT && *pattern != BG_DOT) continue; ! for (sc = (U8 *) dp->d_name, dc = pathend; ! (*dc++ = *sc++) != BG_EOS;) ! continue; if (!match(pathend, pattern, restpattern, nocase)) { *pathend = BG_EOS; continue; } ! err = glob2(pathbuf, --dc, restpattern, pglob); if (err) break; } --- 773,794 ---- /* Initial BG_DOT must be matched literally. */ if (dp->d_name[0] == BG_DOT && *pattern != BG_DOT) continue; ! dc = pathend; ! sc = (U8 *) dp->d_name; ! while (dc < pathend_last && (*dc++ = *sc++) != BG_EOS) ! ; ! if (dc >= pathend_last) { ! *dc = BG_EOS; ! err = 1; ! break; ! } ! if (!match(pathend, pattern, restpattern, nocase)) { *pathend = BG_EOS; continue; } ! err = glob2(pathbuf, pathbuf_last, --dc, pathend_last, ! restpattern, restpattern_last, pglob, limitp); if (err) break; } *************** *** 755,764 **** * gl_pathv points to (gl_offs + gl_pathc + 1) items. */ static int ! globextend(const Char *path, glob_t *pglob) { register char **pathv; register int i; char *copy; const Char *p; --- 816,826 ---- * gl_pathv points to (gl_offs + gl_pathc + 1) items. */ static int ! globextend(const Char *path, glob_t *pglob, size_t *limitp) { register char **pathv; register int i; + STRLEN newsize, len; char *copy; const Char *p; *************** *** 769,781 **** printf("\n"); #endif /* GLOB_DEBUG */ if (pglob->gl_pathv) ! pathv = Renew(pglob->gl_pathv, ! (2 + pglob->gl_pathc + pglob->gl_offs),char*); else ! New(0,pathv,(2 + pglob->gl_pathc + pglob->gl_offs),char*); ! if (pathv == NULL) return(GLOB_NOSPACE); if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { /* first time around -- clear initial gl_offs items */ --- 831,848 ---- printf("\n"); #endif /* GLOB_DEBUG */ + newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs); if (pglob->gl_pathv) ! pathv = Renew(pglob->gl_pathv,newsize,char*); else ! New(0,pathv,newsize,char*); ! if (pathv == NULL) { ! if (pglob->gl_pathv) { ! Safefree(pglob->gl_pathv); ! pglob->gl_pathv = NULL; ! } return(GLOB_NOSPACE); + } if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { /* first time around -- clear initial gl_offs items */ *************** *** 786,798 **** pglob->gl_pathv = pathv; for (p = path; *p++;) ! continue; New(0, copy, p-path, char); if (copy != NULL) { ! g_Ctoc(path, copy); pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; } pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; return(copy == NULL ? GLOB_NOSPACE : 0); } --- 853,877 ---- pglob->gl_pathv = pathv; for (p = path; *p++;) ! ; ! len = (STRLEN)(p - path); ! *limitp += len; New(0, copy, p-path, char); if (copy != NULL) { ! if (g_Ctoc(path, copy, len)) { ! Safefree(copy); ! return(GLOB_NOSPACE); ! } pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; } pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; + + if ((pglob->gl_flags & GLOB_LIMIT) && + newsize + *limitp >= ARG_MAX) { + errno = 0; + return(GLOB_NOSPACE); + } + return(copy == NULL ? GLOB_NOSPACE : 0); } *************** *** 816,822 **** do if (match(name, pat, patend, nocase)) return(1); ! while (*name++ != BG_EOS); return(0); case M_ONE: if (*name++ == BG_EOS) --- 895,902 ---- do if (match(name, pat, patend, nocase)) return(1); ! while (*name++ != BG_EOS) ! ; return(0); case M_ONE: if (*name++ == BG_EOS) *************** *** 866,871 **** --- 946,952 ---- if (*pp) Safefree(*pp); Safefree(pglob->gl_pathv); + pglob->gl_pathv = NULL; } } *************** *** 881,893 **** strcpy(buf, "."); #endif } else { ! g_Ctoc(str, buf); } if (pglob->gl_flags & GLOB_ALTDIRFUNC) return((*pglob->gl_opendir)(buf)); ! else ! return(PerlDir_open(buf)); } static int --- 962,975 ---- strcpy(buf, "."); #endif } else { ! if (g_Ctoc(str, buf, sizeof(buf))) ! return(NULL); } if (pglob->gl_flags & GLOB_ALTDIRFUNC) return((*pglob->gl_opendir)(buf)); ! ! return(PerlDir_open(buf)); } static int *************** *** 895,901 **** { char buf[MAXPATHLEN]; ! g_Ctoc(fn, buf); if (pglob->gl_flags & GLOB_ALTDIRFUNC) return((*pglob->gl_lstat)(buf, sb)); #ifdef HAS_LSTAT --- 977,984 ---- { char buf[MAXPATHLEN]; ! if (g_Ctoc(fn, buf, sizeof(buf))) ! return(-1); if (pglob->gl_flags & GLOB_ALTDIRFUNC) return((*pglob->gl_lstat)(buf, sb)); #ifdef HAS_LSTAT *************** *** 910,916 **** { char buf[MAXPATHLEN]; ! g_Ctoc(fn, buf); if (pglob->gl_flags & GLOB_ALTDIRFUNC) return((*pglob->gl_stat)(buf, sb)); return(PerlLIO_stat(buf, sb)); --- 993,1000 ---- { char buf[MAXPATHLEN]; ! if (g_Ctoc(fn, buf, sizeof(buf))) ! return(-1); if (pglob->gl_flags & GLOB_ALTDIRFUNC) return((*pglob->gl_stat)(buf, sb)); return(PerlLIO_stat(buf, sb)); *************** *** 926,954 **** return (NULL); } ! #ifdef notdef ! static Char * ! g_strcat(Char *dst, const Char *src) { ! Char *sdst = dst; ! ! while (*dst++) ! continue; ! --dst; ! while((*dst++ = *src++) != BG_EOS) ! continue; ! ! return (sdst); ! } ! #endif ! ! static void ! g_Ctoc(register const Char *str, char *buf) ! { ! register char *dc; ! ! for (dc = buf; (*dc++ = *str++) != BG_EOS;) ! continue; } #ifdef GLOB_DEBUG --- 1010,1023 ---- return (NULL); } ! static int ! g_Ctoc(register const Char *str, char *buf, STRLEN len) { ! while (len--) { ! if ((*buf++ = *str++) == BG_EOS) ! return (0); ! } ! return (1); } #ifdef GLOB_DEBUG diff -c 'perl-5.7.1/ext/File/Glob/bsd_glob.h' 'perl-5.7.2/ext/File/Glob/bsd_glob.h' Index: ./ext/File/Glob/bsd_glob.h Prereq: 8.1 *** ./ext/File/Glob/bsd_glob.h Wed Mar 21 02:43:07 2001 --- ./ext/File/Glob/bsd_glob.h Mon Jul 9 17:10:02 2001 *************** *** 30,35 **** --- 30,36 ---- * SUCH DAMAGE. * * @(#)glob.h 8.1 (Berkeley) 6/2/93 + * [lots of perl-specific changes since then--see bsd_glob.c] */ #ifndef _BSD_GLOB_H_ *************** *** 73,78 **** --- 74,81 ---- #define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */ #define GLOB_NOCASE 0x1000 /* Treat filenames without regard for case. */ #define GLOB_ALPHASORT 0x2000 /* Alphabetic, not ASCII sort, like csh. */ + #define GLOB_LIMIT 0x4000 /* Limit pattern match output to ARG_MAX + (usually from limits.h). */ #define GLOB_NOSPACE (-1) /* Malloc call failed. */ #define GLOB_ABEND (-2) /* Unignored error. */ diff -c /dev/null 'perl-5.7.2/ext/File/Glob/t/basic.t' Index: ./ext/File/Glob/t/basic.t *** ./ext/File/Glob/t/basic.t Thu Jan 1 02:00:00 1970 --- ./ext/File/Glob/t/basic.t Tue Jul 10 05:19:21 2001 *************** *** 0 **** --- 1,175 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } else { + @INC = '.'; + push @INC, '../lib'; + } + require Config; import Config; + if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) { + print "1..0\n"; + exit 0; + } + print "1..11\n"; + } + END { + print "not ok 1\n" unless $loaded; + } + use File::Glob ':glob'; + use Cwd (); + $loaded = 1; + print "ok 1\n"; + + sub array { + return '(', join(", ", map {defined $_ ? "\"$_\"" : "undef"} @a), ")\n"; + } + + # look for the contents of the current directory + $ENV{PATH} = "/bin"; + delete @ENV{BASH_ENV, CDPATH, ENV, IFS}; + @correct = (); + if (opendir(D, $^O eq "MacOS" ? ":" : ".")) { + @correct = grep { !/^\./ } sort readdir(D); + closedir D; + } + @a = File::Glob::glob("*", 0); + @a = sort @a; + if ("@a" ne "@correct" || GLOB_ERROR) { + print "# |@a| ne |@correct|\nnot "; + } + print "ok 2\n"; + + # look up the user's home directory + # should return a list with one item, and not set ERROR + if ($^O ne 'MSWin32' && $^O ne 'NetWare' && $^O ne 'VMS' && $^O ne 'os2') { + eval { + ($name, $home) = (getpwuid($>))[0,7]; + 1; + } and do { + @a = bsd_glob("~$name", GLOB_TILDE); + if (scalar(@a) != 1 || $a[0] ne $home || GLOB_ERROR) { + print "not "; + } + }; + } + print "ok 3\n"; + + # check backslashing + # should return a list with one item, and not set ERROR + @a = bsd_glob('TEST', GLOB_QUOTE); + if (scalar @a != 1 || $a[0] ne 'TEST' || GLOB_ERROR) { + local $/ = "]["; + print "# [@a]\n"; + print "not "; + } + print "ok 4\n"; + + # check nonexistent checks + # should return an empty list + # XXX since errfunc is NULL on win32, this test is not valid there + @a = bsd_glob("asdfasdf", 0); + if (($^O ne 'MSWin32' && $^O ne 'NetWare') and scalar @a != 0) { + print "# |@a|\nnot "; + } + print "ok 5\n"; + + # check bad protections + # should return an empty list, and set ERROR + if ($^O eq 'mpeix' or $^O eq 'MSWin32' or $^O eq 'NetWare' or $^O eq 'os2' or $^O eq 'VMS' + or $^O eq 'cygwin' or Cwd::cwd() =~ m#^$Config{'afsroot'}#s or not $>) + { + print "ok 6 # skipped\n"; + } + else { + $dir = "pteerslo"; + mkdir $dir, 0; + @a = bsd_glob("$dir/*", GLOB_ERR); + #print "\@a = ", array(@a); + rmdir $dir; + if (scalar(@a) != 0 || GLOB_ERROR == 0) { + print "not "; + } + print "ok 6\n"; + } + + # check for csh style globbing + @a = bsd_glob('{a,b}', GLOB_BRACE | GLOB_NOMAGIC); + unless (@a == 2 and $a[0] eq 'a' and $a[1] eq 'b') { + print "not "; + } + print "ok 7\n"; + + @a = bsd_glob( + '{TES*,doesntexist*,a,b}', + GLOB_BRACE | GLOB_NOMAGIC | ($^O eq 'VMS' ? GLOB_NOCASE : 0) + ); + + # Working on t/TEST often causes this test to fail because it sees Emacs temp + # and RCS files. Filter them out, and .pm files too, and patch temp files. + @a = grep !/(,v$|~$|\.(pm|ori?g|rej)$)/, @a; + + print "# @a\n"; + + unless (@a == 3 + and $a[0] eq ($^O eq 'VMS'? 'test.' : 'TEST') + and $a[1] eq 'a' + and $a[2] eq 'b') + { + print "not ok 8 # @a"; + } else { + print "ok 8\n"; + } + + # "~" should expand to $ENV{HOME} + $ENV{HOME} = "sweet home"; + @a = bsd_glob('~', GLOB_TILDE | GLOB_NOMAGIC); + unless ($^O eq "MacOS" || (@a == 1 and $a[0] eq $ENV{HOME})) { + print "not "; + } + print "ok 9\n"; + + # GLOB_ALPHASORT (default) should sort alphabetically regardless of case + mkdir "pteerslo", 0777; + chdir "pteerslo"; + + @f_names = qw(Ax.pl Bx.pl Cx.pl aY.pl bY.pl cY.pl); + @f_alpha = qw(Ax.pl aY.pl Bx.pl bY.pl Cx.pl cY.pl); + if ('a' lt 'A') { # EBCDIC char sets sort lower case before UPPER + @f_names = sort(@f_names); + } + if ($^O eq 'VMS') { # VMS is happily caseignorant + @f_alpha = qw(ax.pl ay.pl bx.pl by.pl cx.pl cy.pl); + @f_names = @f_alpha; + } + + for (@f_names) { + open T, "> $_"; + close T; + } + + $pat = "*.pl"; + + $ok = 1; + @g_names = bsd_glob($pat, 0); + print "# f_names = @f_names\n"; + print "# g_names = @g_names\n"; + for (@f_names) { + $ok = 0 unless $_ eq shift @g_names; + } + print $ok ? "ok 10\n" : "not ok 10\n"; + + $ok = 1; + @g_alpha = bsd_glob($pat); + print "# f_alpha = @f_alpha\n"; + print "# g_alpha = @g_alpha\n"; + for (@f_alpha) { + $ok = 0 unless $_ eq shift @g_alpha; + } + print $ok ? "ok 11\n" : "not ok 11\n"; + + unlink @f_names; + chdir ".."; + rmdir "pteerslo"; diff -c /dev/null 'perl-5.7.2/ext/File/Glob/t/case.t' Index: ./ext/File/Glob/t/case.t *** ./ext/File/Glob/t/case.t Thu Jan 1 02:00:00 1970 --- ./ext/File/Glob/t/case.t Mon Jul 9 17:10:02 2001 *************** *** 0 **** --- 1,60 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } else { + @INC = '.'; + push @INC, '../lib'; + } + require Config; import Config; + if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) { + print "1..0\n"; + exit 0; + } + print "1..7\n"; + } + END { + print "not ok 1\n" unless $loaded; + } + use File::Glob qw(:glob csh_glob); + $loaded = 1; + print "ok 1\n"; + + my $pat = $^O eq "MacOS" ? ":op:G*.t" : "op/G*.t"; + + # Test the actual use of the case sensitivity tags, via csh_glob() + import File::Glob ':nocase'; + @a = csh_glob($pat); + print "not " unless @a >= 8; + print "ok 2\n"; + + # This may fail on systems which are not case-PRESERVING + import File::Glob ':case'; + @a = csh_glob($pat); # None should be uppercase + print "not " unless @a == 0; + print "ok 3\n"; + + # Test the explicit use of the GLOB_NOCASE flag + @a = bsd_glob($pat, GLOB_NOCASE); + print "not " unless @a >= 3; + print "ok 4\n"; + + # Test Win32 backslash nastiness... + if ($^O ne 'MSWin32' && $^O ne 'NetWare') { + print "ok 5\nok 6\nok 7\n"; + } + else { + @a = File::Glob::glob("op\\g*.t"); + print "not " unless @a >= 8; + print "ok 5\n"; + mkdir "[]", 0; + @a = File::Glob::glob("\\[\\]", GLOB_QUOTE); + rmdir "[]"; + print "# returned @a\nnot " unless @a == 1; + print "ok 6\n"; + @a = bsd_glob("op\\*", GLOB_QUOTE); + print "not " if @a == 0; + print "ok 7\n"; + } diff -c /dev/null 'perl-5.7.2/ext/File/Glob/t/global.t' Index: ./ext/File/Glob/t/global.t *** ./ext/File/Glob/t/global.t Thu Jan 1 02:00:00 1970 --- ./ext/File/Glob/t/global.t Mon Jul 9 17:10:02 2001 *************** *** 0 **** --- 1,151 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } else { + @INC = '.'; + push @INC, '../lib'; + } + require Config; import Config; + if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) { + print "1..0\n"; + exit 0; + } + print "1..10\n"; + } + END { + print "not ok 1\n" unless $loaded; + } + + BEGIN { + *CORE::GLOBAL::glob = sub { "Just another Perl hacker," }; + } + + BEGIN { + if ("Just another Perl hacker," ne (<*>)[0]) { + die < works + if ($^O eq "MacOS") { + @r = <:*:*.t>; + } else { + @r = <*/*.t>; + } + # at least t/global.t t/basic.t, t/taint.t + print "not " if @r < 3; + print "ok 4\n"; + my $r = scalar @r; + + # check if scalar context works + @r = (); + if ($^O eq "MacOS") { + while (defined($_ = <:*:*.t>)) { + #print "# $_\n"; + push @r, $_; + } + } else { + while (defined($_ = <*/*.t>)) { + #print "# $_\n"; + push @r, $_; + } + } + print "not " if @r != $r; + print "ok 5\n"; + + # check if list context works + @r = (); + if ($^O eq "MacOS") { + for (<:*:*.t>) { + #print "# $_\n"; + push @r, $_; + } + } else { + for (<*/*.t>) { + #print "# $_\n"; + push @r, $_; + } + } + print "not " if @r != $r; + print "ok 6\n"; + + # test if implicit assign to $_ in while() works + @r = (); + if ($^O eq "MacOS") { + while (<:*:*.t>) { + #print "# $_\n"; + push @r, $_; + } + } else { + while (<*/*.t>) { + #print "# $_\n"; + push @r, $_; + } + } + print "not " if @r != $r; + print "ok 7\n"; + + # test if explicit glob() gets assign magic too + my @s = (); + while (glob($^O eq 'MacOS' ? ':*:*.t' : '*/*.t')) { + #print "# $_\n"; + push @s, $_; + } + print "not " if "@r" ne "@s"; + print "ok 8\n"; + + # how about in a different package, like? + package Foo; + use File::Glob ':globally'; + @s = (); + while (glob($^O eq 'MacOS' ? ':*:*.t' : '*/*.t')) { + #print "# $_\n"; + push @s, $_; + } + print "not " if "@r" ne "@s"; + print "ok 9\n"; + + # test if different glob ops maintain independent contexts + @s = (); + my $i = 0; + if ($^O eq "MacOS") { + while (<:*:*.t>) { + #print "# $_ <"; + push @s, $_; + while (<:bas*:*.t>) { + #print " $_"; + $i++; + } + #print " >\n"; + } + } else { + while (<*/*.t>) { + #print "# $_ <"; + push @s, $_; + while () { + #print " $_"; + $i++; + } + #print " >\n"; + } + } + print "not " if "@r" ne "@s" or not $i; + print "ok 10\n"; diff -c /dev/null 'perl-5.7.2/ext/File/Glob/t/taint.t' Index: ./ext/File/Glob/t/taint.t *** ./ext/File/Glob/t/taint.t Thu Jan 1 02:00:00 1970 --- ./ext/File/Glob/t/taint.t Mon Jul 9 17:10:02 2001 *************** *** 0 **** --- 1,31 ---- + #!./perl -T + + BEGIN { + chdir 't' if -d 't'; + if ($^O eq 'MacOS') { + @INC = qw(: ::lib ::macos:lib); + } else { + @INC = '.'; + push @INC, '../lib'; + } + require Config; import Config; + if ($Config{'extensions'} !~ /\bFile\/Glob\b/i) { + print "1..0\n"; + exit 0; + } + print "1..2\n"; + } + END { + print "not ok 1\n" unless $loaded; + } + use File::Glob; + $loaded = 1; + print "ok 1\n"; + + # all filenames should be tainted + @a = File::Glob::bsd_glob("*"); + eval { $a = join("",@a), kill 0; 1 }; + unless ($@ =~ /Insecure dependency/) { + print "not "; + } + print "ok 2\n"; diff -c 'perl-5.7.1/ext/Filter/Util/Call/Call.xs' 'perl-5.7.2/ext/Filter/Util/Call/Call.xs' Index: ./ext/Filter/Util/Call/Call.xs *** ./ext/Filter/Util/Call/Call.xs Fri Mar 16 05:14:10 2001 --- ./ext/Filter/Util/Call/Call.xs Mon Jul 9 17:10:02 2001 *************** *** 11,16 **** --- 11,17 ---- * */ + #define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" *************** *** 243,249 **** void ! unimport(...) PPCODE: filter_del(filter_call); --- 244,251 ---- void ! unimport(package="$Package", ...) ! char *package PPCODE: filter_del(filter_call); diff -c /dev/null 'perl-5.7.2/ext/Filter/t/call.t' Index: ./ext/Filter/t/call.t *** ./ext/Filter/t/call.t Thu Jan 1 02:00:00 1970 --- ./ext/Filter/t/call.t Mon Jul 9 17:10:02 2001 *************** *** 0 **** --- 1,795 ---- + BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ m{\bFilter/Util/Call\b}) { + print "1..0 # Skip: Filter::Util::Call was not built\n"; + exit 0; + } + require 'lib/filter-util.pl'; + } + + use strict; + use warnings; + + use vars qw($Inc $Perl); + + print "1..28\n" ; + + $Perl = "$Perl -w" ; + + use Cwd ; + my $here = getcwd ; + + + my $filename = "call.tst" ; + my $filenamebin = "call.bin" ; + my $module = "MyTest" ; + my $module2 = "MyTest2" ; + my $module3 = "MyTest3" ; + my $module4 = "MyTest4" ; + my $module5 = "MyTest5" ; + my $nested = "nested" ; + my $block = "block" ; + + # Test error cases + ################## + + # no filter function in module + ############################### + + writeFile("${module}.pm", <&1` ; + ok(1, (($? >>8) != 0 or (($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'mpeix') && $? != 0))) ; + ok(2, $a =~ /^Can't locate object method "filter" via package "MyTest"/) ; + + # no reference parameter in filter_add + ###################################### + + writeFile("${module}.pm", <&1` ; + ok(3, (($? >>8) != 0 or (($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'mpeix') && $? != 0))) ; + #ok(4, $a =~ /^usage: filter_add\(ref\) at ${module}.pm/) ; + ok(4, $a =~ /^Not enough arguments for Filter::Util::Call::filter_add/) ; + + + + + # non-error cases + ################# + + + # a simple filter, using a closure + ################# + + writeFile("${module}.pm", < 0) { + s/ABC/DEF/g + } + $status ; + } ) ; + } + + 1 ; + EOM + + writeFile($filename, <&1` ; + ok(5, ($? >>8) == 0) ; + ok(6, $a eq < 0) { + s/ABC/DEF/g + } + $status ; + } + + + 1 ; + EOM + + writeFile($filename, <&1` ; + ok(7, ($? >>8) == 0) ; + ok(8, $a eq < 0) { + s/XYZ/PQR/g + } + $status ; + } + + 1 ; + EOM + + writeFile("${module3}.pm", < 0) { + s/Fred/Joe/g + } + $status ; + } ) ; + } + + 1 ; + EOM + + writeFile("${module4}.pm", < 0) { + s/Today/Tomorrow/g + } + $status ; + } + + 1 ; + EOM + + writeFile($filename, <&1` ; + ok(9, ($? >>8) == 0) ; + ok(10, $a eq < 0) { + foreach $pattern (@strings) + { s/$pattern/PQR/g } + } + + $status ; + } + ) + + } + 1 ; + EOM + + + writeFile($filename, <&1` ; + ok(11, ($? >>8) == 0) ; + ok(12, $a eq < 0) { + foreach $pattern (@$self) + { s/$pattern/PQR/g } + } + + $status ; + } + + 1 ; + EOM + + + writeFile($filename, <&1` ; + ok(13, ($? >>8) == 0) ; + ok(14, $a eq < 0) { + chop ; + s/\r$//; + # and now the second line (it will append) + $status = filter_read() ; + } + + $status ; + } + + 1 ; + EOM + + + writeFile($filename, <&1` ; + ok(15, ($? >>8) == 0) ; + ok(16, $a eq <&1` ; + ok(17, ($? >>8) == 0) ; + ok(18, $a eq < 0) { + s/DIR/$here/g + } + $status ; + } + + 1 ; + EOM + + writeFile($filename, <&1` ; + ok(19, ($? >>8) == 0) ; + ok(20, $a eq < 0 ; + + -- $$self ; + filter_del() if $$self <= 0 ; + + $status ; + } + + 1 ; + EOM + + writeFile($filename, <&1` ; + ok(21, ($? >>8) == 0) ; + ok(22, $a eq < 0) { + s/HERE/THERE/g + } + + $status ; + } + + 1 ; + EOM + + writeFile($filenamebin, <&1` ; + ok(23, ($? >>8) == 0) ; + ok(24, $a eq < 0) { + s/HERE/THERE/g + } + + $status ; + } + + 1 ; + EOM + + writeFile($filename, <; + print @a; + __DATA__ + HERE I am + I'm HERE + HERE today gone tomorrow + EOM + + $a = `$Perl "-I." $Inc $filename 2>&1` ; + ok(25, ($? >>8) == 0) ; + ok(26, $a eq < 0) { + s/HERE/THERE/g + } + + $status ; + } + + 1 ; + EOM + + writeFile($filename, <; + print @a; + __END__ + HERE I am + I'm HERE + HERE today gone tomorrow + EOM + + $a = `$Perl "-I." $Inc $filename 2>&1` ; + ok(27, ($? >>8) == 0) ; + ok(28, $a eq <, but your are strongly urged to use one of the many ! mirrors. You can obtain a list of mirror sites by issuing the ! command C. =head1 BUGS --- 22,31 ---- =head1 AVAILABILITY ! gdbm is available from any GNU archive. The master site is ! C, but you are strongly urged to use one of the many ! mirrors. You can obtain a list of mirror sites from ! http://www.gnu.org/order/ftp.html. =head1 BUGS *************** *** 46,52 **** require Carp; require Tie::Hash; require Exporter; - use AutoLoader; use XSLoader (); @ISA = qw(Tie::Hash Exporter); @EXPORT = qw( --- 46,51 ---- *************** *** 61,81 **** GDBM_WRITER ); ! $VERSION = "1.05"; sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; ! my $val = constant($constname, @_ ? $_[0] : 0); ! if ($! != 0) { ! if ($! =~ /Invalid/ || $!{EINVAL}) { ! $AutoLoader::AUTOLOAD = $AUTOLOAD; ! goto &AutoLoader::AUTOLOAD; ! } ! else { ! Carp::croak("Your vendor has not defined GDBM_File macro $constname, used"); ! } ! } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } --- 60,72 ---- GDBM_WRITER ); ! $VERSION = "1.06"; sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; ! my ($error, $val) = constant($constname); ! Carp::croak $error if $error; eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } *************** *** 82,89 **** XSLoader::load 'GDBM_File', $VERSION; - # Preloaded methods go here. Autoload methods go after __END__, and are - # processed by the autosplit program. - 1; - __END__ --- 73,76 ---- diff -c 'perl-5.7.1/ext/GDBM_File/GDBM_File.xs' 'perl-5.7.2/ext/GDBM_File/GDBM_File.xs' Index: ./ext/GDBM_File/GDBM_File.xs *** ./ext/GDBM_File/GDBM_File.xs Fri Mar 16 04:49:52 2001 --- ./ext/GDBM_File/GDBM_File.xs Mon Jul 9 17:10:02 2001 *************** *** 76,214 **** #define gdbm_setopt(db,optflag,optval,optlen) not_here("gdbm_setopt") #endif ! static double ! constant(char *name, int arg) ! { ! errno = 0; ! switch (*name) { ! case 'A': ! break; ! case 'B': ! break; ! case 'C': ! break; ! case 'D': ! break; ! case 'E': ! break; ! case 'F': ! break; ! case 'G': ! if (strEQ(name, "GDBM_CACHESIZE")) ! #ifdef GDBM_CACHESIZE ! return GDBM_CACHESIZE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_FAST")) ! #ifdef GDBM_FAST ! return GDBM_FAST; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_FASTMODE")) ! #ifdef GDBM_FASTMODE ! return GDBM_FASTMODE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_INSERT")) ! #ifdef GDBM_INSERT ! return GDBM_INSERT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_NEWDB")) ! #ifdef GDBM_NEWDB ! return GDBM_NEWDB; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_NOLOCK")) ! #ifdef GDBM_NOLOCK ! return GDBM_NOLOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_READER")) ! #ifdef GDBM_READER ! return GDBM_READER; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_REPLACE")) ! #ifdef GDBM_REPLACE ! return GDBM_REPLACE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_WRCREAT")) ! #ifdef GDBM_WRCREAT ! return GDBM_WRCREAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "GDBM_WRITER")) ! #ifdef GDBM_WRITER ! return GDBM_WRITER; ! #else ! goto not_there; ! #endif ! break; ! case 'H': ! break; ! case 'I': ! break; ! case 'J': ! break; ! case 'K': ! break; ! case 'L': ! break; ! case 'M': ! break; ! case 'N': ! break; ! case 'O': ! break; ! case 'P': ! break; ! case 'Q': ! break; ! case 'R': ! break; ! case 'S': ! break; ! case 'T': ! break; ! case 'U': ! break; ! case 'V': ! break; ! case 'W': ! break; ! case 'X': ! break; ! case 'Y': ! break; ! case 'Z': ! break; ! } ! errno = EINVAL; ! return 0; - not_there: - errno = ENOENT; - return 0; - } - MODULE = GDBM_File PACKAGE = GDBM_File PREFIX = gdbm_ ! double ! constant(name,arg) ! char * name ! int arg ! GDBM_File gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak) --- 76,86 ---- #define gdbm_setopt(db,optflag,optval,optlen) not_here("gdbm_setopt") #endif ! #include "constants.c" MODULE = GDBM_File PACKAGE = GDBM_File PREFIX = gdbm_ ! INCLUDE: constants.xs GDBM_File gdbm_TIEHASH(dbtype, name, read_write, mode, fatal_func = (FATALFUNC)croak) diff -c 'perl-5.7.1/ext/GDBM_File/Makefile.PL' 'perl-5.7.2/ext/GDBM_File/Makefile.PL' Index: ./ext/GDBM_File/Makefile.PL *** ./ext/GDBM_File/Makefile.PL Tue Mar 6 04:04:51 2001 --- ./ext/GDBM_File/Makefile.PL Mon Jul 9 17:10:02 2001 *************** *** 1,4 **** --- 1,5 ---- use ExtUtils::MakeMaker; + use ExtUtils::Constant 0.07 'WriteConstants'; WriteMakefile( NAME => 'GDBM_File', LIBS => ["-L/usr/local/lib -lgdbm", "-ldbm"], *************** *** 5,8 **** --- 6,18 ---- MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'GDBM_File.pm', + realclean => {FILES=> 'constants.c constants.xs'}, + ); + WriteConstants( + NAME => 'GDBM_File', + DEFAULT_TYPE => 'IV', + BREAKOUT_AT => 8, + NAMES => [qw(GDBM_CACHESIZE GDBM_FAST GDBM_FASTMODE GDBM_INSERT GDBM_NEWDB + GDBM_NOLOCK GDBM_READER GDBM_REPLACE GDBM_WRCREAT + GDBM_WRITER)], ); diff -c /dev/null 'perl-5.7.2/ext/GDBM_File/gdbm.t' Index: ./ext/GDBM_File/gdbm.t *** ./ext/GDBM_File/gdbm.t Thu Jan 1 02:00:00 1970 --- ./ext/GDBM_File/gdbm.t Mon Jul 9 17:10:02 2001 *************** *** 0 **** --- 1,427 ---- + #!./perl + + # $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $ + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bGDBM_File\b/) { + print "1..0 # Skip: GDBM_File was not built\n"; + exit 0; + } + } + + use strict; + use warnings; + + + use GDBM_File; + + print "1..68\n"; + + unlink ; + + umask(0); + my %h ; + print (tie(%h,'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640) ? "ok 1\n" : "not ok 1\n"); + + my $Dfile = "Op.dbmx.pag"; + if (! -e $Dfile) { + ($Dfile) = ; + } + if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'dos' || $^O eq 'cygwin') { + print "ok 2 # Skipped: different file permission semantics\n"; + } + else { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n"); + } + my $i = 0; + while (my ($key,$value) = each(%h)) { + $i++; + } + print (!$i ? "ok 3\n" : "not ok 3\n"); + + $h{'goner1'} = 'snork'; + + $h{'abc'} = 'ABC'; + $h{'def'} = 'DEF'; + $h{'jkl','mno'} = "JKL\034MNO"; + $h{'a',2,3,4,5} = join("\034",'A',2,3,4,5); + $h{'a'} = 'A'; + $h{'b'} = 'B'; + $h{'c'} = 'C'; + $h{'d'} = 'D'; + $h{'e'} = 'E'; + $h{'f'} = 'F'; + $h{'g'} = 'G'; + $h{'h'} = 'H'; + $h{'i'} = 'I'; + + $h{'goner2'} = 'snork'; + delete $h{'goner2'}; + + untie(%h); + print (tie(%h,'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640) ? "ok 4\n" : "not ok 4\n"); + + $h{'j'} = 'J'; + $h{'k'} = 'K'; + $h{'l'} = 'L'; + $h{'m'} = 'M'; + $h{'n'} = 'N'; + $h{'o'} = 'O'; + $h{'p'} = 'P'; + $h{'q'} = 'Q'; + $h{'r'} = 'R'; + $h{'s'} = 'S'; + $h{'t'} = 'T'; + $h{'u'} = 'U'; + $h{'v'} = 'V'; + $h{'w'} = 'W'; + $h{'x'} = 'X'; + $h{'y'} = 'Y'; + $h{'z'} = 'Z'; + + $h{'goner3'} = 'snork'; + + delete $h{'goner1'}; + delete $h{'goner3'}; + + my @keys = keys(%h); + my @values = values(%h); + + if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";} + + while (my ($key,$value) = each(%h)) { + if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) { + $key =~ y/a-z/A-Z/; + $i++ if $key eq $value; + } + } + + if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";} + + @keys = ('blurfl', keys(%h), 'dyick'); + if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";} + + $h{'foo'} = ''; + $h{''} = 'bar'; + + # check cache overflow and numeric keys and contents + my $ok = 1; + for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; } + for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; } + print ($ok ? "ok 8\n" : "not ok 8\n"); + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print ($size > 0 ? "ok 9\n" : "not ok 9\n"); + + @h{0..200} = 200..400; + my @foo = @h{0..200}; + print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n"; + + print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n"); + print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n"); + + untie %h; + unlink 'Op.dbmx.dir', $Dfile; + + sub ok + { + my $no = shift ; + my $result = shift ; + + print "not " unless $result ; + print "ok $no\n" ; + } + + { + # sub-class test + + package Another ; + + use strict ; + use warnings ; + + open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ; + print FILE <<'EOM' ; + + package SubDB ; + + use strict ; + use vars qw(@ISA @EXPORT) ; + + require Exporter ; + use GDBM_File; + @ISA=qw(GDBM_File); + @EXPORT = @GDBM_File::EXPORT ; + + sub STORE { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::STORE($key, $value * 2) ; + } + + sub FETCH { + my $self = shift ; + my $key = shift ; + $self->SUPER::FETCH($key) - 1 ; + } + + sub A_new_method + { + my $self = shift ; + my $key = shift ; + my $value = $self->FETCH($key) ; + return "[[$value]]" ; + } + + 1 ; + EOM + + close FILE ; + + BEGIN { push @INC, '.'; } + unlink ; + + eval 'use SubDB ; '; + main::ok(13, $@ eq "") ; + my %h ; + my $X ; + eval ' + $X = tie(%h, "SubDB","dbhash.tmp", &GDBM_WRCREAT, 0640 ); + ' ; + + main::ok(14, $@ eq "") ; + + my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ; + main::ok(15, $@ eq "") ; + main::ok(16, $ret == 5) ; + + $ret = eval ' &GDBM_WRCREAT eq &main::GDBM_WRCREAT ' ; + main::ok(17, $@ eq "" ) ; + main::ok(18, $ret == 1) ; + + $ret = eval '$X->A_new_method("fred") ' ; + main::ok(19, $@ eq "") ; + main::ok(20, $ret eq "[[5]]") ; + + undef $X; + untie(%h); + unlink "SubDB.pm", ; + + } + + { + # DBM Filter tests + use strict ; + use warnings ; + my (%h, $db) ; + my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + + sub checkOutput + { + my($fk, $sk, $fv, $sv) = @_ ; + return + $fetch_key eq $fk && $store_key eq $sk && + $fetch_value eq $fv && $store_value eq $sv && + $_ eq 'original' ; + } + + unlink ; + ok(21, $db = tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640)) ; + + $db->filter_fetch_key (sub { $fetch_key = $_ }) ; + $db->filter_store_key (sub { $store_key = $_ }) ; + $db->filter_fetch_value (sub { $fetch_value = $_}) ; + $db->filter_store_value (sub { $store_value = $_ }) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + # fk sk fv sv + ok(22, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(23, $h{"fred"} eq "joe"); + # fk sk fv sv + ok(24, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(25, $db->FIRSTKEY() eq "fred") ; + # fk sk fv sv + ok(26, checkOutput( "fred", "", "", "")) ; + + # replace the filters, but remember the previous set + my ($old_fk) = $db->filter_fetch_key + (sub { $_ = uc $_ ; $fetch_key = $_ }) ; + my ($old_sk) = $db->filter_store_key + (sub { $_ = lc $_ ; $store_key = $_ }) ; + my ($old_fv) = $db->filter_fetch_value + (sub { $_ = "[$_]"; $fetch_value = $_ }) ; + my ($old_sv) = $db->filter_store_value + (sub { s/o/x/g; $store_value = $_ }) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"Fred"} = "Joe" ; + # fk sk fv sv + ok(27, checkOutput( "", "fred", "", "Jxe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(28, $h{"Fred"} eq "[Jxe]"); + # fk sk fv sv + ok(29, checkOutput( "", "fred", "[Jxe]", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(30, $db->FIRSTKEY() eq "FRED") ; + # fk sk fv sv + ok(31, checkOutput( "FRED", "", "", "")) ; + + # put the original filters back + $db->filter_fetch_key ($old_fk); + $db->filter_store_key ($old_sk); + $db->filter_fetch_value ($old_fv); + $db->filter_store_value ($old_sv); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(32, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(33, $h{"fred"} eq "joe"); + ok(34, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(35, $db->FIRSTKEY() eq "fred") ; + ok(36, checkOutput( "fred", "", "", "")) ; + + # delete the filters + $db->filter_fetch_key (undef); + $db->filter_store_key (undef); + $db->filter_fetch_value (undef); + $db->filter_store_value (undef); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(37, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(38, $h{"fred"} eq "joe"); + ok(39, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(40, $db->FIRSTKEY() eq "fred") ; + ok(41, checkOutput( "", "", "", "")) ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter with a closure + + use strict ; + use warnings ; + my (%h, $db) ; + + unlink ; + ok(42, $db = tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640)) ; + + my %result = () ; + + sub Closure + { + my ($name) = @_ ; + my $count = 0 ; + my @kept = () ; + + return sub { ++$count ; + push @kept, $_ ; + $result{$name} = "$name - $count: [@kept]" ; + } + } + + $db->filter_store_key(Closure("store key")) ; + $db->filter_store_value(Closure("store value")) ; + $db->filter_fetch_key(Closure("fetch key")) ; + $db->filter_fetch_value(Closure("fetch value")) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + ok(43, $result{"store key"} eq "store key - 1: [fred]"); + ok(44, $result{"store value"} eq "store value - 1: [joe]"); + ok(45, !defined $result{"fetch key"} ); + ok(46, !defined $result{"fetch value"} ); + ok(47, $_ eq "original") ; + + ok(48, $db->FIRSTKEY() eq "fred") ; + ok(49, $result{"store key"} eq "store key - 1: [fred]"); + ok(50, $result{"store value"} eq "store value - 1: [joe]"); + ok(51, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(52, ! defined $result{"fetch value"} ); + ok(53, $_ eq "original") ; + + $h{"jim"} = "john" ; + ok(54, $result{"store key"} eq "store key - 2: [fred jim]"); + ok(55, $result{"store value"} eq "store value - 2: [joe john]"); + ok(56, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(57, ! defined $result{"fetch value"} ); + ok(58, $_ eq "original") ; + + ok(59, $h{"fred"} eq "joe"); + ok(60, $result{"store key"} eq "store key - 3: [fred jim fred]"); + ok(61, $result{"store value"} eq "store value - 2: [joe john]"); + ok(62, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(63, $result{"fetch value"} eq "fetch value - 1: [joe]"); + ok(64, $_ eq "original") ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter recursion detection + use strict ; + use warnings ; + my (%h, $db) ; + unlink ; + + ok(65, $db = tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640)) ; + + $db->filter_store_key (sub { $_ = $h{$_} }) ; + + eval '$h{1} = 1234' ; + ok(66, $@ =~ /^recursion detected in filter_store_key at/ ); + + undef $db ; + untie %h; + unlink ; + } + + { + # Bug ID 20001013.009 + # + # test that $hash{KEY} = undef doesn't produce the warning + # Use of uninitialized value in null operation + use warnings ; + use strict ; + use GDBM_File ; + + unlink ; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + ok(67, tie(%h, 'GDBM_File','Op.dbmx', &GDBM_WRCREAT, 0640)); + $h{ABC} = undef; + ok(68, $a eq "") ; + untie %h; + unlink ; + } diff -c /dev/null 'perl-5.7.2/ext/I18N/Langinfo/Langinfo.pm' Index: ./ext/I18N/Langinfo/Langinfo.pm *** ./ext/I18N/Langinfo/Langinfo.pm Thu Jan 1 02:00:00 1970 --- ./ext/I18N/Langinfo/Langinfo.pm Mon Jul 9 17:10:02 2001 *************** *** 0 **** --- 1,199 ---- + package I18N::Langinfo; + + use 5.006; + use strict; + use warnings; + use Carp; + + require Exporter; + require DynaLoader; + use AutoLoader; + + our @ISA = qw(Exporter DynaLoader); + + our @EXPORT = qw(langinfo); + + our @EXPORT_OK = qw( + ABDAY_1 + ABDAY_2 + ABDAY_3 + ABDAY_4 + ABDAY_5 + ABDAY_6 + ABDAY_7 + ABMON_1 + ABMON_10 + ABMON_11 + ABMON_12 + ABMON_2 + ABMON_3 + ABMON_4 + ABMON_5 + ABMON_6 + ABMON_7 + ABMON_8 + ABMON_9 + ALT_DIGITS + AM_STR + CODESET + CRNCYSTR + DAY_1 + DAY_2 + DAY_3 + DAY_4 + DAY_5 + DAY_6 + DAY_7 + D_FMT + D_T_FMT + ERA + ERA_D_FMT + ERA_D_T_FMT + ERA_T_FMT + MON_1 + MON_10 + MON_11 + MON_12 + MON_2 + MON_3 + MON_4 + MON_5 + MON_6 + MON_7 + MON_8 + MON_9 + NOEXPR + NOSTR + PM_STR + RADIXCHAR + THOUSEP + T_FMT + T_FMT_AMPM + YESEXPR + YESSTR + ); + + our $VERSION = '0.01'; + + sub AUTOLOAD { + # This AUTOLOAD is used to 'autoload' constants from the constant() + # XS function. + + my $constname; + our $AUTOLOAD; + ($constname = $AUTOLOAD) =~ s/.*:://; + croak "&I18N::Langinfo::constant not defined" if $constname eq 'constant'; + my ($error, $val) = constant($constname); + if ($error) { croak $error; } + { + no strict 'refs'; + # Fixed between 5.005_53 and 5.005_61 + #XXX if ($] >= 5.00561) { + #XXX *$AUTOLOAD = sub () { $val }; + #XXX } + #XXX else { + *$AUTOLOAD = sub { $val }; + #XXX } + } + goto &$AUTOLOAD; + } + + bootstrap I18N::Langinfo $VERSION; + + 1; + __END__ + + =head1 NAME + + I18N::Langinfo - query locale information + + =head1 SYNOPSIS + + use I18N::Langinfo; + + =head1 DESCRIPTION + + The langinfo() function queries various locale information that can be + used to localize output and user interfaces. The langinfo() requires + one numeric argument that identifies the locale constant to query: + if no argument is supplied, C<$_> is used. The numeric constants + appropriate to be used as arguments are exportable from I18N::Langinfo. + + The following example will import the langinfo() function itself and + three constants to be used as arguments to langinfo(): a constant for + the abbreviated first day of the week (the numbering starts from + Sunday = 1) and two more constants for the affirmative and negative + answers for a yes/no question in the current locale. + + use I18N::Langinfo qw(langinfo ABDAY_1 YESSTR NOSTR); + + my ($abday_1, $yesstr, $nostr) = map { langinfo } qw(ABDAY_1 YESSTR NOSTR); + + print "$abday_1? [$yesstr/$nostr] "; + + In other words, in the "C" (or English) locale the above will probably + print something like: + + Sun? [yes/no] + + The usually available constants are + + ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7 + ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6 + ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 + DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 + MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 + MON_7 MON_8 MON_9 MON_10 MON_11 MON_12 + + for abbreviated and full length days of the week and months of the year, + + D_T_FMT D_FMT T_FMT + + for the date-time, date, and time formats used by the strftime() function + (see L, and also L), + + AM_STR PM_STR T_FMT_AMPM + + for the locales for which it makes sense to have ante meridiem and post + meridiem time formats, + + CODESET CRNCYSTR RADIXCHAR + + for the character code set being used (such as "ISO8859-1", "cp850", + "koi8-r", "sjis", "utf8", etc.), for the currency string, for the + radix character (yes, this is redundant with POSIX::localeconv()) + + YESSTR YESEXPR NOSTR NOEXPR + + for the affirmative and negative responses and expressions, and + + ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT + + for the Japanese Emperor eras (naturally only defined under Japanese locales). + + See your L for more information about the available + constants. (Often this means having to look directly at the + F C header file.) + + =head2 EXPORT + + Nothing is exported by default. + + =head1 SEE ALSO + + L, L, L, L. + + The langinfo() is just a wrapper for the C nl_langinfo() interface. + + =head1 AUTHOR + + Jarkko Hietaniemi, Ejhi@hut.fiE + + =head1 COPYRIGHT AND LICENSE + + Copyright 2001 by Jarkko Hietaniemi + + This library is free software; you can redistribute it and/or modify + it under the same terms as Perl itself. + + =cut diff -c /dev/null 'perl-5.7.2/ext/I18N/Langinfo/Langinfo.t' Index: ./ext/I18N/Langinfo/Langinfo.t *** ./ext/I18N/Langinfo/Langinfo.t Thu Jan 1 02:00:00 1970 --- ./ext/I18N/Langinfo/Langinfo.t Fri Jul 13 02:58:19 2001 *************** *** 0 **** --- 1,36 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ m!\bI18N/Langinfo\b! || + $Config{'extensions'} !~ m!\bPOSIX\b!) + { + print "1..0 # skip: I18N::Langinfo or POSIX unavailable\n"; + exit 0; + } + } + + use I18N::Langinfo qw(langinfo ABDAY_1 DAY_1 ABMON_1 MON_1 RADIXCHAR); + use POSIX qw(setlocale LC_ALL); + + setlocale(LC_ALL, "C"); + + print "1..5\n"; + + print "not " unless langinfo(ABDAY_1) eq "Sun"; + print "ok 1\n"; + + print "not " unless langinfo(DAY_1) eq "Sunday"; + print "ok 2\n"; + + print "not " unless langinfo(ABMON_1) eq "Jan"; + print "ok 3\n"; + + print "not " unless langinfo(MON_1) eq "January"; + print "ok 4\n"; + + print "not " unless langinfo(RADIXCHAR) eq "."; + print "ok 5\n"; + diff -c /dev/null 'perl-5.7.2/ext/I18N/Langinfo/Langinfo.xs' Index: ./ext/I18N/Langinfo/Langinfo.xs *** ./ext/I18N/Langinfo/Langinfo.xs Thu Jan 1 02:00:00 1970 --- ./ext/I18N/Langinfo/Langinfo.xs Mon Jul 9 17:10:03 2001 *************** *** 0 **** --- 1,836 ---- + #include "EXTERN.h" + #include "perl.h" + #include "XSUB.h" + + #ifdef I_LANGINFO + # include + #endif + + #define PERL_constant_NOTFOUND 1 + #define PERL_constant_NOTDEF 2 + #define PERL_constant_ISIV 3 + #define PERL_constant_ISNO 4 + #define PERL_constant_ISNV 5 + #define PERL_constant_ISPV 6 + #define PERL_constant_ISPVN 7 + #define PERL_constant_ISSV 8 + #define PERL_constant_ISUNDEF 9 + #define PERL_constant_ISUV 10 + #define PERL_constant_ISYES 11 + + #ifndef NVTYPE + typedef double NV; /* 5.6 and later define NVTYPE, and typedef NV to it. */ + #endif + static int + constant_5 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 D_FMT MON_1 MON_2 MON_3 MON_4 + MON_5 MON_6 MON_7 MON_8 MON_9 NOSTR T_FMT */ + /* Offset 4 gives the best switch position. */ + switch (name[4]) { + case '1': + if (memEQ(name, "DAY_1", 5)) { + /* ^ */ + #ifdef DAY_1 + *iv_return = DAY_1; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_1", 5)) { + /* ^ */ + #ifdef MON_1 + *iv_return = MON_1; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '2': + if (memEQ(name, "DAY_2", 5)) { + /* ^ */ + #ifdef DAY_2 + *iv_return = DAY_2; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_2", 5)) { + /* ^ */ + #ifdef MON_2 + *iv_return = MON_2; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '3': + if (memEQ(name, "DAY_3", 5)) { + /* ^ */ + #ifdef DAY_3 + *iv_return = DAY_3; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_3", 5)) { + /* ^ */ + #ifdef MON_3 + *iv_return = MON_3; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '4': + if (memEQ(name, "DAY_4", 5)) { + /* ^ */ + #ifdef DAY_4 + *iv_return = DAY_4; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_4", 5)) { + /* ^ */ + #ifdef MON_4 + *iv_return = MON_4; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '5': + if (memEQ(name, "DAY_5", 5)) { + /* ^ */ + #ifdef DAY_5 + *iv_return = DAY_5; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_5", 5)) { + /* ^ */ + #ifdef MON_5 + *iv_return = MON_5; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '6': + if (memEQ(name, "DAY_6", 5)) { + /* ^ */ + #ifdef DAY_6 + *iv_return = DAY_6; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_6", 5)) { + /* ^ */ + #ifdef MON_6 + *iv_return = MON_6; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '7': + if (memEQ(name, "DAY_7", 5)) { + /* ^ */ + #ifdef DAY_7 + *iv_return = DAY_7; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_7", 5)) { + /* ^ */ + #ifdef MON_7 + *iv_return = MON_7; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '8': + if (memEQ(name, "MON_8", 5)) { + /* ^ */ + #ifdef MON_8 + *iv_return = MON_8; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '9': + if (memEQ(name, "MON_9", 5)) { + /* ^ */ + #ifdef MON_9 + *iv_return = MON_9; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'R': + if (memEQ(name, "NOSTR", 5)) { + /* ^ */ + #ifdef NOSTR + *iv_return = NOSTR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'T': + if (memEQ(name, "D_FMT", 5)) { + /* ^ */ + #ifdef D_FMT + *iv_return = D_FMT; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "T_FMT", 5)) { + /* ^ */ + #ifdef T_FMT + *iv_return = T_FMT; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + } + return PERL_constant_NOTFOUND; + } + + static int + constant_6 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + AM_STR MON_10 MON_11 MON_12 NOEXPR PM_STR YESSTR */ + /* Offset 0 gives the best switch position. */ + switch (name[0]) { + case 'A': + if (memEQ(name, "AM_STR", 6)) { + /* ^ */ + #ifdef AM_STR + *iv_return = AM_STR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'M': + if (memEQ(name, "MON_10", 6)) { + /* ^ */ + #ifdef MON_10 + *iv_return = MON_10; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_11", 6)) { + /* ^ */ + #ifdef MON_11 + *iv_return = MON_11; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "MON_12", 6)) { + /* ^ */ + #ifdef MON_12 + *iv_return = MON_12; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'N': + if (memEQ(name, "NOEXPR", 6)) { + /* ^ */ + #ifdef NOEXPR + *iv_return = NOEXPR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'P': + if (memEQ(name, "PM_STR", 6)) { + /* ^ */ + #ifdef PM_STR + *iv_return = PM_STR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'Y': + if (memEQ(name, "YESSTR", 6)) { + /* ^ */ + #ifdef YESSTR + *iv_return = YESSTR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + } + return PERL_constant_NOTFOUND; + } + + static int + constant_7 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7 ABMON_1 ABMON_2 + ABMON_3 ABMON_4 ABMON_5 ABMON_6 ABMON_7 ABMON_8 ABMON_9 CODESET D_T_FMT + THOUSEP YESEXPR */ + /* Offset 6 gives the best switch position. */ + switch (name[6]) { + case '1': + if (memEQ(name, "ABDAY_1", 7)) { + /* ^ */ + #ifdef ABDAY_1 + *iv_return = ABDAY_1; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "ABMON_1", 7)) { + /* ^ */ + #ifdef ABMON_1 + *iv_return = ABMON_1; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '2': + if (memEQ(name, "ABDAY_2", 7)) { + /* ^ */ + #ifdef ABDAY_2 + *iv_return = ABDAY_2; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "ABMON_2", 7)) { + /* ^ */ + #ifdef ABMON_2 + *iv_return = ABMON_2; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '3': + if (memEQ(name, "ABDAY_3", 7)) { + /* ^ */ + #ifdef ABDAY_3 + *iv_return = ABDAY_3; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "ABMON_3", 7)) { + /* ^ */ + #ifdef ABMON_3 + *iv_return = ABMON_3; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '4': + if (memEQ(name, "ABDAY_4", 7)) { + /* ^ */ + #ifdef ABDAY_4 + *iv_return = ABDAY_4; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "ABMON_4", 7)) { + /* ^ */ + #ifdef ABMON_4 + *iv_return = ABMON_4; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '5': + if (memEQ(name, "ABDAY_5", 7)) { + /* ^ */ + #ifdef ABDAY_5 + *iv_return = ABDAY_5; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "ABMON_5", 7)) { + /* ^ */ + #ifdef ABMON_5 + *iv_return = ABMON_5; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '6': + if (memEQ(name, "ABDAY_6", 7)) { + /* ^ */ + #ifdef ABDAY_6 + *iv_return = ABDAY_6; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "ABMON_6", 7)) { + /* ^ */ + #ifdef ABMON_6 + *iv_return = ABMON_6; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '7': + if (memEQ(name, "ABDAY_7", 7)) { + /* ^ */ + #ifdef ABDAY_7 + *iv_return = ABDAY_7; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "ABMON_7", 7)) { + /* ^ */ + #ifdef ABMON_7 + *iv_return = ABMON_7; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '8': + if (memEQ(name, "ABMON_8", 7)) { + /* ^ */ + #ifdef ABMON_8 + *iv_return = ABMON_8; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '9': + if (memEQ(name, "ABMON_9", 7)) { + /* ^ */ + #ifdef ABMON_9 + *iv_return = ABMON_9; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'P': + if (memEQ(name, "THOUSEP", 7)) { + /* ^ */ + #ifdef THOUSEP + *iv_return = THOUSEP; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'R': + if (memEQ(name, "YESEXPR", 7)) { + /* ^ */ + #ifdef YESEXPR + *iv_return = YESEXPR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'T': + if (memEQ(name, "CODESET", 7)) { + /* ^ */ + #ifdef CODESET + *iv_return = CODESET; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + if (memEQ(name, "D_T_FMT", 7)) { + /* ^ */ + #ifdef D_T_FMT + *iv_return = D_T_FMT; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + } + return PERL_constant_NOTFOUND; + } + + static int + constant_8 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + ABMON_10 ABMON_11 ABMON_12 CRNCYSTR */ + /* Offset 7 gives the best switch position. */ + switch (name[7]) { + case '0': + if (memEQ(name, "ABMON_10", 8)) { + /* ^ */ + #ifdef ABMON_10 + *iv_return = ABMON_10; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '1': + if (memEQ(name, "ABMON_11", 8)) { + /* ^ */ + #ifdef ABMON_11 + *iv_return = ABMON_11; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case '2': + if (memEQ(name, "ABMON_12", 8)) { + /* ^ */ + #ifdef ABMON_12 + *iv_return = ABMON_12; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'R': + if (memEQ(name, "CRNCYSTR", 8)) { + /* ^ */ + #ifdef CRNCYSTR + *iv_return = CRNCYSTR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + } + return PERL_constant_NOTFOUND; + } + + static int + constant_9 (pTHX_ const char *name, IV *iv_return) { + /* When generated this function returned values for the list of names given + here. However, subsequent manual editing may have added or removed some. + ERA_D_FMT ERA_T_FMT RADIXCHAR */ + /* Offset 4 gives the best switch position. */ + switch (name[4]) { + case 'D': + if (memEQ(name, "ERA_D_FMT", 9)) { + /* ^ */ + #ifdef ERA_D_FMT + *iv_return = ERA_D_FMT; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'T': + if (memEQ(name, "ERA_T_FMT", 9)) { + /* ^ */ + #ifdef ERA_T_FMT + *iv_return = ERA_T_FMT; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'X': + if (memEQ(name, "RADIXCHAR", 9)) { + /* ^ */ + #ifdef RADIXCHAR + *iv_return = RADIXCHAR; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + } + return PERL_constant_NOTFOUND; + } + + static int + constant (pTHX_ const char *name, STRLEN len, IV *iv_return) { + /* Initially switch on the length of the name. */ + /* When generated this function returned values for the list of names given + in this section of perl code. Rather than manually editing these functions + to add or remove constants, which would result in this comment and section + of code becoming inaccurate, we recommend that you edit this section of + code, and use it to regenerate a new set of constant functions which you + then use to replace the originals. + + Regenerate these constant functions by feeding this entire source file to + perl -x + + #!../../../perl -w + use ExtUtils::Constant qw (constant_types C_constant XS_constant); + + my $types = {map {($_, 1)} qw(IV)}; + my @names = (qw(ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 ABDAY_6 ABDAY_7 ABMON_1 + ABMON_10 ABMON_11 ABMON_12 ABMON_2 ABMON_3 ABMON_4 ABMON_5 + ABMON_6 ABMON_7 ABMON_8 ABMON_9 ALT_DIGITS AM_STR CODESET + CRNCYSTR DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 D_FMT D_T_FMT + ERA ERA_D_FMT ERA_D_T_FMT ERA_T_FMT MON_1 MON_10 MON_11 MON_12 + MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9 NOEXPR NOSTR + PM_STR RADIXCHAR THOUSEP T_FMT T_FMT_AMPM YESEXPR YESSTR)); + + print constant_types(); # macro defs + foreach (C_constant ("I18N::Langinfo", 'constant', 'IV', $types, undef, 3, @names) ) { + print $_, "\n"; # C constant subs + } + print "#### XS Section:\n"; + print XS_constant ("I18N::Langinfo", $types); + __END__ + */ + + switch (len) { + case 3: + if (memEQ(name, "ERA", 3)) { + #ifdef ERA + *iv_return = ERA; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 5: + return constant_5 (aTHX_ name, iv_return); + break; + case 6: + return constant_6 (aTHX_ name, iv_return); + break; + case 7: + return constant_7 (aTHX_ name, iv_return); + break; + case 8: + return constant_8 (aTHX_ name, iv_return); + break; + case 9: + return constant_9 (aTHX_ name, iv_return); + break; + case 10: + /* Names all of length 10. */ + /* ALT_DIGITS T_FMT_AMPM */ + /* Offset 7 gives the best switch position. */ + switch (name[7]) { + case 'I': + if (memEQ(name, "ALT_DIGITS", 10)) { + /* ^ */ + #ifdef ALT_DIGITS + *iv_return = ALT_DIGITS; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + case 'M': + if (memEQ(name, "T_FMT_AMPM", 10)) { + /* ^ */ + #ifdef T_FMT_AMPM + *iv_return = T_FMT_AMPM; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + } + break; + case 11: + if (memEQ(name, "ERA_D_T_FMT", 11)) { + #ifdef ERA_D_T_FMT + *iv_return = ERA_D_T_FMT; + return PERL_constant_ISIV; + #else + return PERL_constant_NOTDEF; + #endif + } + break; + } + return PERL_constant_NOTFOUND; + } + + MODULE = I18N::Langinfo PACKAGE = I18N::Langinfo + + PROTOTYPES: ENABLE + + void + constant(sv) + PREINIT: + #ifdef dXSTARG + dXSTARG; /* Faster if we have it. */ + #else + dTARGET; + #endif + STRLEN len; + int type; + IV iv; + /* NV nv; Uncomment this if you need to return NVs */ + /* const char *pv; Uncomment this if you need to return PVs */ + INPUT: + SV * sv; + const char * s = SvPV(sv, len); + PPCODE: + /* Change this to constant(aTHX_ s, len, &iv, &nv); + if you need to return both NVs and IVs */ + type = constant(aTHX_ s, len, &iv); + /* Return 1 or 2 items. First is error message, or undef if no error. + Second, if present, is found value */ + switch (type) { + case PERL_constant_NOTFOUND: + sv = sv_2mortal(newSVpvf("%s is not a valid I18N::Langinfo macro", s)); + PUSHs(sv); + break; + case PERL_constant_NOTDEF: + sv = sv_2mortal(newSVpvf( + "Your vendor has not defined I18N::Langinfo macro %s, used", s)); + PUSHs(sv); + break; + case PERL_constant_ISIV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHi(iv); + break; + /* Uncomment this if you need to return NOs + case PERL_constant_ISNO: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_no); + break; */ + /* Uncomment this if you need to return NVs + case PERL_constant_ISNV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHn(nv); + break; */ + /* Uncomment this if you need to return PVs + case PERL_constant_ISPV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, strlen(pv)); + break; */ + /* Uncomment this if you need to return PVNs + case PERL_constant_ISPVN: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, iv); + break; */ + /* Uncomment this if you need to return SVs + case PERL_constant_ISSV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(sv); + break; */ + /* Uncomment this if you need to return UNDEFs + case PERL_constant_ISUNDEF: + break; */ + /* Uncomment this if you need to return UVs + case PERL_constant_ISUV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHu((UV)iv); + break; */ + /* Uncomment this if you need to return YESs + case PERL_constant_ISYES: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_yes); + break; */ + default: + sv = sv_2mortal(newSVpvf( + "Unexpected return type %d while processing I18N::Langinfo macro %s, used", + type, s)); + PUSHs(sv); + } + + SV* + langinfo(code) + int code + CODE: + #ifdef HAS_NL_LANGINFO + char *s = nl_langinfo(code); + RETVAL = newSVpvn(s, strlen(s)); + #else + croak("nl_langinfo() not implemented on this architecture"); + #endif + OUTPUT: + RETVAL diff -c /dev/null 'perl-5.7.2/ext/I18N/Langinfo/Makefile.PL' Index: ./ext/I18N/Langinfo/Makefile.PL *** ./ext/I18N/Langinfo/Makefile.PL Thu Jan 1 02:00:00 1970 --- ./ext/I18N/Langinfo/Makefile.PL Mon Jul 9 17:10:03 2001 *************** *** 0 **** --- 1,17 ---- + use ExtUtils::MakeMaker; + # See lib/ExtUtils/MakeMaker.pm for details of how to influence + # the contents of the Makefile that is written. + WriteMakefile( + 'NAME' => 'I18N::Langinfo', + 'VERSION_FROM' => 'Langinfo.pm', # finds $VERSION + 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1 + ($] >= 5.005 ? ## Add these new keywords supported since 5.005 + (ABSTRACT_FROM => 'Langinfo.pm', # retrieve abstract from module + AUTHOR => 'Jarkko Hietaniemi ') : ()), + 'LIBS' => [''], # e.g., '-lm' + 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' + # Insert -I. if you add *.h files later: + 'INC' => '', # e.g., '-I/usr/include/other' + # Un-comment this if you add C files to link with later: + # 'OBJECT' => '$(O_FILES)', # link all the C files too + ); diff -c 'perl-5.7.1/ext/IO/IO.xs' 'perl-5.7.2/ext/IO/IO.xs' Index: ./ext/IO/IO.xs *** ./ext/IO/IO.xs Sun Apr 8 21:12:20 2001 --- ./ext/IO/IO.xs Mon Jul 9 17:10:03 2001 *************** *** 361,393 **** RETVAL void ! setbuf(handle, buf) OutputStream handle - char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), BUFSIZ) : 0; CODE: if (handle) #ifdef PERLIO_IS_STDIO setbuf(handle, buf); #else not_here("IO::Handle::setbuf"); #endif SysRet ! setvbuf(handle, buf, type, size) ! OutputStream handle ! char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0; ! int type ! int size CODE: #if defined(PERLIO_IS_STDIO) && defined(_IOFBF) && defined(HAS_SETVBUF) if (!handle) /* Try input stream. */ handle = IoIFP(sv_2io(ST(0))); ! if (handle) RETVAL = setvbuf(handle, buf, type, size); else { RETVAL = -1; errno = EINVAL; } #else RETVAL = (SysRet) not_here("IO::Handle::setvbuf"); #endif --- 361,407 ---- RETVAL void ! setbuf(handle, ...) OutputStream handle CODE: if (handle) #ifdef PERLIO_IS_STDIO + { + char *buf = items == 2 && SvPOK(ST(1)) ? + sv_grow(ST(1), BUFSIZ) : 0; setbuf(handle, buf); + } #else not_here("IO::Handle::setbuf"); #endif SysRet ! setvbuf(...) CODE: + if (items != 4) + Perl_croak(aTHX_ "Usage: IO::Handle::setvbuf(handle, buf, type, size)"); #if defined(PERLIO_IS_STDIO) && defined(_IOFBF) && defined(HAS_SETVBUF) + { + OutputStream handle = 0; + char * buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0; + int type; + int size; + + if (items == 4) { + handle = IoOFP(sv_2io(ST(0))); + buf = SvPOK(ST(1)) ? sv_grow(ST(1), SvIV(ST(3))) : 0; + type = (int)SvIV(ST(2)); + size = (int)SvIV(ST(3)); + } if (!handle) /* Try input stream. */ handle = IoIFP(sv_2io(ST(0))); ! if (items == 4 && handle) RETVAL = setvbuf(handle, buf, type, size); else { RETVAL = -1; errno = EINVAL; } + } #else RETVAL = (SysRet) not_here("IO::Handle::setvbuf"); #endif *************** *** 430,436 **** { int flag = 0; # ifdef SIOCATMARK ! if (ioctl(fd, SIOCATMARK, &flag) != 0) XSRETURN_UNDEF; # else not_here("IO::Socket::atmark"); --- 444,454 ---- { int flag = 0; # ifdef SIOCATMARK ! #ifdef NETWARE ! if (ioctl(fd, SIOCATMARK, (void*)&flag) != 0) ! #else ! if (ioctl(fd, SIOCATMARK, &flag) != 0) ! #endif XSRETURN_UNDEF; # else not_here("IO::Socket::atmark"); diff -c 'perl-5.7.1/ext/IO/lib/IO/Dir.pm' 'perl-5.7.2/ext/IO/lib/IO/Dir.pm' Index: ./ext/IO/lib/IO/Dir.pm *** ./ext/IO/lib/IO/Dir.pm Tue Mar 6 04:04:51 2001 --- ./ext/IO/lib/IO/Dir.pm Mon Jul 9 17:10:03 2001 *************** *** 6,12 **** package IO::Dir; ! use 5.003_26; use strict; use Carp; --- 6,12 ---- package IO::Dir; ! use 5.6.0; use strict; use Carp; *************** *** 16,24 **** our(@ISA, $VERSION, @EXPORT_OK); use Tie::Hash; use File::stat; @ISA = qw(Tie::Hash Exporter); ! $VERSION = "1.03"; @EXPORT_OK = qw(DIR_UNLINK); sub DIR_UNLINK () { 1 } --- 16,25 ---- our(@ISA, $VERSION, @EXPORT_OK); use Tie::Hash; use File::stat; + use File::Spec; @ISA = qw(Tie::Hash Exporter); ! $VERSION = "1.03_00"; @EXPORT_OK = qw(DIR_UNLINK); sub DIR_UNLINK () { 1 } *************** *** 44,49 **** --- 45,53 ---- my ($dh, $dirname) = @_; return undef unless opendir($dh, $dirname); + # a dir name should always have a ":" in it; assume dirname is + # in current directory + $dirname = ':' . $dirname if ( ($^O eq 'MacOS') && ($dirname !~ /:/) ); ${*$dh}{io_dir_path} = $dirname; 1; } *************** *** 103,120 **** sub EXISTS { my($dh,$key) = @_; ! -e ${*$dh}{io_dir_path} . "/" . $key; } sub FETCH { my($dh,$key) = @_; ! &lstat(${*$dh}{io_dir_path} . "/" . $key); } sub STORE { my($dh,$key,$data) = @_; my($atime,$mtime) = ref($data) ? @$data : ($data,$data); ! my $file = ${*$dh}{io_dir_path} . "/" . $key; unless(-e $file) { my $io = IO::File->new($file,O_CREAT | O_RDWR); $io->close if $io; --- 107,124 ---- sub EXISTS { my($dh,$key) = @_; ! -e File::Spec->catfile(${*$dh}{io_dir_path}, $key); } sub FETCH { my($dh,$key) = @_; ! &lstat(File::Spec->catfile(${*$dh}{io_dir_path}, $key)); } sub STORE { my($dh,$key,$data) = @_; my($atime,$mtime) = ref($data) ? @$data : ($data,$data); ! my $file = File::Spec->catfile(${*$dh}{io_dir_path}, $key); unless(-e $file) { my $io = IO::File->new($file,O_CREAT | O_RDWR); $io->close if $io; *************** *** 125,131 **** sub DELETE { my($dh,$key) = @_; # Only unlink if unlink-ing is enabled ! my $file = ${*$dh}{io_dir_path} . "/" . $key; return 0 unless ${*$dh}{io_dir_unlink}; --- 129,135 ---- sub DELETE { my($dh,$key) = @_; # Only unlink if unlink-ing is enabled ! my $file = File::Spec->catfile(${*$dh}{io_dir_path}, $key); return 0 unless ${*$dh}{io_dir_unlink}; diff -c 'perl-5.7.1/ext/IO/lib/IO/Handle.pm' 'perl-5.7.2/ext/IO/lib/IO/Handle.pm' Index: ./ext/IO/lib/IO/Handle.pm *** ./ext/IO/lib/IO/Handle.pm Fri Mar 16 04:54:47 2001 --- ./ext/IO/lib/IO/Handle.pm Mon Jul 9 17:10:03 2001 *************** *** 258,264 **** require Exporter; @ISA = qw(Exporter); ! $VERSION = "1.21"; @EXPORT_OK = qw( autoflush --- 258,264 ---- require Exporter; @ISA = qw(Exporter); ! $VERSION = "1.21_00"; @EXPORT_OK = qw( autoflush diff -c 'perl-5.7.1/ext/IO/lib/IO/Seekable.pm' 'perl-5.7.2/ext/IO/lib/IO/Seekable.pm' Index: ./ext/IO/lib/IO/Seekable.pm *** ./ext/IO/lib/IO/Seekable.pm Fri Mar 16 04:54:47 2001 --- ./ext/IO/lib/IO/Seekable.pm Mon Jul 9 17:10:03 2001 *************** *** 41,47 **** =over 4 ! =item $io->setpos ( POS, WHENCE ) Seek the IO::File to position POS, relative to WHENCE: --- 41,47 ---- =over 4 ! =item $io->seek ( POS, WHENCE ) Seek the IO::File to position POS, relative to WHENCE: *************** *** 55,61 **** POS is an offset from the current position. (Seek relative to current) ! =item WHENCE=1 (SEEK_END) POS is an offset from the end of the file. (Seek relative to end) --- 55,61 ---- POS is an offset from the current position. (Seek relative to current) ! =item WHENCE=2 (SEEK_END) POS is an offset from the end of the file. (Seek relative to end) *************** *** 107,113 **** @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END); @ISA = qw(Exporter); ! $VERSION = "1.08"; sub seek { @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)'; --- 107,113 ---- @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END); @ISA = qw(Exporter); ! $VERSION = "1.08_00"; sub seek { @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)'; diff -c 'perl-5.7.1/ext/IO/lib/IO/Select.pm' 'perl-5.7.2/ext/IO/lib/IO/Select.pm' Index: ./ext/IO/lib/IO/Select.pm *** ./ext/IO/lib/IO/Select.pm Tue Mar 6 04:04:52 2001 --- ./ext/IO/lib/IO/Select.pm Mon Jul 9 17:10:03 2001 *************** *** 11,17 **** use vars qw($VERSION @ISA); require Exporter; ! $VERSION = "1.14"; @ISA = qw(Exporter); # This is only so we can do version checking --- 11,17 ---- use vars qw($VERSION @ISA); require Exporter; ! $VERSION = "1.15"; @ISA = qw(Exporter); # This is only so we can do version checking diff -c 'perl-5.7.1/ext/IO/lib/IO/Socket.pm' 'perl-5.7.2/ext/IO/lib/IO/Socket.pm' Index: ./ext/IO/lib/IO/Socket.pm *** ./ext/IO/lib/IO/Socket.pm Fri Apr 6 02:05:46 2001 --- ./ext/IO/lib/IO/Socket.pm Mon Jul 9 17:10:03 2001 *************** *** 112,118 **** $blocking = $sock->blocking(0) if $timeout; if (!connect($sock, $addr)) { ! if ($timeout && $!{EINPROGRESS}) { require IO::Select; my $sel = new IO::Select $sock; --- 112,118 ---- $blocking = $sock->blocking(0) if $timeout; if (!connect($sock, $addr)) { ! if (defined $timeout && $!{EINPROGRESS}) { require IO::Select; my $sel = new IO::Select $sock; *************** *** 168,174 **** my $new = $pkg->new(Timeout => $timeout); my $peer = undef; ! if($timeout) { require IO::Select; my $sel = new IO::Select $sock; --- 168,174 ---- my $new = $pkg->new(Timeout => $timeout); my $peer = undef; ! if(defined $timeout) { require IO::Select; my $sel = new IO::Select $sock; *************** *** 369,381 **** =item accept([PKG]) ! perform the system call C on the socket and return a new object. The ! new object will be created in the same class as the listen socket, unless ! C is specified. This object can be used to communicate with the client ! that was trying to connect. In a scalar context the new socket is returned, ! or undef upon failure. In a list context a two-element array is returned ! containing the new socket and the peer address; the list will ! be empty upon failure. =item socketpair(DOMAIN, TYPE, PROTOCOL) --- 369,389 ---- =item accept([PKG]) ! perform the system call C on the socket and return a new ! object. The new object will be created in the same class as the listen ! socket, unless C is specified. This object can be used to ! communicate with the client that was trying to connect. ! ! In a scalar context the new socket is returned, or undef upon ! failure. In a list context a two-element array is returned containing ! the new socket and the peer address; the list will be empty upon ! failure. ! ! The timeout in the [PKG] can be specified as zero to effect a "poll", ! but you shouldn't do that because a new IO::Select object will be ! created behind the scenes just do to the single poll. This is ! horrendously inefficient. Use rather true select() with a zero ! timeout on the handle, or non-blocking IO. =item socketpair(DOMAIN, TYPE, PROTOCOL) diff -c 'perl-5.7.1/ext/IO/lib/IO/Socket/INET.pm' 'perl-5.7.2/ext/IO/lib/IO/Socket/INET.pm' Index: ./ext/IO/lib/IO/Socket/INET.pm *** ./ext/IO/lib/IO/Socket/INET.pm Tue Mar 6 04:04:52 2001 --- ./ext/IO/lib/IO/Socket/INET.pm Mon Jul 9 17:10:03 2001 *************** *** 15,21 **** use Errno; @ISA = qw(IO::Socket); ! $VERSION = "1.25"; my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1; --- 15,21 ---- use Errno; @ISA = qw(IO::Socket); ! $VERSION = "1.26"; my $EINVAL = exists(&Errno::EINVAL) ? Errno::EINVAL() : 1; *************** *** 63,69 **** @serv = getservbyname($port, $proto[0] || "") if ($port =~ m,\D,); ! $port = $pnum || $serv[2] || $defport || undef; unless (defined $port) { $@ = "Bad service '$origport'"; return; --- 63,69 ---- @serv = getservbyname($port, $proto[0] || "") if ($port =~ m,\D,); ! $port = $serv[2] || $defport || $pnum; unless (defined $port) { $@ = "Bad service '$origport'"; return; *************** *** 84,90 **** my $err = shift; { local($!); ! $@ = join("",ref($sock),": ",@_); close($sock) if(defined fileno($sock)); } --- 84,91 ---- my $err = shift; { local($!); ! my $title = ref($sock).": "; ! $@ = join("", $_[0] =~ /^$title/ ? "" : $title, @_); close($sock) if(defined fileno($sock)); } *************** *** 189,200 **** # my $timeout = ${*$sock}{'io_socket_timeout'}; # my $before = time() if $timeout; if ($sock->connect(pack_sockaddr_in($rport, $raddr))) { # ${*$sock}{'io_socket_timeout'} = $timeout; return $sock; } ! return _error($sock, $!, "Timeout") unless @raddr; # if ($timeout) { --- 190,202 ---- # my $timeout = ${*$sock}{'io_socket_timeout'}; # my $before = time() if $timeout; + undef $@; if ($sock->connect(pack_sockaddr_in($rport, $raddr))) { # ${*$sock}{'io_socket_timeout'} = $timeout; return $sock; } ! return _error($sock, $!, $@ || "Timeout") unless @raddr; # if ($timeout) { diff -c 'perl-5.7.1/ext/IO/lib/IO/Socket/UNIX.pm' 'perl-5.7.2/ext/IO/lib/IO/Socket/UNIX.pm' Index: ./ext/IO/lib/IO/Socket/UNIX.pm *** ./ext/IO/lib/IO/Socket/UNIX.pm Fri Mar 16 04:54:47 2001 --- ./ext/IO/lib/IO/Socket/UNIX.pm Mon Jul 9 17:10:04 2001 *************** *** 13,19 **** use Carp; @ISA = qw(IO::Socket); ! $VERSION = "1.20"; IO::Socket::UNIX->register_domain( AF_UNIX ); --- 13,19 ---- use Carp; @ISA = qw(IO::Socket); ! $VERSION = "1.20_00"; IO::Socket::UNIX->register_domain( AF_UNIX ); diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_const.t' Index: ./ext/IO/lib/IO/t/io_const.t *** ./ext/IO/lib/IO/t/io_const.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_const.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,33 ---- + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') { + print "1..0\n"; + exit 0; + } + } + } + + use IO::Handle; + + print "1..6\n"; + my $i = 1; + foreach (qw(SEEK_SET SEEK_CUR SEEK_END _IOFBF _IOLBF _IONBF)) { + my $d1 = defined(&{"IO::Handle::" . $_}) ? 1 : 0; + my $v1 = $d1 ? &{"IO::Handle::" . $_}() : undef; + my $v2 = IO::Handle::constant($_); + my $d2 = defined($v2); + + print "not " + if($d1 != $d2 || ($d1 && ($v1 != $v2))); + print "ok ",$i++,"\n"; + } diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_dir.t' Index: ./ext/IO/lib/IO/t/io_dir.t *** ./ext/IO/lib/IO/t/io_dir.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_dir.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,68 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + require Config; import Config; + if ($] < 5.00326 || not $Config{'d_readdir'}) { + print "1..0\n"; + exit 0; + } + } + + select(STDERR); $| = 1; + select(STDOUT); $| = 1; + + use IO::Dir qw(DIR_UNLINK); + + print "1..10\n"; + + my $DIR = $^O eq 'MacOS' ? ":" : "."; + + $dot = new IO::Dir $DIR; + print defined($dot) ? "ok" : "not ok", " 1\n"; + + @a = sort <*>; + do { $first = $dot->read } while defined($first) && $first =~ /^\./; + print +(grep { $_ eq $first } @a) ? "ok" : "not ok", " 2\n"; + + @b = sort($first, (grep {/^[^.]/} $dot->read)); + print +(join("\0", @a) eq join("\0", @b)) ? "ok" : "not ok", " 3\n"; + + $dot->rewind; + @c = sort grep {/^[^.]/} $dot->read; + print +(join("\0", @b) eq join("\0", @c)) ? "ok" : "not ok", " 4\n"; + + $dot->close; + $dot->rewind; + print defined($dot->read) ? "not ok" : "ok", " 5\n"; + + open(FH,'>X') || die "Can't create x"; + print FH "X"; + close(FH); + + tie %dir, IO::Dir, $DIR; + my @files = keys %dir; + + # I hope we do not have an empty dir :-) + print @files ? "ok" : "not ok", " 6\n"; + + my $stat = $dir{'X'}; + print defined($stat) && UNIVERSAL::isa($stat,'File::stat') && $stat->size == 1 + ? "ok" : "not ok", " 7\n"; + + delete $dir{'X'}; + + print -f 'X' ? "ok" : "not ok", " 8\n"; + + tie %dirx, IO::Dir, $DIR, DIR_UNLINK; + + my $statx = $dirx{'X'}; + print defined($statx) && UNIVERSAL::isa($statx,'File::stat') && $statx->size == 1 + ? "ok" : "not ok", " 9\n"; + + delete $dirx{'X'}; + + print -f 'X' ? "not ok" : "ok", " 10\n"; diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_dup.t' Index: ./ext/IO/lib/IO/t/io_dup.t *** ./ext/IO/lib/IO/t/io_dup.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_dup.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,61 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') { + print "1..0\n"; + exit 0; + } + } + } + + use IO::Handle; + use IO::File; + + select(STDERR); $| = 1; + select(STDOUT); $| = 1; + + print "1..6\n"; + + print "ok 1\n"; + + $dupout = IO::Handle->new->fdopen( \*STDOUT ,"w"); + $duperr = IO::Handle->new->fdopen( \*STDERR ,"w"); + + $stdout = \*STDOUT; bless $stdout, "IO::File"; # "IO::Handle"; + $stderr = \*STDERR; bless $stderr, "IO::Handle"; + + $stdout->open( "Io.dup","w") || die "Can't open stdout"; + $stderr->fdopen($stdout,"w"); + + print $stdout "ok 2\n"; + print $stderr "ok 3\n"; + if ($^O eq 'MSWin32' || $^O eq 'NetWare') { + print `echo ok 4`; + print `echo ok 5 1>&2`; # does this *really* work? + } + else { + system 'echo ok 4'; + system 'echo ok 5 1>&2'; + } + + $stderr->close; + $stdout->close; + + $stdout->fdopen($dupout,"w"); + $stderr->fdopen($duperr,"w"); + + if ($^O eq 'MSWin32' || $^O eq 'NetWare') { print `type Io.dup` } + else { system 'cat Io.dup' } + unlink 'Io.dup'; + + print STDOUT "ok 6\n"; diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_linenum.t' Index: ./ext/IO/lib/IO/t/io_linenum.t *** ./ext/IO/lib/IO/t/io_linenum.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_linenum.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,80 ---- + #!./perl + + # test added 29th April 1999 by Paul Johnson (pjcj@transeda.com) + # updated 28th May 1999 by Paul Johnson + + my $File; + + BEGIN + { + $File = __FILE__; + if (-d 't') + { + chdir 't'; + $File =~ s/^t\W+//; # Remove first directory + } + @INC = '../lib'; + require strict; import strict; + } + + use Test; + + BEGIN { plan tests => 12 } + + use IO::File; + + sub lineno + { + my ($f) = @_; + my $l; + $l .= "$. "; + $l .= $f->input_line_number; + $l .= " $."; # check $. before and after input_line_number + $l; + } + + my $t; + + open (F, $File) or die $!; + my $io = IO::File->new($File) or die $!; + + for (1 .. 10); + ok(lineno($io), "10 0 10"); + + $io->getline for (1 .. 5); + ok(lineno($io), "5 5 5"); + + ; + ok(lineno($io), "11 5 11"); + + $io->getline; + ok(lineno($io), "6 6 6"); + + $t = tell F; # tell F; provokes a warning + ok(lineno($io), "11 6 11"); + + ; + ok(lineno($io), "12 6 12"); + + select F; + ok(lineno($io), "12 6 12"); + + for (1 .. 10); + ok(lineno($io), "22 6 22"); + + $io->getline for (1 .. 5); + ok(lineno($io), "11 11 11"); + + $t = tell F; + # We used to have problems here before local $. worked. + # input_line_number() used to use select and tell. When we did the + # same, that mechanism broke. It should work now. + ok(lineno($io), "22 11 22"); + + { + local $.; + $io->getline for (1 .. 5); + ok(lineno($io), "16 16 16"); + } + + ok(lineno($io), "22 16 22"); diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_multihomed.t' Index: ./ext/IO/lib/IO/t/io_multihomed.t *** ./ext/IO/lib/IO/t/io_multihomed.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_multihomed.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,128 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + my $reason; + if (! $Config{'d_fork'}) { + $reason = 'no fork'; + } + elsif ($Config{'extensions'} !~ /\bSocket\b/) { + $reason = 'Socket extension unavailable'; + } + elsif ($Config{'extensions'} !~ /\bIO\b/) { + $reason = 'IO extension unavailable'; + } + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } + } + + $| = 1; + + print "1..8\n"; + + eval { + $SIG{ALRM} = sub { die; }; + alarm 60; + }; + + package Multi; + require IO::Socket::INET; + @ISA=qw(IO::Socket::INET); + + use Socket qw(inet_aton inet_ntoa unpack_sockaddr_in); + + sub _get_addr + { + my($sock,$addr_str, $multi) = @_; + #print "_get_addr($sock, $addr_str, $multi)\n"; + + print "not " unless $multi; + print "ok 2\n"; + + ( + # private IP-addresses which I hope does not work anywhere :-) + inet_aton("10.250.230.10"), + inet_aton("10.250.230.12"), + inet_aton("127.0.0.1") # loopback + ) + } + + sub connect + { + my $self = shift; + if (@_ == 1) { + my($port, $addr) = unpack_sockaddr_in($_[0]); + $addr = inet_ntoa($addr); + #print "connect($self, $port, $addr)\n"; + if($addr eq "10.250.230.10") { + print "ok 3\n"; + return 0; + } + if($addr eq "10.250.230.12") { + print "ok 4\n"; + return 0; + } + } + $self->SUPER::connect(@_); + } + + + + package main; + + use IO::Socket; + + $listen = IO::Socket::INET->new(Listen => 2, + Proto => 'tcp', + Timeout => 5, + ) or die "$!"; + + print "ok 1\n"; + + $port = $listen->sockport; + + if($pid = fork()) { + + $sock = $listen->accept() or die "$!"; + print "ok 5\n"; + + print $sock->getline(); + print $sock "ok 7\n"; + + waitpid($pid,0); + + $sock->close; + + print "ok 8\n"; + + } elsif(defined $pid) { + + $sock = Multi->new(PeerPort => $port, + Proto => 'tcp', + PeerAddr => 'localhost', + MultiHomed => 1, + Timeout => 1, + ) or die "$!"; + + print $sock "ok 6\n"; + sleep(1); # race condition + print $sock->getline(); + + $sock->close; + + exit; + } else { + die; + } diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_pipe.t' Index: ./ext/IO/lib/IO/t/io_pipe.t *** ./ext/IO/lib/IO/t/io_pipe.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_pipe.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,123 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + my $reason; + if (! $Config{'d_fork'}) { + $reason = 'no fork'; + } + elsif ($Config{'extensions'} !~ /\bIO\b/) { + $reason = 'IO extension unavailable'; + } + undef $reason if $^O eq 'VMS'; + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } + } + + use IO::Pipe; + + my $perl = './perl'; + + $| = 1; + print "1..10\n"; + + $pipe = new IO::Pipe->reader($perl, '-e', 'print "not ok 1\n"'); + while (<$pipe>) { + s/^not //; + print; + } + $pipe->close or print "# \$!=$!\nnot "; + print "ok 2\n"; + + $cmd = 'BEGIN{$SIG{ALRM} = sub {print "not ok 4\n"; exit}; alarm 10} s/not //'; + $pipe = new IO::Pipe->writer($perl, '-pe', $cmd); + print $pipe "not ok 3\n" ; + $pipe->close or print "# \$!=$!\nnot "; + print "ok 4\n"; + + # Check if can fork with dynamic extensions (bug in CRT): + if ($^O eq 'os2' and + system "$^X -I../lib -MOpcode -e 'defined fork or die' > /dev/null 2>&1") { + print "ok $_ # skipped: broken fork\n" for 5..10; + exit 0; + } + + $pipe = new IO::Pipe; + + $pid = fork(); + + if($pid) + { + $pipe->writer; + print $pipe "Xk 5\n"; + print $pipe "oY 6\n"; + $pipe->close; + wait; + } + elsif(defined $pid) + { + $pipe->reader; + $stdin = bless \*STDIN, "IO::Handle"; + $stdin->fdopen($pipe,"r"); + exec 'tr', 'YX', 'ko'; + } + else + { + die "# error = $!"; + } + + $pipe = new IO::Pipe; + $pid = fork(); + + if($pid) + { + $pipe->reader; + while(<$pipe>) { + s/^not //; + print; + } + $pipe->close; + wait; + } + elsif(defined $pid) + { + $pipe->writer; + + $stdout = bless \*STDOUT, "IO::Handle"; + $stdout->fdopen($pipe,"w"); + print STDOUT "not ok 7\n"; + exec 'echo', 'not ok 8'; + } + else + { + die; + } + + $pipe = new IO::Pipe; + $pipe->writer; + + $SIG{'PIPE'} = 'broken_pipe'; + + sub broken_pipe { + print "ok 9\n"; + } + + print $pipe "not ok 9\n"; + $pipe->close; + + sleep 1; + + print "ok 10\n"; + diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_poll.t' Index: ./ext/IO/lib/IO/t/io_poll.t *** ./ext/IO/lib/IO/t/io_poll.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_poll.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,82 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + if ($^O eq 'mpeix') { + print "1..0 # Skip: broken on MPE/iX\n"; + exit 0; + } + + select(STDERR); $| = 1; + select(STDOUT); $| = 1; + + print "1..9\n"; + + use IO::Handle; + use IO::Poll qw(/POLL/); + + my $poll = new IO::Poll; + + my $stdout = \*STDOUT; + my $dupout = IO::Handle->new_from_fd(fileno($stdout),"w"); + + $poll->mask($stdout => POLLOUT); + + print "not " + unless $poll->mask($stdout) == POLLOUT; + print "ok 1\n"; + + $poll->mask($dupout => POLLPRI); + + print "not " + unless $poll->mask($dupout) == POLLPRI; + print "ok 2\n"; + + $poll->poll(0.1); + + if ($^O eq 'MSWin32' || $^O eq 'NetWare') { + print "ok 3 # skipped, doesn't work on non-socket fds\n"; + print "ok 4 # skipped, doesn't work on non-socket fds\n"; + } + else { + print "not " + unless $poll->events($stdout) == POLLOUT; + print "ok 3\n"; + + print "not " + if $poll->events($dupout); + print "ok 4\n"; + } + + my @h = $poll->handles; + print "not " + unless @h == 2; + print "ok 5\n"; + + $poll->remove($stdout); + + @h = $poll->handles; + + print "not " + unless @h == 1; + print "ok 6\n"; + + print "not " + if $poll->mask($stdout); + print "ok 7\n"; + + $poll->poll(0.1); + + print "not " + if $poll->events($stdout); + print "ok 8\n"; + + $poll->remove($dupout); + print "not " + if $poll->handles; + print "ok 9\n"; diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_sel.t' Index: ./ext/IO/lib/IO/t/io_sel.t *** ./ext/IO/lib/IO/t/io_sel.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_sel.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,132 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + select(STDERR); $| = 1; + select(STDOUT); $| = 1; + + print "1..23\n"; + + use IO::Select 1.09; + + my $sel = new IO::Select(\*STDIN); + $sel->add(4, 5) == 2 or print "not "; + print "ok 1\n"; + + $sel->add([\*STDOUT, 'foo']) == 1 or print "not "; + print "ok 2\n"; + + @handles = $sel->handles; + print "not " unless $sel->count == 4 && @handles == 4; + print "ok 3\n"; + #print $sel->as_string, "\n"; + + $sel->remove(\*STDIN) == 1 or print "not "; + print "ok 4\n", + ; + $sel->remove(\*STDIN, 5, 6) == 1 # two of there are not present + or print "not "; + print "ok 5\n"; + + print "not " unless $sel->count == 2; + print "ok 6\n"; + #print $sel->as_string, "\n"; + + $sel->remove(1, 4); + print "not " unless $sel->count == 0 && !defined($sel->bits); + print "ok 7\n"; + + $sel = new IO::Select; + print "not " unless $sel->count == 0 && !defined($sel->bits); + print "ok 8\n"; + + $sel->remove([\*STDOUT, 5]); + print "not " unless $sel->count == 0 && !defined($sel->bits); + print "ok 9\n"; + + if ($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'dos') { # 4-arg select is only valid on sockets + print "# skipping tests 10..15\n"; + for (10 .. 15) { print "ok $_\n" } + $sel->add(\*STDOUT); # update + goto POST_SOCKET; + } + + @a = $sel->can_read(); # should return imediately + print "not " unless @a == 0; + print "ok 10\n"; + + # we assume that we can write to STDOUT :-) + $sel->add([\*STDOUT, "ok 12\n"]); + + @a = $sel->can_write; + print "not " unless @a == 1; + print "ok 11\n"; + + my($fd, $msg) = @{shift @a}; + print $fd $msg; + + $sel->add(\*STDOUT); # update + + @a = IO::Select::select(undef, $sel, undef, 1); + print "not " unless @a == 3; + print "ok 13\n"; + + ($r, $w, $e) = @a; + + print "not " unless @$r == 0 && @$w == 1 && @$e == 0; + print "ok 14\n"; + + $fd = $w->[0]; + print $fd "ok 15\n"; + + POST_SOCKET: + # Test new exists() method + $sel->exists(\*STDIN) and print "not "; + print "ok 16\n"; + + ($sel->exists(0) || $sel->exists([\*STDERR])) and print "not "; + print "ok 17\n"; + + $fd = $sel->exists(\*STDOUT); + if ($fd) { + print $fd "ok 18\n"; + } else { + print "not ok 18\n"; + } + + $fd = $sel->exists([1, 'foo']); + if ($fd) { + print $fd "ok 19\n"; + } else { + print "not ok 19\n"; + } + + # Try self clearing + $sel->add(5,6,7,8,9,10); + print "not " unless $sel->count == 7; + print "ok 20\n"; + + $sel->remove($sel->handles); + print "not " unless $sel->count == 0 && !defined($sel->bits); + print "ok 21\n"; + + # check warnings + $SIG{__WARN__} = sub { + ++ $w + if $_[0] =~ /^Call to depreciated method 'has_error', use 'has_exception'/ + } ; + $w = 0 ; + IO::Select::has_error(); + print "not " unless $w == 0 ; + $w = 0 ; + print "ok 22\n" ; + use warnings 'IO::Select' ; + IO::Select::has_error(); + print "not " unless $w == 1 ; + $w = 0 ; + print "ok 23\n" ; diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_sock.t' Index: ./ext/IO/lib/IO/t/io_sock.t *** ./ext/IO/lib/IO/t/io_sock.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_sock.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,348 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if (-d "lib" && -f "TEST") { + my $reason; + if (! $Config{'d_fork'}) { + $reason = 'no fork'; + } + elsif ($Config{'extensions'} !~ /\bSocket\b/) { + $reason = 'Socket extension unavailable'; + } + elsif ($Config{'extensions'} !~ /\bIO\b/) { + $reason = 'IO extension unavailable'; + } + undef $reason if $^O eq 'VMS' and $Config{d_socket}; + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } + } + + $| = 1; + print "1..20\n"; + + eval { + $SIG{ALRM} = sub { die; }; + alarm 120; + }; + + use IO::Socket; + + $listen = IO::Socket::INET->new(Listen => 2, + Proto => 'tcp', + # some systems seem to need as much as 10, + # so be generous with the timeout + Timeout => 15, + ) or die "$!"; + + print "ok 1\n"; + + # Check if can fork with dynamic extensions (bug in CRT): + if ($^O eq 'os2' and + system "$^X -I../lib -MOpcode -e 'defined fork or die' > /dev/null 2>&1") { + print "ok $_ # skipped: broken fork\n" for 2..5; + exit 0; + } + + $port = $listen->sockport; + + if($pid = fork()) { + + $sock = $listen->accept() or die "accept failed: $!"; + print "ok 2\n"; + + $sock->autoflush(1); + print $sock->getline(); + + print $sock "ok 4\n"; + + $sock->close; + + waitpid($pid,0); + + print "ok 5\n"; + + } elsif(defined $pid) { + + $sock = IO::Socket::INET->new(PeerPort => $port, + Proto => 'tcp', + PeerAddr => 'localhost' + ) + || IO::Socket::INET->new(PeerPort => $port, + Proto => 'tcp', + PeerAddr => '127.0.0.1' + ) + or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)"; + + $sock->autoflush(1); + + print $sock "ok 3\n"; + + print $sock->getline(); + + $sock->close; + + exit; + } else { + die; + } + + # Test various other ways to create INET sockets that should + # also work. + $listen = IO::Socket::INET->new(Listen => '', Timeout => 15) or die "$!"; + $port = $listen->sockport; + + if($pid = fork()) { + SERVER_LOOP: + while (1) { + last SERVER_LOOP unless $sock = $listen->accept; + while (<$sock>) { + last SERVER_LOOP if /^quit/; + last if /^done/; + print; + } + $sock = undef; + } + $listen->close; + } elsif (defined $pid) { + # child, try various ways to connect + $sock = IO::Socket::INET->new("localhost:$port") + || IO::Socket::INET->new("127.0.0.1:$port"); + if ($sock) { + print "not " unless $sock->connected; + print "ok 6\n"; + $sock->print("ok 7\n"); + sleep(1); + print "ok 8\n"; + $sock->print("ok 9\n"); + $sock->print("done\n"); + $sock->close; + } + else { + print "# $@\n"; + print "not ok 6\n"; + print "not ok 7\n"; + print "not ok 8\n"; + print "not ok 9\n"; + } + + # some machines seem to suffer from a race condition here + sleep(2); + + $sock = IO::Socket::INET->new("127.0.0.1:$port"); + if ($sock) { + $sock->print("ok 10\n"); + $sock->print("done\n"); + $sock->close; + } + else { + print "# $@\n"; + print "not ok 10\n"; + } + + # some machines seem to suffer from a race condition here + sleep(1); + + $sock = IO::Socket->new(Domain => AF_INET, + PeerAddr => "localhost:$port") + || IO::Socket->new(Domain => AF_INET, + PeerAddr => "127.0.0.1:$port"); + if ($sock) { + $sock->print("ok 11\n"); + $sock->print("quit\n"); + } else { + print "not ok 11\n"; + } + $sock = undef; + sleep(1); + exit; + } else { + die; + } + + # Then test UDP sockets + $server = IO::Socket->new(Domain => AF_INET, + Proto => 'udp', + LocalAddr => 'localhost') + || IO::Socket->new(Domain => AF_INET, + Proto => 'udp', + LocalAddr => '127.0.0.1'); + $port = $server->sockport; + + if ($^O eq 'mpeix') { + print("ok 12 # skipped\n") + } else { + if ($pid = fork()) { + my $buf; + $server->recv($buf, 100); + print $buf; + } elsif (defined($pid)) { + #child + $sock = IO::Socket::INET->new(Proto => 'udp', + PeerAddr => "localhost:$port") + || IO::Socket::INET->new(Proto => 'udp', + PeerAddr => "127.0.0.1:$port"); + $sock->send("ok 12\n"); + sleep(1); + $sock->send("ok 12\n"); # send another one to be sure + exit; + } else { + die; + } + } + + print "not " unless $server->blocking; + print "ok 13\n"; + + if ( $^O eq 'qnx' ) { + # QNX library bug: Can set non-blocking on socket, but + # cannot return that status. + print "ok 14 # skipped\n"; + } else { + $server->blocking(0); + print "not " if $server->blocking; + print "ok 14\n"; + } + + ### TEST 15 + ### Set up some data to be transfered between the server and + ### the client. We'll use own source code ... + # + local @data; + if( !open( SRC, "< $0")) { + print "not ok 15 - $!"; + } else { + @data = ; + close( SRC); + } + print "ok 15\n"; + + ### TEST 16 + ### Start the server + # + my $listen = IO::Socket::INET->new( Listen => 2, Proto => 'tcp', Timeout => 15) || + print "not "; + print "ok 16\n"; + die if( !defined( $listen)); + my $serverport = $listen->sockport; + + my $server_pid = fork(); + if( $server_pid) { + + ### TEST 17 Client/Server establishment + # + print "ok 17\n"; + + ### TEST 18 + ### Get data from the server using a single stream + # + $sock = IO::Socket::INET->new("localhost:$serverport") + || IO::Socket::INET->new("127.0.0.1:$serverport"); + + if ($sock) { + $sock->print("send\n"); + + my @array = (); + while( <$sock>) { + push( @array, $_); + } + + $sock->print("done\n"); + $sock->close; + + print "not " if( @array != @data); + } else { + print "not "; + } + print "ok 18\n"; + + ### TEST 19 + ### Get data from the server using a stream, which is + ### interrupted by eof calls. + ### On perl-5.7.0@7673 this failed in a SOCKS environment, because eof + ### did an getc followed by an ungetc in order to check for the streams + ### end. getc(3) got replaced by the SOCKS funktion, which ended up in + ### a recv(2) call on the socket, while ungetc(3) put back a character + ### to an IO buffer, which never again was read. + # + if ($^O eq 'mpeix') { + print "ok 19 # skipped: broken on MPE/iX\n"; + } else { + $sock = IO::Socket::INET->new("localhost:$serverport") + || IO::Socket::INET->new("127.0.0.1:$serverport"); + + if ($sock) { + $sock->print("send\n"); + + my @array = (); + while( !eof( $sock ) ){ + while( <$sock>) { + push( @array, $_); + last; + } + } + + $sock->print("done\n"); + $sock->close; + + print "not " if( @array != @data); + } else { + print "not "; + } + print "ok 19\n"; + } + + ### TEST 20 + ### Stop the server + # + $sock = IO::Socket::INET->new("localhost:$serverport") + || IO::Socket::INET->new("127.0.0.1:$serverport"); + + if ($sock) { + $sock->print("done\n"); + $sock->close; + + print "not " if( 1 != kill 0, $server_pid); + } else { + print "not "; + } + print "ok 20\n"; + + } elsif( defined( $server_pid)) { + + ### Child + # + SERVER_LOOP: while (1) { + last SERVER_LOOP unless $sock = $listen->accept; + while (<$sock>) { + last SERVER_LOOP if /^quit/; + last if /^done/; + if( /^send/) { + print $sock @data; + last; + } + print; + } + $sock = undef; + } + $listen->close; + + } else { + + ### Fork failed + # + print "not ok 17\n"; + die; + } + diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_taint.t' Index: ./ext/IO/lib/IO/t/io_taint.t *** ./ext/IO/lib/IO/t/io_taint.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_taint.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,48 ---- + #!./perl -T + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') { + print "1..0\n"; + exit 0; + } + } + } + + END { unlink "./__taint__$$" } + + print "1..3\n"; + use IO::File; + $x = new IO::File "> ./__taint__$$" || die("Cannot open ./__taint__$$\n"); + print $x "$$\n"; + $x->close; + + $x = new IO::File "< ./__taint__$$" || die("Cannot open ./__taint__$$\n"); + chop($unsafe = <$x>); + eval { kill 0 * $unsafe }; + print "not " if ((($^O ne 'MSWin32') && ($^O ne 'NetWare')) and ($@ !~ /^Insecure/o)); + print "ok 1\n"; + $x->close; + + # We could have just done a seek on $x, but technically we haven't tested + # seek yet... + $x = new IO::File "< ./__taint__$$" || die("Cannot open ./__taint__$$\n"); + $x->untaint; + print "not " if ($?); + print "ok 2\n"; # Calling the method worked + chop($unsafe = <$x>); + eval { kill 0 * $unsafe }; + print "not " if ($@ =~ /^Insecure/o); + print "ok 3\n"; # No Insecure message from using the data + $x->close; + + exit 0; diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_tell.t' Index: ./ext/IO/lib/IO/t/io_tell.t *** ./ext/IO/lib/IO/t/io_tell.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_tell.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,64 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + $tell_file = "TEST"; + } + else { + $tell_file = "Makefile"; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') { + print "1..0\n"; + exit 0; + } + } + } + + print "1..13\n"; + + use IO::File; + + $tst = IO::File->new("$tell_file","r") || die("Can't open $tell_file"); + binmode $tst; # its a nop unless it matters. Was only if ($^O eq 'MSWin32' or $^O eq 'dos'); + if ($tst->eof) { print "not ok 1\n"; } else { print "ok 1\n"; } + + $firstline = <$tst>; + $secondpos = tell; + + $x = 0; + while (<$tst>) { + if (eof) {$x++;} + } + if ($x == 1) { print "ok 2\n"; } else { print "not ok 2\n"; } + + $lastpos = tell; + + unless (eof) { print "not ok 3\n"; } else { print "ok 3\n"; } + + if ($tst->seek(0,0)) { print "ok 4\n"; } else { print "not ok 4\n"; } + + if (eof) { print "not ok 5\n"; } else { print "ok 5\n"; } + + if ($firstline eq <$tst>) { print "ok 6\n"; } else { print "not ok 6\n"; } + + if ($secondpos == tell) { print "ok 7\n"; } else { print "not ok 7\n"; } + + if ($tst->seek(0,1)) { print "ok 8\n"; } else { print "not ok 8\n"; } + + if ($tst->eof) { print "not ok 9\n"; } else { print "ok 9\n"; } + + if ($secondpos == tell) { print "ok 10\n"; } else { print "not ok 10\n"; } + + if ($tst->seek(0,2)) { print "ok 11\n"; } else { print "not ok 11\n"; } + + if ($lastpos == $tst->tell) { print "ok 12\n"; } else { print "not ok 12\n"; } + + unless (eof) { print "not ok 13\n"; } else { print "ok 13\n"; } diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_udp.t' Index: ./ext/IO/lib/IO/t/io_udp.t *** ./ext/IO/lib/IO/t/io_udp.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_udp.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,94 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + my $reason; + + if ($Config{'extensions'} !~ /\bSocket\b/) { + $reason = 'Socket was not built'; + } + elsif ($Config{'extensions'} !~ /\bIO\b/) { + $reason = 'IO was not built'; + } + elsif ($^O eq 'apollo') { + $reason = "unknown *FIXME*"; + } + undef $reason if $^O eq 'VMS' and $Config{d_socket}; + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } + } + + sub compare_addr { + no utf8; + my $a = shift; + my $b = shift; + if (length($a) != length $b) { + my $min = (length($a) < length $b) ? length($a) : length $b; + if ($min and substr($a, 0, $min) eq substr($b, 0, $min)) { + printf "# Apparently: %d bytes junk at the end of %s\n# %s\n", + abs(length($a) - length ($b)), + $_[length($a) < length ($b) ? 1 : 0], + "consider decreasing bufsize of recfrom."; + substr($a, $min) = ""; + substr($b, $min) = ""; + } + return 0; + } + my @a = unpack_sockaddr_in($a); + my @b = unpack_sockaddr_in($b); + "$a[0]$a[1]" eq "$b[0]$b[1]"; + } + + $| = 1; + print "1..7\n"; + + use Socket; + use IO::Socket qw(AF_INET SOCK_DGRAM INADDR_ANY); + + $udpa = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost') + || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1') + or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)"; + + print "ok 1\n"; + + $udpb = IO::Socket::INET->new(Proto => 'udp', LocalAddr => 'localhost') + || IO::Socket::INET->new(Proto => 'udp', LocalAddr => '127.0.0.1') + or die "$! (maybe your system does not have a localhost at all, 'localhost' or 127.0.0.1)"; + + print "ok 2\n"; + + $udpa->send("ok 4\n",0,$udpb->sockname); + + print "not " + unless compare_addr($udpa->peername,$udpb->sockname, 'peername', 'sockname'); + print "ok 3\n"; + + my $where = $udpb->recv($buf="",5); + print $buf; + + my @xtra = (); + + unless(compare_addr($where,$udpa->sockname, 'recv name', 'sockname')) { + print "not "; + @xtra = (0,$udpa->sockname); + } + print "ok 5\n"; + + $udpb->send("ok 6\n",@xtra); + $udpa->recv($buf="",5); + print $buf; + + print "not " if $udpa->connected; + print "ok 7\n"; diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_unix.t' Index: ./ext/IO/lib/IO/t/io_unix.t *** ./ext/IO/lib/IO/t/io_unix.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_unix.t Thu Jul 12 20:38:09 2001 *************** *** 0 **** --- 1,89 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + my $reason; + if (! $Config{'d_fork'}) { + $reason = 'no fork'; + } + elsif ($Config{'extensions'} !~ /\bSocket\b/) { + $reason = 'Socket extension unavailable'; + } + elsif ($Config{'extensions'} !~ /\bIO\b/) { + $reason = 'IO extension unavailable'; + } + elsif ($^O eq 'os2') { + require IO::Socket; + + eval {IO::Socket::pack_sockaddr_un('/tmp/foo') || 1} + or $@ !~ /not implemented/ or + $reason = 'compiled without TCP/IP stack v4'; + } elsif ($^O =~ m/^(?:qnx|nto)$/ ) { + $reason = 'Not implemented'; + } + undef $reason if $^O eq 'VMS' and $Config{d_socket}; + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } + } + + $PATH = "/tmp/sock-$$"; + + # Test if we can create the file within the tmp directory + if (-e $PATH or not open(TEST, ">$PATH") and $^O ne 'os2') { + print "1..0 # Skip: cannot open '$PATH' for write\n"; + exit 0; + } + close(TEST); + unlink($PATH) or $^O eq 'os2' or die "Can't unlink $PATH: $!"; + + # Start testing + $| = 1; + print "1..5\n"; + + use IO::Socket; + + $listen = IO::Socket::UNIX->new(Local=>$PATH, Listen=>0) || die "$!"; + print "ok 1\n"; + + if($pid = fork()) { + + $sock = $listen->accept(); + print "ok 2\n"; + + print $sock->getline(); + + print $sock "ok 4\n"; + + $sock->close; + + waitpid($pid,0); + unlink($PATH) || $^O eq 'os2' || warn "Can't unlink $PATH: $!"; + + print "ok 5\n"; + + } elsif(defined $pid) { + + $sock = IO::Socket::UNIX->new(Peer => $PATH) or die "$!"; + + print $sock "ok 3\n"; + + print $sock->getline(); + + $sock->close; + + exit; + } else { + die; + } diff -c /dev/null 'perl-5.7.2/ext/IO/lib/IO/t/io_xs.t' Index: ./ext/IO/lib/IO/t/io_xs.t *** ./ext/IO/lib/IO/t/io_xs.t Thu Jan 1 02:00:00 1970 --- ./ext/IO/lib/IO/t/io_xs.t Mon Jul 9 17:10:04 2001 *************** *** 0 **** --- 1,43 ---- + #!./perl + + BEGIN { + unless(grep /blib/, @INC) { + chdir 't' if -d 't'; + @INC = '../lib'; + } + } + + use Config; + + BEGIN { + if(-d "lib" && -f "TEST") { + if ($Config{'extensions'} !~ /\bIO\b/ && $^O ne 'VMS') { + print "1..0\n"; + exit 0; + } + } + } + + use IO::File; + use IO::Seekable; + + print "1..4\n"; + + $x = new_tmpfile IO::File or print "not "; + print "ok 1\n"; + print $x "ok 2\n"; + $x->seek(0,SEEK_SET); + print <$x>; + + $x->seek(0,SEEK_SET); + print $x "not ok 3\n"; + $p = $x->getpos; + print $x "ok 3\n"; + $x->flush; + $x->setpos($p); + print scalar <$x>; + + $! = 0; + $x->setpos(undef); + print $! ? "ok 4 # $!\n" : "not ok 4\n"; + diff -c 'perl-5.7.1/ext/IPC/SysV/Msg.pm' 'perl-5.7.2/ext/IPC/SysV/Msg.pm' Index: ./ext/IPC/SysV/Msg.pm *** ./ext/IPC/SysV/Msg.pm Fri Mar 16 04:54:47 2001 --- ./ext/IPC/SysV/Msg.pm Mon Jul 9 17:10:07 2001 *************** *** 11,17 **** use vars qw($VERSION); use Carp; ! $VERSION = "1.00"; { package IPC::Msg::stat; --- 11,17 ---- use vars qw($VERSION); use Carp; ! $VERSION = "1.00_00"; { package IPC::Msg::stat; diff -c 'perl-5.7.1/ext/IPC/SysV/Semaphore.pm' 'perl-5.7.2/ext/IPC/SysV/Semaphore.pm' Index: ./ext/IPC/SysV/Semaphore.pm *** ./ext/IPC/SysV/Semaphore.pm Fri Mar 16 04:54:47 2001 --- ./ext/IPC/SysV/Semaphore.pm Mon Jul 9 17:10:07 2001 *************** *** 12,18 **** use vars qw($VERSION); use Carp; ! $VERSION = "1.00"; { package IPC::Semaphore::stat; --- 12,18 ---- use vars qw($VERSION); use Carp; ! $VERSION = "1.00_00"; { package IPC::Semaphore::stat; *************** *** 88,94 **** @_ >= 4 || croak '$sem->op( OPLIST )'; my $self = shift; croak 'Bad arg count' if @_ % 3; ! my $data = pack("s*",@_); semop($$self,$data); } --- 88,94 ---- @_ >= 4 || croak '$sem->op( OPLIST )'; my $self = shift; croak 'Bad arg count' if @_ % 3; ! my $data = pack("s!*",@_); semop($$self,$data); } *************** *** 126,137 **** my $data = ""; semctl($$self,0,GETALL,$data) or return (); ! (unpack("s*",$data)); } sub setall { my $self = shift; ! my $data = pack("s*",@_); semctl($$self,0,SETALL,$data); } --- 126,137 ---- my $data = ""; semctl($$self,0,GETALL,$data) or return (); ! (unpack("s!*",$data)); } sub setall { my $self = shift; ! my $data = pack("s!*",@_); semctl($$self,0,SETALL,$data); } *************** *** 206,212 **** =item getncnt ( SEM ) Returns the number of processed waiting for the semaphore C to ! become greater than it's current value =item getpid ( SEM ) --- 206,212 ---- =item getncnt ( SEM ) Returns the number of processed waiting for the semaphore C to ! become greater than its current value =item getpid ( SEM ) diff -c 'perl-5.7.1/ext/IPC/SysV/SysV.pm' 'perl-5.7.2/ext/IPC/SysV/SysV.pm' Index: ./ext/IPC/SysV/SysV.pm *** ./ext/IPC/SysV/SysV.pm Fri Mar 16 04:54:47 2001 --- ./ext/IPC/SysV/SysV.pm Mon Jul 9 17:10:07 2001 *************** *** 14,20 **** require Exporter; @ISA = qw(Exporter); ! $VERSION = "1.03"; @EXPORT_OK = qw( GETALL GETNCNT GETPID GETVAL GETZCNT --- 14,20 ---- require Exporter; @ISA = qw(Exporter); ! $VERSION = "1.03_00"; @EXPORT_OK = qw( GETALL GETNCNT GETPID GETVAL GETZCNT diff -c 'perl-5.7.1/ext/IPC/SysV/SysV.xs' 'perl-5.7.2/ext/IPC/SysV/SysV.xs' Index: ./ext/IPC/SysV/SysV.xs *** ./ext/IPC/SysV/SysV.xs Tue Mar 6 04:04:53 2001 --- ./ext/IPC/SysV/SysV.xs Mon Jul 9 17:10:07 2001 *************** *** 163,189 **** { #ifdef HAS_SEM SV **sv_ptr; - SV *sv; struct semid_ds ds; AV *list = (AV*)SvRV(obj); if(!sv_isa(obj, "IPC::Semaphore::stat")) croak("method %s not called a %s object", "pack","IPC::Semaphore::stat"); ! if((sv_ptr = av_fetch(list,0,TRUE)) && (sv = *sv_ptr)) ds.sem_perm.uid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,1,TRUE)) && (sv = *sv_ptr)) ds.sem_perm.gid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,2,TRUE)) && (sv = *sv_ptr)) ds.sem_perm.cuid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,3,TRUE)) && (sv = *sv_ptr)) ds.sem_perm.cgid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,4,TRUE)) && (sv = *sv_ptr)) ds.sem_perm.mode = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,5,TRUE)) && (sv = *sv_ptr)) ds.sem_ctime = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,6,TRUE)) && (sv = *sv_ptr)) ds.sem_otime = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,7,TRUE)) && (sv = *sv_ptr)) ds.sem_nsems = SvIV(*sv_ptr); ST(0) = sv_2mortal(newSVpvn((char *)&ds,sizeof(ds))); XSRETURN(1); --- 163,188 ---- { #ifdef HAS_SEM SV **sv_ptr; struct semid_ds ds; AV *list = (AV*)SvRV(obj); if(!sv_isa(obj, "IPC::Semaphore::stat")) croak("method %s not called a %s object", "pack","IPC::Semaphore::stat"); ! if((sv_ptr = av_fetch(list,0,TRUE)) && *sv_ptr) ds.sem_perm.uid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,1,TRUE)) && *sv_ptr) ds.sem_perm.gid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,2,TRUE)) && *sv_ptr) ds.sem_perm.cuid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,3,TRUE)) && *sv_ptr) ds.sem_perm.cgid = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,4,TRUE)) && *sv_ptr) ds.sem_perm.mode = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,5,TRUE)) && *sv_ptr) ds.sem_ctime = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,6,TRUE)) && *sv_ptr) ds.sem_otime = SvIV(*sv_ptr); ! if((sv_ptr = av_fetch(list,7,TRUE)) && *sv_ptr) ds.sem_nsems = SvIV(*sv_ptr); ST(0) = sv_2mortal(newSVpvn((char *)&ds,sizeof(ds))); XSRETURN(1); *************** *** 203,209 **** key_t k = ftok(path, id); ST(0) = k == (key_t) -1 ? &PL_sv_undef : sv_2mortal(newSViv(k)); #else ! DIE(aTHX_ PL_no_func, "ftok"); #endif void --- 202,208 ---- key_t k = ftok(path, id); ST(0) = k == (key_t) -1 ? &PL_sv_undef : sv_2mortal(newSViv(k)); #else ! Perl_die(aTHX_ PL_no_func, "ftok"); return; #endif void diff -c /dev/null 'perl-5.7.2/ext/IPC/SysV/ipcsysv.t' Index: ./ext/IPC/SysV/ipcsysv.t *** ./ext/IPC/SysV/ipcsysv.t Thu Jan 1 02:00:00 1970 --- ./ext/IPC/SysV/ipcsysv.t Mon Jul 9 17:10:07 2001 *************** *** 0 **** --- 1,218 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + + @INC = '../lib'; + + require Config; import Config; + + my $reason; + + if ($Config{'extensions'} !~ /\bIPC\/SysV\b/) { + $reason = 'IPC::SysV was not built'; + } elsif ($Config{'d_sem'} ne 'define') { + $reason = '$Config{d_sem} undefined'; + } elsif ($Config{'d_msg'} ne 'define') { + $reason = '$Config{d_msg} undefined'; + } + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } + + # These constants are common to all tests. + # Later the sem* tests will import more for themselves. + + use IPC::SysV qw(IPC_PRIVATE IPC_NOWAIT IPC_STAT IPC_RMID S_IRWXU); + use strict; + + print "1..16\n"; + + my $msg; + my $sem; + + $SIG{__DIE__} = 'cleanup'; # will cleanup $msg and $sem if needed + + # FreeBSD is known to throw this if there's no SysV IPC in the kernel. + $SIG{SYS} = sub { + print STDERR <= 0; + + print "ok 1\n"; + + #Putting a message on the queue + my $msgtype = 1; + my $msgtext = "hello"; + + my $test2bad; + my $test5bad; + my $test6bad; + + unless (msgsnd($msg,pack("L! a*",$msgtype,$msgtext),IPC_NOWAIT)) { + print "not "; + $test2bad = 1; + } + print "ok 2\n"; + if ($test2bad) { + print <= 0; + + print "ok 7\n"; + + my $data; + semctl($sem,0,IPC_STAT,$data) or print "not "; + print "ok 8\n"; + + print "not " unless length($data); + print "ok 9\n"; + + my $nsem = 10; + + semctl($sem,0,SETALL,pack("s!*",(0) x $nsem)) or print "not "; + print "ok 10\n"; + + $data = ""; + semctl($sem,0,GETALL,$data) or print "not "; + print "ok 11\n"; + + print "not " unless length($data) == length(pack("s!*",(0) x $nsem)); + print "ok 12\n"; + + my @data = unpack("s!*",$data); + + my $adata = "0" x $nsem; + + print "not " unless @data == $nsem and join("",@data) eq $adata; + print "ok 13\n"; + + my $poke = 2; + + $data[$poke] = 1; + semctl($sem,0,SETALL,pack("s!*",@data)) or print "not "; + print "ok 14\n"; + + $data = ""; + semctl($sem,0,GETALL,$data) or print "not "; + print "ok 15\n"; + + @data = unpack("s!*",$data); + + my $bdata = "0" x $poke . "1" . "0" x ($nsem-$poke-1); + + print "not " unless join("",@data) eq $bdata; + print "ok 16\n"; + } else { + for (7..16) { + print "ok $_ # skipped, no semctl possible\n"; + } + } + } else { + for (7..16) { + print "ok $_\n"; # fake it + } + } + + sub cleanup { + msgctl($msg,IPC_RMID,0) if defined $msg; + semctl($sem,0,IPC_RMID,undef) if defined $sem; + } + + cleanup; diff -c 'perl-5.7.1/ext/IPC/SysV/t/msg.t' 'perl-5.7.2/ext/IPC/SysV/t/msg.t' Index: ./ext/IPC/SysV/t/msg.t *** ./ext/IPC/SysV/t/msg.t Tue Mar 6 04:04:53 2001 --- ./ext/IPC/SysV/t/msg.t Mon Jul 9 17:10:08 2001 *************** *** 1,3 **** --- 1,25 ---- + BEGIN { + chdir 't' if -d 't'; + + @INC = '../lib'; + + require Config; import Config; + + my $reason; + + if ($Config{'extensions'} !~ /\bIPC\/SysV\b/) { + $reason = 'IPC::SysV was not built'; + } elsif ($Config{'d_sem'} ne 'define') { + $reason = '$Config{d_sem} undefined'; + } elsif ($Config{'d_msg'} ne 'define') { + $reason = '$Config{d_msg} undefined'; + } + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } + use IPC::SysV qw(IPC_PRIVATE IPC_RMID IPC_NOWAIT IPC_STAT S_IRWXU S_IRWXG S_IRWXO); use IPC::Msg; diff -c 'perl-5.7.1/ext/IPC/SysV/t/sem.t' 'perl-5.7.2/ext/IPC/SysV/t/sem.t' Index: ./ext/IPC/SysV/t/sem.t *** ./ext/IPC/SysV/t/sem.t Tue Mar 6 04:04:53 2001 --- ./ext/IPC/SysV/t/sem.t Mon Jul 9 17:10:08 2001 *************** *** 1,3 **** --- 1,24 ---- + BEGIN { + chdir 't' if -d 't'; + + @INC = '../lib'; + + require Config; import Config; + + my $reason; + + if ($Config{'extensions'} !~ /\bIPC\/SysV\b/) { + $reason = 'IPC::SysV was not built'; + } elsif ($Config{'d_sem'} ne 'define') { + $reason = '$Config{d_sem} undefined'; + } elsif ($Config{'d_msg'} ne 'define') { + $reason = '$Config{d_msg} undefined'; + } + if ($reason) { + print "1..0 # Skip: $reason\n"; + exit 0; + } + } use IPC::SysV qw( SETALL diff -c /dev/null 'perl-5.7.2/ext/List/Util/ChangeLog' Index: ./ext/List/Util/ChangeLog *** ./ext/List/Util/ChangeLog Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/ChangeLog Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,85 ---- + Change 482 on 2000/04/10 by (Graham Barr) + + Check for SvMAGICAL on argument for reftype and blessed + + Change 366 on 2000/03/03 by (Graham Barr) + + Release 1.01 + + Change 365 on 2000/03/03 by (Graham Barr) + + - Added auto-detection for a compiler and install the perl version + if not found + - Better perl implemenation of reftype, should be thread-safe now + + Change 364 on 2000/03/03 by (Graham Barr) + + - Added some examples of simple subs that have been requested + but not added + - Updated copyright dates + + Change 344 on 1999/11/10 by (Graham Barr) + + - Better testcase for reftype + + Change 343 on 1999/11/10 by (Graham Barr) + + - Modules are now called List::Util & Scalar::Util + - Supports non-XS install + - perl version of reftype now returns "REF" when it should + + Change 311 on 1999/06/01 by (Graham Barr) + + Updated README + + Change 275 on 1999/03/22 by (Graham Barr) + + Removed forall as it is very broken + + Change 274 on 1999/03/22 by (Graham Barr) + + Added List::Util::forall + + Change 273 on 1999/03/21 by (Graham Barr) + + Added weaken and isweak to Ref::Util + + Change 272 on 1999/03/21 by (Graham Barr) + + Add new .pm files to repository + + Change 271 on 1999/03/21 by (Graham Barr) + + - Split into three packages Ref::Util, List::Util and Scalar::DualVar + - readonly and clock were removed in favor of other modules + + Change 270 on 1999/03/21 by (Graham Barr) + + Rename package + + Change 269 on 1999/03/21 by (Graham Barr) + + - Added reftype + - improved reduce by not doing a sub call + - reduce now uses $a and $b + - now compiles with 5.005_5x + + Change 178 on 1998/07/26 by (Graham Barr) + + Modified XS code so it will compile with 5.004 and 5.005 + + Change 115 on 1998/02/21 by (Graham Barr) + + Fri Feb 20 1998 Graham Barr + + t/min.t, t/max.t + - Change sor to do a numerical sort + + Fri Dec 19 1997 Graham Barr + + - Added readonly() + + Wed Nov 19 1997 Graham Barr + + - Initial release + diff -c /dev/null 'perl-5.7.2/ext/List/Util/Makefile.PL' Index: ./ext/List/Util/Makefile.PL *** ./ext/List/Util/Makefile.PL Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/Makefile.PL Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,59 ---- + use ExtUtils::MakeMaker; + + WriteMakefile( + VERSION_FROM => "lib/List/Util.pm", + MAN3PODS => {}, # Pods will be built by installman. + NAME => "List::Util", + ); + + package MY; + + BEGIN { + use Config; + unless (defined $Config{usedl}) { + eval <<'__EOMM__'; + sub xs_c { + my($self) = shift; + return '' unless $self->needs_linking(); + ' + .xs.c: + $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > List$*.xsc && $(MV) List$*.xsc List$*.c + '; + } + + sub c_o { + my($self) = shift; + return '' unless $self->needs_linking(); + ' + .c$(OBJ_EXT): + $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) List$*.c + $(MV) List$*$(OBJ_EXT) $*$(OBJ_EXT) + '; + } + + sub xs_o { # many makes are too dumb to use xs_c then c_o + my($self) = shift; + return '' unless $self->needs_linking(); + ' + .xs$(OBJ_EXT): + $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > List$*.xsc && $(MV) List$*.xsc List$*.c + $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) List$*.c + $(MV) List$*$(OBJ_EXT) $*$(OBJ_EXT) + '; + } + + sub top_targets { # many makes are too dumb to use xs_c then c_o + my($self) = shift; + my $out = $self->SUPER::top_targets(@_); + $out . + ' + + ListUtil.c: Util.c + @$(NOOP) + + '; + } + + __EOMM__ + } + } diff -c /dev/null 'perl-5.7.2/ext/List/Util/README' Index: ./ext/List/Util/README *** ./ext/List/Util/README Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/README Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,31 ---- + This distribution is a replacement for the builtin distribution. + + This package contains a selection of subroutines that people have + expressed would be nice to have in the perl core, but the usage would not + really be high enough to warrant the use of a keyword, and the size so + small such that being individual extensions would be wasteful. + + After unpacking the distribution, to install this module type + + perl Makefile.PL + make + make test + make install + + This distribution provides + + min + max + minstr + maxstr + sum + reduce + reftype + blessed + weaken (5.005_57 and later only) + isweak (5.005_57 and later only) + dualvar + + Copyright (c) 1997-2000 Graham Barr . All rights reserved. + This library is free software; you can redistribute it and/or + modify it under the same terms as Perl itself. diff -c /dev/null 'perl-5.7.2/ext/List/Util/Util.xs' Index: ./ext/List/Util/Util.xs *** ./ext/List/Util/Util.xs Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/Util.xs Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,340 ---- + /* Copyright (c) 1997-2000 Graham Barr . All rights reserved. + * This program is free software; you can redistribute it and/or + * modify it under the same terms as Perl itself. + */ + + #include + #include + #include + + #ifndef PERL_VERSION + # include "patchlevel.h" + # define PERL_REVISION 5 + # define PERL_VERSION PATCHLEVEL + # define PERL_SUBVERSION SUBVERSION + #endif + + #if PERL_VERSION < 5 + # ifndef gv_stashpvn + # define gv_stashpvn(n,l,c) gv_stashpv(n,c) + # endif + # ifndef SvTAINTED + + static bool + sv_tainted(SV *sv) + { + if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { + MAGIC *mg = mg_find(sv, 't'); + if (mg && ((mg->mg_len & 1) || (mg->mg_len & 2) && mg->mg_obj == sv)) + return TRUE; + } + return FALSE; + } + + # define SvTAINTED_on(sv) sv_magic((sv), Nullsv, 't', Nullch, 0) + # define SvTAINTED(sv) (SvMAGICAL(sv) && sv_tainted(sv)) + # endif + # define PL_defgv defgv + # define PL_op op + # define PL_curpad curpad + # define CALLRUNOPS runops + # define PL_curpm curpm + # define PL_sv_undef sv_undef + # define PERL_CONTEXT struct context + #endif + #if (PERL_VERSION < 5) || (PERL_VERSION == 5 && PERL_SUBVERSION <50) + # ifndef PL_tainting + # define PL_tainting tainting + # endif + # ifndef PL_stack_base + # define PL_stack_base stack_base + # endif + # ifndef PL_stack_sp + # define PL_stack_sp stack_sp + # endif + # ifndef PL_ppaddr + # define PL_ppaddr ppaddr + # endif + #endif + + MODULE=List::Util PACKAGE=List::Util + + void + min(...) + PROTOTYPE: @ + ALIAS: + min = 0 + max = 1 + CODE: + { + int index; + NV retval; + SV *retsv; + if(!items) { + XSRETURN_UNDEF; + } + retsv = ST(0); + retval = SvNV(retsv); + for(index = 1 ; index < items ; index++) { + SV *stacksv = ST(index); + NV val = SvNV(stacksv); + if(val < retval ? !ix : ix) { + retsv = stacksv; + retval = val; + } + } + ST(0) = retsv; + XSRETURN(1); + } + + + + NV + sum(...) + PROTOTYPE: @ + CODE: + { + int index; + if(!items) { + XSRETURN_UNDEF; + } + RETVAL = SvNV(ST(0)); + for(index = 1 ; index < items ; index++) { + RETVAL += SvNV(ST(index)); + } + } + OUTPUT: + RETVAL + + + void + minstr(...) + PROTOTYPE: @ + ALIAS: + minstr = 2 + maxstr = 0 + CODE: + { + SV *left; + int index; + if(!items) { + XSRETURN_UNDEF; + } + /* + sv_cmp & sv_cmp_locale return 1,0,-1 for gt,eq,lt + so we set ix to the value we are looking for + xsubpp does not allow -ve values, so we start with 0,2 and subtract 1 + */ + ix -= 1; + left = ST(0); + #ifdef OPpLOCALE + if(MAXARG & OPpLOCALE) { + for(index = 1 ; index < items ; index++) { + SV *right = ST(index); + if(sv_cmp_locale(left, right) == ix) + left = right; + } + } + else { + #endif + for(index = 1 ; index < items ; index++) { + SV *right = ST(index); + if(sv_cmp(left, right) == ix) + left = right; + } + #ifdef OPpLOCALE + } + #endif + ST(0) = left; + XSRETURN(1); + } + + + + void + reduce(block,...) + SV * block + PROTOTYPE: &@ + CODE: + { + SV *ret; + int index; + GV *agv,*bgv,*gv; + HV *stash; + CV *cv; + OP *reducecop; + if(items <= 1) { + XSRETURN_UNDEF; + } + agv = gv_fetchpv("a", TRUE, SVt_PV); + bgv = gv_fetchpv("b", TRUE, SVt_PV); + SAVESPTR(GvSV(agv)); + SAVESPTR(GvSV(bgv)); + cv = sv_2cv(block, &stash, &gv, 0); + reducecop = CvSTART(cv); + SAVESPTR(CvROOT(cv)->op_ppaddr); + CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL]; + SAVESPTR(PL_curpad); + PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]); + SAVETMPS; + SAVESPTR(PL_op); + ret = ST(1); + for(index = 2 ; index < items ; index++) { + GvSV(agv) = ret; + GvSV(bgv) = ST(index); + PL_op = reducecop; + CALLRUNOPS(aTHX); + ret = *PL_stack_sp; + } + ST(0) = ret; + XSRETURN(1); + } + + void + first(block,...) + SV * block + PROTOTYPE: &@ + CODE: + { + int index; + GV *gv; + HV *stash; + CV *cv; + OP *reducecop; + if(items <= 1) { + XSRETURN_UNDEF; + } + SAVESPTR(GvSV(PL_defgv)); + cv = sv_2cv(block, &stash, &gv, 0); + reducecop = CvSTART(cv); + SAVESPTR(CvROOT(cv)->op_ppaddr); + CvROOT(cv)->op_ppaddr = PL_ppaddr[OP_NULL]; + SAVESPTR(PL_curpad); + PL_curpad = AvARRAY((AV*)AvARRAY(CvPADLIST(cv))[1]); + SAVETMPS; + SAVESPTR(PL_op); + for(index = 1 ; index < items ; index++) { + GvSV(PL_defgv) = ST(index); + PL_op = reducecop; + CALLRUNOPS(aTHX); + if (SvTRUE(*PL_stack_sp)) { + ST(0) = ST(index); + XSRETURN(1); + } + } + XSRETURN_UNDEF; + } + + MODULE=List::Util PACKAGE=Scalar::Util + + void + dualvar(num,str) + SV * num + SV * str + PROTOTYPE: $$ + CODE: + { + STRLEN len; + char *ptr = SvPV(str,len); + ST(0) = sv_newmortal(); + (void)SvUPGRADE(ST(0),SVt_PVNV); + sv_setpvn(ST(0),ptr,len); + if(SvNOKp(num) || !SvIOKp(num)) { + SvNVX(ST(0)) = SvNV(num); + SvNOK_on(ST(0)); + } + else { + SvIVX(ST(0)) = SvIV(num); + SvIOK_on(ST(0)); + } + if(PL_tainting && (SvTAINTED(num) || SvTAINTED(str))) + SvTAINTED_on(ST(0)); + XSRETURN(1); + } + + char * + blessed(sv) + SV * sv + PROTOTYPE: $ + CODE: + { + if (SvMAGICAL(sv)) + mg_get(sv); + if(!sv_isobject(sv)) { + XSRETURN_UNDEF; + } + RETVAL = sv_reftype(SvRV(sv),TRUE); + } + OUTPUT: + RETVAL + + char * + reftype(sv) + SV * sv + PROTOTYPE: $ + CODE: + { + if (SvMAGICAL(sv)) + mg_get(sv); + if(!SvROK(sv)) { + XSRETURN_UNDEF; + } + RETVAL = sv_reftype(SvRV(sv),FALSE); + } + OUTPUT: + RETVAL + + void + weaken(sv) + SV *sv + PROTOTYPE: $ + CODE: + #ifdef SvWEAKREF + sv_rvweaken(sv); + #else + croak("weak references are not implemented in this release of perl"); + #endif + + void + isweak(sv) + SV *sv + PROTOTYPE: $ + CODE: + #ifdef SvWEAKREF + ST(0) = boolSV(SvROK(sv) && SvWEAKREF(sv)); + XSRETURN(1); + #else + croak("weak references are not implemented in this release of perl"); + #endif + + int + readonly(sv) + SV *sv + PROTOTYPE: $ + CODE: + RETVAL = SvREADONLY(sv); + OUTPUT: + RETVAL + + int + tainted(sv) + SV *sv + PROTOTYPE: $ + CODE: + RETVAL = SvTAINTED(sv); + OUTPUT: + RETVAL + + BOOT: + { + #ifndef SvWEAKREF + HV *stash = gv_stashpvn("Scalar::Util", 12, TRUE); + GV *vargv = *(GV**)hv_fetch(stash, "EXPORT_FAIL", 11, TRUE); + AV *varav; + if (SvTYPE(vargv) != SVt_PVGV) + gv_init(vargv, stash, "Scalar::Util", 12, TRUE); + varav = GvAVn(vargv); + av_push(varav, newSVpv("weaken",6)); + av_push(varav, newSVpv("isweak",6)); + #endif + } diff -c /dev/null 'perl-5.7.2/ext/List/Util/lib/List/Util.pm' Index: ./ext/List/Util/lib/List/Util.pm *** ./ext/List/Util/lib/List/Util.pm Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/lib/List/Util.pm Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,180 ---- + # List::Util.pm + # + # Copyright (c) 1997-2000 Graham Barr . All rights reserved. + # This program is free software; you can redistribute it and/or + # modify it under the same terms as Perl itself. + + package List::Util; + + require Exporter; + require DynaLoader; + + our @ISA = qw(Exporter DynaLoader); + our @EXPORT_OK = qw(first min max minstr maxstr reduce sum); + our $VERSION = "1.02_00"; + + bootstrap List::Util $VERSION; + + 1; + + __END__ + + =head1 NAME + + List::Util - A selection of general-utility list subroutines + + =head1 SYNOPSIS + + use List::Util qw(first sum min max minstr maxstr reduce); + + =head1 DESCRIPTION + + C contains a selection of subroutines that people have + expressed would be nice to have in the perl core, but the usage would + not really be high enough to warrant the use of a keyword, and the size + so small such that being individual extensions would be wasteful. + + By default C does not export any subroutines. The + subroutines defined are + + =over 4 + + =item first BLOCK LIST + + Similar to C in that it evaluates BLOCK setting C<$_> to each element + of LIST in turn. C returns the first element where the result from + BLOCK is a true value. If BLOCK never returns true or LIST was empty then + C is returned. + + $foo = first { defined($_) } @list # first defined value in @list + $foo = first { $_ > $value } @list # first value in @list which + # is greater than $value + + This function could be implemented using C like this + + $foo = reduce { defined($a) ? $a : wanted($b) ? $b : undef } undef, @list + + for example wanted() could be defined() which would return the first + defined value in @list + + =item max LIST + + Returns the entry in the list with the highest numerical value. If the + list is empty then C is returned. + + $foo = max 1..10 # 10 + $foo = max 3,9,12 # 12 + $foo = max @bar, @baz # whatever + + This function could be implemented using C like this + + $foo = reduce { $a > $b ? $a : $b } 1..10 + + =item maxstr LIST + + Similar to C, but treats all the entries in the list as strings + and returns the highest string as defined by the C operator. + If the list is empty then C is returned. + + $foo = maxstr 'A'..'Z' # 'Z' + $foo = maxstr "hello","world" # "world" + $foo = maxstr @bar, @baz # whatever + + This function could be implemented using C like this + + $foo = reduce { $a gt $b ? $a : $b } 'A'..'Z' + + =item min LIST + + Similar to C but returns the entry in the list with the lowest + numerical value. If the list is empty then C is returned. + + $foo = min 1..10 # 1 + $foo = min 3,9,12 # 3 + $foo = min @bar, @baz # whatever + + This function could be implemented using C like this + + $foo = reduce { $a < $b ? $a : $b } 1..10 + + =item minstr LIST + + Similar to C, but treats all the entries in the list as strings + and returns the lowest string as defined by the C operator. + If the list is empty then C is returned. + + $foo = maxstr 'A'..'Z' # 'A' + $foo = maxstr "hello","world" # "hello" + $foo = maxstr @bar, @baz # whatever + + This function could be implemented using C like this + + $foo = reduce { $a lt $b ? $a : $b } 'A'..'Z' + + =item reduce BLOCK LIST + + Reduces LIST by calling BLOCK multiple times, setting C<$a> and C<$b> + each time. The first call will be with C<$a> and C<$b> set to the first + two elements of the list, subsequent calls will be done by + setting C<$a> to the result of the previous call and C<$b> to the next + element in the list. + + Returns the result of the last call to BLOCK. If LIST is empty then + C is returned. If LIST only contains one element then that + element is returned and BLOCK is not executed. + + $foo = reduce { $a < $b ? $a : $b } 1..10 # min + $foo = reduce { $a lt $b ? $a : $b } 'aa'..'zz' # minstr + $foo = reduce { $a + $b } 1 .. 10 # sum + $foo = reduce { $a . $b } @bar # concat + + =item sum LIST + + Returns the sum of all the elements in LIST. + + $foo = sum 1..10 # 55 + $foo = sum 3,9,12 # 24 + $foo = sum @bar, @baz # whatever + + This function could be implemented using C like this + + $foo = reduce { $a + $b } 1..10 + + =back + + =head1 SUGGESTED ADDITIONS + + The following are additions that have been requested, but I have been reluctant + to add due to them being very simple to implement in perl + + # One argument is true + + sub any { $_ && return 1 for @_; 0 } + + # All arguments are true + + sub all { $_ || return 0 for @_; 1 } + + # All arguments are false + + sub none { $_ && return 0 for @_; 1 } + + # One argument is false + + sub notall { $_ || return 1 for @_; 0 } + + # How many elements are true + + sub true { scalar grep { $_ } @_ } + + # How many elements are false + + sub false { scalar grep { !$_ } @_ } + + =head1 COPYRIGHT + + Copyright (c) 1997-2000 Graham Barr . All rights reserved. + This program is free software; you can redistribute it and/or + modify it under the same terms as Perl itself. + + =cut diff -c /dev/null 'perl-5.7.2/ext/List/Util/lib/Scalar/Util.pm' Index: ./ext/List/Util/lib/Scalar/Util.pm *** ./ext/List/Util/lib/Scalar/Util.pm Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/lib/Scalar/Util.pm Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,101 ---- + # Scalar::Util.pm + # + # Copyright (c) 1997-2000 Graham Barr . All rights reserved. + # This program is free software; you can redistribute it and/or + # modify it under the same terms as Perl itself. + + package Scalar::Util; + + require Exporter; + require List::Util; # List::Util loads the XS + + our @ISA = qw(Exporter); + our @EXPORT_OK = qw(blessed dualvar reftype weaken isweak tainted readonly); + our $VERSION = $List::Util::VERSION; + + 1; + + __END__ + + =head1 NAME + + Scalar::Util - A selection of general-utility scalar subroutines + + =head1 SYNOPSIS + + use Scalar::Util qw(blessed dualvar reftype weaken isweak); + + =head1 DESCRIPTION + + C contains a selection of subroutines that people have + expressed would be nice to have in the perl core, but the usage would + not really be high enough to warrant the use of a keyword, and the size + so small such that being individual extensions would be wasteful. + + By default C does not export any subroutines. The + subroutines defined are + + =over 4 + + =item blessed EXPR + + If EXPR evaluates to a blessed reference the name of the package + that it is blessed into is returned. Otherwise C is returned. + + =item dualvar NUM, STRING + + Returns a scalar that has the value NUM in a numeric context and the + value STRING in a string context. + + $foo = dualvar 10, "Hello"; + $num = $foo + 2; # 12 + $str = $foo . " world"; # Hello world + + =item isweak EXPR + + If EXPR is a scalar which is a weak reference the result is true. + + =item readonly SCALAR + + Returns true if SCALAR is readonly. + + =item reftype EXPR + + If EXPR evaluates to a reference the type of the variable referenced + is returned. Otherwise C is returned. + + =item tainted EXPR + + Return true if the result of EXPR is tainted + + =item weaken REF + + REF will be turned into a weak reference. This means that it will not + hold a reference count on the object it references. Also when the reference + count on that object reaches zero, REF will be set to undef. + + This is useful for keeping copies of references , but you don't want to + prevent the object being DESTROY-ed at its usual time. + + =back + + =head1 COPYRIGHT + + Copyright (c) 1997-2000 Graham Barr . All rights reserved. + This program is free software; you can redistribute it and/or modify it + under the same terms as Perl itself. + + except weaken and isweak which are + + Copyright (c) 1999 Tuomas J. Lukka . All rights reserved. + This program is free software; you can redistribute it and/or modify it + under the same terms as perl itself. + + =head1 BLATANT PLUG + + The weaken and isweak subroutines in this module and the patch to the core Perl + were written in connection with the APress book `Tuomas J. Lukka's Definitive + Guide to Object-Oriented Programming in Perl', to avoid explaining why certain + things would have to be done in cumbersome ways. + + =cut diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/blessed.t' Index: ./ext/List/Util/t/blessed.t *** ./ext/List/Util/t/blessed.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/blessed.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,39 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use Scalar::Util qw(blessed); + use vars qw($t $y $x); + + print "1..7\n"; + + print "not " if blessed(1); + print "ok 1\n"; + + print "not " if blessed('A'); + print "ok 2\n"; + + print "not " if blessed({}); + print "ok 3\n"; + + print "not " if blessed([]); + print "ok 4\n"; + + $y = \$t; + + print "not " if blessed($y); + print "ok 5\n"; + + $x = bless [], "ABC"; + + print "not " unless blessed($x); + print "ok 6\n"; + + print "not " unless blessed($x) eq 'ABC'; + print "ok 7\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/dualvar.t' Index: ./ext/List/Util/t/dualvar.t *** ./ext/List/Util/t/dualvar.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/dualvar.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,46 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + BEGIN { + require Scalar::Util; + + if (grep { /dualvar/ } @Scalar::Util::EXPORT_FAIL) { + print "1..0\n"; + exit; + } + } + + use Scalar::Util qw(dualvar); + + print "1..6\n"; + + $var = dualvar 2.2,"string"; + + print "not " unless $var == 2.2; + print "ok 1\n"; + + print "not " unless $var eq "string"; + print "ok 2\n"; + + $var2 = $var; + + $var++; + + print "not " unless $var == 3.2; + print "ok 3\n"; + + print "not " unless $var ne "string"; + print "ok 4\n"; + + print "not " unless $var2 == 2.2; + print "ok 5\n"; + + print "not " unless $var2 eq "string"; + print "ok 6\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/first.t' Index: ./ext/List/Util/t/first.t *** ./ext/List/Util/t/first.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/first.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,25 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use List::Util qw(first); + + print "1..4\n"; + + print "not " unless defined &first; + print "ok 1\n"; + + print "not " unless 9 == first { 8 == ($_ - 1) } 9,4,5,6; + print "ok 2\n"; + + print "not " if defined(first { 0 } 1,2,3,4); + print "ok 3\n"; + + print "not " if defined(first { 0 }); + print "ok 4\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/max.t' Index: ./ext/List/Util/t/max.t *** ./ext/List/Util/t/max.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/max.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,30 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use List::Util qw(max); + + print "1..5\n"; + + print "not " unless defined &max; + print "ok 1\n"; + + print "not " unless max(1) == 1; + print "ok 2\n"; + + print "not " unless max(1,2) == 2; + print "ok 3\n"; + + print "not " unless max(2,1) == 2; + print "ok 4\n"; + + my @a = map { rand() } 1 .. 20; + my @b = sort { $a <=> $b } @a; + print "not " unless max(@a) == $b[-1]; + print "ok 5\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/maxstr.t' Index: ./ext/List/Util/t/maxstr.t *** ./ext/List/Util/t/maxstr.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/maxstr.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,30 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use List::Util qw(maxstr); + + print "1..5\n"; + + print "not " unless defined &maxstr; + print "ok 1\n"; + + print "not " unless maxstr('a') eq 'a'; + print "ok 2\n"; + + print "not " unless maxstr('a','b') eq 'b'; + print "ok 3\n"; + + print "not " unless maxstr('B','A') eq 'B'; + print "ok 4\n"; + + my @a = map { pack("u", pack("C*",map { int(rand(256))} (0..int(rand(10) + 2)))) } 0 .. 20; + my @b = sort { $a cmp $b } @a; + print "not " unless maxstr(@a) eq $b[-1]; + print "ok 5\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/min.t' Index: ./ext/List/Util/t/min.t *** ./ext/List/Util/t/min.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/min.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,30 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use List::Util qw(min); + + print "1..5\n"; + + print "not " unless defined &min; + print "ok 1\n"; + + print "not " unless min(9) == 9; + print "ok 2\n"; + + print "not " unless min(1,2) == 1; + print "ok 3\n"; + + print "not " unless min(2,1) == 1; + print "ok 4\n"; + + my @a = map { rand() } 1 .. 20; + my @b = sort { $a <=> $b } @a; + print "not " unless min(@a) == $b[0]; + print "ok 5\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/minstr.t' Index: ./ext/List/Util/t/minstr.t *** ./ext/List/Util/t/minstr.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/minstr.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,30 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use List::Util qw(minstr); + + print "1..5\n"; + + print "not " unless defined &minstr; + print "ok 1\n"; + + print "not " unless minstr('a') eq 'a'; + print "ok 2\n"; + + print "not " unless minstr('a','b') eq 'a'; + print "ok 3\n"; + + print "not " unless minstr('B','A') eq 'A'; + print "ok 4\n"; + + my @a = map { pack("u", pack("C*",map { int(rand(256))} (0..int(rand(10) + 2)))) } 0 .. 20; + my @b = sort { $a cmp $b } @a; + print "not " unless minstr(@a) eq $b[0]; + print "ok 5\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/readonly.t' Index: ./ext/List/Util/t/readonly.t *** ./ext/List/Util/t/readonly.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/readonly.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,46 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use Scalar::Util qw(readonly); + + print "1..9\n"; + + print "not " unless readonly(1); + print "ok 1\n"; + + my $var = 2; + + print "not " if readonly($var); + print "ok 2\n"; + + print "not " unless $var == 2; + print "ok 3\n"; + + print "not " unless readonly("fred"); + print "ok 4\n"; + + $var = "fred"; + + print "not " if readonly($var); + print "ok 5\n"; + + print "not " unless $var eq "fred"; + print "ok 6\n"; + + $var = \2; + + print "not " if readonly($var); + print "ok 7\n"; + + print "not " unless readonly($$var); + print "ok 8\n"; + + print "not " if readonly(*STDOUT); + print "ok 9\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/reduce.t' Index: ./ext/List/Util/t/reduce.t *** ./ext/List/Util/t/reduce.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/reduce.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,30 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use List::Util qw(reduce min); + + print "1..5\n"; + + print "not " if defined reduce {}; + print "ok 1\n"; + + print "not " unless 9 == reduce { $a / $b } 756,3,7,4; + print "ok 2\n"; + + print "not " unless 9 == reduce { $a / $b } 9; + print "ok 3\n"; + + @a = map { rand } 0 .. 20; + print "not " unless min(@a) == reduce { $a < $b ? $a : $b } @a; + print "ok 4\n"; + + @a = map { pack("C", int(rand(256))) } 0 .. 20; + print "not " unless join("",@a) eq reduce { $a . $b } @a; + print "ok 5\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/reftype.t' Index: ./ext/List/Util/t/reftype.t *** ./ext/List/Util/t/reftype.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/reftype.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,55 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use Scalar::Util qw(reftype); + use vars qw($t $y $x *F); + use Symbol qw(gensym); + + # Ensure we do not trigger and tied methods + tie *F, 'MyTie'; + + @test = ( + [ undef, 1], + [ undef, 'A'], + [ HASH => {} ], + [ ARRAY => [] ], + [ SCALAR => \$t ], + [ REF => \(\$t) ], + [ GLOB => \*F ], + [ GLOB => gensym ], + [ CODE => sub {} ], + # [ IO => *STDIN{IO} ] the internal sv_reftype returns UNKNOWN + ); + + print "1..", @test*4, "\n"; + + my $i = 1; + foreach $test (@test) { + my($type,$what) = @$test; + my $pack; + foreach $pack (undef,"ABC","0",undef) { + print "# $what\n"; + my $res = reftype($what); + printf "# %s - %s\n", map { defined($_) ? $_ : 'undef' } $type,$res; + print "not " if $type ? $res ne $type : defined($res); + bless $what, $pack if $type && defined $pack; + print "ok ",$i++,"\n"; + } + } + + package MyTie; + + sub TIEHANDLE { bless {} } + sub DESTROY {} + + sub AUTOLOAD { + warn "$AUTOLOAD called"; + exit 1; # May be in an eval + } diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/sum.t' Index: ./ext/List/Util/t/sum.t *** ./ext/List/Util/t/sum.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/sum.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,23 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use List::Util qw(sum); + + print "1..3\n"; + + print "not " if defined sum; + print "ok 1\n"; + + print "not " unless sum(9) == 9; + print "ok 2\n"; + + print "not " unless sum(1,2,3,4) == 10; + print "ok 3\n"; + diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/tainted.t' Index: ./ext/List/Util/t/tainted.t *** ./ext/List/Util/t/tainted.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/tainted.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,38 ---- + #!./perl -T + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + use lib qw(blib/lib blib/arch); + use Scalar::Util qw(tainted); + use Config; + + print "1..5\n"; + + print "not " if tainted(1); + print "ok 1\n"; + + my $var = 2; + + print "not " if tainted($var); + print "ok 2\n"; + + my $key = (keys %ENV)[0]; + + $var = $ENV{$key}; + + print "not " unless tainted($var); + print "ok 3\n"; + + print "not " unless tainted($ENV{$key}); + print "ok 4\n"; + + print "not " if @ARGV and not tainted($ARGV[0]); + print "ok 5\n"; diff -c /dev/null 'perl-5.7.2/ext/List/Util/t/weak.t' Index: ./ext/List/Util/t/weak.t *** ./ext/List/Util/t/weak.t Thu Jan 1 02:00:00 1970 --- ./ext/List/Util/t/weak.t Mon Jul 9 17:10:08 2001 *************** *** 0 **** --- 1,206 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{extensions} !~ /\bList\/Util\b/) { + print "1..0 # Skip: List::Util was not built\n"; + exit 0; + } + } + + BEGIN { + $|=1; + require Scalar::Util; + if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) { + print("1..0\n"); + exit; + } + + $DEBUG = 0; + + if ($DEBUG && eval { require Devel::Peek } ) { + Devel::Peek->import('Dump'); + } + else { + *Dump = sub {}; + } + } + + use Scalar::Util qw(weaken isweak); + print "1..17\n"; + + ######################### End of black magic. + + $cnt = 0; + + sub ok { + ++$cnt; + if($_[0]) { print "ok $cnt\n"; } else {print "not ok $cnt\n"; } + } + + $| = 1; + + if(1) { + + my ($y,$z); + + # + # Case 1: two references, one is weakened, the other is then undef'ed. + # + + { + my $x = "foo"; + $y = \$x; + $z = \$x; + } + print "# START:\n"; + Dump($y); Dump($z); + + ok( $y ne "" and $z ne "" ); + weaken($y); + + print "# WEAK:\n"; + Dump($y); Dump($z); + + ok( $y ne "" and $z ne "" ); + undef($z); + + print "# UNDZ:\n"; + Dump($y); Dump($z); + + ok( not (defined($y) and defined($z)) ); + undef($y); + + print "# UNDY:\n"; + Dump($y); Dump($z); + + ok( not (defined($y) and defined($z)) ); + + print "# FIN:\n"; + Dump($y); Dump($z); + + # exit(0); + + # } + # { + + # + # Case 2: one reference, which is weakened + # + + # kill 5,$$; + + print "# CASE 2:\n"; + + { + my $x = "foo"; + $y = \$x; + } + + ok( $y ne "" ); + print "# BW: \n"; + Dump($y); + weaken($y); + print "# AW: \n"; + Dump($y); + ok( not defined $y ); + + print "# EXITBLOCK\n"; + } + + # exit(0); + + # + # Case 3: a circular structure + # + + # kill 5, $$; + + $flag = 0; + { + my $y = bless {}, Dest; + Dump($y); + print "# 1: $y\n"; + $y->{Self} = $y; + Dump($y); + print "# 2: $y\n"; + $y->{Flag} = \$flag; + print "# 3: $y\n"; + weaken($y->{Self}); + print "# WKED\n"; + ok( $y ne "" ); + print "# VALS: HASH ",$y," SELF ",\$y->{Self}," Y ",\$y, + " FLAG: ",\$y->{Flag},"\n"; + print "# VPRINT\n"; + } + print "# OUT $flag\n"; + ok( $flag == 1 ); + + print "# AFTER\n"; + + undef $flag; + + print "# FLAGU\n"; + + # + # Case 4: a more complicated circular structure + # + + $flag = 0; + { + my $y = bless {}, Dest; + my $x = bless {}, Dest; + $x->{Ref} = $y; + $y->{Ref} = $x; + $x->{Flag} = \$flag; + $y->{Flag} = \$flag; + weaken($x->{Ref}); + } + ok( $flag == 2 ); + + # + # Case 5: deleting a weakref before the other one + # + + { + my $x = "foo"; + $y = \$x; + $z = \$x; + } + + print "# CASE5\n"; + Dump($y); + + weaken($y); + Dump($y); + undef($y); + + ok( not defined $y); + ok($z ne ""); + + + # + # Case 6: test isweakref + # + + $a = 5; + ok(!isweak($a)); + $b = \$a; + ok(!isweak($b)); + weaken($b); + ok(isweak($b)); + $b = \$a; + ok(!isweak($b)); + + $x = {}; + weaken($x->{Y} = \$a); + ok(isweak($x->{Y})); + ok(!isweak($x->{Z})); + + + package Dest; + + sub DESTROY { + print "# INCFLAG\n"; + ${$_[0]{Flag}} ++; + } diff -c 'perl-5.7.1/ext/MIME/Base64/Base64.xs' 'perl-5.7.2/ext/MIME/Base64/Base64.xs' Index: ./ext/MIME/Base64/Base64.xs Prereq: 1.18 *** ./ext/MIME/Base64/Base64.xs Tue Mar 27 23:22:32 2001 --- ./ext/MIME/Base64/Base64.xs Mon Jul 9 17:10:08 2001 *************** *** 1,4 **** ! /* $Id: Base64.xs,v 1.18 2001/02/24 06:27:01 gisle Exp $ Copyright 1997-1999,2001 Gisle Aas --- 1,4 ---- ! /* Copyright 1997-1999,2001 Gisle Aas *************** *** 35,44 **** } #endif - #include "patchlevel.h" - #if PATCHLEVEL <= 4 && !defined(PL_dowarn) - #define PL_dowarn dowarn - #endif #define MAX_LINE 76 /* size of encoded lines */ --- 35,40 ---- *************** *** 89,97 **** int chunk; CODE: - #ifdef sv_utf8_downgrade sv_utf8_downgrade(sv, FALSE); - #endif str = SvPV(sv, rlen); /* SvPV(sv, len) gives warning for signed len */ len = (SSize_t)rlen; --- 85,91 ---- *************** *** 197,203 **** if (PL_dowarn) warn("Premature padding of base64 data"); break; } ! /* printf("c0=%d,c1=%d,c2=%d,c3=%d\n", c[0],c[1],c[2],c[3]);/**/ *r++ = (c[0] << 2) | ((c[1] & 0x30) >> 4); --- 191,197 ---- if (PL_dowarn) warn("Premature padding of base64 data"); break; } ! /* printf("c0=%d,c1=%d,c2=%d,c3=%d\n", c[0],c[1],c[2],c[3]);*/ *r++ = (c[0] << 2) | ((c[1] & 0x30) >> 4); diff -c 'perl-5.7.1/ext/MIME/Base64/Makefile.PL' 'perl-5.7.2/ext/MIME/Base64/Makefile.PL' Index: ./ext/MIME/Base64/Makefile.PL *** ./ext/MIME/Base64/Makefile.PL Sun Mar 25 05:56:25 2001 --- ./ext/MIME/Base64/Makefile.PL Mon Jul 9 17:10:08 2001 *************** *** 3,8 **** --- 3,9 ---- WriteMakefile( NAME => 'MIME::Base64', + MAN3PODS => {}, # Pods will be built by installman. VERSION_FROM => 'Base64.pm', dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, ); diff -c 'perl-5.7.1/ext/MIME/Base64/QuotedPrint.pm' 'perl-5.7.2/ext/MIME/Base64/QuotedPrint.pm' Index: ./ext/MIME/Base64/QuotedPrint.pm Prereq: 2.3 *** ./ext/MIME/Base64/QuotedPrint.pm Wed Mar 28 18:35:37 2001 --- ./ext/MIME/Base64/QuotedPrint.pm Mon Jul 9 17:10:09 2001 *************** *** 64,69 **** --- 64,72 ---- use strict; use vars qw(@ISA @EXPORT $VERSION); + if (ord('A') == 193) { # on EBCDIC machines we need translation help + require Encode; + } require Exporter; @ISA = qw(Exporter); *************** *** 71,86 **** $VERSION = sprintf("%d.%02d", q$Revision: 2.3 $ =~ /(\d+)\.(\d+)/); - use re 'asciirange'; # ranges in regular expressions refer to ASCII - sub encode_qp ($) { my $res = shift; ! $res =~ s/([^ \t\n!-<>-~])/sprintf("=%02X", ord($1))/eg; # rule #2,#3 ! $res =~ s/([ \t]+)$/ ! join('', map { sprintf("=%02X", ord($_)) } ! split('', $1) ! )/egm; # rule #3 (encode whitespace at eol) # rule #5 (lines must be shorter than 76 chars, but we are not allowed # to break =XX escapes. This makes things complicated :-( ) --- 74,114 ---- $VERSION = sprintf("%d.%02d", q$Revision: 2.3 $ =~ /(\d+)\.(\d+)/); sub encode_qp ($) { my $res = shift; ! # Do not mention ranges such as $res =~ s/([^ \t\n!-<>-~])/sprintf("=%02X", ord($1))/eg; ! # since that will not even compile on an EBCDIC machine (where ord('!') > ord('<')). ! if (ord('A') == 193) { # EBCDIC style machine ! if (ord('[') == 173) { ! $res =~ s/([^ \t\n!"#\$%&'()*+,\-.\/0-9:;<>?\@A-Z[\\\]^_`a-z{|}~])/sprintf("=%02X", ord(Encode::encode('iso-8859-1',Encode::decode('cp1047',$1))))/eg; # rule #2,#3 ! $res =~ s/([ \t]+)$/ ! join('', map { sprintf("=%02X", ord(Encode::encode('iso-8859-1',Encode::decode('cp1047',$_)))) } ! split('', $1) ! )/egm; # rule #3 (encode whitespace at eol) ! } ! elsif (ord('[') == 187) { ! $res =~ s/([^ \t\n!"#\$%&'()*+,\-.\/0-9:;<>?\@A-Z[\\\]^_`a-z{|}~])/sprintf("=%02X", ord(Encode::encode('iso-8859-1',Encode::decode('posix-bc',$1))))/eg; # rule #2,#3 ! $res =~ s/([ \t]+)$/ ! join('', map { sprintf("=%02X", ord(Encode::encode('iso-8859-1',Encode::decode('posix-bc',$_)))) } ! split('', $1) ! )/egm; # rule #3 (encode whitespace at eol) ! } ! elsif (ord('[') == 186) { ! $res =~ s/([^ \t\n!"#\$%&'()*+,\-.\/0-9:;<>?\@A-Z[\\\]^_`a-z{|}~])/sprintf("=%02X", ord(Encode::encode('iso-8859-1',Encode::decode('cp37',$1))))/eg; # rule #2,#3 ! $res =~ s/([ \t]+)$/ ! join('', map { sprintf("=%02X", ord(Encode::encode('iso-8859-1',Encode::decode('cp37',$_)))) } ! split('', $1) ! )/egm; # rule #3 (encode whitespace at eol) ! } ! } ! else { # ASCII style machine ! $res =~ s/([^ \t\n!"#\$%&'()*+,\-.\/0-9:;<>?\@A-Z[\\\]^_`a-z{|}~])/sprintf("=%02X", ord($1))/eg; # rule #2,#3 ! $res =~ s/([ \t]+)$/ ! join('', map { sprintf("=%02X", ord($_)) } ! split('', $1) ! )/egm; # rule #3 (encode whitespace at eol) ! } # rule #5 (lines must be shorter than 76 chars, but we are not allowed # to break =XX escapes. This makes things complicated :-( ) *************** *** 101,107 **** my $res = shift; $res =~ s/[ \t]+?(\r?\n)/$1/g; # rule #3 (trailing space must be deleted) $res =~ s/=\r?\n//g; # rule #5 (soft line breaks) ! $res =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge; $res; } --- 129,148 ---- my $res = shift; $res =~ s/[ \t]+?(\r?\n)/$1/g; # rule #3 (trailing space must be deleted) $res =~ s/=\r?\n//g; # rule #5 (soft line breaks) ! if (ord('A') == 193) { # EBCDIC style machine ! if (ord('[') == 173) { ! $res =~ s/=([\da-fA-F]{2})/Encode::encode('cp1047',Encode::decode('iso-8859-1',pack("C", hex($1))))/ge; ! } ! elsif (ord('[') == 187) { ! $res =~ s/=([\da-fA-F]{2})/Encode::encode('posix-bc',Encode::decode('iso-8859-1',pack("C", hex($1))))/ge; ! } ! elsif (ord('[') == 186) { ! $res =~ s/=([\da-fA-F]{2})/Encode::encode('cp37',Encode::decode('iso-8859-1',pack("C", hex($1))))/ge; ! } ! } ! else { # ASCII style machine ! $res =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge; ! } $res; } diff -c /dev/null 'perl-5.7.2/ext/MIME/Base64/t/base64.t' Index: ./ext/MIME/Base64/t/base64.t *** ./ext/MIME/Base64/t/base64.t Thu Jan 1 02:00:00 1970 --- ./ext/MIME/Base64/t/base64.t Mon Jul 9 17:10:09 2001 *************** *** 0 **** --- 1,383 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + use MIME::Base64; + + print "1..283\n"; + + print "# Testing MIME::Base64-", $MIME::Base64::VERSION, "\n"; + + BEGIN { + if (ord('A') == 41) { + *ASCII = sub { return $_[0] }; + } + else { + require Encode; + *ASCII = sub { Encode::encode('ascii',$_[0]) }; + } + } + + $testno = 1; + + encodeTest(); + decodeTest(); + + # This used to generate a warning + print "not " unless decode_base64(encode_base64("foo")) eq "foo"; + print "ok ", $testno++, "\n"; + + sub encodeTest + { + print "# encode test\n"; + + my @encode_tests = ( + # All values + ["\000" => "AA=="], + ["\001" => "AQ=="], + ["\002" => "Ag=="], + ["\003" => "Aw=="], + ["\004" => "BA=="], + ["\005" => "BQ=="], + ["\006" => "Bg=="], + ["\007" => "Bw=="], + ["\010" => "CA=="], + ["\011" => "CQ=="], + ["\012" => "Cg=="], + ["\013" => "Cw=="], + ["\014" => "DA=="], + ["\015" => "DQ=="], + ["\016" => "Dg=="], + ["\017" => "Dw=="], + ["\020" => "EA=="], + ["\021" => "EQ=="], + ["\022" => "Eg=="], + ["\023" => "Ew=="], + ["\024" => "FA=="], + ["\025" => "FQ=="], + ["\026" => "Fg=="], + ["\027" => "Fw=="], + ["\030" => "GA=="], + ["\031" => "GQ=="], + ["\032" => "Gg=="], + ["\033" => "Gw=="], + ["\034" => "HA=="], + ["\035" => "HQ=="], + ["\036" => "Hg=="], + ["\037" => "Hw=="], + ["\040" => "IA=="], + ["\041" => "IQ=="], + ["\042" => "Ig=="], + ["\043" => "Iw=="], + ["\044" => "JA=="], + ["\045" => "JQ=="], + ["\046" => "Jg=="], + ["\047" => "Jw=="], + ["\050" => "KA=="], + ["\051" => "KQ=="], + ["\052" => "Kg=="], + ["\053" => "Kw=="], + ["\054" => "LA=="], + ["\055" => "LQ=="], + ["\056" => "Lg=="], + ["\057" => "Lw=="], + ["\060" => "MA=="], + ["\061" => "MQ=="], + ["\062" => "Mg=="], + ["\063" => "Mw=="], + ["\064" => "NA=="], + ["\065" => "NQ=="], + ["\066" => "Ng=="], + ["\067" => "Nw=="], + ["\070" => "OA=="], + ["\071" => "OQ=="], + ["\072" => "Og=="], + ["\073" => "Ow=="], + ["\074" => "PA=="], + ["\075" => "PQ=="], + ["\076" => "Pg=="], + ["\077" => "Pw=="], + ["\100" => "QA=="], + ["\101" => "QQ=="], + ["\102" => "Qg=="], + ["\103" => "Qw=="], + ["\104" => "RA=="], + ["\105" => "RQ=="], + ["\106" => "Rg=="], + ["\107" => "Rw=="], + ["\110" => "SA=="], + ["\111" => "SQ=="], + ["\112" => "Sg=="], + ["\113" => "Sw=="], + ["\114" => "TA=="], + ["\115" => "TQ=="], + ["\116" => "Tg=="], + ["\117" => "Tw=="], + ["\120" => "UA=="], + ["\121" => "UQ=="], + ["\122" => "Ug=="], + ["\123" => "Uw=="], + ["\124" => "VA=="], + ["\125" => "VQ=="], + ["\126" => "Vg=="], + ["\127" => "Vw=="], + ["\130" => "WA=="], + ["\131" => "WQ=="], + ["\132" => "Wg=="], + ["\133" => "Ww=="], + ["\134" => "XA=="], + ["\135" => "XQ=="], + ["\136" => "Xg=="], + ["\137" => "Xw=="], + ["\140" => "YA=="], + ["\141" => "YQ=="], + ["\142" => "Yg=="], + ["\143" => "Yw=="], + ["\144" => "ZA=="], + ["\145" => "ZQ=="], + ["\146" => "Zg=="], + ["\147" => "Zw=="], + ["\150" => "aA=="], + ["\151" => "aQ=="], + ["\152" => "ag=="], + ["\153" => "aw=="], + ["\154" => "bA=="], + ["\155" => "bQ=="], + ["\156" => "bg=="], + ["\157" => "bw=="], + ["\160" => "cA=="], + ["\161" => "cQ=="], + ["\162" => "cg=="], + ["\163" => "cw=="], + ["\164" => "dA=="], + ["\165" => "dQ=="], + ["\166" => "dg=="], + ["\167" => "dw=="], + ["\170" => "eA=="], + ["\171" => "eQ=="], + ["\172" => "eg=="], + ["\173" => "ew=="], + ["\174" => "fA=="], + ["\175" => "fQ=="], + ["\176" => "fg=="], + ["\177" => "fw=="], + ["\200" => "gA=="], + ["\201" => "gQ=="], + ["\202" => "gg=="], + ["\203" => "gw=="], + ["\204" => "hA=="], + ["\205" => "hQ=="], + ["\206" => "hg=="], + ["\207" => "hw=="], + ["\210" => "iA=="], + ["\211" => "iQ=="], + ["\212" => "ig=="], + ["\213" => "iw=="], + ["\214" => "jA=="], + ["\215" => "jQ=="], + ["\216" => "jg=="], + ["\217" => "jw=="], + ["\220" => "kA=="], + ["\221" => "kQ=="], + ["\222" => "kg=="], + ["\223" => "kw=="], + ["\224" => "lA=="], + ["\225" => "lQ=="], + ["\226" => "lg=="], + ["\227" => "lw=="], + ["\230" => "mA=="], + ["\231" => "mQ=="], + ["\232" => "mg=="], + ["\233" => "mw=="], + ["\234" => "nA=="], + ["\235" => "nQ=="], + ["\236" => "ng=="], + ["\237" => "nw=="], + ["\240" => "oA=="], + ["\241" => "oQ=="], + ["\242" => "og=="], + ["\243" => "ow=="], + ["\244" => "pA=="], + ["\245" => "pQ=="], + ["\246" => "pg=="], + ["\247" => "pw=="], + ["\250" => "qA=="], + ["\251" => "qQ=="], + ["\252" => "qg=="], + ["\253" => "qw=="], + ["\254" => "rA=="], + ["\255" => "rQ=="], + ["\256" => "rg=="], + ["\257" => "rw=="], + ["\260" => "sA=="], + ["\261" => "sQ=="], + ["\262" => "sg=="], + ["\263" => "sw=="], + ["\264" => "tA=="], + ["\265" => "tQ=="], + ["\266" => "tg=="], + ["\267" => "tw=="], + ["\270" => "uA=="], + ["\271" => "uQ=="], + ["\272" => "ug=="], + ["\273" => "uw=="], + ["\274" => "vA=="], + ["\275" => "vQ=="], + ["\276" => "vg=="], + ["\277" => "vw=="], + ["\300" => "wA=="], + ["\301" => "wQ=="], + ["\302" => "wg=="], + ["\303" => "ww=="], + ["\304" => "xA=="], + ["\305" => "xQ=="], + ["\306" => "xg=="], + ["\307" => "xw=="], + ["\310" => "yA=="], + ["\311" => "yQ=="], + ["\312" => "yg=="], + ["\313" => "yw=="], + ["\314" => "zA=="], + ["\315" => "zQ=="], + ["\316" => "zg=="], + ["\317" => "zw=="], + ["\320" => "0A=="], + ["\321" => "0Q=="], + ["\322" => "0g=="], + ["\323" => "0w=="], + ["\324" => "1A=="], + ["\325" => "1Q=="], + ["\326" => "1g=="], + ["\327" => "1w=="], + ["\330" => "2A=="], + ["\331" => "2Q=="], + ["\332" => "2g=="], + ["\333" => "2w=="], + ["\334" => "3A=="], + ["\335" => "3Q=="], + ["\336" => "3g=="], + ["\337" => "3w=="], + ["\340" => "4A=="], + ["\341" => "4Q=="], + ["\342" => "4g=="], + ["\343" => "4w=="], + ["\344" => "5A=="], + ["\345" => "5Q=="], + ["\346" => "5g=="], + ["\347" => "5w=="], + ["\350" => "6A=="], + ["\351" => "6Q=="], + ["\352" => "6g=="], + ["\353" => "6w=="], + ["\354" => "7A=="], + ["\355" => "7Q=="], + ["\356" => "7g=="], + ["\357" => "7w=="], + ["\360" => "8A=="], + ["\361" => "8Q=="], + ["\362" => "8g=="], + ["\363" => "8w=="], + ["\364" => "9A=="], + ["\365" => "9Q=="], + ["\366" => "9g=="], + ["\367" => "9w=="], + ["\370" => "+A=="], + ["\371" => "+Q=="], + ["\372" => "+g=="], + ["\373" => "+w=="], + ["\374" => "/A=="], + ["\375" => "/Q=="], + ["\376" => "/g=="], + ["\377" => "/w=="], + + ["\000\377" => "AP8="], + ["\377\000" => "/wA="], + ["\000\000\000" => "AAAA"], + + ['' => ''], + [ASCII('a') => 'YQ=='], + [ASCII('aa') => 'YWE='], + [ASCII('aaa') => 'YWFh'], + + [ASCII('aaa') => 'YWFh'], + [ASCII('aaa') => 'YWFh'], + [ASCII('aaa') => 'YWFh'], + + + # from HTTP spec + [ASCII('Aladdin:open sesame') => 'QWxhZGRpbjpvcGVuIHNlc2FtZQ=='], + + [ASCII('a') x 100 => 'YWFh' x 33 . 'YQ=='], + + [ASCII('Multipurpose Internet Mail Extensions: The Base64 Content-Transfer-Encoding is designed to represent sequences of octets in a form that is not humanly readable. ') + => "TXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9uczogVGhlIEJhc2U2NCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGlzIGRlc2lnbmVkIHRvIHJlcHJlc2VudCBzZXF1ZW5jZXMgb2Ygb2N0ZXRzIGluIGEgZm9ybSB0aGF0IGlzIG5vdCBodW1hbmx5IHJlYWRhYmxlLiA="], + + ); + + for $test (@encode_tests) { + my($plain, $expected) = ($$test[0], $$test[1]); + + my $encoded = encode_base64($plain, ''); + if ($encoded ne $expected) { + print "test $testno ($plain): expected $expected, got $encoded\n"; + print "not "; + } + my $decoded = decode_base64($encoded); + if ($decoded ne $plain) { + print "test $testno ($encoded): expected $plain, got $decoded\n"; + print "not "; + } + + if (ord('A') != 193) { # perl versions broken on EBCDIC + # Try the old Perl versions too + if ($encoded ne MIME::Base64::old_encode_base64($plain, '')) { + print "old_encode_base64 give different result.\n"; + print "not "; + } + if ($plain ne MIME::Base64::old_decode_base64($encoded)) { + print "old_decode_base64 give different result.\n"; + print "not "; + } + } + + print "ok $testno\n"; + $testno++; + } + } + + sub decodeTest + { + print "# decode test\n"; + + local $SIG{__WARN__} = sub { print $_[0] }; # avoid warnings on stderr + + my @decode_tests = ( + ['YWE=' => ASCII('aa')], + [' YWE=' => ASCII('aa')], + ['Y WE=' => ASCII('aa')], + ['YWE= ' => ASCII('aa')], + ["Y\nW\r\nE=" => ASCII('aa')], + + # These will generate some warnings + ['YWE=====' => ASCII('aa')], # extra padding + ['YWE' => ASCII('aa')], # missing padding + ['YWFh====' => ASCII('aaa')], + ['YQ' => ASCII('a')], + ['Y' => ''], + ['x==' => ''], + ['' => ''], + [undef() => ''], + ); + + for $test (@decode_tests) { + my($encoded, $expected) = ($$test[0], $$test[1]); + + my $decoded = decode_base64($encoded); + if ($decoded ne $expected) { + die "test $testno ($encoded): expected $expected, got $decoded\n"; + } + print "ok $testno\n"; + $testno++; + } + } diff -c /dev/null 'perl-5.7.2/ext/MIME/Base64/t/qp.t' Index: ./ext/MIME/Base64/t/qp.t *** ./ext/MIME/Base64/t/qp.t Thu Jan 1 02:00:00 1970 --- ./ext/MIME/Base64/t/qp.t Mon Jul 9 17:10:09 2001 *************** *** 0 **** --- 1,113 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + use MIME::QuotedPrint; + + $x70 = "x" x 70; + + @tests = + ( + # plain ascii should not be encoded + ["quoted printable" => + "quoted printable"], + + # 8-bit chars should be encoded + ["v\xe5re kj\xe6re norske tegn b\xf8r \xe6res" => + "v=E5re kj=E6re norske tegn b=F8r =E6res"], + + # trailing space should be encoded + [" " => "=20=20"], + ["\tt\t" => "\tt=09"], + ["test \ntest\n\t \t \n" => "test=20=20\ntest\n=09=20=09=20\n"], + + # "=" is special an should be decoded + ["=\n" => "=3D\n"], + ["\0\xff" => "=00=FF"], + + # Very long lines should be broken (not more than 76 chars + ["The Quoted-Printable encoding is intended to represent data that largly consists of octets that correspond to printable characters in the ASCII character set." => + "The Quoted-Printable encoding is intended to represent data that largly con= + sists of octets that correspond to printable characters in the ASCII charac= + ter set." + ], + + # Long lines after short lines were broken through 2.01. + ["short line + In America, any boy may become president and I suppose that's just one of the risks he takes. -- Adlai Stevenson" => + "short line + In America, any boy may become president and I suppose that's just one of t= + he risks he takes. -- Adlai Stevenson"], + + # My (roderick@argon.org) first crack at fixing that bug failed for + # multiple long lines. + ["College football is a game which would be much more interesting if the faculty played instead of the students, and even more interesting if the + trustees played. There would be a great increase in broken arms, legs, and necks, and simultaneously an appreciable diminution in the loss to humanity. -- H. L. Mencken" => + "College football is a game which would be much more interesting if the facu= + lty played instead of the students, and even more interesting if the + trustees played. There would be a great increase in broken arms, legs, and= + necks, and simultaneously an appreciable diminution in the loss to humanit= + y. -- H. L. Mencken"], + + # Don't break a line that's near but not over 76 chars. + ["$x70!23" => "$x70!23"], + ["$x70!234" => "$x70!234"], + ["$x70!2345" => "$x70!2345"], + ["$x70!23456" => "$x70!23456"], + ["$x70!23\n" => "$x70!23\n"], + ["$x70!234\n" => "$x70!234\n"], + ["$x70!2345\n" => "$x70!2345\n"], + ["$x70!23456\n" => "$x70!23456\n"], + + # Not allowed to break =XX escapes using soft line break + ["$x70===xxxx" => "$x70=3D=\n=3D=3Dxxxx"], + ["$x70!===xxx" => "$x70!=3D=\n=3D=3Dxxx"], + ["$x70!!===xx" => "$x70!!=3D=\n=3D=3Dxx"], + ["$x70!!!===x" => "$x70!!!=\n=3D=3D=3Dx"], + # ^ + # 70123456| + # max + # line width + ); + + $notests = @tests + 2; + print "1..$notests\n"; + + $testno = 0; + for (@tests) { + $testno++; + ($plain, $encoded) = @$_; + if (ord('A') == 193) { # EBCDIC 8 bit chars are different + if ($testno == 2) { $plain =~ s/\xe5/\x47/; $plain =~ s/\xe6/\x9c/g; $plain =~ s/\xf8/\x70/; } + if ($testno == 7) { $plain =~ s/\xff/\xdf/; } + } + $x = encode_qp($plain); + if ($x ne $encoded) { + print "Encode test failed\n"; + print "Got: '$x'\n"; + print "Expected: '$encoded'\n"; + print "not ok $testno\n"; + next; + } + $x = decode_qp($encoded); + if ($x ne $plain) { + print "Decode test failed\n"; + print "Got: '$x'\n"; + print "Expected: '$plain'\n"; + print "not ok $testno\n"; + next; + } + print "ok $testno\n"; + } + + # Some extra testing for a case that was wrong until libwww-perl-5.09 + print "not " unless decode_qp("foo \n\nfoo =\n\nfoo=20\n\n") eq + "foo\n\nfoo \nfoo \n\n"; + $testno++; print "ok $testno\n"; + + # Same test but with "\r\n" terminated lines + print "not " unless decode_qp("foo \r\n\r\nfoo =\r\n\r\nfoo=20\r\n\r\n") eq + "foo\r\n\r\nfoo \r\nfoo \r\n\r\n"; + $testno++; print "ok $testno\n"; + diff -c /dev/null 'perl-5.7.2/ext/MIME/Base64/t/unicode.t' Index: ./ext/MIME/Base64/t/unicode.t *** ./ext/MIME/Base64/t/unicode.t Thu Jan 1 02:00:00 1970 --- ./ext/MIME/Base64/t/unicode.t Mon Jul 9 17:10:09 2001 *************** *** 0 **** --- 1,16 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + } + + print "1..1\n"; + + require MIME::Base64; + + eval { + MIME::Base64::encode(v300); + }; + + print "not " unless $@; + print "ok 1\n"; + diff -c 'perl-5.7.1/ext/NDBM_File/NDBM_File.xs' 'perl-5.7.2/ext/NDBM_File/NDBM_File.xs' Index: ./ext/NDBM_File/NDBM_File.xs *** ./ext/NDBM_File/NDBM_File.xs Tue Mar 6 04:04:53 2001 --- ./ext/NDBM_File/NDBM_File.xs Mon Jul 9 17:10:09 2001 *************** *** 53,59 **** DBM * dbp ; RETVAL = NULL ; ! if (dbp = dbm_open(filename, flags, mode)) { RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ; Zero(RETVAL, 1, NDBM_File_type) ; RETVAL->dbp = dbp ; --- 53,59 ---- DBM * dbp ; RETVAL = NULL ; ! if ((dbp = dbm_open(filename, flags, mode))) { RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ; Zero(RETVAL, 1, NDBM_File_type) ; RETVAL->dbp = dbp ; diff -c /dev/null 'perl-5.7.2/ext/NDBM_File/hints/linux.pl' Index: ./ext/NDBM_File/hints/linux.pl *** ./ext/NDBM_File/hints/linux.pl Thu Jan 1 02:00:00 1970 --- ./ext/NDBM_File/hints/linux.pl Mon Jul 9 17:10:09 2001 *************** *** 0 **** --- 1,6 ---- + # Some distributions have both gdbm and ndbm + # Prefer gdbm to avoid the broken ndbm in some distributions + # (no null key support) + # Jonathan Stowe + use Config; + $self->{LIBS} = ['-lgdbm'] if $Config{libs} =~ /(?:^|\s)-lgdbm(?:\s|$)/; diff -c /dev/null 'perl-5.7.2/ext/NDBM_File/ndbm.t' Index: ./ext/NDBM_File/ndbm.t *** ./ext/NDBM_File/ndbm.t Thu Jan 1 02:00:00 1970 --- ./ext/NDBM_File/ndbm.t Mon Jul 9 17:10:09 2001 *************** *** 0 **** --- 1,420 ---- + #!./perl + + # $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $ + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bNDBM_File\b/) { + print "1..0 # Skip: NDBM_File was not built\n"; + exit 0; + } + } + + use strict; + use warnings; + + sub ok + { + my $no = shift ; + my $result = shift ; + + print "not " unless $result ; + print "ok $no\n" ; + } + + require NDBM_File; + #If Fcntl is not available, try 0x202 or 0x102 for O_RDWR|O_CREAT + use Fcntl; + + print "1..65\n"; + + unlink ; + + umask(0); + my %h; + ok(1, tie(%h,'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)); + + my $Dfile = "Op.dbmx.pag"; + if (! -e $Dfile) { + ($Dfile) = ; + } + if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare') { + print "ok 2 # Skipped: different file permission semantics\n"; + } + else { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n"); + } + my $i = 0; + while (my ($key,$value) = each(%h)) { + $i++; + } + print (!$i ? "ok 3\n" : "not ok 3\n"); + + $h{'goner1'} = 'snork'; + + $h{'abc'} = 'ABC'; + $h{'def'} = 'DEF'; + $h{'jkl','mno'} = "JKL\034MNO"; + $h{'a',2,3,4,5} = join("\034",'A',2,3,4,5); + $h{'a'} = 'A'; + $h{'b'} = 'B'; + $h{'c'} = 'C'; + $h{'d'} = 'D'; + $h{'e'} = 'E'; + $h{'f'} = 'F'; + $h{'g'} = 'G'; + $h{'h'} = 'H'; + $h{'i'} = 'I'; + + $h{'goner2'} = 'snork'; + delete $h{'goner2'}; + + untie(%h); + print (tie(%h,'NDBM_File','Op.dbmx', &O_RDWR, 0640) ? "ok 4\n" : "not ok 4\n"); + + $h{'j'} = 'J'; + $h{'k'} = 'K'; + $h{'l'} = 'L'; + $h{'m'} = 'M'; + $h{'n'} = 'N'; + $h{'o'} = 'O'; + $h{'p'} = 'P'; + $h{'q'} = 'Q'; + $h{'r'} = 'R'; + $h{'s'} = 'S'; + $h{'t'} = 'T'; + $h{'u'} = 'U'; + $h{'v'} = 'V'; + $h{'w'} = 'W'; + $h{'x'} = 'X'; + $h{'y'} = 'Y'; + $h{'z'} = 'Z'; + + $h{'goner3'} = 'snork'; + + delete $h{'goner1'}; + delete $h{'goner3'}; + + my @keys = keys(%h); + my @values = values(%h); + + if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";} + + while (my ($key,$value) = each(%h)) { + if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) { + $key =~ y/a-z/A-Z/; + $i++ if $key eq $value; + } + } + + if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";} + + @keys = ('blurfl', keys(%h), 'dyick'); + if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";} + + $h{'foo'} = ''; + $h{''} = 'bar'; + + # check cache overflow and numeric keys and contents + my $ok = 1; + for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; } + for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; } + print ($ok ? "ok 8\n" : "not ok 8\n"); + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print ($size > 0 ? "ok 9\n" : "not ok 9\n"); + + @h{0..200} = 200..400; + my @foo = @h{0..200}; + print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n"; + + print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n"); + print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n"); + + untie %h; + unlink 'Op.dbmx.dir', $Dfile; + + { + # sub-class test + + package Another ; + + use strict ; + use warnings ; + + open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ; + print FILE <<'EOM' ; + + package SubDB ; + + use strict ; + use warnings ; + use vars qw(@ISA @EXPORT) ; + + require Exporter ; + use NDBM_File; + @ISA=qw(NDBM_File); + @EXPORT = @NDBM_File::EXPORT if defined @NDBM_File::EXPORT ; + + sub STORE { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::STORE($key, $value * 2) ; + } + + sub FETCH { + my $self = shift ; + my $key = shift ; + $self->SUPER::FETCH($key) - 1 ; + } + + sub A_new_method + { + my $self = shift ; + my $key = shift ; + my $value = $self->FETCH($key) ; + return "[[$value]]" ; + } + + 1 ; + EOM + + close FILE ; + + BEGIN { push @INC, '.'; } + + eval 'use SubDB ; use Fcntl ; '; + main::ok(13, $@ eq "") ; + my %h ; + my $X ; + eval ' + $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640 ); + ' ; + + main::ok(14, $@ eq "") ; + + my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ; + main::ok(15, $@ eq "") ; + main::ok(16, $ret == 5) ; + + $ret = eval '$X->A_new_method("fred") ' ; + main::ok(17, $@ eq "") ; + main::ok(18, $ret eq "[[5]]") ; + + undef $X; + untie(%h); + unlink "SubDB.pm", ; + + } + + { + # DBM Filter tests + use strict ; + use warnings ; + my (%h, $db) ; + my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + + sub checkOutput + { + my($fk, $sk, $fv, $sv) = @_ ; + return + $fetch_key eq $fk && $store_key eq $sk && + $fetch_value eq $fv && $store_value eq $sv && + $_ eq 'original' ; + } + + unlink ; + ok(19, $db = tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + + $db->filter_fetch_key (sub { $fetch_key = $_ }) ; + $db->filter_store_key (sub { $store_key = $_ }) ; + $db->filter_fetch_value (sub { $fetch_value = $_}) ; + $db->filter_store_value (sub { $store_value = $_ }) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + # fk sk fv sv + ok(20, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(21, $h{"fred"} eq "joe"); + # fk sk fv sv + ok(22, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(23, $db->FIRSTKEY() eq "fred") ; + # fk sk fv sv + ok(24, checkOutput( "fred", "", "", "")) ; + + # replace the filters, but remember the previous set + my ($old_fk) = $db->filter_fetch_key + (sub { $_ = uc $_ ; $fetch_key = $_ }) ; + my ($old_sk) = $db->filter_store_key + (sub { $_ = lc $_ ; $store_key = $_ }) ; + my ($old_fv) = $db->filter_fetch_value + (sub { $_ = "[$_]"; $fetch_value = $_ }) ; + my ($old_sv) = $db->filter_store_value + (sub { s/o/x/g; $store_value = $_ }) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"Fred"} = "Joe" ; + # fk sk fv sv + ok(25, checkOutput( "", "fred", "", "Jxe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(26, $h{"Fred"} eq "[Jxe]"); + # fk sk fv sv + ok(27, checkOutput( "", "fred", "[Jxe]", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(28, $db->FIRSTKEY() eq "FRED") ; + # fk sk fv sv + ok(29, checkOutput( "FRED", "", "", "")) ; + + # put the original filters back + $db->filter_fetch_key ($old_fk); + $db->filter_store_key ($old_sk); + $db->filter_fetch_value ($old_fv); + $db->filter_store_value ($old_sv); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(30, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(31, $h{"fred"} eq "joe"); + ok(32, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(33, $db->FIRSTKEY() eq "fred") ; + ok(34, checkOutput( "fred", "", "", "")) ; + + # delete the filters + $db->filter_fetch_key (undef); + $db->filter_store_key (undef); + $db->filter_fetch_value (undef); + $db->filter_store_value (undef); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(35, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(36, $h{"fred"} eq "joe"); + ok(37, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(38, $db->FIRSTKEY() eq "fred") ; + ok(39, checkOutput( "", "", "", "")) ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter with a closure + + use strict ; + use warnings ; + my (%h, $db) ; + + unlink ; + ok(40, $db = tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + + my %result = () ; + + sub Closure + { + my ($name) = @_ ; + my $count = 0 ; + my @kept = () ; + + return sub { ++$count ; + push @kept, $_ ; + $result{$name} = "$name - $count: [@kept]" ; + } + } + + $db->filter_store_key(Closure("store key")) ; + $db->filter_store_value(Closure("store value")) ; + $db->filter_fetch_key(Closure("fetch key")) ; + $db->filter_fetch_value(Closure("fetch value")) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + ok(41, $result{"store key"} eq "store key - 1: [fred]"); + ok(42, $result{"store value"} eq "store value - 1: [joe]"); + ok(43, !defined $result{"fetch key"} ); + ok(44, !defined $result{"fetch value"} ); + ok(45, $_ eq "original") ; + + ok(46, $db->FIRSTKEY() eq "fred") ; + ok(47, $result{"store key"} eq "store key - 1: [fred]"); + ok(48, $result{"store value"} eq "store value - 1: [joe]"); + ok(49, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(50, ! defined $result{"fetch value"} ); + ok(51, $_ eq "original") ; + + $h{"jim"} = "john" ; + ok(52, $result{"store key"} eq "store key - 2: [fred jim]"); + ok(53, $result{"store value"} eq "store value - 2: [joe john]"); + ok(54, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(55, ! defined $result{"fetch value"} ); + ok(56, $_ eq "original") ; + + ok(57, $h{"fred"} eq "joe"); + ok(58, $result{"store key"} eq "store key - 3: [fred jim fred]"); + ok(59, $result{"store value"} eq "store value - 2: [joe john]"); + ok(60, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(61, $result{"fetch value"} eq "fetch value - 1: [joe]"); + ok(62, $_ eq "original") ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter recursion detection + use strict ; + use warnings ; + my (%h, $db) ; + unlink ; + + ok(63, $db = tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + + $db->filter_store_key (sub { $_ = $h{$_} }) ; + + eval '$h{1} = 1234' ; + ok(64, $@ =~ /^recursion detected in filter_store_key at/ ); + + undef $db ; + untie %h; + unlink ; + } + + { + # Bug ID 20001013.009 + # + # test that $hash{KEY} = undef doesn't produce the warning + # Use of uninitialized value in null operation + use warnings ; + use strict ; + use NDBM_File ; + + unlink ; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + ok(65, tie(%h, 'NDBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + } diff -c 'perl-5.7.1/ext/ODBM_File/ODBM_File.xs' 'perl-5.7.2/ext/ODBM_File/ODBM_File.xs' Index: ./ext/ODBM_File/ODBM_File.xs *** ./ext/ODBM_File/ODBM_File.xs Tue Mar 6 04:04:54 2001 --- ./ext/ODBM_File/ODBM_File.xs Mon Jul 9 17:10:09 2001 *************** *** 15,20 **** --- 15,30 ---- # endif #endif + #ifndef HAS_DBMINIT_PROTO + int dbminit(char* filename); + int dbmclose(void); + datum fetch(datum key); + int store(datum key, datum dat); + int delete(datum key); + datum firstkey(void); + datum nextkey(datum key); + #endif + #ifdef DBM_BUG_DUPLICATE_FREE /* * DBM on at least Ultrix and HPUX call dbmclose() from dbminit(), diff -c /dev/null 'perl-5.7.2/ext/ODBM_File/odbm.t' Index: ./ext/ODBM_File/odbm.t *** ./ext/ODBM_File/odbm.t Thu Jan 1 02:00:00 1970 --- ./ext/ODBM_File/odbm.t Mon Jul 9 17:10:10 2001 *************** *** 0 **** --- 1,437 ---- + #!./perl + + # $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $ + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bODBM_File\b/) { + print "1..0 # Skip: ODBM_File was not built\n"; + exit 0; + } + } + + use strict; + use warnings; + + sub ok + { + my $no = shift ; + my $result = shift ; + + print "not " unless $result ; + print "ok $no\n" ; + } + + require ODBM_File; + #If Fcntl is not available, try 0x202 or 0x102 for O_RDWR|O_CREAT + use Fcntl; + + print "1..66\n"; + + unlink ; + + umask(0); + my %h; + ok(1, tie(%h,'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)); + + my $Dfile = "Op.dbmx.pag"; + if (! -e $Dfile) { + ($Dfile) = ; + } + if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare') { + print "ok 2 # Skipped: different file permission semantics\n"; + } + else { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n"); + } + my $i = 0; + while (my ($key,$value) = each(%h)) { + $i++; + } + print (!$i ? "ok 3\n" : "not ok 3\n"); + + $h{'goner1'} = 'snork'; + + $h{'abc'} = 'ABC'; + $h{'def'} = 'DEF'; + $h{'jkl','mno'} = "JKL\034MNO"; + $h{'a',2,3,4,5} = join("\034",'A',2,3,4,5); + $h{'a'} = 'A'; + $h{'b'} = 'B'; + $h{'c'} = 'C'; + $h{'d'} = 'D'; + $h{'e'} = 'E'; + $h{'f'} = 'F'; + $h{'g'} = 'G'; + $h{'h'} = 'H'; + $h{'i'} = 'I'; + + $h{'goner2'} = 'snork'; + delete $h{'goner2'}; + + untie(%h); + print (tie(%h,'ODBM_File','Op.dbmx', O_RDWR, 0640) ? "ok 4\n" : "not ok 4\n"); + + $h{'j'} = 'J'; + $h{'k'} = 'K'; + $h{'l'} = 'L'; + $h{'m'} = 'M'; + $h{'n'} = 'N'; + $h{'o'} = 'O'; + $h{'p'} = 'P'; + $h{'q'} = 'Q'; + $h{'r'} = 'R'; + $h{'s'} = 'S'; + $h{'t'} = 'T'; + $h{'u'} = 'U'; + $h{'v'} = 'V'; + $h{'w'} = 'W'; + $h{'x'} = 'X'; + $h{'y'} = 'Y'; + $h{'z'} = 'Z'; + + $h{'goner3'} = 'snork'; + + delete $h{'goner1'}; + delete $h{'goner3'}; + + my @keys = keys(%h); + my @values = values(%h); + + if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";} + + while (my ($key,$value) = each(%h)) { + if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) { + $key =~ y/a-z/A-Z/; + $i++ if $key eq $value; + } + } + + if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";} + + @keys = ('blurfl', keys(%h), 'dyick'); + if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";} + + $h{'foo'} = ''; + $h{''} = 'bar'; + + # check cache overflow and numeric keys and contents + my $ok = 1; + for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; } + for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; } + print ($ok ? "ok 8\n" : "not ok 8\n"); + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print ($size > 0 ? "ok 9\n" : "not ok 9\n"); + + @h{0..200} = 200..400; + my @foo = @h{0..200}; + print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n"; + + print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n"); + print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n"); + + untie %h; + unlink 'Op.dbmx.dir', $Dfile; + + { + # sub-class test + + package Another ; + + use strict ; + use warnings ; + + open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ; + print FILE <<'EOM' ; + + package SubDB ; + + use strict ; + use warnings ; + use vars qw(@ISA @EXPORT) ; + + require Exporter ; + use ODBM_File; + @ISA=qw(ODBM_File); + @EXPORT = @ODBM_File::EXPORT ; + + sub STORE { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::STORE($key, $value * 2) ; + } + + sub FETCH { + my $self = shift ; + my $key = shift ; + $self->SUPER::FETCH($key) - 1 ; + } + + sub A_new_method + { + my $self = shift ; + my $key = shift ; + my $value = $self->FETCH($key) ; + return "[[$value]]" ; + } + + 1 ; + EOM + + close FILE ; + + BEGIN { push @INC, '.'; } + + eval 'use SubDB ; use Fcntl ;'; + main::ok(13, $@ eq "") ; + my %h ; + my $X ; + eval ' + $X = tie(%h, "SubDB","dbhash.tmp", O_RDWR|O_CREAT, 0640 ); + ' ; + + main::ok(14, $@ eq "") ; + + my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ; + main::ok(15, $@ eq "") ; + main::ok(16, $ret == 5) ; + + $ret = eval '$X->A_new_method("fred") ' ; + main::ok(17, $@ eq "") ; + main::ok(18, $ret eq "[[5]]") ; + + undef $X; + untie(%h); + unlink "SubDB.pm", ; + + } + + { + # DBM Filter tests + use strict ; + use warnings ; + my (%h, $db) ; + my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + + sub checkOutput + { + my($fk, $sk, $fv, $sv) = @_ ; + print "# ", join('|', $fetch_key, $fk, $store_key, $sk, + $fetch_value, $fv, $store_value, $sv, $_), "\n"; + return + $fetch_key eq $fk && $store_key eq $sk && + $fetch_value eq $fv && $store_value eq $sv && + $_ eq 'original' ; + } + + unlink ; + ok(19, $db = tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + + $db->filter_fetch_key (sub { $fetch_key = $_ }) ; + $db->filter_store_key (sub { $store_key = $_ }) ; + $db->filter_fetch_value (sub { $fetch_value = $_}) ; + $db->filter_store_value (sub { $store_value = $_ }) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + # fk sk fv sv + ok(20, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(21, $h{"fred"} eq "joe"); + # fk sk fv sv + ok(22, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(23, $db->FIRSTKEY() eq "fred") ; + # fk sk fv sv + ok(24, checkOutput( "fred", "", "", "")) ; + + # replace the filters, but remember the previous set + my ($old_fk) = $db->filter_fetch_key + (sub { $_ = uc $_ ; $fetch_key = $_ }) ; + my ($old_sk) = $db->filter_store_key + (sub { $_ = lc $_ ; $store_key = $_ }) ; + my ($old_fv) = $db->filter_fetch_value + (sub { $_ = "[$_]"; $fetch_value = $_ }) ; + my ($old_sv) = $db->filter_store_value + (sub { s/o/x/g; $store_value = $_ }) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"Fred"} = "Joe" ; + # fk sk fv sv + ok(25, checkOutput( "", "fred", "", "Jxe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(26, $h{"Fred"} eq "[Jxe]"); + # fk sk fv sv + ok(27, checkOutput( "", "fred", "[Jxe]", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(28, $db->FIRSTKEY() eq "FRED") ; + # fk sk fv sv + ok(29, checkOutput( "FRED", "", "", "")) ; + + # put the original filters back + $db->filter_fetch_key ($old_fk); + $db->filter_store_key ($old_sk); + $db->filter_fetch_value ($old_fv); + $db->filter_store_value ($old_sv); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(30, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(31, $h{"fred"} eq "joe"); + ok(32, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(33, $db->FIRSTKEY() eq "fred") ; + ok(34, checkOutput( "fred", "", "", "")) ; + + # delete the filters + $db->filter_fetch_key (undef); + $db->filter_store_key (undef); + $db->filter_fetch_value (undef); + $db->filter_store_value (undef); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(35, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(36, $h{"fred"} eq "joe"); + ok(37, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(38, $db->FIRSTKEY() eq "fred") ; + ok(39, checkOutput( "", "", "", "")) ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter with a closure + + use strict ; + use warnings ; + my (%h, $db) ; + + unlink ; + ok(40, $db = tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + + my %result = () ; + + sub Closure + { + my ($name) = @_ ; + my $count = 0 ; + my @kept = () ; + + return sub { ++$count ; + push @kept, $_ ; + $result{$name} = "$name - $count: [@kept]" ; + } + } + + $db->filter_store_key(Closure("store key")) ; + $db->filter_store_value(Closure("store value")) ; + $db->filter_fetch_key(Closure("fetch key")) ; + $db->filter_fetch_value(Closure("fetch value")) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + ok(41, $result{"store key"} eq "store key - 1: [fred]"); + ok(42, $result{"store value"} eq "store value - 1: [joe]"); + ok(43, !defined $result{"fetch key"} ); + ok(44, !defined $result{"fetch value"} ); + ok(45, $_ eq "original") ; + + ok(46, $db->FIRSTKEY() eq "fred") ; + ok(47, $result{"store key"} eq "store key - 1: [fred]"); + ok(48, $result{"store value"} eq "store value - 1: [joe]"); + ok(49, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(50, ! defined $result{"fetch value"} ); + ok(51, $_ eq "original") ; + + $h{"jim"} = "john" ; + ok(52, $result{"store key"} eq "store key - 2: [fred jim]"); + ok(53, $result{"store value"} eq "store value - 2: [joe john]"); + ok(54, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(55, ! defined $result{"fetch value"} ); + ok(56, $_ eq "original") ; + + ok(57, $h{"fred"} eq "joe"); + ok(58, $result{"store key"} eq "store key - 3: [fred jim fred]"); + ok(59, $result{"store value"} eq "store value - 2: [joe john]"); + ok(60, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(61, $result{"fetch value"} eq "fetch value - 1: [joe]"); + ok(62, $_ eq "original") ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter recursion detection + use strict ; + use warnings ; + my (%h, $db) ; + unlink ; + + ok(63, $db = tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + + $db->filter_store_key (sub { $_ = $h{$_} }) ; + + eval '$h{1} = 1234' ; + ok(64, $@ =~ /^recursion detected in filter_store_key at/ ); + + undef $db ; + untie %h; + unlink ; + } + + { + # Bug ID 20001013.009 + # + # test that $hash{KEY} = undef doesn't produce the warning + # Use of uninitialized value in null operation + use warnings ; + use strict ; + use ODBM_File ; + + unlink ; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + ok(65, tie(%h, 'ODBM_File','Op.dbmx', O_RDWR|O_CREAT, 0640)) ; + $h{ABC} = undef; + ok(66, $a eq "") ; + untie %h; + unlink ; + } + + if ($^O eq 'hpux') { + print < {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'POSIX.pm', + realclean => {FILES=> 'constants.c constants.xs'}, + ); + + my @names = + ( + qw(ARG_MAX B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400 B300 B38400 B4800 + B50 B600 B75 B9600 BRKINT BUFSIZ CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX + CLK_TCK CLOCAL CLOCKS_PER_SEC CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB E2BIG + EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF + EBUSY ECHILD ECHO ECHOE ECHOK ECHONL ECONNABORTED ECONNREFUSED + ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG + EHOSTDOWN EHOSTUNREACH EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR + ELOOP EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET + ENETUNREACH ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM + ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK + ENOTTY ENXIO EOF EOPNOTSUPP EPERM EPFNOSUPPORT EPIPE EPROCLIM + EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART EROFS ESHUTDOWN + ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY + EUSERS EWOULDBLOCK EXDEV FD_CLOEXEC FILENAME_MAX F_DUPFD F_GETFD + F_GETFL F_GETLK F_OK F_RDLCK F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK + F_WRLCK HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR INLCR INPCK + INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON LC_ALL LC_COLLATE LC_CTYPE + LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LINK_MAX LONG_MAX LONG_MIN + L_ctermid L_cuserid L_tmpnam MAX_CANON MAX_INPUT MB_CUR_MAX MB_LEN_MAX + NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST O_ACCMODE O_APPEND + O_CREAT O_EXCL O_NOCTTY O_NONBLOCK O_RDONLY O_RDWR O_TRUNC O_WRONLY + PARENB PARMRK PARODD PATH_MAX PIPE_BUF RAND_MAX R_OK SCHAR_MAX + SCHAR_MIN SEEK_CUR SEEK_END SEEK_SET SHRT_MAX SHRT_MIN SIGABRT SIGALRM + SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT + SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 + SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SSIZE_MAX STDERR_FILENO STDIN_FILENO + STDOUT_FILENO STREAM_MAX S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO + S_IRWXU S_ISGID S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH + S_IXUSR TCIFLUSH TCIOFF TCIOFLUSH TCION TCOFLUSH TCOOFF TCOON + TCSADRAIN TCSAFLUSH TCSANOW TMP_MAX TOSTOP TZNAME_MAX VEOF VEOL VERASE + VINTR VKILL VMIN VQUIT VSTART VSTOP VSUSP VTIME WNOHANG WUNTRACED W_OK + X_OK _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON _PC_MAX_INPUT + _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX _PC_PIPE_BUF _PC_VDISABLE + _SC_ARG_MAX _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL _SC_NGROUPS_MAX + _SC_OPEN_MAX _SC_SAVED_IDS _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION), + {name=>"EXIT_FAILURE", default=>["IV", "1"]}, + {name=>"EXIT_SUCCESS", default=>["IV", "0"]}, + {name=>"SIG_DFL", value=>"(IV)SIG_DFL"}, + {name=>"SIG_ERR", value=>"(IV)SIG_ERR"}, + {name=>"SIG_IGN", value=>"(IV)SIG_IGN"}, + # L_tmpnam[e] was a typo--retained for compatibility + {name=>"L_tmpname", value=>"L_tmpnam"}, + {name=>"NULL", value=>"0"}, + {name=>"_POSIX_JOB_CONTROL", type=>"YES", default=>["IV", "0"]}, + {name=>"_POSIX_SAVED_IDS", type=>"YES", default=>["IV", "0"]}, + {name=>"HUGE_VAL", type=>"NV", + macro=>[<<'END', "#endif\n"], + #if (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)) || defined(HUGE_VAL) + /* HUGE_VALL is admittedly non-POSIX but if we are using long doubles + * we might as well use long doubles. --jhi */ + END + value=>' + #if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL) + HUGE_VALL + #else + HUGE_VAL + #endif + '}); + + push @names, {name=>$_, type=>"UV"} + foreach (qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK SA_RESETHAND + SA_RESTART SA_SIGINFO UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX)); + push @names, {name=>$_, type=>"NV"} + foreach (qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG DBL_MAX DBL_MAX_10_EXP + DBL_MAX_EXP DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP + FLT_DIG FLT_EPSILON FLT_MANT_DIG FLT_MAX FLT_MAX_10_EXP + FLT_MAX_EXP FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP FLT_RADIX + FLT_ROUNDS + LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP + LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)); + + push @names, {name=>$_, type=>"IV", default=>["IV", "0"]} + foreach (qw(_POSIX_ARG_MAX _POSIX_CHILD_MAX _POSIX_CHOWN_RESTRICTED + _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT _POSIX_NAME_MAX + _POSIX_NGROUPS_MAX _POSIX_NO_TRUNC _POSIX_OPEN_MAX + _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX + _POSIX_STREAM_MAX _POSIX_TZNAME_MAX _POSIX_VDISABLE _POSIX_VERSION + )); + + WriteConstants( + NAME => 'POSIX', + NAMES => \@names, ); diff -c 'perl-5.7.1/ext/POSIX/POSIX.pm' 'perl-5.7.2/ext/POSIX/POSIX.pm' Index: ./ext/POSIX/POSIX.pm *** ./ext/POSIX/POSIX.pm Wed Mar 21 03:24:12 2001 --- ./ext/POSIX/POSIX.pm Mon Jul 9 17:10:10 2001 *************** *** 23,30 **** XSLoader::load 'POSIX', $VERSION; ! my $EINVAL = constant("EINVAL", 0); ! my $EAGAIN = constant("EAGAIN", 0); sub AUTOLOAD { if ($AUTOLOAD =~ /::(_?[a-z])/) { --- 23,31 ---- XSLoader::load 'POSIX', $VERSION; ! my %NON_CONSTS = (map {($_,1)} ! qw(S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISREG WEXITSTATUS ! WIFEXITED WIFSIGNALED WIFSTOPPED WSTOPSIG WTERMSIG)); sub AUTOLOAD { if ($AUTOLOAD =~ /::(_?[a-z])/) { *************** *** 35,52 **** local $! = 0; my $constname = $AUTOLOAD; $constname =~ s/.*:://; ! my $val = constant($constname, @_ ? $_[0] : 0); ! if ($! == 0) { *$AUTOLOAD = sub { $val }; - } - elsif ($! == $EAGAIN) { # Not really a constant, so always call. - *$AUTOLOAD = sub { constant($constname, $_[0]) }; - } - elsif ($! == $EINVAL) { - croak "$constname is not a valid POSIX macro"; - } - else { - croak "Your vendor has not defined POSIX macro $constname, used"; } goto &$AUTOLOAD; --- 36,49 ---- local $! = 0; my $constname = $AUTOLOAD; $constname =~ s/.*:://; ! if ($NON_CONSTS{$constname}) { ! my ($val, $error) = &int_macro_int($constname, $_[0]); ! croak $error if $error; ! *$AUTOLOAD = sub { &int_macro_int($constname, $_[0]) }; ! } else { ! my ($error, $val) = constant($constname); ! croak $error if $error; *$AUTOLOAD = sub { $val }; } goto &$AUTOLOAD; diff -c 'perl-5.7.1/ext/POSIX/POSIX.pod' 'perl-5.7.2/ext/POSIX/POSIX.pod' Index: ./ext/POSIX/POSIX.pod *** ./ext/POSIX/POSIX.pod Tue Mar 6 04:04:55 2001 --- ./ext/POSIX/POSIX.pod Mon Jul 9 17:10:10 2001 *************** *** 1230,1235 **** --- 1230,1237 ---- $str = POSIX::strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 2 ); print "$str\n"; + See also L. + =item strlen strlen() is C-specific, use C instead, see L. diff -c /dev/null 'perl-5.7.2/ext/POSIX/POSIX.t' Index: ./ext/POSIX/POSIX.t *** ./ext/POSIX/POSIX.t Thu Jan 1 02:00:00 1970 --- ./ext/POSIX/POSIX.t Wed Jul 11 17:18:25 2001 *************** *** 0 **** --- 1,160 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($^O ne 'VMS' and $Config{'extensions'} !~ /\bPOSIX\b/) { + print "1..0\n"; + exit 0; + } + } + + use POSIX qw(fcntl_h signal_h limits_h _exit getcwd open read strftime write + errno); + use strict subs; + + $| = 1; + print "1..29\n"; + + $Is_W32 = $^O eq 'MSWin32'; + $Is_NetWare = $^O eq 'NetWare'; + $Is_Dos = $^O eq 'dos'; + $Is_MPE = $^O eq 'mpeix'; + + $testfd = open("TEST", O_RDONLY, 0) and print "ok 1\n"; + read($testfd, $buffer, 9) if $testfd > 2; + print $buffer eq "#!./perl\n" ? "ok 2\n" : "not ok 2\n"; + + write(1,"ok 3\nnot ok 3\n", 5); + + if ($Is_Dos) { + for (4..5) { + print "ok $_ # skipped, no pipe() support on dos\n"; + } + } else { + @fds = POSIX::pipe(); + print $fds[0] > $testfd ? "ok 4\n" : "not ok 4\n"; + CORE::open($reader = \*READER, "<&=".$fds[0]); + CORE::open($writer = \*WRITER, ">&=".$fds[1]); + print $writer "ok 5\n"; + close $writer; + print <$reader>; + close $reader; + } + + if ($Is_W32 || $Is_Dos) { + for (6..11) { + print "ok $_ # skipped, no sigaction support on win32/dos\n"; + } + } + else { + $sigset = new POSIX::SigSet 1,3; + delset $sigset 1; + if (!ismember $sigset 1) { print "ok 6\n" } + if (ismember $sigset 3) { print "ok 7\n" } + $mask = new POSIX::SigSet &SIGINT; + $action = new POSIX::SigAction 'main::SigHUP', $mask, 0; + sigaction(&SIGHUP, $action); + $SIG{'INT'} = 'SigINT'; + kill 'HUP', $$; + sleep 1; + print "ok 11\n"; + + sub SigHUP { + print "ok 8\n"; + kill 'INT', $$; + sleep 2; + print "ok 9\n"; + } + + sub SigINT { + print "ok 10\n"; + } + } + + if ($Is_MPE) { + print "ok 12 # skipped, _POSIX_OPEN_MAX is inaccurate on MPE\n" + } else { + print &_POSIX_OPEN_MAX > $fds[1] ? "ok 12\n" : "not ok 12\n" + } + + print getcwd() =~ m#[/\\]t$# ? "ok 13\n" : "not ok 13\n"; + + # Check string conversion functions. + + if ($Config{d_strtod}) { + $lc = &POSIX::setlocale(&POSIX::LC_NUMERIC, 'C') if $Config{d_setlocale}; + ($n, $x) = &POSIX::strtod('3.14159_OR_SO'); + # we're just checking that strtod works, not how accurate it is + print (("3.14159" eq $n + 0) && ($x == 6) ? + "ok 14\n" : "not ok 14\n"); + &POSIX::setlocale(&POSIX::LC_NUMERIC, $lc) if $Config{d_setlocale}; + } else { print "# strtod not present\n", "ok 14\n"; } + + if ($Config{d_strtol}) { + ($n, $x) = &POSIX::strtol('21_PENGUINS'); + print (($n == 21) && ($x == 9) ? "ok 15\n" : "not ok 15\n"); + } else { print "# strtol not present\n", "ok 15\n"; } + + if ($Config{d_strtoul}) { + ($n, $x) = &POSIX::strtoul('88_TEARS'); + print (($n == 88) && ($x == 6) ? "ok 16\n" : "not ok 16\n"); + } else { print "# strtoul not present\n", "ok 16\n"; } + + # Pick up whether we're really able to dynamically load everything. + print &POSIX::acos(1.0) == 0.0 ? "ok 17\n" : "not ok 17\n"; + + # This can coredump if struct tm has a timezone field and we + # didn't detect it. If this fails, try adding + # -DSTRUCT_TM_HASZONE to your cflags when compiling ext/POSIX/POSIX.c. + # See ext/POSIX/hints/sunos_4.pl and ext/POSIX/hints/linux.pl + print POSIX::strftime("ok 18 # %H:%M, on %D\n", localtime()); + + # If that worked, validate the mini_mktime() routine's normalisation of + # input fields to strftime(). + sub try_strftime { + my $num = shift; + my $expect = shift; + my $got = POSIX::strftime("%a %b %d %H:%M:%S %Y %j", @_); + if ($got eq $expect) { + print "ok $num\n"; + } + else { + print "# expected: $expect\n# got: $got\nnot ok $num\n"; + } + } + + $lc = &POSIX::setlocale(&POSIX::LC_TIME, 'C') if $Config{d_setlocale}; + try_strftime(19, "Wed Feb 28 00:00:00 1996 059", 0,0,0, 28,1,96); + try_strftime(20, "Thu Feb 29 00:00:60 1996 060", 60,0,-24, 30,1,96); + try_strftime(21, "Fri Mar 01 00:00:00 1996 061", 0,0,-24, 31,1,96); + try_strftime(22, "Sun Feb 28 00:00:00 1999 059", 0,0,0, 28,1,99); + try_strftime(23, "Mon Mar 01 00:00:00 1999 060", 0,0,24, 28,1,99); + try_strftime(24, "Mon Feb 28 00:00:00 2000 059", 0,0,0, 28,1,100); + try_strftime(25, "Tue Feb 29 00:00:00 2000 060", 0,0,0, 0,2,100); + try_strftime(26, "Wed Mar 01 00:00:00 2000 061", 0,0,0, 1,2,100); + try_strftime(27, "Fri Mar 31 00:00:00 2000 091", 0,0,0, 31,2,100); + &POSIX::setlocale(&POSIX::LC_TIME, $lc) if $Config{d_setlocale}; + + { + for my $test (0, 1) { + $! = 0; + # POSIX::errno is autoloaded. + # Autoloading requires many system calls. + # errno() looks at $! to generate its result. + # Autoloading should not munge the value. + my $foo = $!; + my $errno = POSIX::errno(); + print "not " unless $errno == $foo; + print "ok ", 28 + $test, "\n"; + } + } + + $| = 0; + # The following line assumes buffered output, which may be not true with EMX: + print '@#!*$@(!@#$' unless ($^O eq 'os2' || $^O eq 'uwin' || $^O eq 'os390' || + (defined $ENV{PERLIO} && + $ENV{PERLIO} eq 'unix' && + $Config::Config{useperlio})); + _exit(0); diff -c 'perl-5.7.1/ext/POSIX/POSIX.xs' 'perl-5.7.2/ext/POSIX/POSIX.xs' Index: ./ext/POSIX/POSIX.xs *** ./ext/POSIX/POSIX.xs Sat Mar 24 17:55:27 2001 --- ./ext/POSIX/POSIX.xs Mon Jul 9 17:10:10 2001 *************** *** 2,7 **** --- 2,18 ---- #define _POSIX_ #endif + #ifdef NETWARE + #define _POSIX_ + /* + * Ideally this should be somewhere down in the includes + * but putting it in other places is giving compiler errors. + * Also here I am unable to check for HAS_UNAME since it wouldn't have + * yet come into the file at this stage - sgp 18th Oct 2000 + */ + #include + #endif /* NETWARE */ + #define PERL_NO_GET_CONTEXT #include "EXTERN.h" *************** *** 64,69 **** --- 75,90 ---- #endif #include + #ifdef HAS_TZNAME + # if !defined(WIN32) && !defined(__CYGWIN__) && !defined(NETWARE) + extern char *tzname[]; + # endif + #else + #if !defined(WIN32) || (defined(__MINGW32__) && !defined(tzname)) + char *tzname[] = { "" , "" }; + #endif + #endif + #if defined(__VMS) && !defined(__POSIX_SOURCE) # include /* LIB$_INVARG constant */ # include /* prototype for lib$ediv() */ *************** *** 116,122 **** #if defined (__CYGWIN__) # define tzname _tzname #endif ! #if defined (WIN32) # undef mkfifo # define mkfifo(a,b) not_here("mkfifo") # define ttyname(a) (char*)not_here("ttyname") --- 137,143 ---- #if defined (__CYGWIN__) # define tzname _tzname #endif ! #if defined (WIN32) || defined (NETWARE) # undef mkfifo # define mkfifo(a,b) not_here("mkfifo") # define ttyname(a) (char*)not_here("ttyname") *************** *** 146,151 **** --- 167,176 ---- # define sigdelset(a,b) not_here("sigdelset") # define sigfillset(a) not_here("sigfillset") # define sigismember(a,b) not_here("sigismember") + #ifndef NETWARE + # define setuid(a) not_here("setuid") + # define setgid(a) not_here("setgid") + #endif /* NETWARE */ #else # ifndef HAS_MKFIFO *************** *** 172,178 **** # ifdef I_UTIME # include # endif ! #endif /* WIN32 */ #endif /* __VMS */ typedef int SysRet; --- 197,203 ---- # ifdef I_UTIME # include # endif ! #endif /* WIN32 || NETWARE */ #endif /* __VMS */ typedef int SysRet; *************** *** 259,265 **** --- 284,292 ---- #define tcsetpgrp(a,b) not_here("tcsetpgrp") #endif #ifndef HAS_TIMES + #ifndef NETWARE #define times(a) not_here("times") + #endif /* NETWARE */ #endif #ifndef HAS_UNAME #define uname(a) not_here("uname") *************** *** 300,545 **** #define localeconv() not_here("localeconv") #endif - #ifdef HAS_TZNAME - # if !defined(WIN32) && !defined(__CYGWIN__) - extern char *tzname[]; - # endif - #else - #if !defined(WIN32) || (defined(__MINGW32__) && !defined(tzname)) - char *tzname[] = { "" , "" }; - #endif - #endif - - /* XXX struct tm on some systems (SunOS4/BSD) contains extra (non POSIX) - * fields for which we don't have Configure support yet: - * char *tm_zone; -- abbreviation of timezone name - * long tm_gmtoff; -- offset from GMT in seconds - * To workaround core dumps from the uninitialised tm_zone we get the - * system to give us a reasonable struct to copy. This fix means that - * strftime uses the tm_zone and tm_gmtoff values returned by - * localtime(time()). That should give the desired result most of the - * time. But probably not always! - * - * This is a temporary workaround to be removed once Configure - * support is added and NETaa14816 is considered in full. - * It does not address tzname aspects of NETaa14816. - */ - #ifdef HAS_GNULIBC - # ifndef STRUCT_TM_HASZONE - # define STRUCT_TM_HASZONE - # endif - #endif - - #ifdef STRUCT_TM_HASZONE - static void - init_tm(struct tm *ptm) /* see mktime, strftime and asctime */ - { - Time_t now; - (void)time(&now); - Copy(localtime(&now), ptm, 1, struct tm); - } - - #else - # define init_tm(ptm) - #endif - - /* - * mini_mktime - normalise struct tm values without the localtime() - * semantics (and overhead) of mktime(). - */ - static void - mini_mktime(struct tm *ptm) - { - int yearday; - int secs; - int month, mday, year, jday; - int odd_cent, odd_year; - - #define DAYS_PER_YEAR 365 - #define DAYS_PER_QYEAR (4*DAYS_PER_YEAR+1) - #define DAYS_PER_CENT (25*DAYS_PER_QYEAR-1) - #define DAYS_PER_QCENT (4*DAYS_PER_CENT+1) - #define SECS_PER_HOUR (60*60) - #define SECS_PER_DAY (24*SECS_PER_HOUR) - /* parentheses deliberately absent on these two, otherwise they don't work */ - #define MONTH_TO_DAYS 153/5 - #define DAYS_TO_MONTH 5/153 - /* offset to bias by March (month 4) 1st between month/mday & year finding */ - #define YEAR_ADJUST (4*MONTH_TO_DAYS+1) - /* as used here, the algorithm leaves Sunday as day 1 unless we adjust it */ - #define WEEKDAY_BIAS 6 /* (1+6)%7 makes Sunday 0 again */ - - /* - * Year/day algorithm notes: - * - * With a suitable offset for numeric value of the month, one can find - * an offset into the year by considering months to have 30.6 (153/5) days, - * using integer arithmetic (i.e., with truncation). To avoid too much - * messing about with leap days, we consider January and February to be - * the 13th and 14th month of the previous year. After that transformation, - * we need the month index we use to be high by 1 from 'normal human' usage, - * so the month index values we use run from 4 through 15. - * - * Given that, and the rules for the Gregorian calendar (leap years are those - * divisible by 4 unless also divisible by 100, when they must be divisible - * by 400 instead), we can simply calculate the number of days since some - * arbitrary 'beginning of time' by futzing with the (adjusted) year number, - * the days we derive from our month index, and adding in the day of the - * month. The value used here is not adjusted for the actual origin which - * it normally would use (1 January A.D. 1), since we're not exposing it. - * We're only building the value so we can turn around and get the - * normalised values for the year, month, day-of-month, and day-of-year. - * - * For going backward, we need to bias the value we're using so that we find - * the right year value. (Basically, we don't want the contribution of - * March 1st to the number to apply while deriving the year). Having done - * that, we 'count up' the contribution to the year number by accounting for - * full quadracenturies (400-year periods) with their extra leap days, plus - * the contribution from full centuries (to avoid counting in the lost leap - * days), plus the contribution from full quad-years (to count in the normal - * leap days), plus the leftover contribution from any non-leap years. - * At this point, if we were working with an actual leap day, we'll have 0 - * days left over. This is also true for March 1st, however. So, we have - * to special-case that result, and (earlier) keep track of the 'odd' - * century and year contributions. If we got 4 extra centuries in a qcent, - * or 4 extra years in a qyear, then it's a leap day and we call it 29 Feb. - * Otherwise, we add back in the earlier bias we removed (the 123 from - * figuring in March 1st), find the month index (integer division by 30.6), - * and the remainder is the day-of-month. We then have to convert back to - * 'real' months (including fixing January and February from being 14/15 in - * the previous year to being in the proper year). After that, to get - * tm_yday, we work with the normalised year and get a new yearday value for - * January 1st, which we subtract from the yearday value we had earlier, - * representing the date we've re-built. This is done from January 1 - * because tm_yday is 0-origin. - * - * Since POSIX time routines are only guaranteed to work for times since the - * UNIX epoch (00:00:00 1 Jan 1970 UTC), the fact that this algorithm - * applies Gregorian calendar rules even to dates before the 16th century - * doesn't bother me. Besides, you'd need cultural context for a given - * date to know whether it was Julian or Gregorian calendar, and that's - * outside the scope for this routine. Since we convert back based on the - * same rules we used to build the yearday, you'll only get strange results - * for input which needed normalising, or for the 'odd' century years which - * were leap years in the Julian calander but not in the Gregorian one. - * I can live with that. - * - * This algorithm also fails to handle years before A.D. 1 gracefully, but - * that's still outside the scope for POSIX time manipulation, so I don't - * care. - */ - - year = 1900 + ptm->tm_year; - month = ptm->tm_mon; - mday = ptm->tm_mday; - /* allow given yday with no month & mday to dominate the result */ - if (ptm->tm_yday >= 0 && mday <= 0 && month <= 0) { - month = 0; - mday = 0; - jday = 1 + ptm->tm_yday; - } - else { - jday = 0; - } - if (month >= 2) - month+=2; - else - month+=14, year--; - yearday = DAYS_PER_YEAR * year + year/4 - year/100 + year/400; - yearday += month*MONTH_TO_DAYS + mday + jday; - /* - * Note that we don't know when leap-seconds were or will be, - * so we have to trust the user if we get something which looks - * like a sensible leap-second. Wild values for seconds will - * be rationalised, however. - */ - if ((unsigned) ptm->tm_sec <= 60) { - secs = 0; - } - else { - secs = ptm->tm_sec; - ptm->tm_sec = 0; - } - secs += 60 * ptm->tm_min; - secs += SECS_PER_HOUR * ptm->tm_hour; - if (secs < 0) { - if (secs-(secs/SECS_PER_DAY*SECS_PER_DAY) < 0) { - /* got negative remainder, but need positive time */ - /* back off an extra day to compensate */ - yearday += (secs/SECS_PER_DAY)-1; - secs -= SECS_PER_DAY * (secs/SECS_PER_DAY - 1); - } - else { - yearday += (secs/SECS_PER_DAY); - secs -= SECS_PER_DAY * (secs/SECS_PER_DAY); - } - } - else if (secs >= SECS_PER_DAY) { - yearday += (secs/SECS_PER_DAY); - secs %= SECS_PER_DAY; - } - ptm->tm_hour = secs/SECS_PER_HOUR; - secs %= SECS_PER_HOUR; - ptm->tm_min = secs/60; - secs %= 60; - ptm->tm_sec += secs; - /* done with time of day effects */ - /* - * The algorithm for yearday has (so far) left it high by 428. - * To avoid mistaking a legitimate Feb 29 as Mar 1, we need to - * bias it by 123 while trying to figure out what year it - * really represents. Even with this tweak, the reverse - * translation fails for years before A.D. 0001. - * It would still fail for Feb 29, but we catch that one below. - */ - jday = yearday; /* save for later fixup vis-a-vis Jan 1 */ - yearday -= YEAR_ADJUST; - year = (yearday / DAYS_PER_QCENT) * 400; - yearday %= DAYS_PER_QCENT; - odd_cent = yearday / DAYS_PER_CENT; - year += odd_cent * 100; - yearday %= DAYS_PER_CENT; - year += (yearday / DAYS_PER_QYEAR) * 4; - yearday %= DAYS_PER_QYEAR; - odd_year = yearday / DAYS_PER_YEAR; - year += odd_year; - yearday %= DAYS_PER_YEAR; - if (!yearday && (odd_cent==4 || odd_year==4)) { /* catch Feb 29 */ - month = 1; - yearday = 29; - } - else { - yearday += YEAR_ADJUST; /* recover March 1st crock */ - month = yearday*DAYS_TO_MONTH; - yearday -= month*MONTH_TO_DAYS; - /* recover other leap-year adjustment */ - if (month > 13) { - month-=14; - year++; - } - else { - month-=2; - } - } - ptm->tm_year = year - 1900; - if (yearday) { - ptm->tm_mday = yearday; - ptm->tm_mon = month; - } - else { - ptm->tm_mday = 31; - ptm->tm_mon = month - 1; - } - /* re-build yearday based on Jan 1 to get tm_yday */ - year--; - yearday = year*DAYS_PER_YEAR + year/4 - year/100 + year/400; - yearday += 14*MONTH_TO_DAYS + 1; - ptm->tm_yday = jday - yearday; - /* fix tm_wday if not overridden by caller */ - if ((unsigned)ptm->tm_wday > 6) - ptm->tm_wday = (jday + WEEKDAY_BIAS) % 7; - } - #ifdef HAS_LONG_DOUBLE # if LONG_DOUBLESIZE > NVSIZE # undef HAS_LONG_DOUBLE /* XXX until we figure out how to use them */ --- 327,332 ---- *************** *** 565,2793 **** return -1; } ! static ! NV ! constant(char *name, int arg) ! { ! errno = 0; ! switch (*name) { ! case 'A': ! if (strEQ(name, "ARG_MAX")) ! #ifdef ARG_MAX ! return ARG_MAX; ! #else ! goto not_there; ! #endif ! break; ! case 'B': ! if (strEQ(name, "BUFSIZ")) ! #ifdef BUFSIZ ! return BUFSIZ; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "BRKINT")) ! #ifdef BRKINT ! return BRKINT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B9600")) ! #ifdef B9600 ! return B9600; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B19200")) ! #ifdef B19200 ! return B19200; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B38400")) ! #ifdef B38400 ! return B38400; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B0")) ! #ifdef B0 ! return B0; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B110")) ! #ifdef B110 ! return B110; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B1200")) ! #ifdef B1200 ! return B1200; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B134")) ! #ifdef B134 ! return B134; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B150")) ! #ifdef B150 ! return B150; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B1800")) ! #ifdef B1800 ! return B1800; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B200")) ! #ifdef B200 ! return B200; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B2400")) ! #ifdef B2400 ! return B2400; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B300")) ! #ifdef B300 ! return B300; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B4800")) ! #ifdef B4800 ! return B4800; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B50")) ! #ifdef B50 ! return B50; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B600")) ! #ifdef B600 ! return B600; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "B75")) ! #ifdef B75 ! return B75; ! #else ! goto not_there; ! #endif ! break; ! case 'C': ! if (strEQ(name, "CHAR_BIT")) ! #ifdef CHAR_BIT ! return CHAR_BIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CHAR_MAX")) ! #ifdef CHAR_MAX ! return CHAR_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CHAR_MIN")) ! #ifdef CHAR_MIN ! return CHAR_MIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CHILD_MAX")) ! #ifdef CHILD_MAX ! return CHILD_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CLK_TCK")) ! #ifdef CLK_TCK ! return CLK_TCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CLOCAL")) ! #ifdef CLOCAL ! return CLOCAL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CLOCKS_PER_SEC")) ! #ifdef CLOCKS_PER_SEC ! return CLOCKS_PER_SEC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CREAD")) ! #ifdef CREAD ! return CREAD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CS5")) ! #ifdef CS5 ! return CS5; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CS6")) ! #ifdef CS6 ! return CS6; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CS7")) ! #ifdef CS7 ! return CS7; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CS8")) ! #ifdef CS8 ! return CS8; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CSIZE")) ! #ifdef CSIZE ! return CSIZE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "CSTOPB")) ! #ifdef CSTOPB ! return CSTOPB; ! #else ! goto not_there; ! #endif ! break; ! case 'D': ! if (strEQ(name, "DBL_MAX")) ! #ifdef DBL_MAX ! return DBL_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_MIN")) ! #ifdef DBL_MIN ! return DBL_MIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_DIG")) ! #ifdef DBL_DIG ! return DBL_DIG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_EPSILON")) ! #ifdef DBL_EPSILON ! return DBL_EPSILON; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_MANT_DIG")) ! #ifdef DBL_MANT_DIG ! return DBL_MANT_DIG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_MAX_10_EXP")) ! #ifdef DBL_MAX_10_EXP ! return DBL_MAX_10_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_MAX_EXP")) ! #ifdef DBL_MAX_EXP ! return DBL_MAX_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_MIN_10_EXP")) ! #ifdef DBL_MIN_10_EXP ! return DBL_MIN_10_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "DBL_MIN_EXP")) ! #ifdef DBL_MIN_EXP ! return DBL_MIN_EXP; ! #else ! goto not_there; ! #endif ! break; case 'E': ! switch (name[1]) { ! case 'A': ! if (strEQ(name, "EACCES")) ! #ifdef EACCES ! return EACCES; #else ! goto not_there; #endif ! if (strEQ(name, "EADDRINUSE")) ! #ifdef EADDRINUSE ! return EADDRINUSE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EADDRNOTAVAIL")) ! #ifdef EADDRNOTAVAIL ! return EADDRNOTAVAIL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EAFNOSUPPORT")) ! #ifdef EAFNOSUPPORT ! return EAFNOSUPPORT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EAGAIN")) ! #ifdef EAGAIN ! return EAGAIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EALREADY")) ! #ifdef EALREADY ! return EALREADY; ! #else ! goto not_there; ! #endif ! break; ! case 'B': ! if (strEQ(name, "EBADF")) ! #ifdef EBADF ! return EBADF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EBUSY")) ! #ifdef EBUSY ! return EBUSY; ! #else ! goto not_there; ! #endif ! break; ! case 'C': ! if (strEQ(name, "ECHILD")) ! #ifdef ECHILD ! return ECHILD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ECHO")) ! #ifdef ECHO ! return ECHO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ECHOE")) ! #ifdef ECHOE ! return ECHOE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ECHOK")) ! #ifdef ECHOK ! return ECHOK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ECHONL")) ! #ifdef ECHONL ! return ECHONL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ECONNABORTED")) ! #ifdef ECONNABORTED ! return ECONNABORTED; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ECONNREFUSED")) ! #ifdef ECONNREFUSED ! return ECONNREFUSED; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ECONNRESET")) ! #ifdef ECONNRESET ! return ECONNRESET; ! #else ! goto not_there; ! #endif ! break; ! case 'D': ! if (strEQ(name, "EDEADLK")) ! #ifdef EDEADLK ! return EDEADLK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EDESTADDRREQ")) ! #ifdef EDESTADDRREQ ! return EDESTADDRREQ; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EDOM")) ! #ifdef EDOM ! return EDOM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EDQUOT")) ! #ifdef EDQUOT ! return EDQUOT; ! #else ! goto not_there; ! #endif ! break; ! case 'E': ! if (strEQ(name, "EEXIST")) ! #ifdef EEXIST ! return EEXIST; ! #else ! goto not_there; ! #endif ! break; ! case 'F': ! if (strEQ(name, "EFAULT")) ! #ifdef EFAULT ! return EFAULT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EFBIG")) ! #ifdef EFBIG ! return EFBIG; ! #else ! goto not_there; ! #endif ! break; ! case 'H': ! if (strEQ(name, "EHOSTDOWN")) ! #ifdef EHOSTDOWN ! return EHOSTDOWN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EHOSTUNREACH")) ! #ifdef EHOSTUNREACH ! return EHOSTUNREACH; ! #else ! goto not_there; ! #endif ! break; ! case 'I': ! if (strEQ(name, "EINPROGRESS")) ! #ifdef EINPROGRESS ! return EINPROGRESS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EINTR")) ! #ifdef EINTR ! return EINTR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EINVAL")) ! #ifdef EINVAL ! return EINVAL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EIO")) ! #ifdef EIO ! return EIO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EISCONN")) ! #ifdef EISCONN ! return EISCONN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EISDIR")) ! #ifdef EISDIR ! return EISDIR; ! #else ! goto not_there; ! #endif ! break; ! case 'L': ! if (strEQ(name, "ELOOP")) ! #ifdef ELOOP ! return ELOOP; ! #else ! goto not_there; ! #endif ! break; ! case 'M': ! if (strEQ(name, "EMFILE")) ! #ifdef EMFILE ! return EMFILE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EMLINK")) ! #ifdef EMLINK ! return EMLINK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EMSGSIZE")) ! #ifdef EMSGSIZE ! return EMSGSIZE; ! #else ! goto not_there; ! #endif ! break; ! case 'N': ! if (strEQ(name, "ENETDOWN")) ! #ifdef ENETDOWN ! return ENETDOWN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENETRESET")) ! #ifdef ENETRESET ! return ENETRESET; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENETUNREACH")) ! #ifdef ENETUNREACH ! return ENETUNREACH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOBUFS")) ! #ifdef ENOBUFS ! return ENOBUFS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOEXEC")) ! #ifdef ENOEXEC ! return ENOEXEC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOMEM")) ! #ifdef ENOMEM ! return ENOMEM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOPROTOOPT")) ! #ifdef ENOPROTOOPT ! return ENOPROTOOPT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOSPC")) ! #ifdef ENOSPC ! return ENOSPC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOTBLK")) ! #ifdef ENOTBLK ! return ENOTBLK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOTCONN")) ! #ifdef ENOTCONN ! return ENOTCONN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOTDIR")) ! #ifdef ENOTDIR ! return ENOTDIR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOTEMPTY")) ! #ifdef ENOTEMPTY ! return ENOTEMPTY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOTSOCK")) ! #ifdef ENOTSOCK ! return ENOTSOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOTTY")) ! #ifdef ENOTTY ! return ENOTTY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENFILE")) ! #ifdef ENFILE ! return ENFILE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENODEV")) ! #ifdef ENODEV ! return ENODEV; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOENT")) ! #ifdef ENOENT ! return ENOENT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOLCK")) ! #ifdef ENOLCK ! return ENOLCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENOSYS")) ! #ifdef ENOSYS ! return ENOSYS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENXIO")) ! #ifdef ENXIO ! return ENXIO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ENAMETOOLONG")) ! #ifdef ENAMETOOLONG ! return ENAMETOOLONG; ! #else ! goto not_there; ! #endif ! break; ! case 'O': ! if (strEQ(name, "EOF")) ! #ifdef EOF ! return EOF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EOPNOTSUPP")) ! #ifdef EOPNOTSUPP ! return EOPNOTSUPP; ! #else ! goto not_there; ! #endif ! break; ! case 'P': ! if (strEQ(name, "EPERM")) ! #ifdef EPERM ! return EPERM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EPFNOSUPPORT")) ! #ifdef EPFNOSUPPORT ! return EPFNOSUPPORT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EPIPE")) ! #ifdef EPIPE ! return EPIPE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EPROCLIM")) ! #ifdef EPROCLIM ! return EPROCLIM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EPROTONOSUPPORT")) ! #ifdef EPROTONOSUPPORT ! return EPROTONOSUPPORT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EPROTOTYPE")) ! #ifdef EPROTOTYPE ! return EPROTOTYPE; ! #else ! goto not_there; ! #endif ! break; ! case 'R': ! if (strEQ(name, "ERANGE")) ! #ifdef ERANGE ! return ERANGE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EREMOTE")) ! #ifdef EREMOTE ! return EREMOTE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ERESTART")) ! #ifdef ERESTART ! return ERESTART; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "EROFS")) ! #ifdef EROFS ! return EROFS; ! #else ! goto not_there; ! #endif ! break; ! case 'S': ! if (strEQ(name, "ESHUTDOWN")) ! #ifdef ESHUTDOWN ! return ESHUTDOWN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ESOCKTNOSUPPORT")) ! #ifdef ESOCKTNOSUPPORT ! return ESOCKTNOSUPPORT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ESPIPE")) ! #ifdef ESPIPE ! return ESPIPE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ESRCH")) ! #ifdef ESRCH ! return ESRCH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ESTALE")) ! #ifdef ESTALE ! return ESTALE; ! #else ! goto not_there; ! #endif ! break; ! case 'T': ! if (strEQ(name, "ETIMEDOUT")) ! #ifdef ETIMEDOUT ! return ETIMEDOUT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ETOOMANYREFS")) ! #ifdef ETOOMANYREFS ! return ETOOMANYREFS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ETXTBSY")) ! #ifdef ETXTBSY ! return ETXTBSY; ! #else ! goto not_there; ! #endif ! break; ! case 'U': ! if (strEQ(name, "EUSERS")) ! #ifdef EUSERS ! return EUSERS; ! #else ! goto not_there; ! #endif ! break; ! case 'W': ! if (strEQ(name, "EWOULDBLOCK")) ! #ifdef EWOULDBLOCK ! return EWOULDBLOCK; ! #else ! goto not_there; ! #endif ! break; ! case 'X': ! if (strEQ(name, "EXIT_FAILURE")) ! #ifdef EXIT_FAILURE ! return EXIT_FAILURE; ! #else ! return 1; ! #endif ! if (strEQ(name, "EXIT_SUCCESS")) ! #ifdef EXIT_SUCCESS ! return EXIT_SUCCESS; ! #else ! return 0; ! #endif ! if (strEQ(name, "EXDEV")) ! #ifdef EXDEV ! return EXDEV; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strEQ(name, "E2BIG")) ! #ifdef E2BIG ! return E2BIG; ! #else ! goto not_there; ! #endif ! break; ! case 'F': ! if (strnEQ(name, "FLT_", 4)) { ! if (strEQ(name, "FLT_MAX")) ! #ifdef FLT_MAX ! return FLT_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_MIN")) ! #ifdef FLT_MIN ! return FLT_MIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_ROUNDS")) ! #ifdef FLT_ROUNDS ! return FLT_ROUNDS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_DIG")) ! #ifdef FLT_DIG ! return FLT_DIG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_EPSILON")) ! #ifdef FLT_EPSILON ! return FLT_EPSILON; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_MANT_DIG")) ! #ifdef FLT_MANT_DIG ! return FLT_MANT_DIG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_MAX_10_EXP")) ! #ifdef FLT_MAX_10_EXP ! return FLT_MAX_10_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_MAX_EXP")) ! #ifdef FLT_MAX_EXP ! return FLT_MAX_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_MIN_10_EXP")) ! #ifdef FLT_MIN_10_EXP ! return FLT_MIN_10_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_MIN_EXP")) ! #ifdef FLT_MIN_EXP ! return FLT_MIN_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FLT_RADIX")) ! #ifdef FLT_RADIX ! return FLT_RADIX; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strnEQ(name, "F_", 2)) { ! if (strEQ(name, "F_DUPFD")) ! #ifdef F_DUPFD ! return F_DUPFD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_GETFD")) ! #ifdef F_GETFD ! return F_GETFD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_GETFL")) ! #ifdef F_GETFL ! return F_GETFL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_GETLK")) ! #ifdef F_GETLK ! return F_GETLK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_OK")) ! #ifdef F_OK ! return F_OK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_RDLCK")) ! #ifdef F_RDLCK ! return F_RDLCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_SETFD")) ! #ifdef F_SETFD ! return F_SETFD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_SETFL")) ! #ifdef F_SETFL ! return F_SETFL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_SETLK")) ! #ifdef F_SETLK ! return F_SETLK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_SETLKW")) ! #ifdef F_SETLKW ! return F_SETLKW; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_UNLCK")) ! #ifdef F_UNLCK ! return F_UNLCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "F_WRLCK")) ! #ifdef F_WRLCK ! return F_WRLCK; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strEQ(name, "FD_CLOEXEC")) ! #ifdef FD_CLOEXEC ! return FD_CLOEXEC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "FILENAME_MAX")) ! #ifdef FILENAME_MAX ! return FILENAME_MAX; ! #else ! goto not_there; ! #endif ! break; case 'H': ! if (strEQ(name, "HUGE_VAL")) ! #if defined(USE_LONG_DOUBLE) && defined(HUGE_VALL) ! /* HUGE_VALL is admittedly non-POSIX but if we are using long doubles ! * we might as well use long doubles. --jhi */ ! return HUGE_VALL; ! #endif ! #ifdef HUGE_VAL ! return HUGE_VAL; #else ! goto not_there; #endif ! if (strEQ(name, "HUPCL")) ! #ifdef HUPCL ! return HUPCL; ! #else ! goto not_there; ! #endif ! break; case 'I': ! if (strEQ(name, "INT_MAX")) ! #ifdef INT_MAX ! return INT_MAX; #else ! goto not_there; #endif ! if (strEQ(name, "INT_MIN")) ! #ifdef INT_MIN ! return INT_MIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ICANON")) ! #ifdef ICANON ! return ICANON; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ICRNL")) ! #ifdef ICRNL ! return ICRNL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IEXTEN")) ! #ifdef IEXTEN ! return IEXTEN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IGNBRK")) ! #ifdef IGNBRK ! return IGNBRK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IGNCR")) ! #ifdef IGNCR ! return IGNCR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IGNPAR")) ! #ifdef IGNPAR ! return IGNPAR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "INLCR")) ! #ifdef INLCR ! return INLCR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "INPCK")) ! #ifdef INPCK ! return INPCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ISIG")) ! #ifdef ISIG ! return ISIG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ISTRIP")) ! #ifdef ISTRIP ! return ISTRIP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IXOFF")) ! #ifdef IXOFF ! return IXOFF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IXON")) ! #ifdef IXON ! return IXON; ! #else ! goto not_there; ! #endif ! break; case 'L': ! if (strnEQ(name, "LC_", 3)) { ! if (strEQ(name, "LC_ALL")) ! #ifdef LC_ALL ! return LC_ALL; #else ! goto not_there; #endif ! if (strEQ(name, "LC_COLLATE")) ! #ifdef LC_COLLATE ! return LC_COLLATE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LC_CTYPE")) ! #ifdef LC_CTYPE ! return LC_CTYPE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LC_MONETARY")) ! #ifdef LC_MONETARY ! return LC_MONETARY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LC_NUMERIC")) ! #ifdef LC_NUMERIC ! return LC_NUMERIC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LC_TIME")) ! #ifdef LC_TIME ! return LC_TIME; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strnEQ(name, "LDBL_", 5)) { ! if (strEQ(name, "LDBL_MAX")) ! #ifdef LDBL_MAX ! return LDBL_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_MIN")) ! #ifdef LDBL_MIN ! return LDBL_MIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_DIG")) ! #ifdef LDBL_DIG ! return LDBL_DIG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_EPSILON")) ! #ifdef LDBL_EPSILON ! return LDBL_EPSILON; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_MANT_DIG")) ! #ifdef LDBL_MANT_DIG ! return LDBL_MANT_DIG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_MAX_10_EXP")) ! #ifdef LDBL_MAX_10_EXP ! return LDBL_MAX_10_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_MAX_EXP")) ! #ifdef LDBL_MAX_EXP ! return LDBL_MAX_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_MIN_10_EXP")) ! #ifdef LDBL_MIN_10_EXP ! return LDBL_MIN_10_EXP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LDBL_MIN_EXP")) ! #ifdef LDBL_MIN_EXP ! return LDBL_MIN_EXP; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strnEQ(name, "L_", 2)) { ! if (strEQ(name, "L_ctermid")) ! #ifdef L_ctermid ! return L_ctermid; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "L_cuserid")) ! #ifdef L_cuserid ! return L_cuserid; ! #else ! goto not_there; ! #endif ! /* L_tmpnam[e] was a typo--retained for compatibility */ ! if (strEQ(name, "L_tmpname") || strEQ(name, "L_tmpnam")) ! #ifdef L_tmpnam ! return L_tmpnam; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strEQ(name, "LONG_MAX")) ! #ifdef LONG_MAX ! return LONG_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LONG_MIN")) ! #ifdef LONG_MIN ! return LONG_MIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "LINK_MAX")) ! #ifdef LINK_MAX ! return LINK_MAX; ! #else ! goto not_there; ! #endif ! break; ! case 'M': ! if (strEQ(name, "MAX_CANON")) ! #ifdef MAX_CANON ! return MAX_CANON; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MAX_INPUT")) ! #ifdef MAX_INPUT ! return MAX_INPUT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MB_CUR_MAX")) ! #ifdef MB_CUR_MAX ! return MB_CUR_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MB_LEN_MAX")) ! #ifdef MB_LEN_MAX ! return MB_LEN_MAX; ! #else ! goto not_there; ! #endif ! break; ! case 'N': ! if (strEQ(name, "NULL")) return 0; ! if (strEQ(name, "NAME_MAX")) ! #ifdef NAME_MAX ! return NAME_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NCCS")) ! #ifdef NCCS ! return NCCS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NGROUPS_MAX")) ! #ifdef NGROUPS_MAX ! return NGROUPS_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "NOFLSH")) ! #ifdef NOFLSH ! return NOFLSH; ! #else ! goto not_there; ! #endif ! break; case 'O': ! if (strnEQ(name, "O_", 2)) { ! if (strEQ(name, "O_APPEND")) ! #ifdef O_APPEND ! return O_APPEND; #else ! goto not_there; #endif ! if (strEQ(name, "O_CREAT")) ! #ifdef O_CREAT ! return O_CREAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_TRUNC")) ! #ifdef O_TRUNC ! return O_TRUNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_RDONLY")) ! #ifdef O_RDONLY ! return O_RDONLY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_RDWR")) ! #ifdef O_RDWR ! return O_RDWR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_WRONLY")) ! #ifdef O_WRONLY ! return O_WRONLY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_EXCL")) ! #ifdef O_EXCL ! return O_EXCL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_NOCTTY")) ! #ifdef O_NOCTTY ! return O_NOCTTY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_NONBLOCK")) ! #ifdef O_NONBLOCK ! return O_NONBLOCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "O_ACCMODE")) ! #ifdef O_ACCMODE ! return O_ACCMODE; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strEQ(name, "OPEN_MAX")) ! #ifdef OPEN_MAX ! return OPEN_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "OPOST")) ! #ifdef OPOST ! return OPOST; ! #else ! goto not_there; ! #endif ! break; ! case 'P': ! if (strEQ(name, "PATH_MAX")) ! #ifdef PATH_MAX ! return PATH_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PARENB")) ! #ifdef PARENB ! return PARENB; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PARMRK")) ! #ifdef PARMRK ! return PARMRK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PARODD")) ! #ifdef PARODD ! return PARODD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PIPE_BUF")) ! #ifdef PIPE_BUF ! return PIPE_BUF; ! #else ! goto not_there; ! #endif ! break; case 'R': ! if (strEQ(name, "RAND_MAX")) ! #ifdef RAND_MAX ! return RAND_MAX; #else ! goto not_there; #endif ! if (strEQ(name, "R_OK")) ! #ifdef R_OK ! return R_OK; ! #else ! goto not_there; ! #endif ! break; case 'S': ! if (strnEQ(name, "SIG", 3)) { ! if (name[3] == '_') { ! if (strEQ(name, "SIG_BLOCK")) ! #ifdef SIG_BLOCK ! return SIG_BLOCK; ! #else ! goto not_there; ! #endif ! #ifdef SIG_DFL ! if (strEQ(name, "SIG_DFL")) return (IV)SIG_DFL; ! #endif ! #ifdef SIG_ERR ! if (strEQ(name, "SIG_ERR")) return (IV)SIG_ERR; ! #endif ! #ifdef SIG_IGN ! if (strEQ(name, "SIG_IGN")) return (IV)SIG_IGN; ! #endif ! if (strEQ(name, "SIG_SETMASK")) ! #ifdef SIG_SETMASK ! return SIG_SETMASK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIG_UNBLOCK")) ! #ifdef SIG_UNBLOCK ! return SIG_UNBLOCK; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strEQ(name, "SIGABRT")) ! #ifdef SIGABRT ! return SIGABRT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGALRM")) ! #ifdef SIGALRM ! return SIGALRM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGCHLD")) ! #ifdef SIGCHLD ! return SIGCHLD; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGCONT")) ! #ifdef SIGCONT ! return SIGCONT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGFPE")) ! #ifdef SIGFPE ! return SIGFPE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGHUP")) ! #ifdef SIGHUP ! return SIGHUP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGILL")) ! #ifdef SIGILL ! return SIGILL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGINT")) ! #ifdef SIGINT ! return SIGINT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGKILL")) ! #ifdef SIGKILL ! return SIGKILL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGPIPE")) ! #ifdef SIGPIPE ! return SIGPIPE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGQUIT")) ! #ifdef SIGQUIT ! return SIGQUIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGSEGV")) ! #ifdef SIGSEGV ! return SIGSEGV; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGSTOP")) ! #ifdef SIGSTOP ! return SIGSTOP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGTERM")) ! #ifdef SIGTERM ! return SIGTERM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGTSTP")) ! #ifdef SIGTSTP ! return SIGTSTP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGTTIN")) ! #ifdef SIGTTIN ! return SIGTTIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGTTOU")) ! #ifdef SIGTTOU ! return SIGTTOU; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGUSR1")) ! #ifdef SIGUSR1 ! return SIGUSR1; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SIGUSR2")) ! #ifdef SIGUSR2 ! return SIGUSR2; ! #else ! goto not_there; ! #endif ! break; ! } ! if (name[1] == '_') { ! if (strEQ(name, "S_ISGID")) ! #ifdef S_ISGID ! return S_ISGID; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_ISUID")) ! #ifdef S_ISUID ! return S_ISUID; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IRGRP")) ! #ifdef S_IRGRP ! return S_IRGRP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IROTH")) ! #ifdef S_IROTH ! return S_IROTH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IRUSR")) ! #ifdef S_IRUSR ! return S_IRUSR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IRWXG")) ! #ifdef S_IRWXG ! return S_IRWXG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IRWXO")) ! #ifdef S_IRWXO ! return S_IRWXO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IRWXU")) ! #ifdef S_IRWXU ! return S_IRWXU; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IWGRP")) ! #ifdef S_IWGRP ! return S_IWGRP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IWOTH")) ! #ifdef S_IWOTH ! return S_IWOTH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IWUSR")) ! #ifdef S_IWUSR ! return S_IWUSR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IXGRP")) ! #ifdef S_IXGRP ! return S_IXGRP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IXOTH")) ! #ifdef S_IXOTH ! return S_IXOTH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "S_IXUSR")) ! #ifdef S_IXUSR ! return S_IXUSR; ! #else ! goto not_there; ! #endif ! errno = EAGAIN; /* the following aren't constants */ ! #ifdef S_ISBLK ! if (strEQ(name, "S_ISBLK")) return S_ISBLK(arg); ! #endif ! #ifdef S_ISCHR ! if (strEQ(name, "S_ISCHR")) return S_ISCHR(arg); ! #endif ! #ifdef S_ISDIR ! if (strEQ(name, "S_ISDIR")) return S_ISDIR(arg); ! #endif #ifdef S_ISFIFO ! if (strEQ(name, "S_ISFIFO")) return S_ISFIFO(arg); ! #endif ! #ifdef S_ISREG ! if (strEQ(name, "S_ISREG")) return S_ISREG(arg); ! #endif ! break; ! } ! if (strEQ(name, "SEEK_CUR")) ! #ifdef SEEK_CUR ! return SEEK_CUR; #else ! goto not_there; #endif ! if (strEQ(name, "SEEK_END")) ! #ifdef SEEK_END ! return SEEK_END; #else ! goto not_there; #endif ! if (strEQ(name, "SEEK_SET")) ! #ifdef SEEK_SET ! return SEEK_SET; #else ! goto not_there; #endif ! if (strEQ(name, "STREAM_MAX")) ! #ifdef STREAM_MAX ! return STREAM_MAX; #else ! goto not_there; #endif ! if (strEQ(name, "SHRT_MAX")) ! #ifdef SHRT_MAX ! return SHRT_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SHRT_MIN")) ! #ifdef SHRT_MIN ! return SHRT_MIN; ! #else ! goto not_there; ! #endif ! if (strnEQ(name, "SA_", 3)) { ! if (strEQ(name, "SA_NOCLDSTOP")) ! #ifdef SA_NOCLDSTOP ! return SA_NOCLDSTOP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SA_NOCLDWAIT")) ! #ifdef SA_NOCLDWAIT ! return SA_NOCLDWAIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SA_NODEFER")) ! #ifdef SA_NODEFER ! return SA_NODEFER; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SA_ONSTACK")) ! #ifdef SA_ONSTACK ! return SA_ONSTACK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SA_RESETHAND")) ! #ifdef SA_RESETHAND ! return SA_RESETHAND; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SA_RESTART")) ! #ifdef SA_RESTART ! return SA_RESTART; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SA_SIGINFO")) ! #ifdef SA_SIGINFO ! return SA_SIGINFO; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strEQ(name, "SCHAR_MAX")) ! #ifdef SCHAR_MAX ! return SCHAR_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SCHAR_MIN")) ! #ifdef SCHAR_MIN ! return SCHAR_MIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SSIZE_MAX")) ! #ifdef SSIZE_MAX ! return SSIZE_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "STDIN_FILENO")) ! #ifdef STDIN_FILENO ! return STDIN_FILENO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "STDOUT_FILENO")) ! #ifdef STDOUT_FILENO ! return STDOUT_FILENO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "STDERR_FILENO")) ! #ifdef STDERR_FILENO ! return STDERR_FILENO; ! #else ! goto not_there; ! #endif ! break; ! case 'T': ! if (strEQ(name, "TCIFLUSH")) ! #ifdef TCIFLUSH ! return TCIFLUSH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCIOFF")) ! #ifdef TCIOFF ! return TCIOFF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCIOFLUSH")) ! #ifdef TCIOFLUSH ! return TCIOFLUSH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCION")) ! #ifdef TCION ! return TCION; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCOFLUSH")) ! #ifdef TCOFLUSH ! return TCOFLUSH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCOOFF")) ! #ifdef TCOOFF ! return TCOOFF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCOON")) ! #ifdef TCOON ! return TCOON; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCSADRAIN")) ! #ifdef TCSADRAIN ! return TCSADRAIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCSAFLUSH")) ! #ifdef TCSAFLUSH ! return TCSAFLUSH; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCSANOW")) ! #ifdef TCSANOW ! return TCSANOW; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TMP_MAX")) ! #ifdef TMP_MAX ! return TMP_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TOSTOP")) ! #ifdef TOSTOP ! return TOSTOP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TZNAME_MAX")) ! #ifdef TZNAME_MAX ! return TZNAME_MAX; ! #else ! goto not_there; ! #endif ! break; ! case 'U': ! if (strEQ(name, "UCHAR_MAX")) ! #ifdef UCHAR_MAX ! return UCHAR_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "UINT_MAX")) ! #ifdef UINT_MAX ! return UINT_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "ULONG_MAX")) ! #ifdef ULONG_MAX ! return ULONG_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "USHRT_MAX")) ! #ifdef USHRT_MAX ! return USHRT_MAX; ! #else ! goto not_there; ! #endif ! break; ! case 'V': ! if (strEQ(name, "VEOF")) ! #ifdef VEOF ! return VEOF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VEOL")) ! #ifdef VEOL ! return VEOL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VERASE")) ! #ifdef VERASE ! return VERASE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VINTR")) ! #ifdef VINTR ! return VINTR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VKILL")) ! #ifdef VKILL ! return VKILL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VMIN")) ! #ifdef VMIN ! return VMIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VQUIT")) ! #ifdef VQUIT ! return VQUIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VSTART")) ! #ifdef VSTART ! return VSTART; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VSTOP")) ! #ifdef VSTOP ! return VSTOP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VSUSP")) ! #ifdef VSUSP ! return VSUSP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "VTIME")) ! #ifdef VTIME ! return VTIME; ! #else ! goto not_there; ! #endif ! break; ! case 'W': ! if (strEQ(name, "W_OK")) ! #ifdef W_OK ! return W_OK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "WNOHANG")) ! #ifdef WNOHANG ! return WNOHANG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "WUNTRACED")) ! #ifdef WUNTRACED ! return WUNTRACED; ! #else ! goto not_there; ! #endif ! errno = EAGAIN; /* the following aren't constants */ ! #ifdef WEXITSTATUS ! if (strEQ(name, "WEXITSTATUS")) return WEXITSTATUS(arg); ! #endif ! #ifdef WIFEXITED ! if (strEQ(name, "WIFEXITED")) return WIFEXITED(arg); ! #endif #ifdef WIFSIGNALED ! if (strEQ(name, "WIFSIGNALED")) return WIFSIGNALED(arg); ! #endif ! #ifdef WIFSTOPPED ! if (strEQ(name, "WIFSTOPPED")) return WIFSTOPPED(arg); ! #endif ! #ifdef WSTOPSIG ! if (strEQ(name, "WSTOPSIG")) return WSTOPSIG(arg); ! #endif ! #ifdef WTERMSIG ! if (strEQ(name, "WTERMSIG")) return WTERMSIG(arg); ! #endif ! break; ! case 'X': ! if (strEQ(name, "X_OK")) ! #ifdef X_OK ! return X_OK; #else ! goto not_there; #endif ! break; ! case '_': ! if (strnEQ(name, "_PC_", 4)) { ! if (strEQ(name, "_PC_CHOWN_RESTRICTED")) ! #if defined(_PC_CHOWN_RESTRICTED) || HINT_SC_EXIST ! return _PC_CHOWN_RESTRICTED; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_LINK_MAX")) ! #if defined(_PC_LINK_MAX) || HINT_SC_EXIST ! return _PC_LINK_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_MAX_CANON")) ! #if defined(_PC_MAX_CANON) || HINT_SC_EXIST ! return _PC_MAX_CANON; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_MAX_INPUT")) ! #if defined(_PC_MAX_INPUT) || HINT_SC_EXIST ! return _PC_MAX_INPUT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_NAME_MAX")) ! #if defined(_PC_NAME_MAX) || HINT_SC_EXIST ! return _PC_NAME_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_NO_TRUNC")) ! #if defined(_PC_NO_TRUNC) || HINT_SC_EXIST ! return _PC_NO_TRUNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_PATH_MAX")) ! #if defined(_PC_PATH_MAX) || HINT_SC_EXIST ! return _PC_PATH_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_PIPE_BUF")) ! #if defined(_PC_PIPE_BUF) || HINT_SC_EXIST ! return _PC_PIPE_BUF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_PC_VDISABLE")) ! #if defined(_PC_VDISABLE) || HINT_SC_EXIST ! return _PC_VDISABLE; ! #else ! goto not_there; ! #endif ! break; ! } ! if (strnEQ(name, "_POSIX_", 7)) { ! if (strEQ(name, "_POSIX_ARG_MAX")) ! #ifdef _POSIX_ARG_MAX ! return _POSIX_ARG_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_CHILD_MAX")) ! #ifdef _POSIX_CHILD_MAX ! return _POSIX_CHILD_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_CHOWN_RESTRICTED")) ! #ifdef _POSIX_CHOWN_RESTRICTED ! return _POSIX_CHOWN_RESTRICTED; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_JOB_CONTROL")) ! #ifdef _POSIX_JOB_CONTROL ! return _POSIX_JOB_CONTROL; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_LINK_MAX")) ! #ifdef _POSIX_LINK_MAX ! return _POSIX_LINK_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_MAX_CANON")) ! #ifdef _POSIX_MAX_CANON ! return _POSIX_MAX_CANON; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_MAX_INPUT")) ! #ifdef _POSIX_MAX_INPUT ! return _POSIX_MAX_INPUT; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_NAME_MAX")) ! #ifdef _POSIX_NAME_MAX ! return _POSIX_NAME_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_NGROUPS_MAX")) ! #ifdef _POSIX_NGROUPS_MAX ! return _POSIX_NGROUPS_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_NO_TRUNC")) ! #ifdef _POSIX_NO_TRUNC ! return _POSIX_NO_TRUNC; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_OPEN_MAX")) ! #ifdef _POSIX_OPEN_MAX ! return _POSIX_OPEN_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_PATH_MAX")) ! #ifdef _POSIX_PATH_MAX ! return _POSIX_PATH_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_PIPE_BUF")) ! #ifdef _POSIX_PIPE_BUF ! return _POSIX_PIPE_BUF; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_SAVED_IDS")) ! #ifdef _POSIX_SAVED_IDS ! return _POSIX_SAVED_IDS; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_SSIZE_MAX")) ! #ifdef _POSIX_SSIZE_MAX ! return _POSIX_SSIZE_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_STREAM_MAX")) ! #ifdef _POSIX_STREAM_MAX ! return _POSIX_STREAM_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_TZNAME_MAX")) ! #ifdef _POSIX_TZNAME_MAX ! return _POSIX_TZNAME_MAX; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_VDISABLE")) ! #ifdef _POSIX_VDISABLE ! return _POSIX_VDISABLE; ! #else ! return 0; ! #endif ! if (strEQ(name, "_POSIX_VERSION")) ! #ifdef _POSIX_VERSION ! return _POSIX_VERSION; ! #else ! return 0; ! #endif ! break; ! } ! if (strnEQ(name, "_SC_", 4)) { ! if (strEQ(name, "_SC_ARG_MAX")) ! #if defined(_SC_ARG_MAX) || HINT_SC_EXIST ! return _SC_ARG_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_CHILD_MAX")) ! #if defined(_SC_CHILD_MAX) || HINT_SC_EXIST ! return _SC_CHILD_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_CLK_TCK")) ! #if defined(_SC_CLK_TCK) || HINT_SC_EXIST ! return _SC_CLK_TCK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_JOB_CONTROL")) ! #if defined(_SC_JOB_CONTROL) || HINT_SC_EXIST ! return _SC_JOB_CONTROL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_NGROUPS_MAX")) ! #if defined(_SC_NGROUPS_MAX) || HINT_SC_EXIST ! return _SC_NGROUPS_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_OPEN_MAX")) ! #if defined(_SC_OPEN_MAX) || HINT_SC_EXIST ! return _SC_OPEN_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_SAVED_IDS")) ! #if defined(_SC_SAVED_IDS) || HINT_SC_EXIST ! return _SC_SAVED_IDS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_STREAM_MAX")) ! #if defined(_SC_STREAM_MAX) || HINT_SC_EXIST ! return _SC_STREAM_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_TZNAME_MAX")) ! #if defined(_SC_TZNAME_MAX) || HINT_SC_EXIST ! return _SC_TZNAME_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "_SC_VERSION")) ! #if defined(_SC_VERSION) || HINT_SC_EXIST ! return _SC_VERSION; ! #else ! goto not_there; ! #endif ! break; ! } } ! errno = EINVAL; ! return 0; ! ! not_there: ! errno = ENOENT; ! return 0; } static void ! restore_sigmask(sigset_t *ossetp) { ! /* Fortunately, restoring the signal mask can't fail, because ! * there's nothing we can do about it if it does -- we're not ! * supposed to return -1 from sigaction unless the disposition ! * was unaffected. ! */ ! (void)sigprocmask(SIG_SETMASK, ossetp, (sigset_t *)0); } MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig --- 352,536 ---- return -1; } ! #include "constants.c" ! ! /* These were implemented in the old "constant" subroutine. They are actually ! macros that take an integer argument and return an integer result. */ ! static int ! int_macro_int (const char *name, STRLEN len, IV *arg_result) { ! /* Initially switch on the length of the name. */ ! /* This code has been edited from a "constant" function generated by: ! ! use ExtUtils::Constant qw (constant_types C_constant XS_constant); ! ! my $types = {map {($_, 1)} qw(IV)}; ! my @names = (qw(S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISREG WEXITSTATUS WIFEXITED ! WIFSIGNALED WIFSTOPPED WSTOPSIG WTERMSIG)); ! ! print constant_types(); # macro defs ! foreach (C_constant ("POSIX", 'int_macro_int', 'IV', $types, undef, 5, @names) ) { ! print $_, "\n"; # C constant subs ! } ! print "#### XS Section:\n"; ! print XS_constant ("POSIX", $types); ! __END__ ! */ ! ! switch (len) { ! case 7: ! /* Names all of length 7. */ ! /* S_ISBLK S_ISCHR S_ISDIR S_ISREG */ ! /* Offset 5 gives the best switch position. */ ! switch (name[5]) { case 'E': ! if (memEQ(name, "S_ISREG", 7)) { ! /* ^ */ ! #ifdef S_ISREG ! *arg_result = S_ISREG(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; case 'H': ! if (memEQ(name, "S_ISCHR", 7)) { ! /* ^ */ ! #ifdef S_ISCHR ! *arg_result = S_ISCHR(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; case 'I': ! if (memEQ(name, "S_ISDIR", 7)) { ! /* ^ */ ! #ifdef S_ISDIR ! *arg_result = S_ISDIR(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; case 'L': ! if (memEQ(name, "S_ISBLK", 7)) { ! /* ^ */ ! #ifdef S_ISBLK ! *arg_result = S_ISBLK(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; ! } ! break; ! case 8: ! /* Names all of length 8. */ ! /* S_ISFIFO WSTOPSIG WTERMSIG */ ! /* Offset 3 gives the best switch position. */ ! switch (name[3]) { case 'O': ! if (memEQ(name, "WSTOPSIG", 8)) { ! /* ^ */ ! #ifdef WSTOPSIG ! *arg_result = WSTOPSIG(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; case 'R': ! if (memEQ(name, "WTERMSIG", 8)) { ! /* ^ */ ! #ifdef WTERMSIG ! *arg_result = WTERMSIG(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; case 'S': ! if (memEQ(name, "S_ISFIFO", 8)) { ! /* ^ */ #ifdef S_ISFIFO ! *arg_result = S_ISFIFO(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; ! } ! break; ! case 9: ! if (memEQ(name, "WIFEXITED", 9)) { ! #ifdef WIFEXITED ! *arg_result = WIFEXITED(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; ! case 10: ! if (memEQ(name, "WIFSTOPPED", 10)) { ! #ifdef WIFSTOPPED ! *arg_result = WIFSTOPPED(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; ! case 11: ! /* Names all of length 11. */ ! /* WEXITSTATUS WIFSIGNALED */ ! /* Offset 1 gives the best switch position. */ ! switch (name[1]) { ! case 'E': ! if (memEQ(name, "WEXITSTATUS", 11)) { ! /* ^ */ ! #ifdef WEXITSTATUS ! *arg_result = WEXITSTATUS(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; ! case 'I': ! if (memEQ(name, "WIFSIGNALED", 11)) { ! /* ^ */ #ifdef WIFSIGNALED ! *arg_result = WIFSIGNALED(*arg_result); ! return PERL_constant_ISIV; #else ! return PERL_constant_NOTDEF; #endif ! } ! break; } ! break; ! } ! return PERL_constant_NOTFOUND; } static void ! restore_sigmask(pTHX_ SV *osset_sv) { ! /* Fortunately, restoring the signal mask can't fail, because ! * there's nothing we can do about it if it does -- we're not ! * supposed to return -1 from sigaction unless the disposition ! * was unaffected. ! */ ! sigset_t *ossetp = (sigset_t *) SvPV_nolen( osset_sv ); ! (void)sigprocmask(SIG_SETMASK, ossetp, (sigset_t *)0); } MODULE = SigSet PACKAGE = POSIX::SigSet PREFIX = sig *************** *** 3029,3039 **** MODULE = POSIX PACKAGE = POSIX ! NV ! constant(name,arg) ! char * name ! int arg int isalnum(charstring) unsigned char * charstring --- 772,821 ---- MODULE = POSIX PACKAGE = POSIX ! INCLUDE: constants.xs + void + int_macro_int(sv, iv) + PREINIT: + dXSTARG; + STRLEN len; + int type; + INPUT: + SV * sv; + const char * s = SvPV(sv, len); + IV iv; + PPCODE: + /* Change this to int_macro_int(s, len, &iv, &nv); + if you need to return both NVs and IVs */ + type = int_macro_int(s, len, &iv); + /* Return 1 or 2 items. First is error message, or undef if no error. + Second, if present, is found value */ + switch (type) { + case PERL_constant_NOTFOUND: + sv = sv_2mortal(newSVpvf("%s is not a valid POSIX macro", s)); + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(sv); + break; + case PERL_constant_NOTDEF: + sv = sv_2mortal(newSVpvf( + "Your vendor has not defined POSIX macro %s, used", s)); + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(sv); + break; + case PERL_constant_ISIV: + PUSHi(iv); + break; + default: + sv = sv_2mortal(newSVpvf( + "Unexpected return type %d while processing POSIX macro %s, used", + type, s)); + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(sv); + } + int isalnum(charstring) unsigned char * charstring *************** *** 3392,3398 **** SV * optaction POSIX::SigAction oldaction CODE: ! #ifdef WIN32 RETVAL = not_here("sigaction"); #else # This code is really grody because we're trying to make the signal --- 1174,1180 ---- SV * optaction POSIX::SigAction oldaction CODE: ! #if defined(WIN32) || defined(NETWARE) RETVAL = not_here("sigaction"); #else # This code is really grody because we're trying to make the signal *************** *** 3404,3409 **** --- 1186,1192 ---- struct sigaction act; struct sigaction oact; sigset_t sset; + SV *osset_sv; sigset_t osset; POSIX__SigSet sigset; SV** svp; *************** *** 3411,3417 **** PL_sig_name[sig], strlen(PL_sig_name[sig]), TRUE); - STRLEN n_a; /* Check optaction and set action */ if(SvTRUE(optaction)) { --- 1194,1199 ---- *************** *** 3432,3441 **** sigfillset(&sset); RETVAL=sigprocmask(SIG_BLOCK, &sset, &osset); if(RETVAL == -1) ! XSRETURN(1); ENTER; /* Restore signal mask no matter how we exit this block. */ ! SAVEDESTRUCTOR(restore_sigmask, &osset); RETVAL=-1; /* In case both oldaction and action are 0. */ --- 1214,1225 ---- sigfillset(&sset); RETVAL=sigprocmask(SIG_BLOCK, &sset, &osset); if(RETVAL == -1) ! XSRETURN_UNDEF; ENTER; /* Restore signal mask no matter how we exit this block. */ ! osset_sv = newSVpv((char *)(&osset), sizeof(sigset_t)); ! SAVEFREESV( osset_sv ); ! SAVEDESTRUCTOR_X(restore_sigmask, osset_sv); RETVAL=-1; /* In case both oldaction and action are 0. */ *************** *** 3452,3458 **** } RETVAL = sigaction(sig, (struct sigaction *)0, & oact); if(RETVAL == -1) ! XSRETURN(1); /* Get back the mask. */ svp = hv_fetch(oldaction, "MASK", 4, TRUE); if (sv_isa(*svp, "POSIX::SigSet")) { --- 1236,1242 ---- } RETVAL = sigaction(sig, (struct sigaction *)0, & oact); if(RETVAL == -1) ! XSRETURN_UNDEF; /* Get back the mask. */ svp = hv_fetch(oldaction, "MASK", 4, TRUE); if (sv_isa(*svp, "POSIX::SigSet")) { *************** *** 3514,3519 **** --- 1298,1305 ---- * essentially meaningless anyway. */ RETVAL = sigaction(sig, & act, (struct sigaction *)0); + if(RETVAL == -1) + XSRETURN_UNDEF; } LEAVE; *************** *** 3905,3968 **** int isdst CODE: { ! char tmpbuf[128]; ! struct tm mytm; ! int len; ! init_tm(&mytm); /* XXX workaround - see init_tm() above */ ! mytm.tm_sec = sec; ! mytm.tm_min = min; ! mytm.tm_hour = hour; ! mytm.tm_mday = mday; ! mytm.tm_mon = mon; ! mytm.tm_year = year; ! mytm.tm_wday = wday; ! mytm.tm_yday = yday; ! mytm.tm_isdst = isdst; ! mini_mktime(&mytm); ! len = strftime(tmpbuf, sizeof tmpbuf, fmt, &mytm); ! /* ! ** The following is needed to handle to the situation where ! ** tmpbuf overflows. Basically we want to allocate a buffer ! ** and try repeatedly. The reason why it is so complicated ! ** is that getting a return value of 0 from strftime can indicate ! ** one of the following: ! ** 1. buffer overflowed, ! ** 2. illegal conversion specifier, or ! ** 3. the format string specifies nothing to be returned(not ! ** an error). This could be because format is an empty string ! ** or it specifies %p that yields an empty string in some locale. ! ** If there is a better way to make it portable, go ahead by ! ** all means. ! */ ! if ((len > 0 && len < sizeof(tmpbuf)) || (len == 0 && *fmt == '\0')) ! ST(0) = sv_2mortal(newSVpv(tmpbuf, len)); ! else { ! /* Possibly buf overflowed - try again with a bigger buf */ ! int fmtlen = strlen(fmt); ! int bufsize = fmtlen + sizeof(tmpbuf); ! char* buf; ! int buflen; ! ! New(0, buf, bufsize, char); ! while (buf) { ! buflen = strftime(buf, bufsize, fmt, &mytm); ! if (buflen > 0 && buflen < bufsize) ! break; ! /* heuristic to prevent out-of-memory errors */ ! if (bufsize > 100*fmtlen) { ! Safefree(buf); ! buf = NULL; ! break; ! } ! bufsize *= 2; ! Renew(buf, bufsize, char); ! } ! if (buf) { ! ST(0) = sv_2mortal(newSVpvn(buf, buflen)); ! Safefree(buf); ! } ! else ! ST(0) = sv_2mortal(newSVpvn(tmpbuf, len)); } } --- 1691,1700 ---- int isdst CODE: { ! char *buf = my_strftime(fmt, sec, min, hour, mday, mon, year, wday, yday, isdst); ! if (buf) { ! ST(0) = sv_2mortal(newSVpv(buf, 0)); ! Safefree(buf); } } *************** *** 4018,4057 **** ttyname(fd) int fd ! char * getcwd() ! PPCODE: ! #ifdef HAS_GETCWD ! char * buf; ! int buflen = 128; ! int i; - New(0, buf, buflen, char); - /* Many getcwd()s know how to automatically allocate memory - * for the directory if the buffer argument is NULL but... - * (1) we cannot assume all getcwd()s do that - * (2) this may interfere with Perl's malloc - * So let's not. --jhi */ - while ((getcwd(buf, buflen) == NULL) && errno == ERANGE) { - buflen += 128; - if (buflen > MAXPATHLEN) { - Safefree(buf); - buf = NULL; - break; - } - Renew(buf, buflen, char); - } - if (buf) { - PUSHs(sv_2mortal(newSVpv(buf, 0))); - Safefree(buf); - } - else - PUSHs(&PL_sv_undef); - #else - require_pv("Cwd.pm"); - /* Module require may have grown the stack */ - SPAGAIN; - PUSHMARK(sp); - PUTBACK; - XSRETURN(call_pv("Cwd::cwd", GIMME_V)); - #endif --- 1750,1761 ---- ttyname(fd) int fd ! void getcwd() ! PPCODE: ! { ! dXSTARG; ! getcwd_sv(TARG); ! XSprePUSH; PUSHTARG; ! } diff -c /dev/null 'perl-5.7.2/ext/POSIX/hints/uts.pl' Index: ./ext/POSIX/hints/uts.pl *** ./ext/POSIX/hints/uts.pl Thu Jan 1 02:00:00 1970 --- ./ext/POSIX/hints/uts.pl Mon Jul 9 17:10:11 2001 *************** *** 0 **** --- 1,9 ---- + # UTS - Leaving -lm in there results in death of make with the message: + # LD_RUN_PATH="/usr/ccs/lib" ld -G -z text POSIX.o \ + # -o ../../lib/auto/POS IX/POSIX.so -lm + # relocations referenced + # from file(s) + # /usr/ccs/lib/libm.a(acos.o) + # ... + + $self->{LIBS} = ['']; diff -c /dev/null 'perl-5.7.2/ext/POSIX/sigaction.t' Index: ./ext/POSIX/sigaction.t *** ./ext/POSIX/sigaction.t Thu Jan 1 02:00:00 1970 --- ./ext/POSIX/sigaction.t Mon Jul 9 17:10:11 2001 *************** *** 0 **** --- 1,133 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + unshift @INC, '../lib'; + } + + BEGIN{ + # Don't do anything if POSIX is missing, or sigaction missing. + eval { use POSIX; }; + if($@ || $^O eq 'MSWin32' || $^O eq 'NetWare') { + print "1..0\n"; + exit 0; + } + } + + use strict; + use vars qw/$bad7 $ok10 $bad18 $ok/; + + $^W=1; + + print "1..18\n"; + + sub IGNORE { + $bad7=1; + } + + sub DEFAULT { + $bad18=1; + } + + sub foo { + $ok=1; + } + + my $newaction=POSIX::SigAction->new('::foo', new POSIX::SigSet(SIGUSR1), 0); + my $oldaction=POSIX::SigAction->new('::bar', new POSIX::SigSet(), 0); + + { + my $bad; + local($SIG{__WARN__})=sub { $bad=1; }; + sigaction(SIGHUP, $newaction, $oldaction); + if($bad) { print "not ok 1\n" } else { print "ok 1\n"} + } + + if($oldaction->{HANDLER} eq 'DEFAULT' || + $oldaction->{HANDLER} eq 'IGNORE') + { print "ok 2\n" } else { print "not ok 2 # ", $oldaction->{HANDLER}, "\n"} + print $SIG{HUP} eq '::foo' ? "ok 3\n" : "not ok 3\n"; + + sigaction(SIGHUP, $newaction, $oldaction); + if($oldaction->{HANDLER} eq '::foo') + { print "ok 4\n" } else { print "not ok 4\n"} + if($oldaction->{MASK}->ismember(SIGUSR1)) + { print "ok 5\n" } else { print "not ok 5\n"} + if($oldaction->{FLAGS}) { + if ($^O eq 'linux') { + print "ok 6 # Skip: sigaction() broken in $^O\n"; + } else { + print "not ok 6\n"; + } + } else { + print "ok 6\n"; + } + + $newaction=POSIX::SigAction->new('IGNORE'); + sigaction(SIGHUP, $newaction); + kill 'HUP', $$; + print $bad7 ? "not ok 7\n" : "ok 7\n"; + + print $SIG{HUP} eq 'IGNORE' ? "ok 8\n" : "not ok 8\n"; + sigaction(SIGHUP, POSIX::SigAction->new('DEFAULT')); + print $SIG{HUP} eq 'DEFAULT' ? "ok 9\n" : "not ok 9\n"; + + $newaction=POSIX::SigAction->new(sub { $ok10=1; }); + sigaction(SIGHUP, $newaction); + { + local($^W)=0; + kill 'HUP', $$; + } + print $ok10 ? "ok 10\n" : "not ok 10\n"; + + print ref($SIG{HUP}) eq 'CODE' ? "ok 11\n" : "not ok 11\n"; + + sigaction(SIGHUP, POSIX::SigAction->new('::foo')); + # Make sure the signal mask gets restored after sigaction croak()s. + eval { + my $act=POSIX::SigAction->new('::foo'); + delete $act->{HANDLER}; + sigaction(SIGINT, $act); + }; + kill 'HUP', $$; + print $ok ? "ok 12\n" : "not ok 12\n"; + + undef $ok; + # Make sure the signal mask gets restored after sigaction returns early. + my $x=defined sigaction(SIGKILL, $newaction, $oldaction); + kill 'HUP', $$; + print !$x && $ok ? "ok 13\n" : "not ok 13\n"; + + $SIG{HUP}=sub {}; + sigaction(SIGHUP, $newaction, $oldaction); + print ref($oldaction->{HANDLER}) eq 'CODE' ? "ok 14\n" : "not ok 14\n"; + + eval { + sigaction(SIGHUP, undef, $oldaction); + }; + print $@ ? "not ok 15\n" : "ok 15\n"; + + eval { + sigaction(SIGHUP, 0, $oldaction); + }; + print $@ ? "not ok 16\n" : "ok 16\n"; + + eval { + sigaction(SIGHUP, bless({},'Class'), $oldaction); + }; + print $@ ? "ok 17\n" : "not ok 17\n"; + + if ($^O eq 'VMS') { + print "ok 18 # Skip: SIGCONT not trappable in $^O\n"; + } else { + $newaction=POSIX::SigAction->new(sub { $ok10=1; }); + if (eval { SIGCONT; 1 }) { + sigaction(SIGCONT, POSIX::SigAction->new('DEFAULT')); + { + local($^W)=0; + kill 'CONT', $$; + } + } + print $bad18 ? "not ok 18\n" : "ok 18\n"; + } + diff -c /dev/null 'perl-5.7.2/ext/PerlIO/PerlIO.t' Index: ./ext/PerlIO/PerlIO.t *** ./ext/PerlIO/PerlIO.t Thu Jan 1 02:00:00 1970 --- ./ext/PerlIO/PerlIO.t Mon Jul 9 17:10:11 2001 *************** *** 0 **** --- 1,90 ---- + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + unless ($Config{'useperlio'}) { + print "1..0 # Skip: PerlIO not used\n"; + exit 0; + } + } + + use PerlIO; + + print "1..19\n"; + + print "ok 1\n"; + + my $txt = "txt$$"; + my $bin = "bin$$"; + my $utf = "utf$$"; + + my $txtfh; + my $binfh; + my $utffh; + + print "not " unless open($txtfh, ">:crlf", $txt); + print "ok 2\n"; + + print "not " unless open($binfh, ">:raw", $bin); + print "ok 3\n"; + + print "not " unless open($utffh, ">:utf8", $utf); + print "ok 4\n"; + + print $txtfh "foo\n"; + print $txtfh "bar\n"; + print "not " unless close($txtfh); + print "ok 5\n"; + + print $binfh "foo\n"; + print $binfh "bar\n"; + print "not " unless close($binfh); + print "ok 6\n"; + + print $utffh "foo\x{ff}\n"; + print $utffh "bar\x{abcd}\n"; + print "not " unless close($utffh); + print "ok 7\n"; + + print "not " unless open($txtfh, "<:crlf", $txt); + print "ok 8\n"; + + print "not " unless open($binfh, "<:raw", $bin); + print "ok 9\n"; + + print "not " unless open($utffh, "<:utf8", $utf); + print "ok 10\n"; + + print "not " unless <$txtfh> eq "foo\n" && <$txtfh> eq "bar\n"; + print "ok 11\n"; + + print "not " unless <$binfh> eq "foo\n" && <$binfh> eq "bar\n"; + print "ok 12\n"; + + print "not " unless <$utffh> eq "foo\x{ff}\n" && <$utffh> eq "bar\x{abcd}\n"; + print "ok 13\n"; + + print "not " unless eof($txtfh); + print "ok 14\n"; + + print "not " unless eof($binfh); + print "ok 15\n"; + + print "not " unless eof($utffh); + print "ok 16\n"; + + print "not " unless close($txtfh); + print "ok 17\n"; + + print "not " unless close($binfh); + print "ok 18\n"; + + print "not " unless close($utffh); + print "ok 19\n"; + + END { + 1 while unlink $txt; + 1 while unlink $bin; + 1 while unlink $utf; + } + diff -c 'perl-5.7.1/ext/PerlIO/Scalar/Makefile.PL' 'perl-5.7.2/ext/PerlIO/Scalar/Makefile.PL' Index: ./ext/PerlIO/Scalar/Makefile.PL *** ./ext/PerlIO/Scalar/Makefile.PL Sat Mar 24 17:55:01 2001 --- ./ext/PerlIO/Scalar/Makefile.PL Mon Jul 9 17:10:11 2001 *************** *** 1,6 **** --- 1,7 ---- use ExtUtils::MakeMaker; WriteMakefile( NAME => "PerlIO::Scalar", + MAN3PODS => {}, # Pods will be built by installman. VERSION_FROM => 'Scalar.pm', ); diff -c 'perl-5.7.1/ext/PerlIO/Scalar/Scalar.pm' 'perl-5.7.2/ext/PerlIO/Scalar/Scalar.pm' Index: ./ext/PerlIO/Scalar/Scalar.pm *** ./ext/PerlIO/Scalar/Scalar.pm Wed Mar 28 00:52:30 2001 --- ./ext/PerlIO/Scalar/Scalar.pm Mon Jul 9 17:10:11 2001 *************** *** 18,25 **** C only exists to use XSLoader to load C code that provides support for treating a scalar as an "in memory" file. ! All normal file operations can be performed on the handle. The scalar is considered ! a stream of bytes. Currently fileno($fh) returns C. =cut --- 18,25 ---- C only exists to use XSLoader to load C code that provides support for treating a scalar as an "in memory" file. ! All normal file operations can be performed on the handle. The scalar ! is considered a stream of bytes. Currently fileno($fh) returns C. =cut diff -c 'perl-5.7.1/ext/PerlIO/Scalar/Scalar.xs' 'perl-5.7.2/ext/PerlIO/Scalar/Scalar.xs' Index: ./ext/PerlIO/Scalar/Scalar.xs *** ./ext/PerlIO/Scalar/Scalar.xs Mon Mar 26 01:23:43 2001 --- ./ext/PerlIO/Scalar/Scalar.xs Mon Jul 9 17:10:11 2001 *************** *** 16,23 **** IV PerlIOScalar_pushed(PerlIO *f, const char *mode, SV *arg) { ! PerlIOScalar *b = PerlIOSelf(f,PerlIOScalar); ! return PerlIOBase_pushed(f,mode,arg); } IV --- 16,52 ---- IV PerlIOScalar_pushed(PerlIO *f, const char *mode, SV *arg) { ! dTHX; ! IV code; ! PerlIOScalar *s = PerlIOSelf(f,PerlIOScalar); ! /* If called (normally) via open() then arg is ref to scalar we are ! using, otherwise arg (from binmode presumably) is either NULL ! or the _name_ of the scalar ! */ ! if (arg) ! { ! if (SvROK(arg)) ! { ! s->var = SvREFCNT_inc(SvRV(arg)); ! } ! else ! { ! s->var = SvREFCNT_inc(perl_get_sv(SvPV_nolen(arg),GV_ADD|GV_ADDMULTI)); ! } ! } ! else ! { ! s->var = newSVpvn("",0); ! } ! sv_upgrade(s->var,SVt_PV); ! code = PerlIOBase_pushed(f,mode,Nullsv); ! if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND) ! s->posn = SvCUR(SvRV(arg)); ! else ! s->posn = 0; ! if ((PerlIOBase(f)->flags) & PERLIO_F_TRUNCATE) ! SvCUR(SvRV(arg)) = 0; ! return code; } IV *************** *** 36,44 **** IV PerlIOScalar_close(PerlIO *f) { - dTHX; IV code = PerlIOBase_close(f); - PerlIOScalar *s = PerlIOSelf(f,PerlIOScalar); PerlIOBase(f)->flags &= ~(PERLIO_F_RDBUF|PERLIO_F_WRBUF); return code; } --- 65,71 ---- *************** *** 86,92 **** dTHX; PerlIOScalar *s = PerlIOSelf(f,PerlIOScalar); char *dst = SvGROW(s->var,s->posn+count); ! Move(vbuf,dst,count,char); s->posn += count; SvCUR_set(s->var,s->posn); SvPOK_on(s->var); --- 113,119 ---- dTHX; PerlIOScalar *s = PerlIOSelf(f,PerlIOScalar); char *dst = SvGROW(s->var,s->posn+count); ! Move(vbuf,dst+s->posn,count,char); s->posn += count; SvCUR_set(s->var,s->posn); SvPOK_on(s->var); *************** *** 98,106 **** { if (PerlIOBase(f)->flags & PERLIO_F_CANWRITE) { ! return PerlIOScalar_unread(f,vbuf,count); } ! return 0; } IV --- 125,158 ---- { if (PerlIOBase(f)->flags & PERLIO_F_CANWRITE) { ! dTHX; ! Off_t offset; ! PerlIOScalar *s = PerlIOSelf(f,PerlIOScalar); ! SV *sv = s->var; ! char *dst; ! if ((PerlIOBase(f)->flags) & PERLIO_F_APPEND) ! { ! dst = SvGROW(sv,SvCUR(sv)+count); ! offset = SvCUR(sv); ! s->posn = offset+count; ! } ! else ! { ! if ((s->posn+count) > SvCUR(sv)) ! dst = SvGROW(sv,s->posn+count); ! else ! dst = SvPV_nolen(sv); ! offset = s->posn; ! s->posn += count; ! } ! Move(vbuf,dst+offset,count,char); ! if (s->posn > SvCUR(sv)) ! SvCUR_set(sv,s->posn); ! SvPOK_on(s->var); ! return count; } ! else ! return 0; } IV *************** *** 144,150 **** if (PerlIOBase(f)->flags & PERLIO_F_CANREAD) { PerlIOScalar *s = PerlIOSelf(f,PerlIOScalar); ! return SvCUR(s->var) - s->posn; } return 0; } --- 196,205 ---- if (PerlIOBase(f)->flags & PERLIO_F_CANREAD) { PerlIOScalar *s = PerlIOSelf(f,PerlIOScalar); ! if (SvCUR(s->var) > s->posn) ! return SvCUR(s->var) - s->posn; ! else ! return 0; } return 0; } *************** *** 168,190 **** } PerlIO * ! PerlIOScalar_open(pTHX_ PerlIO_funcs *self, AV *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args) { ! PerlIOScalar *s; ! if (narg > 0) { ! SV *ref = *args; ! if (SvROK(ref)) ! { ! SV *var = SvRV(ref); ! sv_upgrade(var,SVt_PV); ! f = PerlIO_allocate(aTHX); ! s = PerlIOSelf(PerlIO_push(aTHX_ f,self,mode,PerlIOArg),PerlIOScalar); ! s->var = SvREFCNT_inc(var); ! s->posn = 0; ! PerlIOBase(f)->flags |= PERLIO_F_OPEN; ! return f; ! } } return NULL; } --- 223,237 ---- } PerlIO * ! PerlIOScalar_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args) { ! SV *arg = (narg > 0) ? *args : PerlIOArg; ! if (SvROK(arg) || SvPOK(arg)) { ! f = PerlIO_allocate(aTHX); ! (void)PerlIOSelf(PerlIO_push(aTHX_ f,self,mode,arg),PerlIOScalar); ! PerlIOBase(f)->flags |= PERLIO_F_OPEN; ! return f; } return NULL; } *************** *** 222,227 **** --- 269,276 ---- #endif /* Layers available */ MODULE = PerlIO::Scalar PACKAGE = PerlIO::Scalar + + PROTOTYPES: ENABLE BOOT: { diff -c 'perl-5.7.1/ext/PerlIO/Via/Makefile.PL' 'perl-5.7.2/ext/PerlIO/Via/Makefile.PL' Index: ./ext/PerlIO/Via/Makefile.PL *** ./ext/PerlIO/Via/Makefile.PL Wed Mar 28 00:52:16 2001 --- ./ext/PerlIO/Via/Makefile.PL Mon Jul 9 17:10:11 2001 *************** *** 1,6 **** --- 1,7 ---- use ExtUtils::MakeMaker; WriteMakefile( NAME => "PerlIO::Via", + MAN3PODS => {}, # Pods will be built by installman. VERSION_FROM => 'Via.pm', ); diff -c 'perl-5.7.1/ext/PerlIO/Via/Via.pm' 'perl-5.7.2/ext/PerlIO/Via/Via.pm' Index: ./ext/PerlIO/Via/Via.pm *** ./ext/PerlIO/Via/Via.pm Wed Mar 28 00:52:16 2001 --- ./ext/PerlIO/Via/Via.pm Mon Jul 9 17:10:11 2001 *************** *** 50,63 **** =item $obj->FILENO($fh) ! Returns a numeric value for Unix-like file descriptor. Return -1 ! if there isn't one. ! Optional -default is fileno($fh). =item $obj->READ($buffer,$len,$fh) Returns the number of octets placed in $buffer (must be less that $len). ! Optional - default is to use FILL instead. =item $obj->WRITE($buffer,$fh) --- 50,62 ---- =item $obj->FILENO($fh) ! Returns a numeric value for Unix-like file descriptor. Return -1 if ! there isn't one. Optional. Default is fileno($fh). =item $obj->READ($buffer,$len,$fh) Returns the number of octets placed in $buffer (must be less that $len). ! Optional. Default is to use FILL instead. =item $obj->WRITE($buffer,$fh) *************** *** 65,73 **** =item $obj->FILL($fh) ! Should return a string to be placed in the buffer. ! Optional. If not provided must provide READ or reject handles open for ! reading in PUSHED. =item $obj->CLOSE($fh) --- 64,72 ---- =item $obj->FILL($fh) ! Should return a string to be placed in the buffer. Optional. If not ! provided must provide READ or reject handles open for reading in ! PUSHED. =item $obj->CLOSE($fh) *************** *** 86,100 **** =item $obj->UNREAD($buffer,$fh) ! Returns the number of octets from buffer that have been sucessfully saved ! to be returned on future FILL/READ calls. ! Optional. Default is to push data into a temporary layer above this one. =item $obj->FLUSH($fh) ! Flush any buffered write data. ! May possibly be called on readable handles too. ! Should return 0 on success, -1 on error. =item $obj->SETLINEBUF($fh) --- 85,98 ---- =item $obj->UNREAD($buffer,$fh) ! Returns the number of octets from buffer that have been sucessfully ! saved to be returned on future FILL/READ calls. Optional. Default is ! to push data into a temporary layer above this one. =item $obj->FLUSH($fh) ! Flush any buffered write data. May possibly be called on readable ! handles too. Should return 0 on success, -1 on error. =item $obj->SETLINEBUF($fh) *************** *** 111,118 **** =item $obj->EOF($fh) ! Optional. Returns end-of-file state. Default is function of return value of FILL ! or READ. =back --- 109,116 ---- =item $obj->EOF($fh) ! Optional. Returns end-of-file state. Default is function of return ! value of FILL or READ. =back diff -c 'perl-5.7.1/ext/PerlIO/Via/Via.xs' 'perl-5.7.2/ext/PerlIO/Via/Via.xs' Index: ./ext/PerlIO/Via/Via.xs *** ./ext/PerlIO/Via/Via.xs Sat Apr 7 18:41:34 2001 --- ./ext/PerlIO/Via/Via.xs Mon Jul 9 17:10:11 2001 *************** *** 70,76 **** IV count; dSP; SV *arg; - int i = 0; ENTER; PUSHMARK(sp); XPUSHs(s->obj); --- 70,75 ---- *************** *** 165,171 **** } PerlIO * ! PerlIOVia_open(pTHX_ PerlIO_funcs *self, AV *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args) { if (!f) { --- 164,170 ---- } PerlIO * ! PerlIOVia_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *f, int narg, SV **args) { if (!f) { *************** *** 392,398 **** { if (PerlIOBase(f)->flags & PERLIO_F_CANREAD) { - dTHX; PerlIOVia *s = PerlIOSelf(f,PerlIOVia); if (s->var) { --- 391,396 ---- *************** *** 410,416 **** PerlIOVia *s = PerlIOSelf(f,PerlIOVia); if (s->var) { - dTHX; STDCHAR *p = (STDCHAR *)(SvEND(s->var) - s->cnt); return p; } --- 408,413 ---- diff -c /dev/null 'perl-5.7.2/ext/PerlIO/t/encoding.t' Index: ./ext/PerlIO/t/encoding.t *** ./ext/PerlIO/t/encoding.t Thu Jan 1 02:00:00 1970 --- ./ext/PerlIO/t/encoding.t Fri Jul 13 15:48:48 2001 *************** *** 0 **** --- 1,62 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + unless (find PerlIO::Layer 'perlio') { + print "1..0 # Skip: not perlio\n"; + exit 0; + } + } + + print "1..8\n"; + + my $grk = "grk$$"; + my $utf = "utf$$"; + + if (open(GRK, ">$grk")) { + # alpha beta gamma in ISO 8859-7 + print GRK "\xe1\xe2\xe3"; + close GRK; + } + + { + use Encode; + open(my $i,'<:encoding(iso-8859-7)',$grk); + print "ok 1\n"; + open(my $o,'>:utf8',$utf); + print "ok 2\n"; + print $o readline($i); + print "ok 3\n"; + close($o); + close($i); + } + + if (open(UTF, "<$utf")) { + # alpha beta gamma in UTF-8 Unicode (0x3b1 0x3b2 0x3b3) + print "not " unless eq "\xce\xb1\xce\xb2\xce\xb3"; + print "ok 4\n"; + close $grk; + } + + { + use Encode; + open(my $i,'<:utf8',$utf); + print "ok 5\n"; + open(my $o,'>:encoding(iso-8859-7)',$grk); + print "ok 6\n"; + print $o readline($i); + print "ok 7\n"; + close($o); + close($i); + } + + if (open(GRK, "<$grk")) { + print "not " unless eq "\xe1\xe2\xe3"; + print "ok 8\n"; + close $grk; + } + + END { + unlink($grk, $utf); + } diff -c /dev/null 'perl-5.7.2/ext/PerlIO/t/scalar.t' Index: ./ext/PerlIO/t/scalar.t *** ./ext/PerlIO/t/scalar.t Thu Jan 1 02:00:00 1970 --- ./ext/PerlIO/t/scalar.t Mon Jul 9 17:10:11 2001 *************** *** 0 **** --- 1,101 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + unless (find PerlIO::Layer 'perlio') { + print "1..0 # Skip: not perlio\n"; + exit 0; + } + } + + $| = 1; + print "1..20\n"; + + my $fh; + my $var = "ok 2\n"; + open($fh,"+<",\$var) or print "not "; + print "ok 1\n"; + print <$fh>; + print "not " unless eof($fh); + print "ok 3\n"; + seek($fh,0,0) or print "not "; + print "not " if eof($fh); + print "ok 4\n"; + print "ok 5\n"; + print $fh "ok 7\n" or print "not "; + print "ok 6\n"; + print $var; + $var = "foo\nbar\n"; + seek($fh,0,0) or print "not "; + print "not " if eof($fh); + print "ok 8\n"; + print "not " unless <$fh> eq "foo\n"; + print "ok 9\n"; + my $rv = close $fh; + if (!$rv) { + print "# Close on scalar failed: $!\n"; + print "not "; + } + print "ok 10\n"; + + # Test that semantics are similar to normal file-based I/O + # Check that ">" clobbers the scalar + $var = "Something"; + open $fh, ">", \$var; + print "# Got [$var], expect []\n"; + print "not " unless $var eq ""; + print "ok 11\n"; + # Check that file offset set to beginning of scalar + my $off = tell($fh); + print "# Got $off, expect 0\n"; + print "not " unless $off == 0; + print "ok 12\n"; + # Check that writes go where they should and update the offset + $var = "Something"; + print $fh "Brea"; + $off = tell($fh); + print "# Got $off, expect 4\n"; + print "not " unless $off == 4; + print "ok 13\n"; + print "# Got [$var], expect [Breathing]\n"; + print "not " unless $var eq "Breathing"; + print "ok 14\n"; + close $fh; + + # Check that ">>" appends to the scalar + $var = "Something "; + open $fh, ">>", \$var; + $off = tell($fh); + print "# Got $off, expect 10\n"; + print "not " unless $off == 10; + print "ok 15\n"; + print "# Got [$var], expect [Something ]\n"; + print "not " unless $var eq "Something "; + print "ok 16\n"; + # Check that further writes go to the very end of the scalar + $var .= "else "; + print "# Got [$var], expect [Something else ]\n"; + print "not " unless $var eq "Something else "; + print "ok 17\n"; + $off = tell($fh); + print "# Got $off, expect 10\n"; + print "not " unless $off == 10; + print "ok 18\n"; + print $fh "is here"; + print "# Got [$var], expect [Something else is here]\n"; + print "not " unless $var eq "Something else is here"; + print "ok 19\n"; + close $fh; + + # Check that updates to the scalar from elsewhere do not + # cause problems + $var = "line one\nline two\line three\n"; + open $fh, "<", \$var; + while (<$fh>) { + $var = "foo"; + } + close $fh; + print "# Got [$var], expect [foo]\n"; + print "not " unless $var eq "foo"; + print "ok 20\n"; diff -c /dev/null 'perl-5.7.2/ext/SDBM_File/sdbm.t' Index: ./ext/SDBM_File/sdbm.t *** ./ext/SDBM_File/sdbm.t Thu Jan 1 02:00:00 1970 --- ./ext/SDBM_File/sdbm.t Mon Jul 9 17:10:12 2001 *************** *** 0 **** --- 1,429 ---- + #!./perl + + # $RCSfile: dbm.t,v $$Revision: 4.1 $$Date: 92/08/07 18:27:43 $ + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if (($Config{'extensions'} !~ /\bSDBM_File\b/) && ($^O ne 'VMS')){ + print "1..0\n"; + exit 0; + } + } + + use strict; + use warnings; + + sub ok + { + my $no = shift ; + my $result = shift ; + + print "not " unless $result ; + print "ok $no\n" ; + } + + require SDBM_File; + #If Fcntl is not available, try 0x202 or 0x102 for O_RDWR|O_CREAT + use Fcntl; + + print "1..68\n"; + + unlink ; + + umask(0); + my %h ; + ok(1, tie %h,'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640); + + my $Dfile = "Op_dbmx.pag"; + if (! -e $Dfile) { + ($Dfile) = ; + } + if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'dos' || $^O eq 'cygwin') { + print "ok 2 # Skipped: different file permission semantics\n"; + } + else { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print (($mode & 0777) == 0640 ? "ok 2\n" : "not ok 2\n"); + } + my $i = 0; + while (my ($key,$value) = each(%h)) { + $i++; + } + print (!$i ? "ok 3\n" : "not ok 3\n"); + + $h{'goner1'} = 'snork'; + + $h{'abc'} = 'ABC'; + $h{'def'} = 'DEF'; + $h{'jkl','mno'} = "JKL\034MNO"; + $h{'a',2,3,4,5} = join("\034",'A',2,3,4,5); + $h{'a'} = 'A'; + $h{'b'} = 'B'; + $h{'c'} = 'C'; + $h{'d'} = 'D'; + $h{'e'} = 'E'; + $h{'f'} = 'F'; + $h{'g'} = 'G'; + $h{'h'} = 'H'; + $h{'i'} = 'I'; + + $h{'goner2'} = 'snork'; + delete $h{'goner2'}; + + untie(%h); + print (tie(%h,'SDBM_File','Op_dbmx', O_RDWR, 0640) ? "ok 4\n" : "not ok 4\n"); + + $h{'j'} = 'J'; + $h{'k'} = 'K'; + $h{'l'} = 'L'; + $h{'m'} = 'M'; + $h{'n'} = 'N'; + $h{'o'} = 'O'; + $h{'p'} = 'P'; + $h{'q'} = 'Q'; + $h{'r'} = 'R'; + $h{'s'} = 'S'; + $h{'t'} = 'T'; + $h{'u'} = 'U'; + $h{'v'} = 'V'; + $h{'w'} = 'W'; + $h{'x'} = 'X'; + $h{'y'} = 'Y'; + $h{'z'} = 'Z'; + + $h{'goner3'} = 'snork'; + + delete $h{'goner1'}; + delete $h{'goner3'}; + + my @keys = keys(%h); + my @values = values(%h); + + if ($#keys == 29 && $#values == 29) {print "ok 5\n";} else {print "not ok 5\n";} + + while (my ($key,$value) = each(%h)) { + if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) { + $key =~ y/a-z/A-Z/; + $i++ if $key eq $value; + } + } + + if ($i == 30) {print "ok 6\n";} else {print "not ok 6\n";} + + @keys = ('blurfl', keys(%h), 'dyick'); + if ($#keys == 31) {print "ok 7\n";} else {print "not ok 7\n";} + + $h{'foo'} = ''; + $h{''} = 'bar'; + + # check cache overflow and numeric keys and contents + my $ok = 1; + for ($i = 1; $i < 200; $i++) { $h{$i + 0} = $i + 0; } + for ($i = 1; $i < 200; $i++) { $ok = 0 unless $h{$i} == $i; } + print ($ok ? "ok 8\n" : "not ok 8\n"); + + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, + $blksize,$blocks) = stat($Dfile); + print ($size > 0 ? "ok 9\n" : "not ok 9\n"); + + @h{0..200} = 200..400; + my @foo = @h{0..200}; + print join(':',200..400) eq join(':',@foo) ? "ok 10\n" : "not ok 10\n"; + + print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n"); + print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n"); + + + { + # sub-class test + + package Another ; + + use strict ; + use warnings ; + + open(FILE, ">SubDB.pm") or die "Cannot open SubDB.pm: $!\n" ; + print FILE <<'EOM' ; + + package SubDB ; + + use strict ; + use warnings ; + use vars qw( @ISA @EXPORT) ; + + require Exporter ; + use SDBM_File; + @ISA=qw(SDBM_File); + @EXPORT = @SDBM_File::EXPORT if defined @SDBM_File::EXPORT ; + + sub STORE { + my $self = shift ; + my $key = shift ; + my $value = shift ; + $self->SUPER::STORE($key, $value * 2) ; + } + + sub FETCH { + my $self = shift ; + my $key = shift ; + $self->SUPER::FETCH($key) - 1 ; + } + + sub A_new_method + { + my $self = shift ; + my $key = shift ; + my $value = $self->FETCH($key) ; + return "[[$value]]" ; + } + + 1 ; + EOM + + close FILE ; + + BEGIN { push @INC, '.'; } + + eval 'use SubDB ; use Fcntl ;'; + main::ok(13, $@ eq "") ; + my %h ; + my $X ; + eval ' + $X = tie(%h, "SubDB","dbhash_tmp", O_RDWR|O_CREAT, 0640 ); + ' ; + + main::ok(14, $@ eq "") ; + + my $ret = eval '$h{"fred"} = 3 ; return $h{"fred"} ' ; + main::ok(15, $@ eq "") ; + main::ok(16, $ret == 5) ; + + $ret = eval '$X->A_new_method("fred") ' ; + main::ok(17, $@ eq "") ; + main::ok(18, $ret eq "[[5]]") ; + + undef $X; + untie(%h); + unlink "SubDB.pm", ; + + } + + ok(19, !exists $h{'goner1'}); + ok(20, exists $h{'foo'}); + + untie %h; + unlink , $Dfile; + + { + # DBM Filter tests + use strict ; + use warnings ; + my (%h, $db) ; + my ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + + sub checkOutput + { + my($fk, $sk, $fv, $sv) = @_ ; + return + $fetch_key eq $fk && $store_key eq $sk && + $fetch_value eq $fv && $store_value eq $sv && + $_ eq 'original' ; + } + + unlink ; + ok(21, $db = tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ; + + $db->filter_fetch_key (sub { $fetch_key = $_ }) ; + $db->filter_store_key (sub { $store_key = $_ }) ; + $db->filter_fetch_value (sub { $fetch_value = $_}) ; + $db->filter_store_value (sub { $store_value = $_ }) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + # fk sk fv sv + ok(22, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(23, $h{"fred"} eq "joe"); + # fk sk fv sv + ok(24, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(25, $db->FIRSTKEY() eq "fred") ; + # fk sk fv sv + ok(26, checkOutput( "fred", "", "", "")) ; + + # replace the filters, but remember the previous set + my ($old_fk) = $db->filter_fetch_key + (sub { $_ = uc $_ ; $fetch_key = $_ }) ; + my ($old_sk) = $db->filter_store_key + (sub { $_ = lc $_ ; $store_key = $_ }) ; + my ($old_fv) = $db->filter_fetch_value + (sub { $_ = "[$_]"; $fetch_value = $_ }) ; + my ($old_sv) = $db->filter_store_value + (sub { s/o/x/g; $store_value = $_ }) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"Fred"} = "Joe" ; + # fk sk fv sv + ok(27, checkOutput( "", "fred", "", "Jxe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(28, $h{"Fred"} eq "[Jxe]"); + # fk sk fv sv + ok(29, checkOutput( "", "fred", "[Jxe]", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(30, $db->FIRSTKEY() eq "FRED") ; + # fk sk fv sv + ok(31, checkOutput( "FRED", "", "", "")) ; + + # put the original filters back + $db->filter_fetch_key ($old_fk); + $db->filter_store_key ($old_sk); + $db->filter_fetch_value ($old_fv); + $db->filter_store_value ($old_sv); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(32, checkOutput( "", "fred", "", "joe")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(33, $h{"fred"} eq "joe"); + ok(34, checkOutput( "", "fred", "joe", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(35, $db->FIRSTKEY() eq "fred") ; + ok(36, checkOutput( "fred", "", "", "")) ; + + # delete the filters + $db->filter_fetch_key (undef); + $db->filter_store_key (undef); + $db->filter_fetch_value (undef); + $db->filter_store_value (undef); + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + $h{"fred"} = "joe" ; + ok(37, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(38, $h{"fred"} eq "joe"); + ok(39, checkOutput( "", "", "", "")) ; + + ($fetch_key, $store_key, $fetch_value, $store_value) = ("") x 4 ; + ok(40, $db->FIRSTKEY() eq "fred") ; + ok(41, checkOutput( "", "", "", "")) ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter with a closure + + use strict ; + use warnings ; + my (%h, $db) ; + + unlink ; + ok(42, $db = tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ; + + my %result = () ; + + sub Closure + { + my ($name) = @_ ; + my $count = 0 ; + my @kept = () ; + + return sub { ++$count ; + push @kept, $_ ; + $result{$name} = "$name - $count: [@kept]" ; + } + } + + $db->filter_store_key(Closure("store key")) ; + $db->filter_store_value(Closure("store value")) ; + $db->filter_fetch_key(Closure("fetch key")) ; + $db->filter_fetch_value(Closure("fetch value")) ; + + $_ = "original" ; + + $h{"fred"} = "joe" ; + ok(43, $result{"store key"} eq "store key - 1: [fred]"); + ok(44, $result{"store value"} eq "store value - 1: [joe]"); + ok(45, !defined $result{"fetch key"} ); + ok(46, !defined $result{"fetch value"} ); + ok(47, $_ eq "original") ; + + ok(48, $db->FIRSTKEY() eq "fred") ; + ok(49, $result{"store key"} eq "store key - 1: [fred]"); + ok(50, $result{"store value"} eq "store value - 1: [joe]"); + ok(51, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(52, ! defined $result{"fetch value"} ); + ok(53, $_ eq "original") ; + + $h{"jim"} = "john" ; + ok(54, $result{"store key"} eq "store key - 2: [fred jim]"); + ok(55, $result{"store value"} eq "store value - 2: [joe john]"); + ok(56, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(57, ! defined $result{"fetch value"} ); + ok(58, $_ eq "original") ; + + ok(59, $h{"fred"} eq "joe"); + ok(60, $result{"store key"} eq "store key - 3: [fred jim fred]"); + ok(61, $result{"store value"} eq "store value - 2: [joe john]"); + ok(62, $result{"fetch key"} eq "fetch key - 1: [fred]"); + ok(63, $result{"fetch value"} eq "fetch value - 1: [joe]"); + ok(64, $_ eq "original") ; + + undef $db ; + untie %h; + unlink ; + } + + { + # DBM Filter recursion detection + use strict ; + use warnings ; + my (%h, $db) ; + unlink ; + + ok(65, $db = tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ; + + $db->filter_store_key (sub { $_ = $h{$_} }) ; + + eval '$h{1} = 1234' ; + ok(66, $@ =~ /^recursion detected in filter_store_key at/ ); + + undef $db ; + untie %h; + unlink ; + } + + { + # Bug ID 20001013.009 + # + # test that $hash{KEY} = undef doesn't produce the warning + # Use of uninitialized value in null operation + use warnings ; + use strict ; + use SDBM_File ; + + unlink ; + my %h ; + my $a = ""; + local $SIG{__WARN__} = sub {$a = $_[0]} ; + + ok(67, tie(%h, 'SDBM_File','Op_dbmx', O_RDWR|O_CREAT, 0640)) ; + $h{ABC} = undef; + ok(68, $a eq "") ; + + untie %h; + unlink ; + } diff -c /dev/null 'perl-5.7.2/ext/Safe/safe1.t' Index: ./ext/Safe/safe1.t *** ./ext/Safe/safe1.t Thu Jan 1 02:00:00 1970 --- ./ext/Safe/safe1.t Mon Jul 9 17:10:12 2001 *************** *** 0 **** --- 1,68 ---- + #!./perl -w + $|=1; + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') { + print "1..0\n"; + exit 0; + } + } + + # Tests Todo: + # 'main' as root + + package test; # test from somewhere other than main + + use vars qw($bar); + + use Opcode 1.00, qw(opdesc opset opset_to_ops opset_to_hex + opmask_add full_opset empty_opset opcodes opmask define_optag); + + use Safe 1.00; + + my $last_test; # initalised at end + print "1..$last_test\n"; + + my $t = 1; + my $cpt; + # create and destroy some automatic Safe compartments first + $cpt = new Safe or die; + $cpt = new Safe or die; + $cpt = new Safe or die; + + $cpt = new Safe "Root" or die; + + foreach(1..3) { + $foo = 42; + + $cpt->share(qw($foo)); + + print ${$cpt->varglob('foo')} == 42 ? "ok $t\n" : "not ok $t\n"; $t++; + + ${$cpt->varglob('foo')} = 9; + + print $foo == 9 ? "ok $t\n" : "not ok $t\n"; $t++; + + print $cpt->reval('$foo') == 9 ? "ok $t\n" : "not ok $t\n"; $t++; + # check 'main' has been changed: + print $cpt->reval('$::foo') == 9 ? "ok $t\n" : "not ok $t\n"; $t++; + print $cpt->reval('$main::foo') == 9 ? "ok $t\n" : "not ok $t\n"; $t++; + # check we can't see our test package: + print $cpt->reval('$test::foo') ? "not ok $t\n" : "ok $t\n"; $t++; + print $cpt->reval('${"test::foo"}') ? "not ok $t\n" : "ok $t\n"; $t++; + + $cpt->erase; # erase the compartment, e.g., delete all variables + + print $cpt->reval('$foo') ? "not ok $t\n" : "ok $t\n"; $t++; + + # Note that we *must* use $cpt->varglob here because if we used + # $Root::foo etc we would still see the original values! + # This seems to be because the compiler has created an extra ref. + + print ${$cpt->varglob('foo')} ? "not ok $t\n" : "ok $t\n"; $t++; + } + + print "ok $last_test\n"; + BEGIN { $last_test = 28 } diff -c /dev/null 'perl-5.7.2/ext/Safe/safe2.t' Index: ./ext/Safe/safe2.t *** ./ext/Safe/safe2.t Thu Jan 1 02:00:00 1970 --- ./ext/Safe/safe2.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,145 ---- + #!./perl -w + $|=1; + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bOpcode\b/ && $Config{'osname'} ne 'VMS') { + print "1..0\n"; + exit 0; + } + # test 30 rather naughtily expects English error messages + $ENV{'LC_ALL'} = 'C'; + $ENV{LANGUAGE} = 'C'; # GNU locale extension + } + + # Tests Todo: + # 'main' as root + + use vars qw($bar); + + use Opcode 1.00, qw(opdesc opset opset_to_ops opset_to_hex + opmask_add full_opset empty_opset opcodes opmask define_optag); + + use Safe 1.00; + + my $last_test; # initalised at end + print "1..$last_test\n"; + + # Set up a package namespace of things to be visible to the unsafe code + $Root::foo = "visible"; + $bar = "invisible"; + + # Stop perl from moaning about identifies which are apparently only used once + $Root::foo .= ""; + + my $cpt; + # create and destroy a couple of automatic Safe compartments first + $cpt = new Safe or die; + $cpt = new Safe or die; + + $cpt = new Safe "Root"; + + $cpt->reval(q{ system("echo not ok 1"); }); + if ($@ =~ /^system trapped by operation mask/) { + print "ok 1\n"; + } else { + print "#$@" if $@; + print "not ok 1\n"; + } + + $cpt->reval(q{ + print $foo eq 'visible' ? "ok 2\n" : "not ok 2\n"; + print $main::foo eq 'visible' ? "ok 3\n" : "not ok 3\n"; + print defined($bar) ? "not ok 4\n" : "ok 4\n"; + print defined($::bar) ? "not ok 5\n" : "ok 5\n"; + print defined($main::bar) ? "not ok 6\n" : "ok 6\n"; + }); + print $@ ? "not ok 7\n#$@" : "ok 7\n"; + + $foo = "ok 8\n"; + %bar = (key => "ok 9\n"); + @baz = (); push(@baz, "o", "10"); $" = 'k '; + $glob = "ok 11\n"; + @glob = qw(not ok 16); + + sub sayok { print "ok @_\n" } + + $cpt->share(qw($foo %bar @baz *glob sayok)); + $cpt->share('$"') unless $Config{use5005threads}; + + $cpt->reval(q{ + package other; + sub other_sayok { print "ok @_\n" } + package main; + print $foo ? $foo : "not ok 8\n"; + print $bar{key} ? $bar{key} : "not ok 9\n"; + (@baz) ? print "@baz\n" : print "not ok 10\n"; + print $glob; + other::other_sayok(12); + $foo =~ s/8/14/; + $bar{new} = "ok 15\n"; + @glob = qw(ok 16); + }); + print $@ ? "not ok 13\n#$@" : "ok 13\n"; + $" = ' '; + print $foo, $bar{new}, "@glob\n"; + + $Root::foo = "not ok 17"; + @{$cpt->varglob('bar')} = qw(not ok 18); + ${$cpt->varglob('foo')} = "ok 17"; + @Root::bar = "ok"; + push(@Root::bar, "18"); # Two steps to prevent "Identifier used only once..." + + print "$Root::foo\n"; + print "@{$cpt->varglob('bar')}\n"; + + use strict; + + print 1 ? "ok 19\n" : "not ok 19\n"; + print 1 ? "ok 20\n" : "not ok 20\n"; + + my $m1 = $cpt->mask; + $cpt->trap("negate"); + my $m2 = $cpt->mask; + my @masked = opset_to_ops($m1); + print $m2 eq opset("negate", @masked) ? "ok 21\n" : "not ok 21\n"; + + print eval { $cpt->mask("a bad mask") } ? "not ok 22\n" : "ok 22\n"; + + print $cpt->reval("2 + 2") == 4 ? "ok 23\n" : "not ok 23\n"; + + $cpt->mask(empty_opset); + my $t_scalar = $cpt->reval('print wantarray ? "not ok 24\n" : "ok 24\n"'); + print $cpt->reval('@ary=(6,7,8);@ary') == 3 ? "ok 25\n" : "not ok 25\n"; + my @t_array = $cpt->reval('print wantarray ? "ok 26\n" : "not ok 26\n"; (2,3,4)'); + print $t_array[2] == 4 ? "ok 27\n" : "not ok 27\n"; + + my $t_scalar2 = $cpt->reval('die "foo bar"; 1'); + print defined $t_scalar2 ? "not ok 28\n" : "ok 28\n"; + print $@ =~ /foo bar/ ? "ok 29\n" : "not ok 29\n"; + + # --- rdo + + my $t = 30; + $cpt->rdo('/non/existant/file.name'); + # The regexp is getting rather baroque. + print $! =~ /cannot find|No such file|file specification syntax error|A file or directory in the path name does not exist|Invalid argument|Device not configured|file not found|File or directory doesn't exist/i ? "ok $t\n" : "not ok $t # $!\n"; $t++; + # test #31 is gone. + print 1 ? "ok $t\n" : "not ok $t\n#$@/$!\n"; $t++; + + #my $rdo_file = "tmp_rdo.tpl"; + #if (open X,">$rdo_file") { + # print X "999\n"; + # close X; + # $cpt->permit_only('const', 'leaveeval'); + # print $cpt->rdo($rdo_file) == 999 ? "ok $t\n" : "not ok $t\n"; $t++; + # unlink $rdo_file; + #} + #else { + # print "# test $t skipped, can't open file: $!\nok $t\n"; $t++; + #} + + + print "ok $last_test\n"; + BEGIN { $last_test = 32 } diff -c 'perl-5.7.1/ext/Socket/Makefile.PL' 'perl-5.7.2/ext/Socket/Makefile.PL' Index: ./ext/Socket/Makefile.PL *** ./ext/Socket/Makefile.PL Tue Mar 6 04:04:59 2001 --- ./ext/Socket/Makefile.PL Mon Jul 9 17:10:13 2001 *************** *** 1,4 **** --- 1,5 ---- use ExtUtils::MakeMaker; + use ExtUtils::Constant 0.07 'WriteConstants'; use Config; WriteMakefile( NAME => 'Socket', *************** *** 6,9 **** --- 7,50 ---- ($Config{libs} =~ /(-lsocks\S*)/ ? (LIBS => [ "$1" ] ) : ()), MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', # XXX remove later? + realclean => {FILES=> 'constants.c constants.xs'}, + ); + my @names = (qw(AF_802 AF_APPLETALK AF_CCITT AF_CHAOS AF_DATAKIT AF_DECnet + AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_LAT + AF_MAX AF_NBS AF_NIT AF_NS AF_OSI AF_OSINET AF_PUP AF_SNA + AF_UNIX AF_UNSPEC AF_X25 IOV_MAX IPPROTO_TCP MSG_BCAST + MSG_CTLFLAGS MSG_CTLIGNORE MSG_DONTWAIT MSG_EOF MSG_EOR + MSG_ERRQUEUE MSG_FIN MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL + MSG_RST MSG_SYN MSG_TRUNC MSG_WAITALL PF_802 PF_APPLETALK + PF_CCITT PF_CHAOS PF_DATAKIT PF_DECnet PF_DLI PF_ECMA PF_GOSIP + PF_HYLINK PF_IMPLINK PF_INET PF_LAT PF_MAX PF_NBS PF_NIT PF_NS + PF_OSI PF_OSINET PF_PUP PF_SNA PF_UNIX PF_UNSPEC PF_X25 + SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_TIMESTAMP SOCK_DGRAM + SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM SOL_SOCKET + SOMAXCONN SO_ACCEPTCONN SO_BROADCAST SO_DEBUG SO_DONTLINGER + SO_DONTROUTE SO_ERROR SO_KEEPALIVE SO_LINGER SO_OOBINLINE + SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT + SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO SO_TYPE SO_USELOOPBACK + TCP_KEEPALIVE TCP_MAXRT TCP_MAXSEG TCP_NODELAY TCP_STDURG + UIO_MAXIOV MSG_URG), + {name=>"SHUT_RD", type=>"IV", default=>["IV", "0"]}, + {name=>"SHUT_WR", type=>"IV", default=>["IV", "1"]}, + {name=>"SHUT_RDWR", type=>"IV", default=>["IV", "2"]}, + ); + + push @names, + {name=>$_, type=>"IV", + macro=>["#if defined($_) || defined(HAS_$_) /* might be an enum */\n", + "#endif\n"]} + foreach qw (MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS); + + push @names, + {name => $_, type => "SV", + pre=>"struct in_addr ip_address; ip_address.s_addr = htonl($_);", + value => "sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address ))",} + foreach qw(INADDR_ANY INADDR_LOOPBACK INADDR_NONE INADDR_BROADCAST); + + WriteConstants( + NAME => 'Socket', + NAMES => \@names, ); diff -c 'perl-5.7.1/ext/Socket/Socket.pm' 'perl-5.7.2/ext/Socket/Socket.pm' Index: ./ext/Socket/Socket.pm *** ./ext/Socket/Socket.pm Fri Mar 16 04:54:47 2001 --- ./ext/Socket/Socket.pm Mon Jul 9 17:10:13 2001 *************** *** 1,7 **** package Socket; our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); ! $VERSION = "1.72"; =head1 NAME --- 1,7 ---- package Socket; our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); ! $VERSION = "1.74"; =head1 NAME *************** *** 329,340 **** sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; ! my $val = constant($constname, @_ ? $_[0] : 0); ! if ($! != 0) { ! my ($pack,$file,$line) = caller; ! croak "Your vendor has not defined Socket macro $constname, used"; } ! eval "sub $AUTOLOAD () { $val }"; goto &$AUTOLOAD; } --- 329,340 ---- sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; ! croak "&Socket::constant not defined" if $constname eq 'constant'; ! my ($error, $val) = constant($constname); ! if ($error) { ! croak $error; } ! *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; } diff -c /dev/null 'perl-5.7.2/ext/Socket/Socket.t' Index: ./ext/Socket/Socket.t *** ./ext/Socket/Socket.t Thu Jan 1 02:00:00 1970 --- ./ext/Socket/Socket.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,87 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bSocket\b/ && + !(($^O eq 'VMS') && $Config{d_socket})) { + print "1..0\n"; + exit 0; + } + } + + use Socket; + + print "1..8\n"; + + if (socket(T,PF_INET,SOCK_STREAM,6)) { + print "ok 1\n"; + + if (connect(T,pack_sockaddr_in(7,inet_aton("localhost")))){ + print "ok 2\n"; + + print "# Connected to " . + inet_ntoa((unpack_sockaddr_in(getpeername(T)))[1])."\n"; + + syswrite(T,"hello",5); + $read = sysread(T,$buff,10); # Connection may be granted, then closed! + while ($read > 0 && length($buff) < 5) { + # adjust for fact that TCP doesn't guarantee size of reads/writes + $read = sysread(T,$buff,10,length($buff)); + } + print(($read == 0 || $buff eq "hello") ? "ok 3\n" : "not ok 3\n"); + } + else { + print "# You're allowed to fail tests 2 and 3 if.\n"; + print "# The echo service has been disabled.\n"; + print "# $!\n"; + print "ok 2\n"; + print "ok 3\n"; + } + } + else { + print "# $!\n"; + print "not ok 1\n"; + } + + if( socket(S,PF_INET,SOCK_STREAM,6) ){ + print "ok 4\n"; + + if (connect(S,pack_sockaddr_in(7,INADDR_LOOPBACK))){ + print "ok 5\n"; + + print "# Connected to " . + inet_ntoa((unpack_sockaddr_in(getpeername(S)))[1])."\n"; + + syswrite(S,"olleh",5); + $read = sysread(S,$buff,10); # Connection may be granted, then closed! + while ($read > 0 && length($buff) < 5) { + # adjust for fact that TCP doesn't guarantee size of reads/writes + $read = sysread(S,$buff,10,length($buff)); + } + print(($read == 0 || $buff eq "olleh") ? "ok 6\n" : "not ok 6\n"); + } + else { + print "# You're allowed to fail tests 5 and 6 if.\n"; + print "# The echo service has been disabled.\n"; + print "# $!\n"; + print "ok 5\n"; + print "ok 6\n"; + } + } + else { + print "# $!\n"; + print "not ok 4\n"; + } + + # warnings + $SIG{__WARN__} = sub { + ++ $w if $_[0] =~ /^6-ARG sockaddr_in call is deprecated/ ; + } ; + $w = 0 ; + sockaddr_in(1,2,3,4,5,6) ; + print ($w == 1 ? "not ok 7\n" : "ok 7\n") ; + use warnings 'Socket' ; + sockaddr_in(1,2,3,4,5,6) ; + print ($w == 1 ? "ok 8\n" : "not ok 8\n") ; diff -c 'perl-5.7.1/ext/Socket/Socket.xs' 'perl-5.7.2/ext/Socket/Socket.xs' Index: ./ext/Socket/Socket.xs *** ./ext/Socket/Socket.xs Fri Mar 30 17:39:38 2001 --- ./ext/Socket/Socket.xs Mon Jul 9 17:10:13 2001 *************** *** 10,16 **** # include # if defined(USE_SOCKS) && defined(I_SOCKS) # include ! # endif # ifdef MPE # define PF_INET AF_INET # define PF_UNIX AF_UNIX --- 10,16 ---- # include # if defined(USE_SOCKS) && defined(I_SOCKS) # include ! # endif # ifdef MPE # define PF_INET AF_INET # define PF_UNIX AF_UNIX *************** *** 39,44 **** --- 39,49 ---- # include "sockadapt.h" #endif + #ifdef NETWARE + NETDB_DEFINE_CONTEXT + NETINET_DEFINE_CONTEXT + #endif + #ifdef I_SYSUIO # include #endif *************** *** 63,69 **** #ifndef HAS_INET_ATON ! /* * Check whether "cp" is a valid ascii representation * of an Internet address and convert to a binary address. * Returns 1 if the address is valid, 0 if not. --- 68,74 ---- #ifndef HAS_INET_ATON ! /* * Check whether "cp" is a valid ascii representation * of an Internet address and convert to a binary address. * Returns 1 if the address is valid, 0 if not. *************** *** 104,110 **** continue; } if (base == 16 && (s=strchr(PL_hexdigit,c))) { ! val = (val << 4) + ((s - PL_hexdigit) & 15); cp++; continue; --- 109,115 ---- continue; } if (base == 16 && (s=strchr(PL_hexdigit,c))) { ! val = (val << 4) + ((s - PL_hexdigit) & 15); cp++; continue; *************** *** 174,914 **** return -1; } ! static double ! constant(char *name, int arg) ! { ! errno = 0; ! switch (*name) { ! case 'A': ! if (strEQ(name, "AF_802")) ! #ifdef AF_802 ! return AF_802; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_APPLETALK")) ! #ifdef AF_APPLETALK ! return AF_APPLETALK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_CCITT")) ! #ifdef AF_CCITT ! return AF_CCITT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_CHAOS")) ! #ifdef AF_CHAOS ! return AF_CHAOS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_DATAKIT")) ! #ifdef AF_DATAKIT ! return AF_DATAKIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_DECnet")) ! #ifdef AF_DECnet ! return AF_DECnet; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_DLI")) ! #ifdef AF_DLI ! return AF_DLI; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_ECMA")) ! #ifdef AF_ECMA ! return AF_ECMA; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_GOSIP")) ! #ifdef AF_GOSIP ! return AF_GOSIP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_HYLINK")) ! #ifdef AF_HYLINK ! return AF_HYLINK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_IMPLINK")) ! #ifdef AF_IMPLINK ! return AF_IMPLINK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_INET")) ! #ifdef AF_INET ! return AF_INET; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_LAT")) ! #ifdef AF_LAT ! return AF_LAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_MAX")) ! #ifdef AF_MAX ! return AF_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_NBS")) ! #ifdef AF_NBS ! return AF_NBS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_NIT")) ! #ifdef AF_NIT ! return AF_NIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_NS")) ! #ifdef AF_NS ! return AF_NS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_OSI")) ! #ifdef AF_OSI ! return AF_OSI; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_OSINET")) ! #ifdef AF_OSINET ! return AF_OSINET; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_PUP")) ! #ifdef AF_PUP ! return AF_PUP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_SNA")) ! #ifdef AF_SNA ! return AF_SNA; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_UNIX")) ! #ifdef AF_UNIX ! return AF_UNIX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_UNSPEC")) ! #ifdef AF_UNSPEC ! return AF_UNSPEC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "AF_X25")) ! #ifdef AF_X25 ! return AF_X25; ! #else ! goto not_there; ! #endif ! break; ! case 'B': ! break; ! case 'C': ! break; ! case 'D': ! break; ! case 'E': ! break; ! case 'F': ! break; ! case 'G': ! break; ! case 'H': ! break; ! case 'I': ! if (strEQ(name, "IOV_MAX")) ! #ifdef IOV_MAX ! return IOV_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "IPPROTO_TCP")) ! #ifdef IPPROTO_TCP ! return IPPROTO_TCP; ! #else ! goto not_there; ! #endif ! break; ! case 'J': ! break; ! case 'K': ! break; ! case 'L': ! break; ! case 'M': ! if (strEQ(name, "MSG_BCAST")) ! #ifdef MSG_BCAST ! return MSG_BCAST; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_CTLFLAGS")) ! #ifdef MSG_CTLFLAGS ! return MSG_CTLFLAGS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_CTLIGNORE")) ! #ifdef MSG_CTLIGNORE ! return MSG_CTLIGNORE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_CTRUNC")) ! #if defined(MSG_TRUNC) || defined(HAS_MSG_CTRUNC) /* might be an enum */ ! return MSG_CTRUNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_DONTROUTE")) ! #if defined(MSG_DONTROUTE) || defined(HAS_MSG_DONTROUTE) /* might be an enum */ ! return MSG_DONTROUTE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_DONTWAIT")) ! #ifdef MSG_DONTWAIT ! return MSG_DONTWAIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_EOF")) ! #ifdef MSG_EOF ! return MSG_EOF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_EOR")) ! #ifdef MSG_EOR ! return MSG_EOR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_ERRQUEUE")) ! #ifdef MSG_ERRQUEUE ! return MSG_ERRQUEUE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_FIN")) ! #ifdef MSG_FIN ! return MSG_FIN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_MAXIOVLEN")) ! #ifdef MSG_MAXIOVLEN ! return MSG_MAXIOVLEN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_MCAST")) ! #ifdef MSG_MCAST ! return MSG_MCAST; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_NOSIGNAL")) ! #ifdef MSG_NOSIGNAL ! return MSG_NOSIGNAL; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_OOB")) ! #if defined(MSG_OOB) || defined(HAS_MSG_OOB) /* might be an enum */ ! return MSG_OOB; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_PEEK")) ! #if defined(MSG_PEEK) || defined(HAS_MSG_PEEK) /* might be an enum */ ! return MSG_PEEK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_PROXY")) ! #if defined(MSG_PROXY) || defined(HAS_MSG_PROXY) /* might be an enum */ ! return MSG_PROXY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_RST")) ! #ifdef MSG_RST ! return MSG_RST; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_SYN")) ! #ifdef MSG_SYN ! return MSG_SYN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_TRUNC")) ! #ifdef MSG_TRUNC ! return MSG_TRUNC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "MSG_WAITALL")) ! #ifdef MSG_WAITALL ! return MSG_WAITALL; ! #else ! goto not_there; ! #endif ! break; ! case 'N': ! break; ! case 'O': ! break; ! case 'P': ! if (strEQ(name, "PF_802")) ! #ifdef PF_802 ! return PF_802; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_APPLETALK")) ! #ifdef PF_APPLETALK ! return PF_APPLETALK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_CCITT")) ! #ifdef PF_CCITT ! return PF_CCITT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_CHAOS")) ! #ifdef PF_CHAOS ! return PF_CHAOS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_DATAKIT")) ! #ifdef PF_DATAKIT ! return PF_DATAKIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_DECnet")) ! #ifdef PF_DECnet ! return PF_DECnet; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_DLI")) ! #ifdef PF_DLI ! return PF_DLI; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_ECMA")) ! #ifdef PF_ECMA ! return PF_ECMA; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_GOSIP")) ! #ifdef PF_GOSIP ! return PF_GOSIP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_HYLINK")) ! #ifdef PF_HYLINK ! return PF_HYLINK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_IMPLINK")) ! #ifdef PF_IMPLINK ! return PF_IMPLINK; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_INET")) ! #ifdef PF_INET ! return PF_INET; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_LAT")) ! #ifdef PF_LAT ! return PF_LAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_MAX")) ! #ifdef PF_MAX ! return PF_MAX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_NBS")) ! #ifdef PF_NBS ! return PF_NBS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_NIT")) ! #ifdef PF_NIT ! return PF_NIT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_NS")) ! #ifdef PF_NS ! return PF_NS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_OSI")) ! #ifdef PF_OSI ! return PF_OSI; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_OSINET")) ! #ifdef PF_OSINET ! return PF_OSINET; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_PUP")) ! #ifdef PF_PUP ! return PF_PUP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_SNA")) ! #ifdef PF_SNA ! return PF_SNA; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_UNIX")) ! #ifdef PF_UNIX ! return PF_UNIX; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_UNSPEC")) ! #ifdef PF_UNSPEC ! return PF_UNSPEC; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "PF_X25")) ! #ifdef PF_X25 ! return PF_X25; ! #else ! goto not_there; ! #endif ! break; ! case 'Q': ! break; ! case 'R': ! break; ! case 'S': ! if (strEQ(name, "SCM_CONNECT")) ! #ifdef SCM_CONNECT ! return SCM_CONNECT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SCM_CREDENTIALS")) ! #ifdef SCM_CREDENTIALS ! return SCM_CREDENTIALS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SCM_CREDS")) ! #ifdef SCM_CREDS ! return SCM_CREDS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SCM_RIGHTS")) ! #if defined(SCM_RIGHTS) || defined(HAS_SCM_RIGHTS) /* might be an enum */ ! return SCM_RIGHTS; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SCM_TIMESTAMP")) ! #ifdef SCM_TIMESTAMP ! return SCM_TIMESTAMP; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SHUT_RD")) ! #ifdef SHUT_RD ! return SHUT_RD; ! #else ! return 0; ! #endif ! if (strEQ(name, "SHUT_RDWR")) ! #ifdef SHUT_RDWR ! return SHUT_RDWR; ! #else ! return 2; ! #endif ! if (strEQ(name, "SHUT_WR")) ! #ifdef SHUT_WR ! return SHUT_WR; ! #else ! return 1; ! #endif ! if (strEQ(name, "SOCK_DGRAM")) ! #ifdef SOCK_DGRAM ! return SOCK_DGRAM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SOCK_RAW")) ! #ifdef SOCK_RAW ! return SOCK_RAW; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SOCK_RDM")) ! #ifdef SOCK_RDM ! return SOCK_RDM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SOCK_SEQPACKET")) ! #ifdef SOCK_SEQPACKET ! return SOCK_SEQPACKET; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SOCK_STREAM")) ! #ifdef SOCK_STREAM ! return SOCK_STREAM; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SOL_SOCKET")) ! #ifdef SOL_SOCKET ! return SOL_SOCKET; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SOMAXCONN")) ! #ifdef SOMAXCONN ! return SOMAXCONN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_ACCEPTCONN")) ! #ifdef SO_ACCEPTCONN ! return SO_ACCEPTCONN; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_BROADCAST")) ! #ifdef SO_BROADCAST ! return SO_BROADCAST; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_DEBUG")) ! #ifdef SO_DEBUG ! return SO_DEBUG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_DONTLINGER")) ! #ifdef SO_DONTLINGER ! return SO_DONTLINGER; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_DONTROUTE")) ! #ifdef SO_DONTROUTE ! return SO_DONTROUTE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_ERROR")) ! #ifdef SO_ERROR ! return SO_ERROR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_KEEPALIVE")) ! #ifdef SO_KEEPALIVE ! return SO_KEEPALIVE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_LINGER")) ! #ifdef SO_LINGER ! return SO_LINGER; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_OOBINLINE")) ! #ifdef SO_OOBINLINE ! return SO_OOBINLINE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_RCVBUF")) ! #ifdef SO_RCVBUF ! return SO_RCVBUF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_RCVLOWAT")) ! #ifdef SO_RCVLOWAT ! return SO_RCVLOWAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_RCVTIMEO")) ! #ifdef SO_RCVTIMEO ! return SO_RCVTIMEO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_REUSEADDR")) ! #ifdef SO_REUSEADDR ! return SO_REUSEADDR; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_REUSEPORT")) ! #ifdef SO_REUSEPORT ! return SO_REUSEPORT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_SNDBUF")) ! #ifdef SO_SNDBUF ! return SO_SNDBUF; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_SNDLOWAT")) ! #ifdef SO_SNDLOWAT ! return SO_SNDLOWAT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_SNDTIMEO")) ! #ifdef SO_SNDTIMEO ! return SO_SNDTIMEO; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_TYPE")) ! #ifdef SO_TYPE ! return SO_TYPE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "SO_USELOOPBACK")) ! #ifdef SO_USELOOPBACK ! return SO_USELOOPBACK; ! #else ! goto not_there; ! #endif ! break; ! case 'T': ! if (strEQ(name, "TCP_KEEPALIVE")) ! #ifdef TCP_KEEPALIVE ! return TCP_KEEPALIVE; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCP_MAXRT")) ! #ifdef TCP_MAXRT ! return TCP_MAXRT; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCP_MAXSEG")) ! #ifdef TCP_MAXSEG ! return TCP_MAXSEG; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCP_NODELAY")) ! #ifdef TCP_NODELAY ! return TCP_NODELAY; ! #else ! goto not_there; ! #endif ! if (strEQ(name, "TCP_STDURG")) ! #ifdef TCP_STDURG ! return TCP_STDURG; ! #else ! goto not_there; ! #endif ! break; ! case 'U': ! if (strEQ(name, "UIO_MAXIOV")) ! #ifdef UIO_MAXIOV ! return UIO_MAXIOV; ! #else ! goto not_there; ! #endif ! break; ! case 'V': ! break; ! case 'W': ! break; ! case 'X': ! break; ! case 'Y': ! break; ! case 'Z': ! break; ! } ! errno = EINVAL; ! return 0; - not_there: - errno = ENOENT; - return 0; - } - - MODULE = Socket PACKAGE = Socket ! double ! constant(name,arg) ! char * name ! int arg - void inet_aton(host) char * host --- 179,190 ---- return -1; } ! #include "constants.c" MODULE = Socket PACKAGE = Socket ! INCLUDE: constants.xs void inet_aton(host) char * host *************** *** 971,977 **** if (pathname[0] != '/' && pathname[0] != '\\') croak("Relative UNIX domain socket name '%s' unsupported", pathname); ! else if (len < 8 || pathname[7] != '/' && pathname[7] != '\\' || !strnicmp(pathname + 1, "socket", 6)) off = 7; --- 247,253 ---- if (pathname[0] != '/' && pathname[0] != '\\') croak("Relative UNIX domain socket name '%s' unsupported", pathname); ! else if (len < 8 || pathname[7] != '/' && pathname[7] != '\\' || !strnicmp(pathname + 1, "socket", 6)) off = 7; *************** *** 986,994 **** if (*s = '/') *s = '\\'; } ! # else /* !( defined OS2 ) */ Copy( pathname, sun_ad.sun_path, len, char ); # endif ST(0) = sv_2mortal(newSVpvn((char *)&sun_ad, sizeof sun_ad)); #else ST(0) = (SV *) not_here("pack_sockaddr_un"); --- 262,271 ---- if (*s = '/') *s = '\\'; } ! # else /* !( defined OS2 ) */ Copy( pathname, sun_ad.sun_path, len, char ); # endif + if (0) not_here("dummy"); ST(0) = sv_2mortal(newSVpvn((char *)&sun_ad, sizeof sun_ad)); #else ST(0) = (SV *) not_here("pack_sockaddr_un"); *************** *** 1070,1076 **** "Socket::unpack_sockaddr_in", addr.sin_family, AF_INET); ! } port = ntohs(addr.sin_port); ip_address = addr.sin_addr; --- 347,353 ---- "Socket::unpack_sockaddr_in", addr.sin_family, AF_INET); ! } port = ntohs(addr.sin_port); ip_address = addr.sin_addr; *************** *** 1077,1116 **** EXTEND(SP, 2); PUSHs(sv_2mortal(newSViv((IV) port))); PUSHs(sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address))); - } - - void - INADDR_ANY() - CODE: - { - struct in_addr ip_address; - ip_address.s_addr = htonl(INADDR_ANY); - ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address )); - } - - void - INADDR_LOOPBACK() - CODE: - { - struct in_addr ip_address; - ip_address.s_addr = htonl(INADDR_LOOPBACK); - ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address)); - } - - void - INADDR_NONE() - CODE: - { - struct in_addr ip_address; - ip_address.s_addr = htonl(INADDR_NONE); - ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address)); - } - - void - INADDR_BROADCAST() - CODE: - { - struct in_addr ip_address; - ip_address.s_addr = htonl(INADDR_BROADCAST); - ST(0) = sv_2mortal(newSVpvn((char *)&ip_address,sizeof ip_address)); } --- 354,357 ---- diff -c 'perl-5.7.1/ext/Storable/ChangeLog' 'perl-5.7.2/ext/Storable/ChangeLog' Index: ./ext/Storable/ChangeLog *** ./ext/Storable/ChangeLog Thu Mar 15 16:14:47 2001 --- ./ext/Storable/ChangeLog Mon Jul 9 17:10:13 2001 *************** *** 1,3 **** --- 1,21 ---- + Sun Jul 1 13:27:32 MEST 2001 Raphael Manfredi + + . Description: + + Systematically use "=over 4" for POD linters. + Apparently, POD linters are much stricter than would + otherwise be needed, but that's OK. + + Fixed memory corruption on croaks during thaw(). Thanks + to Claudio Garcia for reproducing this bug and providing the + code to exercise it. Added test cases for this bug, adapted + from Claudio's code. + + Made code compile cleanly with -Wall (from Jarkko Hietaniemi). + + Changed tagnum and classnum from I32 to IV in context. Also + from Jarkko. + Thu Mar 15 01:22:32 MET 2001 Raphael Manfredi . Description: diff -c 'perl-5.7.1/ext/Storable/Storable.pm' 'perl-5.7.2/ext/Storable/Storable.pm' Index: ./ext/Storable/Storable.pm Prereq: 1.0.1.10 *** ./ext/Storable/Storable.pm Fri Mar 16 04:54:48 2001 --- ./ext/Storable/Storable.pm Mon Jul 9 17:10:13 2001 *************** *** 1,4 **** ! ;# $Id: Storable.pm,v 1.0.1.10 2001/03/15 00:20:25 ram Exp $ ;# ;# Copyright (c) 1995-2000, Raphael Manfredi ;# --- 1,4 ---- ! ;# $Id: Storable.pm,v 1.0.1.11 2001/07/01 11:22:14 ram Exp $ ;# ;# Copyright (c) 1995-2000, Raphael Manfredi ;# *************** *** 6,11 **** --- 6,15 ---- ;# in the README file that comes with the distribution. ;# ;# $Log: Storable.pm,v $ + ;# Revision 1.0.1.11 2001/07/01 11:22:14 ram + ;# patch12: systematically use "=over 4" for POD linters + ;# patch12: updated version number + ;# ;# Revision 1.0.1.10 2001/03/15 00:20:25 ram ;# patch11: updated version number ;# *************** *** 59,65 **** use AutoLoader; use vars qw($forgive_me $VERSION); ! $VERSION = '1.011'; *AUTOLOAD = \&AutoLoader::AUTOLOAD; # Grrr... # --- 63,69 ---- use AutoLoader; use vars qw($forgive_me $VERSION); ! $VERSION = '1.012'; *AUTOLOAD = \&AutoLoader::AUTOLOAD; # Grrr... # diff -c 'perl-5.7.1/ext/Storable/Storable.xs' 'perl-5.7.2/ext/Storable/Storable.xs' Index: ./ext/Storable/Storable.xs Prereq: 1.0.1.8 *** ./ext/Storable/Storable.xs Thu Mar 29 17:25:12 2001 --- ./ext/Storable/Storable.xs Mon Jul 9 17:10:13 2001 *************** *** 3,9 **** */ /* ! * $Id: Storable.xs,v 1.0.1.8 2001/03/15 00:20:55 ram Exp $ * * Copyright (c) 1995-2000, Raphael Manfredi * --- 3,9 ---- */ /* ! * $Id: Storable.xs,v 1.0.1.9 2001/07/01 11:25:02 ram Exp $ * * Copyright (c) 1995-2000, Raphael Manfredi * *************** *** 11,16 **** --- 11,21 ---- * in the README file that comes with the distribution. * * $Log: Storable.xs,v $ + * Revision 1.0.1.9 2001/07/01 11:25:02 ram + * patch12: fixed memory corruption on croaks during thaw() + * patch12: made code compile cleanly with -Wall (Jarkko Hietaniemi) + * patch12: changed tagnum and classnum from I32 to IV in context + * * Revision 1.0.1.8 2001/03/15 00:20:55 ram * patch11: last version was wrongly compiling with assertions on * *************** *** 272,292 **** typedef struct stcxt { int entry; /* flags recursion */ int optype; /* type of traversal operation */ ! HV *hseen; /* which objects have been seen, store time */ ! AV *hook_seen; /* which SVs were returned by STORABLE_freeze() */ ! AV *aseen; /* which objects have been seen, retrieve time */ ! HV *hclass; /* which classnames have been seen, store time */ ! AV *aclass; /* which classnames have been seen, retrieve time */ ! HV *hook; /* cache for hook methods per class name */ ! I32 tagnum; /* incremented at store time for each seen object */ ! I32 classnum; /* incremented at store time for each seen classname */ ! int netorder; /* true if network order used */ ! int s_tainted; /* true if input source is tainted, at retrieve time */ ! int forgive_me; /* whether to be forgiving... */ ! int canonical; /* whether to store hashes sorted by key */ int s_dirty; /* context is dirty due to CROAK() -- can be cleaned */ ! struct extendable keybuf; /* for hash key retrieval */ ! struct extendable membuf; /* for memory store/retrieve operations */ PerlIO *fio; /* where I/O are performed, NULL for memory */ int ver_major; /* major of version for retrieved object */ int ver_minor; /* minor of version for retrieved object */ --- 277,299 ---- typedef struct stcxt { int entry; /* flags recursion */ int optype; /* type of traversal operation */ ! HV *hseen; /* which objects have been seen, store time */ ! AV *hook_seen; /* which SVs were returned by STORABLE_freeze() */ ! AV *aseen; /* which objects have been seen, retrieve time */ ! HV *hclass; /* which classnames have been seen, store time */ ! AV *aclass; /* which classnames have been seen, retrieve time */ ! HV *hook; /* cache for hook methods per class name */ ! IV tagnum; /* incremented at store time for each seen object */ ! IV classnum; /* incremented at store time for each seen classname */ ! int netorder; /* true if network order used */ ! int s_tainted; /* true if input source is tainted, at retrieve time */ ! int forgive_me; /* whether to be forgiving... */ ! int canonical; /* whether to store hashes sorted by key */ int s_dirty; /* context is dirty due to CROAK() -- can be cleaned */ ! int membuf_ro; /* true means membuf is read-only and msaved is rw */ ! struct extendable keybuf; /* for hash key retrieval */ ! struct extendable membuf; /* for memory store/retrieve operations */ ! struct extendable msaved; /* where potentially valid mbuf is saved */ PerlIO *fio; /* where I/O are performed, NULL for memory */ int ver_major; /* major of version for retrieved object */ int ver_minor; /* minor of version for retrieved object */ *************** *** 400,406 **** } while (0) #define KBUFCHK(x) do { \ if (x >= ksiz) { \ ! TRACEME(("** extending kbuf to %d bytes", x+1)); \ Renew(kbuf, x+1, char); \ ksiz = x+1; \ } \ --- 407,413 ---- } while (0) #define KBUFCHK(x) do { \ if (x >= ksiz) { \ ! TRACEME(("** extending kbuf to %d bytes (had %d)", x+1, ksiz)); \ Renew(kbuf, x+1, char); \ ksiz = x+1; \ } \ *************** *** 441,450 **** --- 448,481 ---- #define MBUF_SIZE() (mptr - mbase) /* + * MBUF_SAVE_AND_LOAD + * MBUF_RESTORE + * + * Those macros are used in do_retrieve() to save the current memory + * buffer into cxt->msaved, before MBUF_LOAD() can be used to retrieve + * data from a string. + */ + #define MBUF_SAVE_AND_LOAD(in) do { \ + ASSERT(!cxt->membuf_ro, ("mbase not already saved")); \ + cxt->membuf_ro = 1; \ + TRACEME(("saving mbuf")); \ + StructCopy(&cxt->membuf, &cxt->msaved, struct extendable); \ + MBUF_LOAD(in); \ + } while (0) + + #define MBUF_RESTORE() do { \ + ASSERT(cxt->membuf_ro, ("mbase is read-only")); \ + cxt->membuf_ro = 0; \ + TRACEME(("restoring mbuf")); \ + StructCopy(&cxt->msaved, &cxt->membuf, struct extendable); \ + } while (0) + + /* * Use SvPOKp(), because SvPOK() fails on tainted scalars. * See store_scalar() for other usage of this workaround. */ #define MBUF_LOAD(v) do { \ + ASSERT(cxt->membuf_ro, ("mbase is read-only")); \ if (!SvPOKp(v)) \ CROAK(("Not a scalar string")); \ mptr = mbase = SvPV(v, msiz); \ *************** *** 454,460 **** #define MBUF_XTEND(x) do { \ int nsz = (int) round_mgrow((x)+msiz); \ int offset = mptr - mbase; \ ! TRACEME(("** extending mbase to %d bytes", nsz)); \ Renew(mbase, nsz, char); \ msiz = nsz; \ mptr = mbase + offset; \ --- 485,493 ---- #define MBUF_XTEND(x) do { \ int nsz = (int) round_mgrow((x)+msiz); \ int offset = mptr - mbase; \ ! ASSERT(!cxt->membuf_ro, ("mbase is not read-only")); \ ! TRACEME(("** extending mbase from %d to %d bytes (wants %d new)", \ ! msiz, nsz, (x))); \ Renew(mbase, nsz, char); \ msiz = nsz; \ mptr = mbase + offset; \ *************** *** 927,932 **** --- 960,978 ---- } /* + * reset_context + * + * Called at the end of every context cleaning, to perform common reset + * operations. + */ + static void reset_context(stcxt_t *cxt) + { + cxt->entry = 0; + cxt->s_dirty = 0; + cxt->optype &= ~(ST_STORE|ST_RETRIEVE); /* Leave ST_CLONE alone */ + } + + /* * init_store_context * * Initialize a new store context for real recursion. *************** *** 1036,1048 **** * Insert real values into hashes where we stored faked pointers. */ ! hv_iterinit(cxt->hseen); ! while (he = hv_iternext(cxt->hseen)) ! HeVAL(he) = &PL_sv_undef; ! hv_iterinit(cxt->hclass); ! while (he = hv_iternext(cxt->hclass)) ! HeVAL(he) = &PL_sv_undef; /* * And now dispose of them... --- 1082,1098 ---- * Insert real values into hashes where we stored faked pointers. */ ! if (cxt->hseen) { ! hv_iterinit(cxt->hseen); ! while ((he = hv_iternext(cxt->hseen))) /* Extra () for -Wall, grr.. */ ! HeVAL(he) = &PL_sv_undef; ! } ! if (cxt->hclass) { ! hv_iterinit(cxt->hclass); ! while ((he = hv_iternext(cxt->hclass))) /* Extra () for -Wall, grr.. */ ! HeVAL(he) = &PL_sv_undef; ! } /* * And now dispose of them... *************** *** 1082,1089 **** sv_free((SV *) hook_seen); } ! cxt->entry = 0; ! cxt->s_dirty = 0; } /* --- 1132,1138 ---- sv_free((SV *) hook_seen); } ! reset_context(cxt); } /* *************** *** 1163,1170 **** sv_free((SV *) hseen); /* optional HV, for backward compat. */ } ! cxt->entry = 0; ! cxt->s_dirty = 0; } /* --- 1212,1218 ---- sv_free((SV *) hseen); /* optional HV, for backward compat. */ } ! reset_context(cxt); } /* *************** *** 1172,1190 **** * * A workaround for the CROAK bug: cleanup the last context. */ ! static void clean_context(cxt) ! stcxt_t *cxt; { TRACEME(("clean_context")); ASSERT(cxt->s_dirty, ("dirty context")); if (cxt->optype & ST_RETRIEVE) clean_retrieve_context(cxt); ! else clean_store_context(cxt); ASSERT(!cxt->s_dirty, ("context is clean")); } /* --- 1220,1245 ---- * * A workaround for the CROAK bug: cleanup the last context. */ ! static void clean_context(stcxt_t *cxt) { TRACEME(("clean_context")); ASSERT(cxt->s_dirty, ("dirty context")); + if (cxt->membuf_ro) + MBUF_RESTORE(); + + ASSERT(!cxt->membuf_ro, ("mbase is not read-only")); + if (cxt->optype & ST_RETRIEVE) clean_retrieve_context(cxt); ! else if (cxt->optype & ST_STORE) clean_store_context(cxt); + else + reset_context(cxt); ASSERT(!cxt->s_dirty, ("context is clean")); + ASSERT(cxt->entry == 0, ("context is reset")); } /* *************** *** 1206,1211 **** --- 1261,1271 ---- cxt->prev = parent_cxt; SET_STCXT(cxt); + TRACEME(("kbuf has %d bytes at 0x%x", ksiz, kbuf)); + TRACEME(("mbuf has %d bytes at 0x%x", msiz, mbase)); + + ASSERT(!cxt->s_dirty, ("clean context")); + return cxt; } *************** *** 1232,1237 **** --- 1292,1299 ---- Safefree(cxt); SET_STCXT(prev); + + ASSERT(cxt, ("context not void")); } /*** *************** *** 1296,1302 **** { GV *gv; SV *sv; - SV **svh; /* * The following code is the same as the one performed by UNIVERSAL::can --- 1358,1363 ---- *************** *** 1767,1773 **** continue; } TRACEME(("(#%d) item", i)); ! if (ret = store(cxt, *sav)) return ret; } --- 1828,1834 ---- continue; } TRACEME(("(#%d) item", i)); ! if ((ret = store(cxt, *sav))) /* Extra () for -Wall, grr... */ return ret; } *************** *** 1875,1881 **** TRACEME(("(#%d) value 0x%"UVxf, i, PTR2UV(val))); ! if (ret = store(cxt, val)) goto out; /* --- 1936,1942 ---- TRACEME(("(#%d) value 0x%"UVxf, i, PTR2UV(val))); ! if ((ret = store(cxt, val))) /* Extra () for -Wall, grr... */ goto out; /* *************** *** 1921,1927 **** TRACEME(("(#%d) value 0x%"UVxf, i, PTR2UV(val))); ! if (ret = store(cxt, val)) goto out; /* --- 1982,1988 ---- TRACEME(("(#%d) value 0x%"UVxf, i, PTR2UV(val))); ! if ((ret = store(cxt, val))) /* Extra () for -Wall, grr... */ goto out; /* *************** *** 2004,2010 **** * accesses on the retrieved object will indeed call the magic methods... */ ! if (ret = store(cxt, mg->mg_obj)) return ret; TRACEME(("ok (tied)")); --- 2065,2071 ---- * accesses on the retrieved object will indeed call the magic methods... */ ! if ((ret = store(cxt, mg->mg_obj))) /* Extra () for -Wall, grr... */ return ret; TRACEME(("ok (tied)")); *************** *** 2043,2054 **** PUTMARK(SX_TIED_KEY); TRACEME(("store_tied_item: storing OBJ 0x%"UVxf, PTR2UV(mg->mg_obj))); ! if (ret = store(cxt, mg->mg_obj)) return ret; TRACEME(("store_tied_item: storing PTR 0x%"UVxf, PTR2UV(mg->mg_ptr))); ! if (ret = store(cxt, (SV *) mg->mg_ptr)) return ret; } else { I32 idx = mg->mg_len; --- 2104,2115 ---- PUTMARK(SX_TIED_KEY); TRACEME(("store_tied_item: storing OBJ 0x%"UVxf, PTR2UV(mg->mg_obj))); ! if ((ret = store(cxt, mg->mg_obj))) /* Extra () for -Wall, grr... */ return ret; TRACEME(("store_tied_item: storing PTR 0x%"UVxf, PTR2UV(mg->mg_ptr))); ! if ((ret = store(cxt, (SV *) mg->mg_ptr))) /* Idem, for -Wall */ return ret; } else { I32 idx = mg->mg_len; *************** *** 2057,2063 **** PUTMARK(SX_TIED_IDX); TRACEME(("store_tied_item: storing OBJ 0x%"UVxf, PTR2UV(mg->mg_obj))); ! if (ret = store(cxt, mg->mg_obj)) return ret; TRACEME(("store_tied_item: storing IDX %d", idx)); --- 2118,2124 ---- PUTMARK(SX_TIED_IDX); TRACEME(("store_tied_item: storing OBJ 0x%"UVxf, PTR2UV(mg->mg_obj))); ! if ((ret = store(cxt, mg->mg_obj))) /* Idem, for -Wall */ return ret; TRACEME(("store_tied_item: storing IDX %d", idx)); *************** *** 2137,2144 **** I32 classnum; int ret; int clone = cxt->optype & ST_CLONE; ! char mtype; /* for blessed ref to tied structures */ ! unsigned char eflags; /* used when object type is SHT_EXTRA */ TRACEME(("store_hook, class \"%s\", tagged #%d", HvNAME(pkg), cxt->tagnum)); --- 2198,2205 ---- I32 classnum; int ret; int clone = cxt->optype & ST_CLONE; ! char mtype = '\0'; /* for blessed ref to tied structures */ ! unsigned char eflags = '\0'; /* used when object type is SHT_EXTRA */ TRACEME(("store_hook, class \"%s\", tagged #%d", HvNAME(pkg), cxt->tagnum)); *************** *** 2279,2285 **** * Serialize entry if not done already, and get its tag. */ ! if (svh = hv_fetch(cxt->hseen, (char *) &xsv, sizeof(xsv), FALSE)) goto sv_seen; /* Avoid moving code too far to the right */ TRACEME(("listed object %d at 0x%"UVxf" is unknown", i-1, PTR2UV(xsv))); --- 2340,2346 ---- * Serialize entry if not done already, and get its tag. */ ! if ((svh = hv_fetch(cxt->hseen, (char *) &xsv, sizeof(xsv), FALSE))) goto sv_seen; /* Avoid moving code too far to the right */ TRACEME(("listed object %d at 0x%"UVxf" is unknown", i-1, PTR2UV(xsv))); *************** *** 2304,2310 **** } else PUTMARK(flags); ! if (ret = store(cxt, xsv)) /* Given by hook for us to store */ return ret; svh = hv_fetch(cxt->hseen, (char *) &xsv, sizeof(xsv), FALSE); --- 2365,2371 ---- } else PUTMARK(flags); ! if ((ret = store(cxt, xsv))) /* Given by hook for us to store */ return ret; svh = hv_fetch(cxt->hseen, (char *) &xsv, sizeof(xsv), FALSE); *************** *** 2481,2487 **** * [] */ ! if (ret = store(cxt, mg->mg_obj)) return ret; } --- 2542,2548 ---- * [] */ ! if ((ret = store(cxt, mg->mg_obj))) /* Extra () for -Wall, grr... */ return ret; } *************** *** 2618,2625 **** * Store placeholder string as a scalar instead... */ ! (void) sprintf(buf, "You lost %s(0x%"UVxf")\0", sv_reftype(sv, FALSE), ! PTR2UV(sv)); len = strlen(buf); STORE_SCALAR(buf, len); --- 2679,2686 ---- * Store placeholder string as a scalar instead... */ ! (void) sprintf(buf, "You lost %s(0x%"UVxf")%c", sv_reftype(sv, FALSE), ! PTR2UV(sv), (char) 0); len = strlen(buf); STORE_SCALAR(buf, len); *************** *** 2702,2708 **** { SV **svh; int ret; - SV *tag; int type; HV *hseen = cxt->hseen; --- 2763,2768 ---- *************** *** 3001,3007 **** */ SV *mstore(SV *sv) { - dSTCXT; SV *out; TRACEME(("mstore")); --- 3061,3066 ---- *************** *** 3020,3026 **** */ SV *net_mstore(SV *sv) { - dSTCXT; SV *out; TRACEME(("net_mstore")); --- 3079,3084 ---- *************** *** 3086,3093 **** sva = av_fetch(cxt->aclass, idx, FALSE); if (!sva) ! CROAK(("Class name #%"IVdf" should have been seen already", ! (IV)idx)); class = SvPVX(*sva); /* We know it's a PV, by construction */ --- 3144,3150 ---- sva = av_fetch(cxt->aclass, idx, FALSE); if (!sva) ! CROAK(("Class name #%"IVdf" should have been seen already", (IV) idx)); class = SvPVX(*sva); /* We know it's a PV, by construction */ *************** *** 3188,3194 **** SV *sv; SV *rv; int obj_type; - I32 classname; int clone = cxt->optype & ST_CLONE; char mtype = '\0'; unsigned int extra_type = 0; --- 3245,3250 ---- *************** *** 3282,3289 **** sva = av_fetch(cxt->aclass, idx, FALSE); if (!sva) ! CROAK(("Class name #%"IVdf" should have been seen already", ! (IV)idx)); class = SvPVX(*sva); /* We know it's a PV, by construction */ TRACEME(("class ID %d => %s", idx, class)); --- 3338,3345 ---- sva = av_fetch(cxt->aclass, idx, FALSE); if (!sva) ! CROAK(("Class name #%"IVdf" should have been seen already", ! (IV) idx)); class = SvPVX(*sva); /* We know it's a PV, by construction */ TRACEME(("class ID %d => %s", idx, class)); *************** *** 3384,3390 **** tag = ntohl(tag); svh = av_fetch(cxt->aseen, tag, FALSE); if (!svh) ! CROAK(("Object #%"IVdf" should have been retrieved already", (IV)tag)); xsv = *svh; ary[i] = SvREFCNT_inc(xsv); } --- 3440,3447 ---- tag = ntohl(tag); svh = av_fetch(cxt->aseen, tag, FALSE); if (!svh) ! CROAK(("Object #%"IVdf" should have been retrieved already", ! (IV) tag)); xsv = *svh; ary[i] = SvREFCNT_inc(xsv); } *************** *** 4008,4023 **** { SV *sv; int siv; ! signed char tmp; /* must use temp var to work around ! an AIX compiler bug --H.Merijn Brand */ TRACEME(("retrieve_byte (#%d)", cxt->tagnum)); GETMARK(siv); TRACEME(("small integer read as %d", (unsigned char) siv)); ! tmp = ((unsigned char)siv) - 128; ! sv = newSViv (tmp); ! SEEN(sv, cname); /* Associate this new scalar with tag "tagnum" */ TRACEME(("byte %d", tmp)); --- 4065,4078 ---- { SV *sv; int siv; ! signed char tmp; /* Workaround for AIX cc bug --H.Merijn Brand */ TRACEME(("retrieve_byte (#%d)", cxt->tagnum)); GETMARK(siv); TRACEME(("small integer read as %d", (unsigned char) siv)); ! tmp = (unsigned char) siv - 128; ! sv = newSViv(tmp); SEEN(sv, cname); /* Associate this new scalar with tag "tagnum" */ TRACEME(("byte %d", tmp)); *************** *** 4155,4161 **** I32 i; HV *hv; SV *sv; - static SV *sv_h_undef = (SV *) 0; /* hv_store() bug */ TRACEME(("retrieve_hash (#%d)", cxt->tagnum)); --- 4210,4215 ---- *************** *** 4287,4293 **** I32 size; I32 i; HV *hv; ! SV *sv; int c; static SV *sv_h_undef = (SV *) 0; /* hv_store() bug */ --- 4341,4347 ---- I32 size; I32 i; HV *hv; ! SV *sv = (SV *) 0; int c; static SV *sv_h_undef = (SV *) 0; /* hv_store() bug */ *************** *** 4463,4469 **** * information to check. */ ! if (cxt->netorder = (use_network_order & 0x1)) return &PL_sv_undef; /* No byte ordering info */ sprintf(byteorder, "%lx", (unsigned long) BYTEORDER); --- 4517,4523 ---- * information to check. */ ! if ((cxt->netorder = (use_network_order & 0x1))) /* Extra () for -Wall */ return &PL_sv_undef; /* No byte ordering info */ sprintf(byteorder, "%lx", (unsigned long) BYTEORDER); *************** *** 4534,4540 **** I32 tagn; svh = hv_fetch(cxt->hseen, (char *) &tag, sizeof(tag), FALSE); if (!svh) ! CROAK(("Old tag 0x%"UVxf" should have been mapped already", (UV)tag)); tagn = SvIV(*svh); /* Mapped tag number computed earlier below */ /* --- 4588,4595 ---- I32 tagn; svh = hv_fetch(cxt->hseen, (char *) &tag, sizeof(tag), FALSE); if (!svh) ! CROAK(("Old tag 0x%"UVxf" should have been mapped already", ! (UV) tag)); tagn = SvIV(*svh); /* Mapped tag number computed earlier below */ /* *************** *** 4543,4549 **** svh = av_fetch(cxt->aseen, tagn, FALSE); if (!svh) ! CROAK(("Object #%"IVdf" should have been retrieved already", (IV)tagn)); sv = *svh; TRACEME(("has retrieved #%d at 0x%"UVxf, tagn, PTR2UV(sv))); SvREFCNT_inc(sv); /* One more reference to this same sv */ --- 4598,4605 ---- svh = av_fetch(cxt->aseen, tagn, FALSE); if (!svh) ! CROAK(("Object #%"IVdf" should have been retrieved already", ! (IV) tagn)); sv = *svh; TRACEME(("has retrieved #%d at 0x%"UVxf, tagn, PTR2UV(sv))); SvREFCNT_inc(sv); /* One more reference to this same sv */ *************** *** 4569,4575 **** * Regular post-0.6 binary format. */ - again: GETMARK(type); TRACEME(("retrieve type = %d", type)); --- 4625,4630 ---- *************** *** 4584,4591 **** tag = ntohl(tag); svh = av_fetch(cxt->aseen, tag, FALSE); if (!svh) ! CROAK(("Object #%"IVdf" should have been retrieved already", ! (IV)tag)); sv = *svh; TRACEME(("had retrieved #%d at 0x%"UVxf, tag, PTR2UV(sv))); SvREFCNT_inc(sv); /* One more reference to this same sv */ --- 4639,4646 ---- tag = ntohl(tag); svh = av_fetch(cxt->aseen, tag, FALSE); if (!svh) ! CROAK(("Object #%"IVdf" should have been retrieved already", ! (IV) tag)); sv = *svh; TRACEME(("had retrieved #%d at 0x%"UVxf, tag, PTR2UV(sv))); SvREFCNT_inc(sv); /* One more reference to this same sv */ *************** *** 4656,4662 **** dSTCXT; SV *sv; int is_tainted; /* Is input source tainted? */ ! struct extendable msave; /* Where potentially valid mbuf is saved */ TRACEME(("do_retrieve (optype = 0x%x)", optype)); --- 4711,4717 ---- dSTCXT; SV *sv; int is_tainted; /* Is input source tainted? */ ! int pre_06_fmt = 0; /* True with pre Storable 0.6 formats */ TRACEME(("do_retrieve (optype = 0x%x)", optype)); *************** *** 4704,4715 **** KBUFINIT(); /* Allocate hash key reading pool once */ ! if (!f && in) { ! StructCopy(&cxt->membuf, &msave, struct extendable); ! MBUF_LOAD(in); ! } - /* * Magic number verifications. * --- 4759,4767 ---- KBUFINIT(); /* Allocate hash key reading pool once */ ! if (!f && in) ! MBUF_SAVE_AND_LOAD(in); /* * Magic number verifications. * *************** *** 4750,4757 **** */ if (!f && in) ! StructCopy(&msave, &cxt->membuf, struct extendable); /* * The "root" context is never freed. */ --- 4802,4811 ---- */ if (!f && in) ! MBUF_RESTORE(); + pre_06_fmt = cxt->hseen != NULL; /* Before we clean context */ + /* * The "root" context is never freed. */ *************** *** 4779,4793 **** * * Build a reference to the SV returned by pretrieve even if it is * already one and not a scalar, for consistency reasons. - * - * NB: although context might have been cleaned, the value of `cxt->hseen' - * remains intact, and can be used as a flag. */ ! if (cxt->hseen) { /* Was not handling overloading by then */ SV *rv; ! if (sv_type(sv) == svis_REF && (rv = SvRV(sv)) && SvOBJECT(rv)) return sv; } /* --- 4833,4847 ---- * * Build a reference to the SV returned by pretrieve even if it is * already one and not a scalar, for consistency reasons. */ ! if (pre_06_fmt) { /* Was not handling overloading by then */ SV *rv; ! TRACEME(("fixing for old formats -- pre 0.6")); ! if (sv_type(sv) == svis_REF && (rv = SvRV(sv)) && SvOBJECT(rv)) { ! TRACEME(("ended do_retrieve() with an object -- pre 0.6")); return sv; + } } /* *************** *** 4808,4821 **** */ if (SvOBJECT(sv)) { ! HV *stash = (HV *) SvSTASH (sv); SV *rv = newRV_noinc(sv); if (stash && Gv_AMG(stash)) { SvAMAGIC_on(rv); TRACEME(("restored overloading on root reference")); } return rv; } return newRV_noinc(sv); } --- 4862,4878 ---- */ if (SvOBJECT(sv)) { ! HV *stash = (HV *) SvSTASH(sv); SV *rv = newRV_noinc(sv); if (stash && Gv_AMG(stash)) { SvAMAGIC_on(rv); TRACEME(("restored overloading on root reference")); } + TRACEME(("ended do_retrieve() with an object")); return rv; } + + TRACEME(("regular do_retrieve() end")); return newRV_noinc(sv); } diff -c /dev/null 'perl-5.7.2/ext/Storable/t/blessed.t' Index: ./ext/Storable/t/blessed.t *** ./ext/Storable/t/blessed.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/blessed.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,104 ---- + #!./perl + + # $Id: blessed.t,v 1.0 2000/09/01 19:40:41 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: blessed.t,v $ + # Revision 1.0 2000/09/01 19:40:41 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + + use Storable qw(freeze thaw); + + print "1..10\n"; + + package SHORT_NAME; + + sub make { bless [], shift } + + package SHORT_NAME_WITH_HOOK; + + sub make { bless [], shift } + + sub STORABLE_freeze { + my $self = shift; + return ("", $self); + } + + sub STORABLE_thaw { + my $self = shift; + my $cloning = shift; + my ($x, $obj) = @_; + die "STORABLE_thaw" unless $obj eq $self; + } + + package main; + + # Still less than 256 bytes, so long classname logic not fully exercised + # Wait until Perl removes the restriction on identifier lengths. + my $name = "LONG_NAME_" . 'xxxxxxxxxxxxx::' x 14 . "final"; + + eval <make); + push(@pool, SHORT_NAME_WITH_HOOK->make); + push(@pool, $name->make); + push(@pool, "${name}_WITH_HOOK"->make); + } + + my $x = freeze \@pool; + ok 3, 1; + + my $y = thaw $x; + ok 4, ref $y eq 'ARRAY'; + ok 5, @{$y} == @pool; + + ok 6, ref $y->[0] eq 'SHORT_NAME'; + ok 7, ref $y->[1] eq 'SHORT_NAME_WITH_HOOK'; + ok 8, ref $y->[2] eq $name; + ok 9, ref $y->[3] eq "${name}_WITH_HOOK"; + + my $good = 1; + for (my $i = 0; $i < 10; $i++) { + do { $good = 0; last } unless ref $y->[4*$i] eq 'SHORT_NAME'; + do { $good = 0; last } unless ref $y->[4*$i+1] eq 'SHORT_NAME_WITH_HOOK'; + do { $good = 0; last } unless ref $y->[4*$i+2] eq $name; + do { $good = 0; last } unless ref $y->[4*$i+3] eq "${name}_WITH_HOOK"; + } + ok 10, $good; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/canonical.t' Index: ./ext/Storable/t/canonical.t *** ./ext/Storable/t/canonical.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/canonical.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,153 ---- + #!./perl + + # $Id: canonical.t,v 1.0 2000/09/01 19:40:41 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: canonical.t,v $ + # Revision 1.0 2000/09/01 19:40:41 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + } + + + use Storable qw(freeze thaw dclone); + use vars qw($debugging $verbose); + + print "1..8\n"; + + sub ok { + my($testno, $ok) = @_; + print "not " unless $ok; + print "ok $testno\n"; + } + + + # Uncomment the folowing line to get a dump of the constructed data structure + # (you may want to reduce the size of the hashes too) + # $debugging = 1; + + $hashsize = 100; + $maxhash2size = 100; + $maxarraysize = 100; + + # Use MD5 if its available to make random string keys + + eval { require "MD5.pm" }; + $gotmd5 = !$@; + + # Use Data::Dumper if debugging and it is available to create an ASCII dump + + if ($debugging) { + eval { require "Data/Dumper.pm" }; + $gotdd = !$@; + } + + @fixed_strings = ("January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" ); + + # Build some arbitrarily complex data structure starting with a top level hash + # (deeper levels contain scalars, references to hashes or references to arrays); + + for (my $i = 0; $i < $hashsize; $i++) { + my($k) = int(rand(1_000_000)); + $k = MD5->hexhash($k) if $gotmd5 and int(rand(2)); + $a1{$k} = { key => "$k", value => $i }; + + # A third of the elements are references to further hashes + + if (int(rand(1.5))) { + my($hash2) = {}; + my($hash2size) = int(rand($maxhash2size)); + while ($hash2size--) { + my($k2) = $k . $i . int(rand(100)); + $hash2->{$k2} = $fixed_strings[rand(int(@fixed_strings))]; + } + $a1{$k}->{value} = $hash2; + } + + # A further third are references to arrays + + elsif (int(rand(2))) { + my($arr_ref) = []; + my($arraysize) = int(rand($maxarraysize)); + while ($arraysize--) { + push(@$arr_ref, $fixed_strings[rand(int(@fixed_strings))]); + } + $a1{$k}->{value} = $arr_ref; + } + } + + + print STDERR Data::Dumper::Dumper(\%a1) if ($verbose and $gotdd); + + + # Copy the hash, element by element in order of the keys + + foreach $k (sort keys %a1) { + $a2{$k} = { key => "$k", value => $a1{$k}->{value} }; + } + + # Deep clone the hash + + $a3 = dclone(\%a1); + + # In canonical mode the frozen representation of each of the hashes + # should be identical + + $Storable::canonical = 1; + + $x1 = freeze(\%a1); + $x2 = freeze(\%a2); + $x3 = freeze($a3); + + ok 1, (length($x1) > $hashsize); # sanity check + ok 2, length($x1) == length($x2); # idem + ok 3, $x1 eq $x2; + ok 4, $x1 eq $x3; + + # In normal mode it is exceedingly unlikely that the frozen + # representaions of all the hashes will be the same (normally the hash + # elements are frozen in the order they are stored internally, + # i.e. pseudo-randomly). + + $Storable::canonical = 0; + + $x1 = freeze(\%a1); + $x2 = freeze(\%a2); + $x3 = freeze($a3); + + + # Two out of three the same may be a coincidence, all three the same + # is much, much more unlikely. Still it could happen, so this test + # may report a false negative. + + ok 5, ($x1 ne $x2) || ($x1 ne $x3); + + + # Ensure refs to "undef" values are properly shared + # Same test as in t/dclone.t to ensure the "canonical" code is also correct + + my $hash; + push @{$$hash{''}}, \$$hash{a}; + ok 6, $$hash{''}[0] == \$$hash{a}; + + my $cloned = dclone(dclone($hash)); + ok 7, $$cloned{''}[0] == \$$cloned{a}; + + $$cloned{a} = "blah"; + ok 8, $$cloned{''}[0] == \$$cloned{a}; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/compat06.t' Index: ./ext/Storable/t/compat06.t *** ./ext/Storable/t/compat06.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/compat06.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,157 ---- + #!./perl + + # $Id: compat-0.6.t,v 1.0.1.1 2001/02/17 12:26:21 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: compat-0.6.t,v $ + # Revision 1.0.1.1 2001/02/17 12:26:21 ram + # patch8: added EBCDIC version of the test, from Peter Prymmer + # + # Revision 1.0 2000/09/01 19:40:41 ram + # Baseline for first official release. + # + + BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + + print "1..8\n"; + + use Storable qw(freeze nfreeze thaw); + + package TIED_HASH; + + sub TIEHASH { + my $self = bless {}, shift; + return $self; + } + + sub FETCH { + my $self = shift; + my ($key) = @_; + $main::hash_fetch++; + return $self->{$key}; + } + + sub STORE { + my $self = shift; + my ($key, $val) = @_; + $self->{$key} = $val; + } + + package SIMPLE; + + sub make { + my $self = bless [], shift; + my ($x) = @_; + $self->[0] = $x; + return $self; + } + + package ROOT; + + sub make { + my $self = bless {}, shift; + my $h = tie %hash, TIED_HASH; + $self->{h} = $h; + $self->{ref} = \%hash; + my @pool; + for (my $i = 0; $i < 5; $i++) { + push(@pool, SIMPLE->make($i)); + } + $self->{obj} = \@pool; + my @a = ('string', $h, $self); + $self->{a} = \@a; + $self->{num} = [1, 0, -3, -3.14159, 456, 4.5]; + $h->{key1} = 'val1'; + $h->{key2} = 'val2'; + return $self; + }; + + sub num { $_[0]->{num} } + sub h { $_[0]->{h} } + sub ref { $_[0]->{ref} } + sub obj { $_[0]->{obj} } + + package main; + + my $is_EBCDIC = (ord('A') == 193) ? 1 : 0; + + my $r = ROOT->make; + + my $data = ''; + if (!$is_EBCDIC) { # ASCII machine + while () { + next if /^#/; + $data .= unpack("u", $_); + } + } else { + while () { + next if /^#$/; # skip comments + next if /^#\s+/; # skip comments + next if /^[^#]/; # skip uuencoding for ASCII machines + s/^#//; # prepare uuencoded data for EBCDIC machines + $data .= unpack("u", $_); + } + } + + my $expected_length = $is_EBCDIC ? 217 : 278; + ok 1, length $data == $expected_length; + + my $y = thaw($data); + ok 2, 1; + ok 3, ref $y eq 'ROOT'; + + $Storable::canonical = 1; # Prevent "used once" warning + $Storable::canonical = 1; + # Allow for long double string conversions. + $y->{num}->[3] += 0; + $r->{num}->[3] += 0; + ok 4, nfreeze($y) eq nfreeze($r); + + ok 5, $y->ref->{key1} eq 'val1'; + ok 6, $y->ref->{key2} eq 'val2'; + ok 7, $hash_fetch == 2; + + my $num = $r->num; + my $ok = 1; + for (my $i = 0; $i < @$num; $i++) { + do { $ok = 0; last } unless $num->[$i] == $y->num->[$i]; + } + ok 8, $ok; + + __END__ + # + # using Storable-0.6@11, output of: print pack("u", nfreeze(ROOT->make)); + # original size: 278 bytes + # + M`P,````%!`(````&"(%8"(!8"'U8"@@M,RXQ-#$U.5@)```!R%@*`S0N-5A8 + M6`````-N=6T$`P````(*!'9A;#%8````!&ME>3$*!'9A;#)8````!&ME>3)B + M"51)141?2$%32%A8`````6@$`@````,*!G-Tmake)); + # on OS/390 (cp 1047) original size: 217 bytes + # + #M!0,1!-G6UN,#````!00,!!$)X\G%Q&W(P>+(`P````(*!*6!D_$````$DH6H + #M\0H$I8&3\@````22A:CR`````YF%A@0"````!@B!"(`(?0H(8/-+\?3Q]?D) + #M```!R`H#]$OU`````Y6DE`0"````!001!N+)U-?3Q0(````!"(`$$@("```` + #M`0B!!!("`@````$(@@02`@(````!"(,$$@("`````0B$`````Y:"D00````` + #E!`````&(!`(````#"@:BHYF)E8<$``````0$```````````!@0`` diff -c /dev/null 'perl-5.7.2/ext/Storable/t/dclone.t' Index: ./ext/Storable/t/dclone.t *** ./ext/Storable/t/dclone.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/dclone.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,82 ---- + #!./perl + + # $Id: dclone.t,v 1.0 2000/09/01 19:40:41 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: dclone.t,v $ + # Revision 1.0 2000/09/01 19:40:41 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + + use Storable qw(dclone); + + print "1..9\n"; + + $a = 'toto'; + $b = \$a; + $c = bless {}, CLASS; + $c->{attribute} = 'attrval'; + %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c); + @a = ('first', undef, 3, -4, -3.14159, 456, 4.5, + $b, \$a, $a, $c, \$c, \%a); + + print "not " unless defined ($aref = dclone(\@a)); + print "ok 1\n"; + + $dumped = &dump(\@a); + print "ok 2\n"; + + $got = &dump($aref); + print "ok 3\n"; + + print "not " unless $got eq $dumped; + print "ok 4\n"; + + package FOO; @ISA = qw(Storable); + + sub make { + my $self = bless {}; + $self->{key} = \%main::a; + return $self; + }; + + package main; + + $foo = FOO->make; + print "not " unless defined($r = $foo->dclone); + print "ok 5\n"; + + print "not " unless &dump($foo) eq &dump($r); + print "ok 6\n"; + + # Ensure refs to "undef" values are properly shared during cloning + my $hash; + push @{$$hash{''}}, \$$hash{a}; + print "not " unless $$hash{''}[0] == \$$hash{a}; + print "ok 7\n"; + + my $cloned = dclone(dclone($hash)); + print "not " unless $$cloned{''}[0] == \$$cloned{a}; + print "ok 8\n"; + + $$cloned{a} = "blah"; + print "not " unless $$cloned{''}[0] == \$$cloned{a}; + print "ok 9\n"; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/forgive.t' Index: ./ext/Storable/t/forgive.t *** ./ext/Storable/t/forgive.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/forgive.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,67 ---- + #!./perl + + # $Id: forgive.t,v 1.0.1.1 2000/09/01 19:40:42 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # Original Author: Ulrich Pfeifer + # (C) Copyright 1997, Universitat Dortmund, all rights reserved. + # + # $Log: forgive.t,v $ + # Revision 1.0.1.1 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + # Revision 1.0 2000/09/01 19:40:41 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + } + + use Storable qw(store retrieve); + use File::Spec; + + print "1..8\n"; + + my $test = 1; + my $bad = ['foo', sub { 1 }, 'bar']; + my $result; + + eval {$result = store ($bad , 'store')}; + print ((!defined $result)?"ok $test\n":"not ok $test\n"); $test++; + print (($@ ne '')?"ok $test\n":"not ok $test\n"); $test++; + + $Storable::forgive_me=1; + + my $devnull = File::Spec->devnull; + + open(SAVEERR, ">&STDERR"); + open(STDERR, ">$devnull") or + ( print SAVEERR "Unable to redirect STDERR: $!\n" and exit(1) ); + + eval {$result = store ($bad , 'store')}; + + open(STDERR, ">&SAVEERR"); + + print ((defined $result)?"ok $test\n":"not ok $test\n"); $test++; + print (($@ eq '')?"ok $test\n":"not ok $test\n"); $test++; + + my $ret = retrieve('store'); + print ((defined $ret)?"ok $test\n":"not ok $test\n"); $test++; + print (($ret->[0] eq 'foo')?"ok $test\n":"not ok $test\n"); $test++; + print (($ret->[2] eq 'bar')?"ok $test\n":"not ok $test\n"); $test++; + print ((ref $ret->[1] eq 'SCALAR')?"ok $test\n":"not ok $test\n"); $test++; + + + END { 1 while unlink 'store' } diff -c /dev/null 'perl-5.7.2/ext/Storable/t/freeze.t' Index: ./ext/Storable/t/freeze.t *** ./ext/Storable/t/freeze.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/freeze.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,145 ---- + #!./perl + + # $Id: freeze.t,v 1.0.1.1 2001/07/01 11:25:16 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: freeze.t,v $ + # Revision 1.0.1.1 2001/07/01 11:25:16 ram + # patch12: added test cases for mem corruption during thaw() + # + # Revision 1.0 2000/09/01 19:40:41 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + sub ok; + } + + use Storable qw(freeze nfreeze thaw); + + print "1..19\n"; + + $a = 'toto'; + $b = \$a; + $c = bless {}, CLASS; + $c->{attribute} = $b; + $d = {}; + $e = []; + $d->{'a'} = $e; + $e->[0] = $d; + %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c); + @a = ('first', undef, 3, -4, -3.14159, 456, 4.5, $d, \$d, \$e, $e, + $b, \$a, $a, $c, \$c, \%a); + + print "not " unless defined ($f1 = freeze(\@a)); + print "ok 1\n"; + + $dumped = &dump(\@a); + print "ok 2\n"; + + $root = thaw($f1); + print "not " unless defined $root; + print "ok 3\n"; + + $got = &dump($root); + print "ok 4\n"; + + print "not " unless $got eq $dumped; + print "ok 5\n"; + + package FOO; @ISA = qw(Storable); + + sub make { + my $self = bless {}; + $self->{key} = \%main::a; + return $self; + }; + + package main; + + $foo = FOO->make; + print "not " unless $f2 = $foo->freeze; + print "ok 6\n"; + + print "not " unless $f3 = $foo->nfreeze; + print "ok 7\n"; + + $root3 = thaw($f3); + print "not " unless defined $root3; + print "ok 8\n"; + + print "not " unless &dump($foo) eq &dump($root3); + print "ok 9\n"; + + $root = thaw($f2); + print "not " unless &dump($foo) eq &dump($root); + print "ok 10\n"; + + print "not " unless &dump($root3) eq &dump($root); + print "ok 11\n"; + + $other = freeze($root); + print "not " unless length($other) == length($f2); + print "ok 12\n"; + + $root2 = thaw($other); + print "not " unless &dump($root2) eq &dump($root); + print "ok 13\n"; + + $VAR1 = [ + 'method', + 1, + 'prepare', + 'SELECT table_name, table_owner, num_rows FROM iitables + where table_owner != \'$ingres\' and table_owner != \'DBA\'' + ]; + + $x = nfreeze($VAR1); + $VAR2 = thaw($x); + print "not " unless $VAR2->[3] eq $VAR1->[3]; + print "ok 14\n"; + + # Test the workaround for LVALUE bug in perl 5.004_04 -- from Gisle Aas + sub foo { $_[0] = 1 } + $foo = []; + foo($foo->[1]); + eval { freeze($foo) }; + print "not " if $@; + print "ok 15\n"; + + # Test cleanup bug found by Claudio Garcia -- RAM, 08/06/2001 + my $thaw_me = 'asdasdasdasd'; + + eval { + my $thawed = thaw $thaw_me; + }; + ok 16, $@; + + my %to_be_frozen = (foo => 'bar'); + my $frozen; + eval { + $frozen = freeze \%to_be_frozen; + }; + ok 17, !$@; + + freeze {}; + eval { thaw $thaw_me }; + eval { $frozen = freeze { foo => {} } }; + ok 18, !$@; + + thaw $frozen; # used to segfault here + ok 19, 1; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/lock.t' Index: ./ext/Storable/t/lock.t *** ./ext/Storable/t/lock.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/lock.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,65 ---- + #!./perl + + # $Id: lock.t,v 1.0.1.4 2001/01/03 09:41:00 ram Exp $ + # + # @COPYRIGHT@ + # + # $Log: lock.t,v $ + # Revision 1.0.1.4 2001/01/03 09:41:00 ram + # patch7: use new CAN_FLOCK routine to determine whether to run tests + # + # Revision 1.0.1.3 2000/10/26 17:11:27 ram + # patch5: just check $^O, there's no need for the whole Config + # + # Revision 1.0.1.2 2000/10/23 18:03:07 ram + # patch4: protected calls to flock() for dos platform + # + # Revision 1.0.1.1 2000/09/28 21:44:06 ram + # patch2: created. + # + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + if ($^O eq 'mpeix') { + print "1..0 # Skip: truncate missing on MPE\n"; + exit 0; + } + + require 'lib/st-dump.pl'; + } + + sub ok; + + use Storable qw(lock_store lock_retrieve); + + unless (&Storable::CAN_FLOCK) { + print "1..0 # Skip: fcntl/flock emulation broken on this platform\n"; + exit 0; + } + + print "1..5\n"; + + @a = ('first', undef, 3, -4, -3.14159, 456, 4.5); + + # + # We're just ensuring things work, we're not validating locking. + # + + ok 1, defined lock_store(\@a, 'store'); + ok 2, $dumped = &dump(\@a); + + $root = lock_retrieve('store'); + ok 3, ref $root eq 'ARRAY'; + ok 4, @a == @$root; + ok 5, &dump($root) eq $dumped; + + unlink 't/store'; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/overload.t' Index: ./ext/Storable/t/overload.t *** ./ext/Storable/t/overload.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/overload.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,97 ---- + #!./perl + + # $Id: overload.t,v 1.0.1.1 2001/02/17 12:27:22 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: overload.t,v $ + # Revision 1.0.1.1 2001/02/17 12:27:22 ram + # patch8: added test for structures with indirect ref to overloaded + # + # Revision 1.0 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + + use Storable qw(freeze thaw); + + print "1..12\n"; + + package OVERLOADED; + + use overload + '""' => sub { $_[0][0] }; + + package main; + + $a = bless [77], OVERLOADED; + + $b = thaw freeze $a; + ok 1, ref $b eq 'OVERLOADED'; + ok 2, "$b" eq "77"; + + $c = thaw freeze \$a; + ok 3, ref $c eq 'REF'; + ok 4, ref $$c eq 'OVERLOADED'; + ok 5, "$$c" eq "77"; + + $d = thaw freeze [$a, $a]; + ok 6, "$d->[0]" eq "77"; + $d->[0][0]++; + ok 7, "$d->[1]" eq "78"; + + package REF_TO_OVER; + + sub make { + my $self = bless {}, shift; + my ($over) = @_; + $self->{over} = $over; + return $self; + } + + package OVER; + + use overload + '+' => \&plus, + '""' => sub { ref $_[0] }; + + sub plus { + return 314; + } + + sub make { + my $self = bless {}, shift; + my $ref = REF_TO_OVER->make($self); + $self->{ref} = $ref; + return $self; + } + + package main; + + $a = OVER->make(); + $b = thaw freeze $a; + + ok 8, ref $b eq 'OVER'; + ok 9, $a + $a == 314; + ok 10, ref $b->{ref} eq 'REF_TO_OVER'; + ok 11, "$b->{ref}->{over}" eq "$b"; + ok 12, $b + $b == 314; + + 1; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/recurse.t' Index: ./ext/Storable/t/recurse.t *** ./ext/Storable/t/recurse.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/recurse.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,300 ---- + #!./perl + + # $Id: recurse.t,v 1.0.1.3 2001/02/17 12:28:33 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: recurse.t,v $ + # Revision 1.0.1.3 2001/02/17 12:28:33 ram + # patch8: ensure blessing occurs ASAP, specially designed for hooks + # + # Revision 1.0.1.2 2000/11/05 17:22:05 ram + # patch6: stress hook a little more with refs to lexicals + # + # $Log: recurse.t,v $ + # Revision 1.0.1.1 2000/09/17 16:48:05 ram + # patch1: added test case for store hook bug + # + # $Log: recurse.t,v $ + # Revision 1.0 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + + use Storable qw(freeze thaw dclone); + + print "1..32\n"; + + package OBJ_REAL; + + use Storable qw(freeze thaw); + + @x = ('a', 1); + + sub make { bless [], shift } + + sub STORABLE_freeze { + my $self = shift; + my $cloning = shift; + die "STORABLE_freeze" unless Storable::is_storing; + return (freeze(\@x), $self); + } + + sub STORABLE_thaw { + my $self = shift; + my $cloning = shift; + my ($x, $obj) = @_; + die "STORABLE_thaw #1" unless $obj eq $self; + my $len = length $x; + my $a = thaw $x; + die "STORABLE_thaw #2" unless ref $a eq 'ARRAY'; + die "STORABLE_thaw #3" unless @$a == 2 && $a->[0] eq 'a' && $a->[1] == 1; + @$self = @$a; + die "STORABLE_thaw #4" unless Storable::is_retrieving; + } + + package OBJ_SYNC; + + @x = ('a', 1); + + sub make { bless {}, shift } + + sub STORABLE_freeze { + my $self = shift; + my ($cloning) = @_; + return if $cloning; + return ("", \@x, $self); + } + + sub STORABLE_thaw { + my $self = shift; + my ($cloning, $undef, $a, $obj) = @_; + die "STORABLE_thaw #1" unless $obj eq $self; + die "STORABLE_thaw #2" unless ref $a eq 'ARRAY' || @$a != 2; + $self->{ok} = $self; + } + + package OBJ_SYNC2; + + use Storable qw(dclone); + + sub make { + my $self = bless {}, shift; + my ($ext) = @_; + $self->{sync} = OBJ_SYNC->make; + $self->{ext} = $ext; + return $self; + } + + sub STORABLE_freeze { + my $self = shift; + my %copy = %$self; + my $r = \%copy; + my $t = dclone($r->{sync}); + return ("", [$t, $self->{ext}], $r, $self, $r->{ext}); + } + + sub STORABLE_thaw { + my $self = shift; + my ($cloning, $undef, $a, $r, $obj, $ext) = @_; + die "STORABLE_thaw #1" unless $obj eq $self; + die "STORABLE_thaw #2" unless ref $a eq 'ARRAY'; + die "STORABLE_thaw #3" unless ref $r eq 'HASH'; + die "STORABLE_thaw #4" unless $a->[1] == $r->{ext}; + $self->{ok} = $self; + ($self->{sync}, $self->{ext}) = @$a; + } + + package OBJ_REAL2; + + use Storable qw(freeze thaw); + + $MAX = 20; + $recursed = 0; + $hook_called = 0; + + sub make { bless [], shift } + + sub STORABLE_freeze { + my $self = shift; + $hook_called++; + return (freeze($self), $self) if ++$recursed < $MAX; + return ("no", $self); + } + + sub STORABLE_thaw { + my $self = shift; + my $cloning = shift; + my ($x, $obj) = @_; + die "STORABLE_thaw #1" unless $obj eq $self; + $self->[0] = thaw($x) if $x ne "no"; + $recursed--; + } + + package main; + + my $real = OBJ_REAL->make; + my $x = freeze $real; + ok 1, 1; + + my $y = thaw $x; + ok 2, 1; + ok 3, $y->[0] eq 'a'; + ok 4, $y->[1] == 1; + + my $sync = OBJ_SYNC->make; + $x = freeze $sync; + ok 5, 1; + + $y = thaw $x; + ok 6, 1; + ok 7, $y->{ok} == $y; + + my $ext = [1, 2]; + $sync = OBJ_SYNC2->make($ext); + $x = freeze [$sync, $ext]; + ok 8, 1; + + my $z = thaw $x; + $y = $z->[0]; + ok 9, 1; + ok 10, $y->{ok} == $y; + ok 11, ref $y->{sync} eq 'OBJ_SYNC'; + ok 12, $y->{ext} == $z->[1]; + + $real = OBJ_REAL2->make; + $x = freeze $real; + ok 13, 1; + ok 14, $OBJ_REAL2::recursed == $OBJ_REAL2::MAX; + ok 15, $OBJ_REAL2::hook_called == $OBJ_REAL2::MAX; + + $y = thaw $x; + ok 16, 1; + ok 17, $OBJ_REAL2::recursed == 0; + + $x = dclone $real; + ok 18, 1; + ok 19, ref $x eq 'OBJ_REAL2'; + ok 20, $OBJ_REAL2::recursed == 0; + ok 21, $OBJ_REAL2::hook_called == 2 * $OBJ_REAL2::MAX; + + ok 22, !Storable::is_storing; + ok 23, !Storable::is_retrieving; + + # + # The following was a test-case that Salvador Ortiz Garcia + # sent me, along with a proposed fix. + # + + package Foo; + + sub new { + my $class = shift; + my $dat = shift; + return bless {dat => $dat}, $class; + } + + package Bar; + sub new { + my $class = shift; + return bless { + a => 'dummy', + b => [ + Foo->new(1), + Foo->new(2), # Second instance of a Foo + ] + }, $class; + } + + sub STORABLE_freeze { + my($self,$clonning) = @_; + return "$self->{a}", $self->{b}; + } + + sub STORABLE_thaw { + my($self,$clonning,$dummy,$o) = @_; + $self->{a} = $dummy; + $self->{b} = $o; + } + + package main; + + my $bar = new Bar; + my $bar2 = thaw freeze $bar; + + ok 24, ref($bar2) eq 'Bar'; + ok 25, ref($bar->{b}[0]) eq 'Foo'; + ok 26, ref($bar->{b}[1]) eq 'Foo'; + ok 27, ref($bar2->{b}[0]) eq 'Foo'; + ok 28, ref($bar2->{b}[1]) eq 'Foo'; + + # + # The following attempts to make sure blessed objects are blessed ASAP + # at retrieve time. + # + + package CLASS_1; + + sub make { + my $self = bless {}, shift; + return $self; + } + + package CLASS_2; + + sub make { + my $self = bless {}, shift; + my ($o) = @_; + $self->{c1} = CLASS_1->make(); + $self->{o} = $o; + $self->{c3} = bless CLASS_1->make(), "CLASS_3"; + $o->set_c2($self); + return $self; + } + + sub STORABLE_freeze { + my($self, $clonning) = @_; + return "", $self->{c1}, $self->{c3}, $self->{o}; + } + + sub STORABLE_thaw { + my($self, $clonning, $frozen, $c1, $c3, $o) = @_; + main::ok 29, ref $self eq "CLASS_2"; + main::ok 30, ref $c1 eq "CLASS_1"; + main::ok 31, ref $c3 eq "CLASS_3"; + main::ok 32, ref $o eq "CLASS_OTHER"; + $self->{c1} = $c1; + $self->{c3} = $c3; + } + + package CLASS_OTHER; + + sub make { + my $self = bless {}, shift; + return $self; + } + + sub set_c2 { $_[0]->{c2} = $_[1] } + + package main; + + my $o = CLASS_OTHER->make(); + my $c2 = CLASS_2->make($o); + my $so = thaw freeze $o; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/retrieve.t' Index: ./ext/Storable/t/retrieve.t *** ./ext/Storable/t/retrieve.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/retrieve.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,78 ---- + #!./perl + + # $Id: retrieve.t,v 1.0 2000/09/01 19:40:42 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: retrieve.t,v $ + # Revision 1.0 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + + use Storable qw(store retrieve nstore); + + print "1..14\n"; + + $a = 'toto'; + $b = \$a; + $c = bless {}, CLASS; + $c->{attribute} = 'attrval'; + %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c); + @a = ('first', '', undef, 3, -4, -3.14159, 456, 4.5, + $b, \$a, $a, $c, \$c, \%a); + + print "not " unless defined store(\@a, 'store'); + print "ok 1\n"; + print "not " if Storable::last_op_in_netorder(); + print "ok 2\n"; + print "not " unless defined nstore(\@a, 'nstore'); + print "ok 3\n"; + print "not " unless Storable::last_op_in_netorder(); + print "ok 4\n"; + print "not " unless Storable::last_op_in_netorder(); + print "ok 5\n"; + + $root = retrieve('store'); + print "not " unless defined $root; + print "ok 6\n"; + print "not " if Storable::last_op_in_netorder(); + print "ok 7\n"; + + $nroot = retrieve('nstore'); + print "not " unless defined $nroot; + print "ok 8\n"; + print "not " unless Storable::last_op_in_netorder(); + print "ok 9\n"; + + $d1 = &dump($root); + print "ok 10\n"; + $d2 = &dump($nroot); + print "ok 11\n"; + + print "not " unless $d1 eq $d2; + print "ok 12\n"; + + # Make sure empty string is defined at retrieval time + print "not " unless defined $root->[1]; + print "ok 13\n"; + print "not " if length $root->[1]; + print "ok 14\n"; + + END { 1 while unlink('store', 'nstore') } + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/store.t' Index: ./ext/Storable/t/store.t *** ./ext/Storable/t/store.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/store.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,119 ---- + #!./perl + + # $Id: store.t,v 1.0 2000/09/01 19:40:42 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: store.t,v $ + # Revision 1.0 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + use Storable qw(store retrieve store_fd nstore_fd fd_retrieve); + + print "1..20\n"; + + $a = 'toto'; + $b = \$a; + $c = bless {}, CLASS; + $c->{attribute} = 'attrval'; + %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$c); + @a = ('first', undef, 3, -4, -3.14159, 456, 4.5, + $b, \$a, $a, $c, \$c, \%a); + + print "not " unless defined store(\@a, 'store'); + print "ok 1\n"; + + $dumped = &dump(\@a); + print "ok 2\n"; + + $root = retrieve('store'); + print "not " unless defined $root; + print "ok 3\n"; + + $got = &dump($root); + print "ok 4\n"; + + print "not " unless $got eq $dumped; + print "ok 5\n"; + + 1 while unlink 'store'; + + package FOO; @ISA = qw(Storable); + + sub make { + my $self = bless {}; + $self->{key} = \%main::a; + return $self; + }; + + package main; + + $foo = FOO->make; + print "not " unless $foo->store('store'); + print "ok 6\n"; + + print "not " unless open(OUT, '>>store'); + print "ok 7\n"; + binmode OUT; + + print "not " unless defined store_fd(\@a, ::OUT); + print "ok 8\n"; + print "not " unless defined nstore_fd($foo, ::OUT); + print "ok 9\n"; + print "not " unless defined nstore_fd(\%a, ::OUT); + print "ok 10\n"; + + print "not " unless close(OUT); + print "ok 11\n"; + + print "not " unless open(OUT, 'store'); + binmode OUT; + + $r = fd_retrieve(::OUT); + print "not " unless defined $r; + print "ok 12\n"; + print "not " unless &dump($foo) eq &dump($r); + print "ok 13\n"; + + $r = fd_retrieve(::OUT); + print "not " unless defined $r; + print "ok 14\n"; + print "not " unless &dump(\@a) eq &dump($r); + print "ok 15\n"; + + $r = fd_retrieve(main::OUT); + print "not " unless defined $r; + print "ok 16\n"; + print "not " unless &dump($foo) eq &dump($r); + print "ok 17\n"; + + $r = fd_retrieve(::OUT); + print "not " unless defined $r; + print "ok 18\n"; + print "not " unless &dump(\%a) eq &dump($r); + print "ok 19\n"; + + eval { $r = fd_retrieve(::OUT); }; + print "not " unless $@; + print "ok 20\n"; + + close OUT; + END { 1 while unlink 'store' } + + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/tied.t' Index: ./ext/Storable/t/tied.t *** ./ext/Storable/t/tied.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/tied.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,213 ---- + #!./perl + + # $Id: tied.t,v 1.0 2000/09/01 19:40:42 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: tied.t,v $ + # Revision 1.0 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + + use Storable qw(freeze thaw); + + print "1..22\n"; + + ($scalar_fetch, $array_fetch, $hash_fetch) = (0, 0, 0); + + package TIED_HASH; + + sub TIEHASH { + my $self = bless {}, shift; + return $self; + } + + sub FETCH { + my $self = shift; + my ($key) = @_; + $main::hash_fetch++; + return $self->{$key}; + } + + sub STORE { + my $self = shift; + my ($key, $value) = @_; + $self->{$key} = $value; + } + + sub FIRSTKEY { + my $self = shift; + scalar keys %{$self}; + return each %{$self}; + } + + sub NEXTKEY { + my $self = shift; + return each %{$self}; + } + + package TIED_ARRAY; + + sub TIEARRAY { + my $self = bless [], shift; + return $self; + } + + sub FETCH { + my $self = shift; + my ($idx) = @_; + $main::array_fetch++; + return $self->[$idx]; + } + + sub STORE { + my $self = shift; + my ($idx, $value) = @_; + $self->[$idx] = $value; + } + + sub FETCHSIZE { + my $self = shift; + return @{$self}; + } + + package TIED_SCALAR; + + sub TIESCALAR { + my $scalar; + my $self = bless \$scalar, shift; + return $self; + } + + sub FETCH { + my $self = shift; + $main::scalar_fetch++; + return $$self; + } + + sub STORE { + my $self = shift; + my ($value) = @_; + $$self = $value; + } + + package FAULT; + + $fault = 0; + + sub TIESCALAR { + my $pkg = shift; + return bless [@_], $pkg; + } + + sub FETCH { + my $self = shift; + my ($href, $key) = @$self; + $fault++; + untie $href->{$key}; + return $href->{$key} = 1; + } + + package main; + + $a = 'toto'; + $b = \$a; + + $c = tie %hash, TIED_HASH; + $d = tie @array, TIED_ARRAY; + tie $scalar, TIED_SCALAR; + + #$scalar = 'foo'; + #$hash{'attribute'} = \$d; + #$array[0] = $c; + #$array[1] = \$scalar; + + ### If I say + ### $hash{'attribute'} = $d; + ### below, then dump() incorectly dumps the hash value as a string the second + ### time it is reached. I have not investigated enough to tell whether it's + ### a bug in my dump() routine or in the Perl tieing mechanism. + $scalar = 'foo'; + $hash{'attribute'} = 'plain value'; + $array[0] = \$scalar; + $array[1] = $c; + $array[2] = \@array; + + @tied = (\$scalar, \@array, \%hash); + %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$a, 'scalarref', \$scalar); + @a = ('first', 3, -4, -3.14159, 456, 4.5, $d, \$d, + $b, \$a, $a, $c, \$c, \%a, \@array, \%hash, \@tied); + + ok 1, defined($f = freeze(\@a)); + + $dumped = &dump(\@a); + ok 2, 1; + + $root = thaw($f); + ok 3, defined $root; + + $got = &dump($root); + ok 4, 1; + + ### Used to see the manifestation of the bug documented above. + ### print "original: $dumped"; + ### print "--------\n"; + ### print "got: $got"; + ### print "--------\n"; + + ok 5, $got eq $dumped; + + $g = freeze($root); + ok 6, length($f) == length($g); + + # Ensure the tied items in the retrieved image work + @old = ($scalar_fetch, $array_fetch, $hash_fetch); + @tied = ($tscalar, $tarray, $thash) = @{$root->[$#{$root}]}; + @type = qw(SCALAR ARRAY HASH); + + ok 7, tied $$tscalar; + ok 8, tied @{$tarray}; + ok 9, tied %{$thash}; + + @new = ($$tscalar, $tarray->[0], $thash->{'attribute'}); + @new = ($scalar_fetch, $array_fetch, $hash_fetch); + + # Tests 10..15 + for ($i = 0; $i < @new; $i++) { + print "not " unless $new[$i] == $old[$i] + 1; + printf "ok %d\n", 10 + 2*$i; # Tests 10,12,14 + print "not " unless ref $tied[$i] eq $type[$i]; + printf "ok %d\n", 11 + 2*$i; # Tests 11,13,15 + } + + # Check undef ties + my $h = {}; + tie $h->{'x'}, 'FAULT', $h, 'x'; + my $hf = freeze($h); + ok 16, defined $hf; + ok 17, $FAULT::fault == 0; + ok 18, $h->{'x'} == 1; + ok 19, $FAULT::fault == 1; + + my $ht = thaw($hf); + ok 20, defined $ht; + ok 21, $ht->{'x'} == 1; + ok 22, $FAULT::fault == 2; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/tied_hook.t' Index: ./ext/Storable/t/tied_hook.t *** ./ext/Storable/t/tied_hook.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/tied_hook.t Mon Jul 9 17:10:13 2001 *************** *** 0 **** --- 1,254 ---- + #!./perl + + # $Id: tied_hook.t,v 1.0.1.1 2001/02/17 12:29:01 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: tied_hook.t,v $ + # Revision 1.0.1.1 2001/02/17 12:29:01 ram + # patch8: added test for blessed ref to tied hash + # + # Revision 1.0 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + + use Storable qw(freeze thaw); + + print "1..25\n"; + + ($scalar_fetch, $array_fetch, $hash_fetch) = (0, 0, 0); + + package TIED_HASH; + + sub TIEHASH { + my $self = bless {}, shift; + return $self; + } + + sub FETCH { + my $self = shift; + my ($key) = @_; + $main::hash_fetch++; + return $self->{$key}; + } + + sub STORE { + my $self = shift; + my ($key, $value) = @_; + $self->{$key} = $value; + } + + sub FIRSTKEY { + my $self = shift; + scalar keys %{$self}; + return each %{$self}; + } + + sub NEXTKEY { + my $self = shift; + return each %{$self}; + } + + sub STORABLE_freeze { + my $self = shift; + $main::hash_hook1++; + return join(":", keys %$self) . ";" . join(":", values %$self); + } + + sub STORABLE_thaw { + my ($self, $cloning, $frozen) = @_; + my ($keys, $values) = split(/;/, $frozen); + my @keys = split(/:/, $keys); + my @values = split(/:/, $values); + for (my $i = 0; $i < @keys; $i++) { + $self->{$keys[$i]} = $values[$i]; + } + $main::hash_hook2++; + } + + package TIED_ARRAY; + + sub TIEARRAY { + my $self = bless [], shift; + return $self; + } + + sub FETCH { + my $self = shift; + my ($idx) = @_; + $main::array_fetch++; + return $self->[$idx]; + } + + sub STORE { + my $self = shift; + my ($idx, $value) = @_; + $self->[$idx] = $value; + } + + sub FETCHSIZE { + my $self = shift; + return @{$self}; + } + + sub STORABLE_freeze { + my $self = shift; + $main::array_hook1++; + return join(":", @$self); + } + + sub STORABLE_thaw { + my ($self, $cloning, $frozen) = @_; + @$self = split(/:/, $frozen); + $main::array_hook2++; + } + + package TIED_SCALAR; + + sub TIESCALAR { + my $scalar; + my $self = bless \$scalar, shift; + return $self; + } + + sub FETCH { + my $self = shift; + $main::scalar_fetch++; + return $$self; + } + + sub STORE { + my $self = shift; + my ($value) = @_; + $$self = $value; + } + + sub STORABLE_freeze { + my $self = shift; + $main::scalar_hook1++; + return $$self; + } + + sub STORABLE_thaw { + my ($self, $cloning, $frozen) = @_; + $$self = $frozen; + $main::scalar_hook2++; + } + + package main; + + $a = 'toto'; + $b = \$a; + + $c = tie %hash, TIED_HASH; + $d = tie @array, TIED_ARRAY; + tie $scalar, TIED_SCALAR; + + $scalar = 'foo'; + $hash{'attribute'} = 'plain value'; + $array[0] = \$scalar; + $array[1] = $c; + $array[2] = \@array; + $array[3] = "plaine scalaire"; + + @tied = (\$scalar, \@array, \%hash); + %a = ('key', 'value', 1, 0, $a, $b, 'cvar', \$a, 'scalarref', \$scalar); + @a = ('first', 3, -4, -3.14159, 456, 4.5, $d, \$d, + $b, \$a, $a, $c, \$c, \%a, \@array, \%hash, \@tied); + + ok 1, defined($f = freeze(\@a)); + + $dumped = &dump(\@a); + ok 2, 1; + + $root = thaw($f); + ok 3, defined $root; + + $got = &dump($root); + ok 4, 1; + + ok 5, $got ne $dumped; # our hooks did not handle refs in array + + $g = freeze($root); + ok 6, length($f) == length($g); + + # Ensure the tied items in the retrieved image work + @old = ($scalar_fetch, $array_fetch, $hash_fetch); + @tied = ($tscalar, $tarray, $thash) = @{$root->[$#{$root}]}; + @type = qw(SCALAR ARRAY HASH); + + ok 7, tied $$tscalar; + ok 8, tied @{$tarray}; + ok 9, tied %{$thash}; + + @new = ($$tscalar, $tarray->[0], $thash->{'attribute'}); + @new = ($scalar_fetch, $array_fetch, $hash_fetch); + + # Tests 10..15 + for ($i = 0; $i < @new; $i++) { + ok 10 + 2*$i, $new[$i] == $old[$i] + 1; # Tests 10,12,14 + ok 11 + 2*$i, ref $tied[$i] eq $type[$i]; # Tests 11,13,15 + } + + ok 16, $$tscalar eq 'foo'; + ok 17, $tarray->[3] eq 'plaine scalaire'; + ok 18, $thash->{'attribute'} eq 'plain value'; + + # Ensure hooks were called + ok 19, ($scalar_hook1 && $scalar_hook2); + ok 20, ($array_hook1 && $array_hook2); + ok 21, ($hash_hook1 && $hash_hook2); + + # + # And now for the "blessed ref to tied hash" with "store hook" test... + # + + my $bc = bless \%hash, 'FOO'; # FOO does not exist -> no hook + my $bx = thaw freeze $bc; + + ok 22, ref $bx eq 'FOO'; + my $old_hash_fetch = $hash_fetch; + my $v = $bx->{attribute}; + ok 23, $hash_fetch == $old_hash_fetch + 1; # Still tied + + package TIED_HASH_REF; + + + sub STORABLE_freeze { + my ($self, $cloning) = @_; + return if $cloning; + return('ref lost'); + } + + sub STORABLE_thaw { + my ($self, $cloning, $data) = @_; + return if $cloning; + } + + package main; + + $bc = bless \%hash, 'TIED_HASH_REF'; + $bx = thaw freeze $bc; + + ok 24, ref $bx eq 'TIED_HASH_REF'; + $old_hash_fetch = $hash_fetch; + $v = $bx->{attribute}; + ok 25, $hash_fetch == $old_hash_fetch + 1; # Still tied + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/tied_items.t' Index: ./ext/Storable/t/tied_items.t *** ./ext/Storable/t/tied_items.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/tied_items.t Mon Jul 9 17:10:14 2001 *************** *** 0 **** --- 1,68 ---- + #!./perl + + # $Id: tied_items.t,v 1.0 2000/09/01 19:40:42 ram Exp $ + # + # Copyright (c) 1995-2000, Raphael Manfredi + # + # You may redistribute only under the same terms as Perl 5, as specified + # in the README file that comes with the distribution. + # + # $Log: tied_items.t,v $ + # Revision 1.0 2000/09/01 19:40:42 ram + # Baseline for first official release. + # + + # + # Tests ref to items in tied hash/array structures. + # + + sub BEGIN { + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + $^W = 0; + + print "1..8\n"; + + use Storable qw(dclone); + + $h_fetches = 0; + + sub H::TIEHASH { bless \(my $x), "H" } + sub H::FETCH { $h_fetches++; $_[1] - 70 } + + tie %h, "H"; + + $ref = \$h{77}; + $ref2 = dclone $ref; + + ok 1, $h_fetches == 0; + ok 2, $$ref2 eq $$ref; + ok 3, $$ref2 == 7; + ok 4, $h_fetches == 2; + + $a_fetches = 0; + + sub A::TIEARRAY { bless \(my $x), "A" } + sub A::FETCH { $a_fetches++; $_[1] - 70 } + + tie @a, "A"; + + $ref = \$a[78]; + $ref2 = dclone $ref; + + ok 5, $a_fetches == 0; + ok 6, $$ref2 eq $$ref; + ok 7, $$ref2 == 8; + # I don't understand why it's 3 and not 2 + ok 8, $a_fetches == 3; + diff -c /dev/null 'perl-5.7.2/ext/Storable/t/utf8.t' Index: ./ext/Storable/t/utf8.t *** ./ext/Storable/t/utf8.t Thu Jan 1 02:00:00 1970 --- ./ext/Storable/t/utf8.t Mon Jul 9 17:10:14 2001 *************** *** 0 **** --- 1,40 ---- + #!./perl + + # $Id: utf8.t,v 1.0.1.2 2000/09/28 21:44:17 ram Exp $ + # + # @COPYRIGHT@ + # + # $Log: utf8.t,v $ + # Revision 1.0.1.2 2000/09/28 21:44:17 ram + # patch2: fixed stupid typo + # + # Revision 1.0.1.1 2000/09/17 16:48:12 ram + # patch1: created. + # + # + + sub BEGIN { + if ($] < 5.006) { + print "1..0 # Skip: no utf8 support\n"; + exit 0; + } + chdir('t') if -d 't'; + @INC = '.'; + push @INC, '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bStorable\b/) { + print "1..0 # Skip: Storable was not built\n"; + exit 0; + } + require 'lib/st-dump.pl'; + } + + sub ok; + + use Storable qw(thaw freeze); + + print "1..1\n"; + + $x = chr(1234); + ok 1, $x eq ${thaw freeze \$x}; + diff -c /dev/null 'perl-5.7.2/ext/Sys/Hostname/Hostname.t' Index: ./ext/Sys/Hostname/Hostname.t *** ./ext/Sys/Hostname/Hostname.t Thu Jan 1 02:00:00 1970 --- ./ext/Sys/Hostname/Hostname.t Mon Jul 9 17:10:14 2001 *************** *** 0 **** --- 1,25 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bSys\/Hostname\b/) { + print "1..0 # Skip: Sys::Hostname was not built\n"; + exit 0; + } + } + + use Sys::Hostname; + + eval { + $host = hostname; + }; + + if ($@) { + print "1..0\n" if $@ =~ /Cannot get host name/; + } else { + print "1..1\n"; + print "# \$host = `$host'\n"; + print "ok 1\n"; + } diff -c 'perl-5.7.1/ext/Sys/Hostname/Hostname.xs' 'perl-5.7.2/ext/Sys/Hostname/Hostname.xs' Index: ./ext/Sys/Hostname/Hostname.xs *** ./ext/Sys/Hostname/Hostname.xs Tue Mar 6 04:04:59 2001 --- ./ext/Sys/Hostname/Hostname.xs Mon Jul 9 17:10:14 2001 *************** *** 69,75 **** --- 69,77 ---- # endif # endif #endif + #ifndef HAS_GETHOSTNAME check_out: + #endif if (retval == -1) XSRETURN_UNDEF; else diff -c 'perl-5.7.1/ext/Sys/Syslog/Makefile.PL' 'perl-5.7.2/ext/Sys/Syslog/Makefile.PL' Index: ./ext/Sys/Syslog/Makefile.PL *** ./ext/Sys/Syslog/Makefile.PL Tue Mar 6 04:04:59 2001 --- ./ext/Sys/Syslog/Makefile.PL Mon Jul 9 17:10:14 2001 *************** *** 1,4 **** --- 1,5 ---- use ExtUtils::MakeMaker; + use ExtUtils::Constant 0.07 'WriteConstants'; WriteMakefile( NAME => 'Sys::Syslog', *************** *** 5,8 **** --- 6,22 ---- VERSION_FROM => 'Syslog.pm', MAN3PODS => {}, # Pods will be built by installman. XSPROTOARG => '-noprototypes', + realclean => {FILES=> 'constants.c constants.xs'}, + ); + WriteConstants( + NAME => 'GDBM_File', + NAMES => [qw(LOG_ALERT LOG_AUTH LOG_AUTHPRIV LOG_CONS LOG_CRIT LOG_CRON + LOG_DAEMON LOG_DEBUG LOG_EMERG LOG_ERR LOG_FACMASK LOG_FTP + LOG_INFO LOG_KERN LOG_LFMT LOG_LOCAL0 LOG_LOCAL1 LOG_LOCAL2 + LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_LPR + LOG_MAIL LOG_NDELAY LOG_NEWS LOG_NFACILITIES LOG_NOTICE + LOG_NOWAIT LOG_ODELAY LOG_PERROR LOG_PID LOG_PRIMASK LOG_SYSLOG + LOG_USER LOG_UUCP LOG_WARNING), + {name=>"_PATH_LOG", type=>"PV", default=>["PV", '""']}, + ], ); diff -c 'perl-5.7.1/ext/Sys/Syslog/Syslog.pm' 'perl-5.7.2/ext/Sys/Syslog/Syslog.pm' Index: ./ext/Sys/Syslog/Syslog.pm *** ./ext/Sys/Syslog/Syslog.pm Fri Mar 16 04:54:48 2001 --- ./ext/Sys/Syslog/Syslog.pm Mon Jul 9 17:10:14 2001 *************** *** 7,13 **** @ISA = qw(Exporter DynaLoader); @EXPORT = qw(openlog closelog setlogmask syslog); @EXPORT_OK = qw(setlogsock); ! $VERSION = '0.01'; use Socket; use Sys::Hostname; --- 7,13 ---- @ISA = qw(Exporter DynaLoader); @EXPORT = qw(openlog closelog setlogmask syslog); @EXPORT_OK = qw(setlogsock); ! $VERSION = '0.02'; use Socket; use Sys::Hostname; *************** *** 119,124 **** --- 119,126 ---- Dependency on F replaced with XS code by Tom Hughes EFE. + Code for constant()s regenerated by Nicholas Clark Enick@ccl4.orgE. + =cut sub AUTOLOAD { *************** *** 128,137 **** my $constname; our $AUTOLOAD; ($constname = $AUTOLOAD) =~ s/.*:://; ! croak "& not defined" if $constname eq 'constant'; ! my $val = constant($constname); ! if ($! != 0) { ! croak "Your vendor has not defined Sys::Syslog macro $constname"; } *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; --- 130,139 ---- my $constname; our $AUTOLOAD; ($constname = $AUTOLOAD) =~ s/.*:://; ! croak "&Sys::Syslog::constant not defined" if $constname eq 'constant'; ! my ($error, $val) = constant($constname); ! if ($error) { ! croak $error; } *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; diff -c 'perl-5.7.1/ext/Sys/Syslog/Syslog.xs' 'perl-5.7.2/ext/Sys/Syslog/Syslog.xs' Index: ./ext/Sys/Syslog/Syslog.xs *** ./ext/Sys/Syslog/Syslog.xs Tue Mar 6 04:05:00 2001 --- ./ext/Sys/Syslog/Syslog.xs Mon Jul 9 17:10:14 2001 *************** *** 6,559 **** #include #endif ! static double ! constant_LOG_NO(char *name, int len) ! { ! switch (name[6 + 0]) { ! case 'T': ! if (strEQ(name + 6, "TICE")) { /* LOG_NO removed */ ! #ifdef LOG_NOTICE ! return LOG_NOTICE; ! #else ! goto not_there; ! #endif ! } ! case 'W': ! if (strEQ(name + 6, "WAIT")) { /* LOG_NO removed */ ! #ifdef LOG_NOWAIT ! return LOG_NOWAIT; ! #else ! goto not_there; ! #endif ! } ! } ! errno = EINVAL; ! return 0; - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_N(char *name, int len) - { - switch (name[5 + 0]) { - case 'D': - if (strEQ(name + 5, "DELAY")) { /* LOG_N removed */ - #ifdef LOG_NDELAY - return LOG_NDELAY; - #else - goto not_there; - #endif - } - case 'E': - if (strEQ(name + 5, "EWS")) { /* LOG_N removed */ - #ifdef LOG_NEWS - return LOG_NEWS; - #else - goto not_there; - #endif - } - case 'F': - if (strEQ(name + 5, "FACILITIES")) { /* LOG_N removed */ - #ifdef LOG_NFACILITIES - return LOG_NFACILITIES; - #else - goto not_there; - #endif - } - case 'O': - return constant_LOG_NO(name, len); - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_P(char *name, int len) - { - switch (name[5 + 0]) { - case 'I': - if (strEQ(name + 5, "ID")) { /* LOG_P removed */ - #ifdef LOG_PID - return LOG_PID; - #else - goto not_there; - #endif - } - case 'R': - if (strEQ(name + 5, "RIMASK")) { /* LOG_P removed */ - #ifdef LOG_PRIMASK - return LOG_PRIMASK; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_AU(char *name, int len) - { - if (6 + 2 >= len ) { - errno = EINVAL; - return 0; - } - switch (name[6 + 2]) { - case '\0': - if (strEQ(name + 6, "TH")) { /* LOG_AU removed */ - #ifdef LOG_AUTH - return LOG_AUTH; - #else - goto not_there; - #endif - } - case 'P': - if (strEQ(name + 6, "THPRIV")) { /* LOG_AU removed */ - #ifdef LOG_AUTHPRIV - return LOG_AUTHPRIV; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_A(char *name, int len) - { - switch (name[5 + 0]) { - case 'L': - if (strEQ(name + 5, "LERT")) { /* LOG_A removed */ - #ifdef LOG_ALERT - return LOG_ALERT; - #else - goto not_there; - #endif - } - case 'U': - return constant_LOG_AU(name, len); - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_CR(char *name, int len) - { - switch (name[6 + 0]) { - case 'I': - if (strEQ(name + 6, "IT")) { /* LOG_CR removed */ - #ifdef LOG_CRIT - return LOG_CRIT; - #else - goto not_there; - #endif - } - case 'O': - if (strEQ(name + 6, "ON")) { /* LOG_CR removed */ - #ifdef LOG_CRON - return LOG_CRON; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_C(char *name, int len) - { - switch (name[5 + 0]) { - case 'O': - if (strEQ(name + 5, "ONS")) { /* LOG_C removed */ - #ifdef LOG_CONS - return LOG_CONS; - #else - goto not_there; - #endif - } - case 'R': - return constant_LOG_CR(name, len); - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_D(char *name, int len) - { - switch (name[5 + 0]) { - case 'A': - if (strEQ(name + 5, "AEMON")) { /* LOG_D removed */ - #ifdef LOG_DAEMON - return LOG_DAEMON; - #else - goto not_there; - #endif - } - case 'E': - if (strEQ(name + 5, "EBUG")) { /* LOG_D removed */ - #ifdef LOG_DEBUG - return LOG_DEBUG; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_U(char *name, int len) - { - switch (name[5 + 0]) { - case 'S': - if (strEQ(name + 5, "SER")) { /* LOG_U removed */ - #ifdef LOG_USER - return LOG_USER; - #else - goto not_there; - #endif - } - case 'U': - if (strEQ(name + 5, "UCP")) { /* LOG_U removed */ - #ifdef LOG_UUCP - return LOG_UUCP; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_E(char *name, int len) - { - switch (name[5 + 0]) { - case 'M': - if (strEQ(name + 5, "MERG")) { /* LOG_E removed */ - #ifdef LOG_EMERG - return LOG_EMERG; - #else - goto not_there; - #endif - } - case 'R': - if (strEQ(name + 5, "RR")) { /* LOG_E removed */ - #ifdef LOG_ERR - return LOG_ERR; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_F(char *name, int len) - { - switch (name[5 + 0]) { - case 'A': - if (strEQ(name + 5, "ACMASK")) { /* LOG_F removed */ - #ifdef LOG_FACMASK - return LOG_FACMASK; - #else - goto not_there; - #endif - } - case 'T': - if (strEQ(name + 5, "TP")) { /* LOG_F removed */ - #ifdef LOG_FTP - return LOG_FTP; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_LO(char *name, int len) - { - if (6 + 3 >= len ) { - errno = EINVAL; - return 0; - } - switch (name[6 + 3]) { - case '0': - if (strEQ(name + 6, "CAL0")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL0 - return LOG_LOCAL0; - #else - goto not_there; - #endif - } - case '1': - if (strEQ(name + 6, "CAL1")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL1 - return LOG_LOCAL1; - #else - goto not_there; - #endif - } - case '2': - if (strEQ(name + 6, "CAL2")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL2 - return LOG_LOCAL2; - #else - goto not_there; - #endif - } - case '3': - if (strEQ(name + 6, "CAL3")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL3 - return LOG_LOCAL3; - #else - goto not_there; - #endif - } - case '4': - if (strEQ(name + 6, "CAL4")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL4 - return LOG_LOCAL4; - #else - goto not_there; - #endif - } - case '5': - if (strEQ(name + 6, "CAL5")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL5 - return LOG_LOCAL5; - #else - goto not_there; - #endif - } - case '6': - if (strEQ(name + 6, "CAL6")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL6 - return LOG_LOCAL6; - #else - goto not_there; - #endif - } - case '7': - if (strEQ(name + 6, "CAL7")) { /* LOG_LO removed */ - #ifdef LOG_LOCAL7 - return LOG_LOCAL7; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant_LOG_L(char *name, int len) - { - switch (name[5 + 0]) { - case 'F': - if (strEQ(name + 5, "FMT")) { /* LOG_L removed */ - #ifdef LOG_LFMT - return LOG_LFMT; - #else - goto not_there; - #endif - } - case 'O': - return constant_LOG_LO(name, len); - case 'P': - if (strEQ(name + 5, "PR")) { /* LOG_L removed */ - #ifdef LOG_LPR - return LOG_LPR; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - static double - constant(char *name, int len) - { - errno = 0; - if (0 + 4 >= len ) { - errno = EINVAL; - return 0; - } - switch (name[0 + 4]) { - case 'A': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_A(name, len); - case 'C': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_C(name, len); - case 'D': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_D(name, len); - case 'E': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_E(name, len); - case 'F': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_F(name, len); - case 'I': - if (strEQ(name + 0, "LOG_INFO")) { /* removed */ - #ifdef LOG_INFO - return LOG_INFO; - #else - goto not_there; - #endif - } - case 'K': - if (strEQ(name + 0, "LOG_KERN")) { /* removed */ - #ifdef LOG_KERN - return LOG_KERN; - #else - goto not_there; - #endif - } - case 'L': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_L(name, len); - case 'M': - if (strEQ(name + 0, "LOG_MAIL")) { /* removed */ - #ifdef LOG_MAIL - return LOG_MAIL; - #else - goto not_there; - #endif - } - case 'N': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_N(name, len); - case 'O': - if (strEQ(name + 0, "LOG_ODELAY")) { /* removed */ - #ifdef LOG_ODELAY - return LOG_ODELAY; - #else - goto not_there; - #endif - } - case 'P': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_P(name, len); - case 'S': - if (strEQ(name + 0, "LOG_SYSLOG")) { /* removed */ - #ifdef LOG_SYSLOG - return LOG_SYSLOG; - #else - goto not_there; - #endif - } - case 'U': - if (!strnEQ(name + 0,"LOG_", 4)) - break; - return constant_LOG_U(name, len); - case 'W': - if (strEQ(name + 0, "LOG_WARNING")) { /* removed */ - #ifdef LOG_WARNING - return LOG_WARNING; - #else - goto not_there; - #endif - } - } - errno = EINVAL; - return 0; - - not_there: - errno = ENOENT; - return 0; - } - - MODULE = Sys::Syslog PACKAGE = Sys::Syslog ! char * ! _PATH_LOG() ! CODE: ! #ifdef _PATH_LOG ! RETVAL = _PATH_LOG; ! #else ! RETVAL = ""; ! #endif ! OUTPUT: ! RETVAL int LOG_FAC(p) --- 6,16 ---- #include #endif ! #include "constants.c" MODULE = Sys::Syslog PACKAGE = Sys::Syslog ! INCLUDE: constants.xs int LOG_FAC(p) *************** *** 625,641 **** #endif OUTPUT: RETVAL - - - double - constant(sv) - PREINIT: - STRLEN len; - INPUT: - SV * sv - char * s = SvPV(sv, len); - CODE: - RETVAL = constant(s,len); - OUTPUT: - RETVAL - --- 82,84 ---- diff -c /dev/null 'perl-5.7.2/ext/Sys/Syslog/syslog.t' Index: ./ext/Sys/Syslog/syslog.t *** ./ext/Sys/Syslog/syslog.t Thu Jan 1 02:00:00 1970 --- ./ext/Sys/Syslog/syslog.t Mon Jul 9 17:10:14 2001 *************** *** 0 **** --- 1,74 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if ($Config{'extensions'} !~ /\bSyslog\b/) { + print "1..0 # Skip: Sys::Syslog was not built\n"; + exit 0; + } + + require Socket; + + # This code inspired by Sys::Syslog::connect(): + require Sys::Hostname; + my ($host_uniq) = Sys::Hostname::hostname(); + my ($host) = $host_uniq =~ /([A-Za-z0-9_.-]+)/; + + if (! defined Socket::inet_aton($host)) { + print "1..0 # Skip: Can't lookup $host\n"; + exit 0; + } + } + + BEGIN { + eval {require Sys::Syslog} or do { + if ($@ =~ /Your vendor has not/) { + print "1..0 # Skipped: missing macros\n"; + exit 0; + } + } + } + + use Sys::Syslog qw(:DEFAULT setlogsock); + + # Test this to 1 if your syslog accepts udp connections. + # Most don't (or at least shouldn't) + my $Test_Syslog_INET = 0; + + my $test_string = "uid $< is testing perl $] syslog capabilities"; + + print "1..6\n"; + + if (Sys::Syslog::_PATH_LOG()) { + if (-e Sys::Syslog::_PATH_LOG()) { + print defined(eval { setlogsock('unix') }) ? "ok 1\n" : "not ok 1\n"; + print defined(eval { openlog('perl', 'ndelay', 'local0') }) ? "ok 2\n" : "not ok 2\n"; + print defined(eval { syslog('info', $test_string ) }) ? "ok 3\n" : "not ok 3\n"; + } + else { + for (1..3) { + print + "ok $_ # skipping, file ", + Sys::Syslog::_PATH_LOG(), + " does not exist\n"; + } + } + } + else { + for (1..3) { print "ok $_ # skipping, _PATH_LOG unavailable\n" } + } + + if( $Test_Syslog_INET ) { + print defined(eval { setlogsock('inet') }) ? "ok 4\n" + : "not ok 4\n"; + print defined(eval { openlog('perl', 'ndelay', 'local0') }) ? "ok 5\n" + : "not ok 5\n"; + print defined(eval { syslog('info', $test_string ) }) ? "ok 6\n" + : "not ok 6\n"; + } + else { + print "ok $_ # skipped(assuming syslog doesn't accept inet connections)\n" + foreach (4..6); + } diff -c 'perl-5.7.1/ext/Thread/Thread.pm' 'perl-5.7.2/ext/Thread/Thread.pm' Index: ./ext/Thread/Thread.pm *** ./ext/Thread/Thread.pm Mon Apr 9 06:11:56 2001 --- ./ext/Thread/Thread.pm Mon Jul 9 17:10:14 2001 *************** *** 3,9 **** use XSLoader (); our($VERSION, @ISA, @EXPORT); ! $VERSION = "1.0"; @ISA = qw(Exporter); @EXPORT_OK = qw(yield cond_signal cond_broadcast cond_wait async); --- 3,9 ---- use XSLoader (); our($VERSION, @ISA, @EXPORT); ! $VERSION = "1.01"; @ISA = qw(Exporter); @EXPORT_OK = qw(yield cond_signal cond_broadcast cond_wait async); diff -c 'perl-5.7.1/ext/Thread/Thread.xs' 'perl-5.7.2/ext/Thread/Thread.xs' Index: ./ext/Thread/Thread.xs *** ./ext/Thread/Thread.xs Mon Apr 9 06:11:58 2001 --- ./ext/Thread/Thread.xs Mon Jul 9 17:10:14 2001 *************** *** 81,95 **** return 0; #else Thread thr = (Thread) arg; - LOGOP myop; dSP; I32 oldmark = TOPMARK; - I32 oldscope = PL_scopestack_ix; I32 retval; SV *sv; AV *av; ! int i, ret; ! dJMPENV; #if defined(MULTIPLICITY) PERL_SET_INTERP(thr->interp); --- 81,92 ---- return 0; #else Thread thr = (Thread) arg; dSP; I32 oldmark = TOPMARK; I32 retval; SV *sv; AV *av; ! int i; #if defined(MULTIPLICITY) PERL_SET_INTERP(thr->interp); *************** *** 150,156 **** FREETMPS; LEAVE; - finishoff: #if 0 /* removed for debug */ SvREFCNT_dec(PL_curstack); --- 147,152 ---- *************** *** 279,288 **** if (!attr_inited) { attr_inited = 1; err = pthread_attr_init(&attr); # ifdef PTHREAD_ATTR_SETDETACHSTATE if (err == 0) err = PTHREAD_ATTR_SETDETACHSTATE(&attr, attr_joinable); ! # else croak("panic: can't pthread_attr_setdetachstate"); # endif --- 275,291 ---- if (!attr_inited) { attr_inited = 1; err = pthread_attr_init(&attr); + # ifdef THREAD_CREATE_NEEDS_STACK + if (err == 0) + err = pthread_attr_setstacksize(&attr, THREAD_CREATE_NEEDS_STACK); + if (err) + croak("panic: pthread_attr_setstacksize failed"); + # endif # ifdef PTHREAD_ATTR_SETDETACHSTATE if (err == 0) err = PTHREAD_ATTR_SETDETACHSTATE(&attr, attr_joinable); ! if (err) ! croak("panic: pthread_attr_setdetachstate failed"); # else croak("panic: can't pthread_attr_setdetachstate"); # endif *************** *** 338,345 **** static Signal_t handle_thread_signal(int sig) { - dTHXo; unsigned char c = (unsigned char) sig; /* * We're not really allowed to call fprintf in a signal handler * so don't be surprised if this isn't robust while debugging --- 341,348 ---- static Signal_t handle_thread_signal(int sig) { unsigned char c = (unsigned char) sig; + dTHX; /* * We're not really allowed to call fprintf in a signal handler * so don't be surprised if this isn't robust while debugging *************** *** 346,352 **** * with -DL. */ DEBUG_S(PerlIO_printf(Perl_debug_log, ! "handle_thread_signal: got signal %d\n", sig);); write(sig_pipe[1], &c, 1); } --- 349,355 ---- * with -DL. */ DEBUG_S(PerlIO_printf(Perl_debug_log, ! "handle_thread_signal: got signal %d\n", sig)); write(sig_pipe[1], &c, 1); } *************** *** 371,377 **** if (t == thr) croak("Attempt to join self"); DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: joining %p (state %u)\n", ! thr, t, ThrSTATE(t));); MUTEX_LOCK(&t->mutex); switch (ThrSTATE(t)) { case THRf_R_JOINABLE: --- 374,380 ---- if (t == thr) croak("Attempt to join self"); DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: joining %p (state %u)\n", ! thr, t, ThrSTATE(t))); MUTEX_LOCK(&t->mutex); switch (ThrSTATE(t)) { case THRf_R_JOINABLE: *************** *** 414,420 **** CODE: #ifdef USE_THREADS DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: detaching %p (state %u)\n", ! thr, t, ThrSTATE(t));); MUTEX_LOCK(&t->mutex); switch (ThrSTATE(t)) { case THRf_R_JOINABLE: --- 417,423 ---- CODE: #ifdef USE_THREADS DEBUG_S(PerlIO_printf(Perl_debug_log, "%p: detaching %p (state %u)\n", ! thr, t, ThrSTATE(t))); MUTEX_LOCK(&t->mutex); switch (ThrSTATE(t)) { case THRf_R_JOINABLE: *************** *** 492,498 **** DESTROY(t) SV * t PPCODE: ! PUSHs(&PL_sv_yes); void yield() --- 495,501 ---- DESTROY(t) SV * t PPCODE: ! PUSHs(t ? &PL_sv_yes : &PL_sv_no); void yield() *************** *** 662,668 **** if (ret) sv_setsv(ST(0), c ? PL_psig_ptr[c] : &PL_sv_no); DEBUG_S(PerlIO_printf(Perl_debug_log, ! "await_signal returning %s\n", SvPEEK(ST(0)));); MODULE = Thread PACKAGE = Thread::Specific --- 665,671 ---- if (ret) sv_setsv(ST(0), c ? PL_psig_ptr[c] : &PL_sv_no); DEBUG_S(PerlIO_printf(Perl_debug_log, ! "await_signal returning %s\n", SvPEEK(ST(0)))); MODULE = Thread PACKAGE = Thread::Specific diff -c /dev/null 'perl-5.7.2/ext/Thread/create.tx' Index: ./ext/Thread/create.tx *** ./ext/Thread/create.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/create.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,38 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread 'async'; + use Config; + use Tie::Hash; + + sub start_here { + my $i; + print "In start_here with args: @_\n"; + for ($i = 1; $i <= 5; $i++) { + print "start_here: $i\n"; + sleep 1; + } + } + + async { + tie my(%h), 'Tie::StdHash'; + %h = %Config; + print "running on $h{archname}\n"; + }; + + print "Starting new thread now\n"; + $t = new Thread \&start_here, qw(foo bar baz); + print "Started thread $t\n"; + for ($count = 1; $count <= 5; $count++) { + print "main: $count\n"; + sleep 1; + } diff -c /dev/null 'perl-5.7.2/ext/Thread/die.tx' Index: ./ext/Thread/die.tx *** ./ext/Thread/die.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/die.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,28 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread 'async'; + + $t = async { + print "here\n"; + die "success"; + print "shouldn't get here\n"; + }; + + sleep 1; + print "joining...\n"; + eval { @r = $t->join; }; + if ($@) { + print "thread died with message: $@"; + } else { + print "thread failed to die successfully\n"; + } diff -c /dev/null 'perl-5.7.2/ext/Thread/die2.tx' Index: ./ext/Thread/die2.tx *** ./ext/Thread/die2.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/die2.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,28 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread 'async'; + + $t = async { + sleep 1; + print "here\n"; + die "success if preceded by 'thread died...'"; + print "shouldn't get here\n"; + }; + + print "joining...\n"; + @r = eval { $t->join; }; + if ($@) { + print "thread died with message: $@"; + } else { + print "thread failed to die successfully\n"; + } diff -c /dev/null 'perl-5.7.2/ext/Thread/io.tx' Index: ./ext/Thread/io.tx *** ./ext/Thread/io.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/io.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,51 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + sub counter { + $count = 10; + while ($count--) { + sleep 1; + print "ping $count\n"; + } + } + + sub reader { + my $line; + while ($line = ) { + print "reader: $line"; + } + print "End of input in reader\n"; + return 0; + } + + print <<'EOT'; + This test starts up a thread to read and echo whatever is typed on + the keyboard/stdin, line by line, while the main thread counts down + to zero. The test stays running until both the main thread has + finished counting down and the I/O thread has seen end-of-file on + the terminal/stdin. + EOT + + $r = new Thread \&counter; + + &reader; + + __END__ + + + $count = 10; + while ($count--) { + sleep 1; + print "ping $count\n"; + } diff -c /dev/null 'perl-5.7.2/ext/Thread/join.tx' Index: ./ext/Thread/join.tx *** ./ext/Thread/join.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/join.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,23 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + sub foo { + print "In foo with args: @_\n"; + return (7, 8, 9); + } + + print "Starting thread\n"; + $t = new Thread \&foo, qw(foo bar baz); + print "Joining with $t\n"; + @results = $t->join(); + print "Joining returned ", scalar(@results), " values: @results\n"; diff -c /dev/null 'perl-5.7.2/ext/Thread/join2.tx' Index: ./ext/Thread/join2.tx *** ./ext/Thread/join2.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/join2.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,24 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + sub foo { + print "In foo with args: @_\n"; + return (7, 8, 9); + } + + print "Starting thread\n"; + $t = new Thread \&foo, qw(foo bar baz); + sleep 2; + print "Joining with $t\n"; + @results = $t->join(); + print "Joining returned @results\n"; diff -c /dev/null 'perl-5.7.2/ext/Thread/list.tx' Index: ./ext/Thread/list.tx *** ./ext/Thread/list.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/list.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,42 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread qw(async); + use Thread::Semaphore; + + my $sem = Thread::Semaphore->new(0); + + $nthreads = 4; + + for (my $i = 0; $i < $nthreads; $i++) { + async { + my $tid = Thread->self->tid; + print "thread $tid started...\n"; + $sem->down; + print "thread $tid finishing\n"; + }; + } + + print "main: started $nthreads threads\n"; + sleep 2; + + my @list = Thread->list; + printf "main: Thread->list returned %d threads\n", scalar(@list); + + foreach my $t (@list) { + print "inspecting thread $t...\n"; + print "...deref is $$t\n"; + print "...flags = ", $t->flags, "\n"; + print "...tid = ", $t->tid, "\n"; + } + print "main thread telling workers to finish off...\n"; + $sem->up($nthreads); diff -c /dev/null 'perl-5.7.2/ext/Thread/lock.tx' Index: ./ext/Thread/lock.tx *** ./ext/Thread/lock.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/lock.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,39 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + $level = 0; + + sub worker + { + my $num = shift; + my $i; + print "thread $num starting\n"; + for ($i = 1; $i <= 20; $i++) { + print "thread $num iteration $i\n"; + select(undef, undef, undef, rand(10)/100); + { + lock($lock); + warn "thread $num saw non-zero level = $level\n" if $level; + $level++; + print "thread $num has lock\n"; + select(undef, undef, undef, rand(10)/100); + $level--; + } + print "thread $num released lock\n"; + } + } + + for ($t = 1; $t <= 5; $t++) { + new Thread \&worker, $t; + } diff -c /dev/null 'perl-5.7.2/ext/Thread/queue.tx' Index: ./ext/Thread/queue.tx *** ./ext/Thread/queue.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/queue.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,48 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + use Thread::Queue; + + $q = new Thread::Queue; + + sub reader { + my $tid = Thread->self->tid; + my $i = 0; + while (1) { + $i++; + print "reader (tid $tid): waiting for element $i...\n"; + my $el = $q->dequeue; + print "reader (tid $tid): dequeued element $i: value $el\n"; + select(undef, undef, undef, rand(2)); + if ($el == -1) { + # end marker + print "reader (tid $tid) returning\n"; + return; + } + } + } + + my $nthreads = 3; + + for (my $i = 0; $i < $nthreads; $i++) { + Thread->new(\&reader, $i); + } + + for (my $i = 1; $i <= 10; $i++) { + my $el = int(rand(100)); + select(undef, undef, undef, rand(2)); + print "writer: enqueuing value $el\n"; + $q->enqueue($el); + } + + $q->enqueue((-1) x $nthreads); # one end marker for each thread diff -c /dev/null 'perl-5.7.2/ext/Thread/specific.tx' Index: ./ext/Thread/specific.tx *** ./ext/Thread/specific.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/specific.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,29 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + use Thread::Specific qw(foo); + + sub count { + my $tid = Thread->self->tid; + my Thread::Specific $tsd = Thread::Specific::data; + for (my $i = 0; $i < 5; $i++) { + $tsd->{foo} = $i; + print "thread $tid count: $tsd->{foo}\n"; + select(undef, undef, undef, rand(2)); + } + }; + + for(my $t = 0; $t < 5; $t++) { + new Thread \&count; + } diff -c /dev/null 'perl-5.7.2/ext/Thread/sync.tx' Index: ./ext/Thread/sync.tx *** ./ext/Thread/sync.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/sync.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,72 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + $level = 0; + + sub single_file : locked { + my $arg = shift; + $level++; + print "Level $level for $arg\n"; + print "(something is wrong)\n" if $level < 0 || $level > 1; + sleep 1; + $level--; + print "Back to level $level\n"; + } + + sub start_bar { + my $i; + print "start bar\n"; + for $i (1..3) { + print "bar $i\n"; + single_file("bar $i"); + sleep 1 if rand > 0.5; + } + print "end bar\n"; + return 1; + } + + sub start_foo { + my $i; + print "start foo\n"; + for $i (1..3) { + print "foo $i\n"; + single_file("foo $i"); + sleep 1 if rand > 0.5; + } + print "end foo\n"; + return 1; + } + + sub start_baz { + my $i; + print "start baz\n"; + for $i (1..3) { + print "baz $i\n"; + single_file("baz $i"); + sleep 1 if rand > 0.5; + } + print "end baz\n"; + return 1; + } + + $| = 1; + srand($$^$^T); + + $foo = new Thread \&start_foo; + $bar = new Thread \&start_bar; + $baz = new Thread \&start_baz; + $foo->join(); + $bar->join(); + $baz->join(); + print "main: threads finished, exiting\n"; diff -c /dev/null 'perl-5.7.2/ext/Thread/sync2.tx' Index: ./ext/Thread/sync2.tx *** ./ext/Thread/sync2.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/sync2.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,80 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + $global = undef; + + sub single_file : locked { + my $who = shift; + my $i; + + print "Uh oh: $who entered while locked by $global\n" if $global; + $global = $who; + print "["; + for ($i = 0; $i < int(10 * rand); $i++) { + print $who; + select(undef, undef, undef, 0.1); + } + print "]"; + $global = undef; + } + + sub start_a { + my ($i, $j); + for ($j = 0; $j < 10; $j++) { + single_file("A"); + for ($i = 0; $i < int(10 * rand); $i++) { + print "a"; + select(undef, undef, undef, 0.1); + } + } + } + + sub start_b { + my ($i, $j); + for ($j = 0; $j < 10; $j++) { + single_file("B"); + for ($i = 0; $i < int(10 * rand); $i++) { + print "b"; + select(undef, undef, undef, 0.1); + } + } + } + + sub start_c { + my ($i, $j); + for ($j = 0; $j < 10; $j++) { + single_file("C"); + for ($i = 0; $i < int(10 * rand); $i++) { + print "c"; + select(undef, undef, undef, 0.1); + } + } + } + + $| = 1; + srand($$^$^T); + + print <<'EOT'; + Each pair of square brackets [...] should contain a repeated sequence of + a unique upper case letter. Lower case letters may appear randomly both + in and out of the brackets. + EOT + $foo = new Thread \&start_a; + $bar = new Thread \&start_b; + $baz = new Thread \&start_c; + print "\nmain: joining...\n"; + #$foo->join; + #$bar->join; + #$baz->join; + print "\ndone\n"; diff -c /dev/null 'perl-5.7.2/ext/Thread/thr5005.t' Index: ./ext/Thread/thr5005.t *** ./ext/Thread/thr5005.t Thu Jan 1 02:00:00 1970 --- ./ext/Thread/thr5005.t Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,207 ---- + #!./perl + + BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require Config; import Config; + if (! $Config{'use5005threads'}) { + print "1..0 # Skip: no use5005threads\n"; + exit 0; + } + + # XXX known trouble with global destruction + $ENV{PERL_DESTRUCT_LEVEL} = 0 unless $ENV{PERL_DESTRUCT_LEVEL} > 3; + } + $| = 1; + print "1..74\n"; + use Thread 'yield'; + print "ok 1\n"; + + sub content + { + print shift; + return shift; + } + + # create a thread passing args and immedaietly wait for it. + my $t = new Thread \&content,("ok 2\n","ok 3\n", 1..1000); + print $t->join; + + # check that lock works ... + {lock $foo; + $t = new Thread sub { lock $foo; print "ok 5\n" }; + print "ok 4\n"; + } + $t->join; + + sub dorecurse + { + my $val = shift; + my $ret; + print $val; + if (@_) + { + $ret = Thread->new(\&dorecurse, @_); + $ret->join; + } + } + + $t = new Thread \&dorecurse, map { "ok $_\n" } 6..10; + $t->join; + + # test that sleep lets other thread run + $t = new Thread \&dorecurse,"ok 11\n"; + sleep 6; + print "ok 12\n"; + $t->join; + + sub islocked : locked { + my $val = shift; + my $ret; + print $val; + if (@_) + { + $ret = Thread->new(\&islocked, shift); + } + $ret; + } + + $t = Thread->new(\&islocked, "ok 13\n", "ok 14\n"); + $t->join->join; + + { + package Loch::Ness; + sub new { bless [], shift } + sub monster : locked : method { + my($s, $m) = @_; + print "ok $m\n"; + } + sub gollum { &monster } + } + Loch::Ness->monster(15); + Loch::Ness->new->monster(16); + Loch::Ness->gollum(17); + Loch::Ness->new->gollum(18); + + my $short = "This is a long string that goes on and on."; + my $shorte = " a long string that goes on and on."; + my $long = "This is short."; + my $longe = " short."; + my $thr1 = new Thread \&threaded, $short, $shorte, "19"; + my $thr2 = new Thread \&threaded, $long, $longe, "20"; + my $thr3 = new Thread \&testsprintf, "21"; + + sub testsprintf { + my $testno = shift; + # this may coredump if thread vars are not properly initialised + my $same = sprintf "%.0f", $testno; + if ($testno eq $same) { + print "ok $testno\n"; + } else { + print "not ok $testno\t# '$testno' ne '$same'\n"; + } + } + + sub threaded { + my ($string, $string_end, $testno) = @_; + + # Do the match, saving the output in appropriate variables + $string =~ /(.*)(is)(.*)/; + # Yield control, allowing the other thread to fill in the match variables + yield(); + # Examine the match variable contents; on broken perls this fails + if ($3 eq $string_end) { + print "ok $testno\n"; + } + else { + warn <join; + $thr2->join; + $thr3->join; + print "ok 22\n"; + + { + my $THRf_STATE_MASK = 7; + my $THRf_R_JOINABLE = 0; + my $THRf_R_JOINED = 1; + my $THRf_R_DETACHED = 2; + my $THRf_ZOMBIE = 3; + my $THRf_DEAD = 4; + my $THRf_DID_DIE = 8; + sub _test { + my($test, $t, $state, $die) = @_; + my $flags = $t->flags; + if (($flags & $THRf_STATE_MASK) == $state + && !($flags & $THRf_DID_DIE) == !$die) { + print "ok $test\n"; + } else { + print <new(sub { sleep 4; die "thread die\n" }), + Thread->new(sub { die "thread die\n" }), + Thread->new(sub { sleep 4; 1 }), + Thread->new(sub { 1 }), + ) for 1, 2; + $_->detach for @t[grep $_ & 4, 0..$#t]; + + sleep 1; + my $test = 23; + for (0..7) { + my $t = $t[$_]; + my $flags = ($_ & 1) + ? ($_ & 4) ? $THRf_DEAD : $THRf_ZOMBIE + : ($_ & 4) ? $THRf_R_DETACHED : $THRf_R_JOINABLE; + _test($test++, $t, $flags, (($_ & 3) != 1) ? 0 : $THRf_DID_DIE); + printf "%sok %s\n", !$t->done == !($_ & 1) ? "" : "not ", $test++; + } + # $test = 39; + for (grep $_ & 1, 0..$#t) { + next if $_ & 4; # can't join detached threads + $t[$_]->eval; + my $die = ($_ & 2) ? "" : "thread die\n"; + printf "%sok %s\n", $@ eq $die ? "" : "not ", $test++; + } + # $test = 41; + for (0..7) { + my $t = $t[$_]; + my $flags = ($_ & 1) + ? ($_ & 4) ? $THRf_DEAD : $THRf_DEAD + : ($_ & 4) ? $THRf_R_DETACHED : $THRf_R_JOINABLE; + _test($test++, $t, $flags, (($_ & 3) != 1) ? 0 : $THRf_DID_DIE); + printf "%sok %s\n", !$t->done == !($_ & 1) ? "" : "not ", $test++; + } + # $test = 57; + for (grep !($_ & 1), 0..$#t) { + next if $_ & 4; # can't join detached threads + $t[$_]->eval; + my $die = ($_ & 2) ? "" : "thread die\n"; + printf "%sok %s\n", $@ eq $die ? "" : "not ", $test++; + } + sleep 1; # make sure even the detached threads are done sleeping + # $test = 59; + for (0..7) { + my $t = $t[$_]; + my $flags = ($_ & 1) + ? ($_ & 4) ? $THRf_DEAD : $THRf_DEAD + : ($_ & 4) ? $THRf_DEAD : $THRf_DEAD; + _test($test++, $t, $flags, ($_ & 2) ? 0 : $THRf_DID_DIE); + printf "%sok %s\n", $t->done ? "" : "not ", $test++; + } + # $test = 75; + } diff -c 'perl-5.7.1/ext/Thread/typemap' 'perl-5.7.2/ext/Thread/typemap' Index: ./ext/Thread/typemap *** ./ext/Thread/typemap Tue Mar 6 04:05:03 2001 --- ./ext/Thread/typemap Mon Jul 9 17:10:15 2001 *************** *** 14,20 **** croak(\"XSUB ${func_name}: $var is a forged ${ntype} object\"); $var = ($type) SvPVX(mg->mg_obj); DEBUG_S(PerlIO_printf(Perl_debug_log, ! \"XSUB ${func_name}: %p\\n\", $var);) } STMT_END T_IVREF if (SvROK($arg)) --- 14,20 ---- croak(\"XSUB ${func_name}: $var is a forged ${ntype} object\"); $var = ($type) SvPVX(mg->mg_obj); DEBUG_S(PerlIO_printf(Perl_debug_log, ! \"XSUB ${func_name}: %p\\n\", $var)); } STMT_END T_IVREF if (SvROK($arg)) diff -c /dev/null 'perl-5.7.2/ext/Thread/unsync.tx' Index: ./ext/Thread/unsync.tx *** ./ext/Thread/unsync.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/unsync.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,49 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + $| = 1; + + if (@ARGV) { + srand($ARGV[0]); + } else { + my $seed = $$ ^ $^T; + print "Randomising to $seed\n"; + srand($seed); + } + + sub whoami { + my ($depth, $a, $b, $c) = @_; + my $i; + print "whoami ($depth): $a $b $c\n"; + sleep 1; + whoami($depth - 1, $a, $b, $c) if $depth > 0; + } + + sub start_foo { + my $r = 3 + int(10 * rand); + print "start_foo: r is $r\n"; + whoami($r, "start_foo", "foo1", "foo2"); + print "start_foo: finished\n"; + } + + sub start_bar { + my $r = 3 + int(10 * rand); + print "start_bar: r is $r\n"; + whoami($r, "start_bar", "bar1", "bar2"); + print "start_bar: finished\n"; + } + + $foo = new Thread \&start_foo; + $bar = new Thread \&start_bar; + print "main: exiting\n"; diff -c /dev/null 'perl-5.7.2/ext/Thread/unsync2.tx' Index: ./ext/Thread/unsync2.tx *** ./ext/Thread/unsync2.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/unsync2.tx Mon Jul 9 17:10:15 2001 *************** *** 0 **** --- 1,48 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + $| = 1; + + srand($$^$^T); + + sub printargs { + my $thread = shift; + my $arg; + my $i; + while ($arg = shift) { + my $delay = int(rand(500)); + $i++; + print "$thread arg $i is $arg\n"; + 1 while $delay--; + } + } + + sub start_thread { + my $thread = shift; + my $count = 10; + while ($count--) { + my(@args) = ($thread) x int(rand(10)); + print "$thread $count calling printargs @args\n"; + printargs($thread, @args); + } + } + + new Thread (\&start_thread, "A"); + new Thread (\&start_thread, "B"); + #new Thread (\&start_thread, "C"); + #new Thread (\&start_thread, "D"); + #new Thread (\&start_thread, "E"); + #new Thread (\&start_thread, "F"); + + print "main: exiting\n"; diff -c /dev/null 'perl-5.7.2/ext/Thread/unsync3.tx' Index: ./ext/Thread/unsync3.tx *** ./ext/Thread/unsync3.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/unsync3.tx Mon Jul 9 17:10:16 2001 *************** *** 0 **** --- 1,62 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + $| = 1; + + srand($$^$^T); + + sub whoami { + my $thread = shift; + print $thread; + } + + sub uppercase { + my $count = 100; + while ($count--) { + my $i = int(rand(1000)); + 1 while $i--; + print "A"; + $i = int(rand(1000)); + 1 while $i--; + whoami("B"); + } + } + + sub lowercase { + my $count = 100; + while ($count--) { + my $i = int(rand(1000)); + 1 while $i--; + print "x"; + $i = int(rand(1000)); + 1 while $i--; + whoami("y"); + } + } + + sub numbers { + my $count = 100; + while ($count--) { + my $i = int(rand(1000)); + 1 while $i--; + print 1; + $i = int(rand(1000)); + 1 while $i--; + whoami(2); + } + } + + new Thread \&numbers; + new Thread \&uppercase; + new Thread \&lowercase; diff -c /dev/null 'perl-5.7.2/ext/Thread/unsync4.tx' Index: ./ext/Thread/unsync4.tx *** ./ext/Thread/unsync4.tx Thu Jan 1 02:00:00 1970 --- ./ext/Thread/unsync4.tx Mon Jul 9 17:10:16 2001 *************** *** 0 **** --- 1,50 ---- + BEGIN { + eval { require Config; import Config }; + if ($@) { + print "1..0 # Skip: no Config\n"; + exit(0); + } + if ($Config{extensions} !~ /\bThread\b/) { + print "1..0 # Skip: no use5005threads\n"; + exit(0); + } + } + + use Thread; + + $| = 1; + + srand($$^$^T); + + sub printargs { + my(@copyargs) = @_; + my $thread = shift @copyargs; + my $arg; + my $i; + while ($arg = shift @copyargs) { + my $delay = int(rand(500)); + $i++; + print "$thread arg $i is $arg\n"; + 1 while $delay--; + } + } + + sub start_thread { + my(@threadargs) = @_; + my $thread = $threadargs[0]; + my $count = 10; + while ($count--) { + my(@args) = ($thread) x int(rand(10)); + print "$thread $count calling printargs @args\n"; + printargs($thread, @args); + } + } + + new Thread (\&start_thread, "A"); + new Thread (\&start_thread, "B"); + new Thread (\&start_thread, "C"); + new Thread (\&start_thread, "D"); + new Thread (\&start_thread, "E"); + new Thread (\&start_thread, "F"); + + print "main: exiting\n"; diff -c /dev/null 'perl-5.7.2/ext/Time/HiRes/Changes' Index: ./ext/Time/HiRes/Changes *** ./ext/Time/HiRes/Changes Thu Jan 1 02:00:00 1970 --- ./ext/Time/HiRes/Changes Mon Jul 9 17:10:16 2001 *************** *** 0 **** --- 1,99 ---- + Revision history for Perl extension Time::HiRes. + + 1.20 Wed Feb 24 21:30 1999 + - make our usleep and ualarm substitutes into hrt_usleep + and hrt_ualarm. This helps static links of Perl with other + packages that also have usleep, etc. From + Ilya Zakharevich + - add C API stuff. From Joshua Pritikin + + - VMS Makefile.PL fun. From pvhp@forte.com (Peter Prymmer) + - hopefully correct "-lc" fix for SCO. + - add PPD stuff + + 1.19 Tue Sep 29 22:30 1998 + - put VMS gettimeofday() in. Patch is from Sebastian Bazley + + - change GIMME_V to GIMME to help people with older versions of + Perl. + - fix Win32 version of gettimeofday(). It didn't affect anything, + but it confuses people reading the code when the return value + is backwards (0 is success). + - fix Makefile.PL (more) so that detection of gettimeofday is + more correct. + + 1.18 Mon Jul 6 22:40 1998 + - add usleep() for Win32. + - fix Makefile.PL to fix reported HP/UX feature where unresolved + externals still cause an executable to be generated (though no + x bit set). Thanks to David Kozinn for report and explanation. + Problems with the fix are mine :) + + 1.17 Wed Jul 1 20:10 1998 + - fix setitimer calls so microseconds is not more than 1000000. + Hp/UX 9 doesn't like that. Provided by Roland B Robert, PhD. + - make Win32. We only get gettimeofday (the select hack doesn't + seem to work on my Win95 system). + - fix test 4 on 01test.t. add test to see if time() and + Time::HiRes::time() are close. + + 1.16 Wed Nov 12 21:05 1997 + - add missing EXTEND in new gettimeofday scalar code. + + 1.15 Mon Nov 10 21:30 1997 + - HiRes.pm: update pod. Provided by Gisle Aas. + - HiRes.xs: if gettimeofday() called in scalar context, do + something more useful than before. Provided by Gisle Aas. + - README: tell of xsubpp '-nolinenumber' woes. thanks to + Edward Henigin for pointing out the problem. + + 1.14 Wed Nov 5 9:40 1997 + - Makefile.PL: look for setitimer + - HiRes.xs: if missing ualarm, but we have setitimer, make up + our own setitimer. These were provided by Gisle Aas. + + 1.13 Tue Nov 4 23:30 1997 + - Makefile.PL: fix autodetect mechanism to do try linking in addition + to just compiling; should fix Linux build problem. Fix was provided + by Gisle Aas. + + 1.12 Sun Oct 12 12:00:00 1997 + - Makefile.PL: set XSOPT to '-nolinenumbers' to work around xsubpp bug; + you may need to comment this back out if you have an older xsubpp. + - HiRes.xs: set PROTOTYPES: DISABLE + + 1.11 Fri Sep 05 16:00:00 1997 + - Makefile.PL: + Had some line commented out that shouldn't have been (testing + remnants) + - README: + Previous version was corrupted. + + 1.10 Thu May 22 20:20:00 1997 + - HiRes.xs, HiRes.pm, t/*: + - only compile what we have OS support for (or can + fake with select()) + - only test what we compiled + - gross improvement to the test suite + - fix EXPORT_FAIL. + This work was all done by Roderick Schertler + . If you run Linux or + one of the other ualarm-less platoforms, and you like this + module, let Roderick know; without him, it still wouldn't + be working on those boxes... + - Makefile.PL: figure out what routines the OS has and + only build what we need. These bits were written by Jarkko + Hietaniemi . Again, gratitude is due... + + 1.02 Mon Dec 30 08:00:00 1996 + - HiRes.pm: update documentation to say what to do when missing + ualarm() and friends. + - README: update to warn that ualarm() and friends need to exist + + 1.01 Fri Oct 17 08:00:00 1996 + - Makefile.PL: make XSPROTOARGS => '-noprototyopes' + - HiRes.pm: put blank line between __END__ and =head1 so that + pod2man works. + + 1.00 Tue Sep 03 13:00:00 1996 + - original version; created by h2xs 1.16 diff -c /dev/null 'perl-5.7.2/ext/Time/HiRes/HiRes.pm' Index: ./ext/Time/HiRes/HiRes.pm *** ./ext/Time/HiRes/HiRes.pm Thu Jan 1 02:00:00 1970 --- ./ext/Time/HiRes/HiRes.pm Mon Jul 9 17:10:16 2001 *************** *** 0 **** --- 1,332 ---- + package Time::HiRes; + + use strict; + use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); + + require Exporter; + use XSLoader; + + @ISA = qw(Exporter); + + @EXPORT = qw( ); + @EXPORT_OK = qw (usleep sleep ualarm alarm gettimeofday time tv_interval + getitimer setitimer ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF); + + $VERSION = '1.20_00'; + + sub AUTOLOAD { + my $constname; + ($constname= $AUTOLOAD) =~ s/.*:://; + my $val = constant($constname, @_ ? $_[0] : 0); + if ($!) { + my ($pack,$file,$line) = caller; + die "Your vendor has not defined Time::HiRes macro $constname, used at $file line $line.\n"; + } + { + no strict 'refs'; + *$AUTOLOAD = sub { $val }; + } + goto &$AUTOLOAD; + } + + XSLoader::load 'Time::HiRes', $VERSION; + + # Preloaded methods go here. + + sub tv_interval { + # probably could have been done in C + my ($a, $b) = @_; + $b = [gettimeofday()] unless defined($b); + (${$b}[0] - ${$a}[0]) + ((${$b}[1] - ${$a}[1]) / 1_000_000); + } + + # Autoload methods go after =cut, and are processed by the autosplit program. + + 1; + __END__ + + =head1 NAME + + Time::HiRes - High resolution ualarm, usleep, and gettimeofday + + =head1 SYNOPSIS + + use Time::HiRes qw( usleep ualarm gettimeofday tv_interval ); + + usleep ($microseconds); + + ualarm ($microseconds); + ualarm ($microseconds, $interval_microseconds); + + $t0 = [gettimeofday]; + ($seconds, $microseconds) = gettimeofday; + + $elapsed = tv_interval ( $t0, [$seconds, $microseconds]); + $elapsed = tv_interval ( $t0, [gettimeofday]); + $elapsed = tv_interval ( $t0 ); + + use Time::HiRes qw ( time alarm sleep ); + + $now_fractions = time; + sleep ($floating_seconds); + alarm ($floating_seconds); + alarm ($floating_seconds, $floating_interval); + + use Time::HiRes qw( setitimer getitimer + ITIMER_REAL ITIMER_VIRTUAL ITIMER_PROF ); + + setitimer ($which, $floating_seconds, $floating_interval ); + getitimer ($which); + + =head1 DESCRIPTION + + The C module implements a Perl interface to the usleep, ualarm, + and gettimeofday system calls. See the EXAMPLES section below and the test + scripts for usage; see your system documentation for the description of + the underlying gettimeofday, usleep, and ualarm calls. + + If your system lacks gettimeofday(2) you don't get gettimeofday() or the + one-arg form of tv_interval(). If you don't have usleep(3) or select(2) + you don't get usleep() or sleep(). If your system don't have ualarm(3) + or setitimer(2) you don't get ualarm() or alarm(). + If you try to import an unimplemented function in the C statement + it will fail at compile time. + + The following functions can be imported from this module. + No functions are exported by default. + + =over 4 + + =item gettimeofday () + + In array context it returns a 2 element array with the seconds and + microseconds since the epoch. In scalar context it returns floating + seconds like Time::HiRes::time() (see below). + + =item usleep ( $useconds ) + + Issues a usleep for the number of microseconds specified. See also + Time::HiRes::sleep() below. + + =item ualarm ( $useconds [, $interval_useconds ] ) + + Issues a ualarm call; interval_useconds is optional and will be 0 if + unspecified, resulting in alarm-like behaviour. + + =item tv_interval + + S + + Returns the floating seconds between the two times, which should have been + returned by gettimeofday(). If the second argument is omitted, then the + current time is used. + + =item time () + + Returns a floating seconds since the epoch. This function can be imported, + resulting in a nice drop-in replacement for the C