summaryrefslogtreecommitdiffstats
path: root/contrib/perl5/ext/File/Glob
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/perl5/ext/File/Glob')
-rw-r--r--contrib/perl5/ext/File/Glob/Changes49
-rw-r--r--contrib/perl5/ext/File/Glob/Glob.pm438
-rw-r--r--contrib/perl5/ext/File/Glob/Glob.xs208
-rw-r--r--contrib/perl5/ext/File/Glob/Makefile.PL21
-rw-r--r--contrib/perl5/ext/File/Glob/TODO21
-rw-r--r--contrib/perl5/ext/File/Glob/bsd_glob.c971
-rw-r--r--contrib/perl5/ext/File/Glob/bsd_glob.h83
7 files changed, 0 insertions, 1791 deletions
diff --git a/contrib/perl5/ext/File/Glob/Changes b/contrib/perl5/ext/File/Glob/Changes
deleted file mode 100644
index f46ec70..0000000
--- a/contrib/perl5/ext/File/Glob/Changes
+++ /dev/null
@@ -1,49 +0,0 @@
-Revision history for Perl extension File::Glob
-
-0.00 Tue Dec 17 10:51:33 1996
- - original version; created by h2xs 1.16
-
-0.90 Tue Dec 17 13:58:32 MST 1996
- - implemented first pass access to glob(3),
- but it's clumsy and it looks like it leaks
- memory.
-
-0.91 Thu Sep 4 08:43:55 CDT 1997
- - included CORE/config.h portability macros
- - s/glob/bsd_glob/ to avoid calling and including the
- system's glob stuff
- - added GLOB_DEBUG for (surprise!) glob debugging
- - tainted all filenames returned from &Glob::BSD::glob
-
-0.92 Tue Sep 30 08:31:57 CDT 1997
- - only use lstat if HAS_LSTAT is defined
- - renamed the glob flags to GLOB_*
- - added GLOB_CSH convenience macro for csh(1) globbing
- These changes thanks to Hans Mulder <hansm@icgned.nl>
- - fixed an incompatibility with csh(1) globbing where a
- pattern like {A*,b,c} wouldn't expand properly
- - various compatibility changes
- - fixed and added tests
-
-0.93 Wed Jul 1 10:39:47 CDT 1998
- - renamed module to File::BSDGlob
- - enabled 'globally' import directive to override the core
- glob
- - added Sarathy's tests for File::DosGlob
-0.99 Tue Oct 12 06:42:02 PDT 1999
- - renamed module to File::Glob for incorporation into the
- Perl source distribution
- - ansified prototypes
- - s/struct stat/Stat_t/
- - split on spaces to make <*.c *.h> work (for compatibility)
-0.991 Tue Oct 26 09:48:00 BST 1999
- - Add case-insensitive matching (GLOB_NOCASE)
- - Make glob_csh case insensitive by default on Win32, VMS,
- OS/2, DOS, RISC OS, and Mac OS
- - Add support for :case and :nocase tags
- - Hack to make patterns like C:* work on DOSISH systems
- - Add support for either \ or / as separators on DOSISH systems
- - Limit effect of \ as a quoting operator on DOSISH systems to
- when it precedes one of []{}-~\ (to minimise backslashitis).
-0.992 Tue Mar 20 09:25:48 2001
- - Add alphabetic sorting for csh compatibility (GLOB_ALPHASORT)
diff --git a/contrib/perl5/ext/File/Glob/Glob.pm b/contrib/perl5/ext/File/Glob/Glob.pm
deleted file mode 100644
index 20b26f9..0000000
--- a/contrib/perl5/ext/File/Glob/Glob.pm
+++ /dev/null
@@ -1,438 +0,0 @@
-package File::Glob;
-
-use strict;
-use Carp;
-our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS,
- $AUTOLOAD, $DEFAULT_FLAGS);
-
-require Exporter;
-use XSLoader ();
-require AutoLoader;
-
-@ISA = qw(Exporter AutoLoader);
-
-# NOTE: The glob() export is only here for compatibility with 5.6.0.
-# csh_glob() should not be used directly, unless you know what you're doing.
-
-@EXPORT_OK = qw(
- csh_glob
- bsd_glob
- glob
- GLOB_ABEND
- GLOB_ALPHASORT
- GLOB_ALTDIRFUNC
- GLOB_BRACE
- GLOB_CSH
- GLOB_ERR
- GLOB_ERROR
- GLOB_MARK
- GLOB_NOCASE
- GLOB_NOCHECK
- GLOB_NOMAGIC
- GLOB_NOSORT
- GLOB_NOSPACE
- GLOB_QUOTE
- GLOB_TILDE
-);
-
-%EXPORT_TAGS = (
- 'glob' => [ qw(
- GLOB_ABEND
- GLOB_ALPHASORT
- GLOB_ALTDIRFUNC
- GLOB_BRACE
- GLOB_CSH
- GLOB_ERR
- GLOB_ERROR
- GLOB_MARK
- GLOB_NOCASE
- GLOB_NOCHECK
- GLOB_NOMAGIC
- GLOB_NOSORT
- GLOB_NOSPACE
- GLOB_QUOTE
- GLOB_TILDE
- glob
- bsd_glob
- ) ],
-);
-
-$VERSION = '0.991';
-
-sub import {
- my $i = 1;
- while ($i < @_) {
- if ($_[$i] =~ /^:(case|nocase|globally)$/) {
- splice(@_, $i, 1);
- $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case';
- $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase';
- if ($1 eq 'globally') {
- no warnings;
- *CORE::GLOBAL::glob = \&File::Glob::csh_glob;
- }
- next;
- }
- ++$i;
- }
- goto &Exporter::import;
-}
-
-sub AUTOLOAD {
- # This AUTOLOAD is used to 'autoload' constants from the constant()
- # XS function. If a constant is not found then control is passed
- # to the AUTOLOAD in AutoLoader.
-
- my $constname;
- ($constname = $AUTOLOAD) =~ s/.*:://;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
- if ($! =~ /Invalid/) {
- $AutoLoader::AUTOLOAD = $AUTOLOAD;
- goto &AutoLoader::AUTOLOAD;
- }
- else {
- croak "Your vendor has not defined File::Glob macro $constname";
- }
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
-}
-
-XSLoader::load 'File::Glob', $VERSION;
-
-# Preloaded methods go here.
-
-sub GLOB_ERROR {
- return constant('GLOB_ERROR', 0);
-}
-
-sub GLOB_CSH () {
- GLOB_BRACE()
- | GLOB_NOMAGIC()
- | GLOB_QUOTE()
- | GLOB_TILDE()
- | GLOB_ALPHASORT()
-}
-
-$DEFAULT_FLAGS = GLOB_CSH();
-if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) {
- $DEFAULT_FLAGS |= GLOB_NOCASE();
-}
-
-# Autoload methods go after =cut, and are processed by the autosplit program.
-
-sub bsd_glob {
- my ($pat,$flags) = @_;
- $flags = $DEFAULT_FLAGS if @_ < 2;
- return doglob($pat,$flags);
-}
-
-# File::Glob::glob() is deprecated because its prototype is different from
-# CORE::glob() (use bsd_glob() instead)
-sub glob {
- goto &bsd_glob;
-}
-
-## borrowed heavily from gsar's File::DosGlob
-my %iter;
-my %entries;
-
-sub csh_glob {
- my $pat = shift;
- my $cxix = shift;
- my @pat;
-
- # glob without args defaults to $_
- $pat = $_ unless defined $pat;
-
- # extract patterns
- $pat =~ s/^\s+//; # Protect against empty elements in
- $pat =~ s/\s+$//; # things like < *.c> and <*.c >.
- # These alone shouldn't trigger ParseWords.
- if ($pat =~ /\s/) {
- # XXX this is needed for compatibility with the csh
- # implementation in Perl. Need to support a flag
- # to disable this behavior.
- require Text::ParseWords;
- @pat = Text::ParseWords::parse_line('\s+',0,$pat);
- }
-
- # assume global context if not provided one
- $cxix = '_G_' unless defined $cxix;
- $iter{$cxix} = 0 unless exists $iter{$cxix};
-
- # if we're just beginning, do it all first
- if ($iter{$cxix} == 0) {
- if (@pat) {
- $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ];
- }
- else {
- $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ];
- }
- }
-
- # chuck it all out, quick or slow
- if (wantarray) {
- delete $iter{$cxix};
- return @{delete $entries{$cxix}};
- }
- else {
- if ($iter{$cxix} = scalar @{$entries{$cxix}}) {
- return shift @{$entries{$cxix}};
- }
- else {
- # return undef for EOL
- delete $iter{$cxix};
- delete $entries{$cxix};
- return undef;
- }
- }
-}
-
-1;
-__END__
-
-=head1 NAME
-
-File::Glob - Perl extension for BSD glob routine
-
-=head1 SYNOPSIS
-
- use File::Glob ':glob';
- @list = bsd_glob('*.[ch]');
- $homedir = bsd_glob('~gnat', GLOB_TILDE | GLOB_ERR);
- if (GLOB_ERROR) {
- # an error occurred reading $homedir
- }
-
- ## override the core glob (CORE::glob() does this automatically
- ## by default anyway, since v5.6.0)
- use File::Glob ':globally';
- my @sources = <*.{c,h,y}>
-
- ## override the core glob, forcing case sensitivity
- use File::Glob qw(:globally :case);
- my @sources = <*.{c,h,y}>
-
- ## override the core glob forcing case insensitivity
- use File::Glob qw(:globally :nocase);
- my @sources = <*.{c,h,y}>
-
-=head1 DESCRIPTION
-
-File::Glob::bsd_glob() implements the FreeBSD glob(3) routine, which is
-a superset of the POSIX glob() (described in IEEE Std 1003.2 "POSIX.2").
-bsd_glob() takes a mandatory C<pattern> argument, and an optional
-C<flags> argument, and returns a list of filenames matching the
-pattern, with interpretation of the pattern modified by the C<flags>
-variable.
-
-Since v5.6.0, Perl's CORE::glob() is implemented in terms of bsd_glob().
-Note that they don't share the same prototype--CORE::glob() only accepts
-a single argument. Due to historical reasons, CORE::glob() will also
-split its argument on whitespace, treating it as multiple patterns,
-whereas bsd_glob() considers them as one pattern.
-
-The POSIX defined flags for bsd_glob() are:
-
-=over 4
-
-=item C<GLOB_ERR>
-
-Force bsd_glob() to return an error when it encounters a directory it
-cannot open or read. Ordinarily bsd_glob() continues to find matches.
-
-=item C<GLOB_MARK>
-
-Each pathname that is a directory that matches the pattern has a slash
-appended.
-
-=item C<GLOB_NOCASE>
-
-By default, file names are assumed to be case sensitive; this flag
-makes bsd_glob() treat case differences as not significant.
-
-=item C<GLOB_NOCHECK>
-
-If the pattern does not match any pathname, then bsd_glob() returns a list
-consisting of only the pattern. If C<GLOB_QUOTE> is set, its effect
-is present in the pattern returned.
-
-=item C<GLOB_NOSORT>
-
-By default, the pathnames are sorted in ascending ASCII order; this
-flag prevents that sorting (speeding up bsd_glob()).
-
-=back
-
-The FreeBSD extensions to the POSIX standard are the following flags:
-
-=over 4
-
-=item C<GLOB_BRACE>
-
-Pre-process the string to expand C<{pat,pat,...}> strings like csh(1).
-The pattern '{}' is left unexpanded for historical reasons (and csh(1)
-does the same thing to ease typing of find(1) patterns).
-
-=item C<GLOB_NOMAGIC>
-
-Same as C<GLOB_NOCHECK> but it only returns the pattern if it does not
-contain any of the special characters "*", "?" or "[". C<NOMAGIC> is
-provided to simplify implementing the historic csh(1) globbing
-behaviour and should probably not be used anywhere else.
-
-=item C<GLOB_QUOTE>
-
-Use the backslash ('\') character for quoting: every occurrence of a
-backslash followed by a character in the pattern is replaced by that
-character, avoiding any special interpretation of the character.
-(But see below for exceptions on DOSISH systems).
-
-=item C<GLOB_TILDE>
-
-Expand patterns that start with '~' to user name home directories.
-
-=item C<GLOB_CSH>
-
-For convenience, C<GLOB_CSH> is a synonym for
-C<GLOB_BRACE | GLOB_NOMAGIC | GLOB_QUOTE | GLOB_TILDE | GLOB_ALPHASORT>.
-
-=back
-
-The POSIX provided C<GLOB_APPEND>, C<GLOB_DOOFFS>, and the FreeBSD
-extensions C<GLOB_ALTDIRFUNC>, and C<GLOB_MAGCHAR> flags have not been
-implemented in the Perl version because they involve more complex
-interaction with the underlying C structures.
-
-The following flag has been added in the Perl implementation for
-compatibility with common flavors of csh:
-
-=over 4
-
-=item C<GLOB_ALPHASORT>
-
-If C<GLOB_NOSORT> is not in effect, sort filenames is alphabetical
-order (case does not matter) rather than in ASCII order.
-
-=back
-
-=head1 DIAGNOSTICS
-
-bsd_glob() returns a list of matching paths, possibly zero length. If an
-error occurred, &File::Glob::GLOB_ERROR will be non-zero and C<$!> will be
-set. &File::Glob::GLOB_ERROR is guaranteed to be zero if no error occurred,
-or one of the following values otherwise:
-
-=over 4
-
-=item C<GLOB_NOSPACE>
-
-An attempt to allocate memory failed.
-
-=item C<GLOB_ABEND>
-
-The glob was stopped because an error was encountered.
-
-=back
-
-In the case where bsd_glob() has found some matching paths, but is
-interrupted by an error, it will return a list of filenames B<and>
-set &File::Glob::ERROR.
-
-Note that bsd_glob() deviates from POSIX and FreeBSD glob(3) behaviour
-by not considering C<ENOENT> and C<ENOTDIR> as errors - bsd_glob() will
-continue processing despite those errors, unless the C<GLOB_ERR> flag is
-set.
-
-Be aware that all filenames returned from File::Glob are tainted.
-
-=head1 NOTES
-
-=over 4
-
-=item *
-
-If you want to use multiple patterns, e.g. C<bsd_glob "a* b*">, you should
-probably throw them in a set as in C<bsd_glob "{a*,b*}">. This is because
-the argument to bsd_glob() isn't subjected to parsing by the C shell.
-Remember that you can use a backslash to escape things.
-
-=item *
-
-On DOSISH systems, backslash is a valid directory separator character.
-In this case, use of backslash as a quoting character (via GLOB_QUOTE)
-interferes with the use of backslash as a directory separator. The
-best (simplest, most portable) solution is to use forward slashes for
-directory separators, and backslashes for quoting. However, this does
-not match "normal practice" on these systems. As a concession to user
-expectation, therefore, backslashes (under GLOB_QUOTE) only quote the
-glob metacharacters '[', ']', '{', '}', '-', '~', and backslash itself.
-All other backslashes are passed through unchanged.
-
-=item *
-
-Win32 users should use the real slash. If you really want to use
-backslashes, consider using Sarathy's File::DosGlob, which comes with
-the standard Perl distribution.
-
-=item *
-
-Mac OS (Classic) users should note a few differences. Since
-Mac OS is not Unix, when the glob code encounters a tilde glob (e.g.
-~user/foo) and the C<GLOB_TILDE> flag is used, it simply returns that
-pattern without doing any expansion.
-
-Glob on Mac OS is case-insensitive by default (if you don't use any
-flags). If you specify any flags at all and still want glob
-to be case-insensitive, you must include C<GLOB_NOCASE> in the flags.
-
-The path separator is ':' (aka colon), not '/' (aka slash). Mac OS users
-should be careful about specifying relative pathnames. While a full path
-always begins with a volume name, a relative pathname should always
-begin with a ':'. If specifying a volume name only, a trailing ':' is
-required.
-
-=back
-
-=head1 AUTHOR
-
-The Perl interface was written by Nathan Torkington E<lt>gnat@frii.comE<gt>,
-and is released under the artistic license. Further modifications were
-made by Greg Bacon E<lt>gbacon@cs.uah.eduE<gt>, Gurusamy Sarathy
-E<lt>gsar@activestate.comE<gt>, and Thomas Wegner
-E<lt>wegner_thomas@yahoo.comE<gt>. The C glob code has the
-following copyright:
-
- Copyright (c) 1989, 1993 The Regents of the University of California.
- All rights reserved.
-
- This code is derived from software contributed to Berkeley by
- Guido van Rossum.
-
- 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. 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.
-
-=cut
diff --git a/contrib/perl5/ext/File/Glob/Glob.xs b/contrib/perl5/ext/File/Glob/Glob.xs
deleted file mode 100644
index ee8c0c9..0000000
--- a/contrib/perl5/ext/File/Glob/Glob.xs
+++ /dev/null
@@ -1,208 +0,0 @@
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "bsd_glob.h"
-
-/* 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
-int
-errfunc(const char *foo, int bar) {
- return !(bar == ENOENT || bar == ENOTDIR);
-}
-#endif
-
-MODULE = File::Glob PACKAGE = File::Glob
-
-void
-doglob(pattern,...)
- char *pattern
-PROTOTYPE: $;$
-PREINIT:
- glob_t pglob;
- int i;
- int retval;
- int flags = 0;
- SV *tmp;
-PPCODE:
- {
- /* allow for optional flags argument */
- if (items > 1) {
- flags = (int) SvIV(ST(1));
- }
-
- /* call glob */
- retval = bsd_glob(pattern, flags, errfunc, &pglob);
- GLOB_ERROR = retval;
-
- /* return any matches found */
- EXTEND(sp, pglob.gl_pathc);
- for (i = 0; i < pglob.gl_pathc; i++) {
- /* printf("# bsd_glob: %s\n", pglob.gl_pathv[i]); */
- tmp = sv_2mortal(newSVpvn(pglob.gl_pathv[i],
- strlen(pglob.gl_pathv[i])));
- TAINT;
- SvTAINT(tmp);
- PUSHs(tmp);
- }
-
- bsd_globfree(&pglob);
- }
-
-double
-constant(name,arg)
- char *name
- int arg
-PROTOTYPE: $$
diff --git a/contrib/perl5/ext/File/Glob/Makefile.PL b/contrib/perl5/ext/File/Glob/Makefile.PL
deleted file mode 100644
index 98781c9..0000000
--- a/contrib/perl5/ext/File/Glob/Makefile.PL
+++ /dev/null
@@ -1,21 +0,0 @@
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => 'File::Glob',
- VERSION_FROM => 'Glob.pm',
- MAN3PODS => {}, # Pods will be built by installman.
- OBJECT => 'bsd_glob$(OBJ_EXT) Glob$(OBJ_EXT)',
-
-## uncomment for glob debugging (will cause make test to fail)
-# DEFINE => '-DGLOB_DEBUG',
-# OPTIMIZE => '-g',
-);
-use Config;
-sub MY::cflags {
- package MY;
- my $inherited = shift->SUPER::cflags(@_);
- if ($Config::Config{archname} =~ /^aix/ and
- $Config::Config{use64bitall} eq 'define') {
- $inherited =~ s/\s-O\d?//m;
- }
- $inherited;
-}
diff --git a/contrib/perl5/ext/File/Glob/TODO b/contrib/perl5/ext/File/Glob/TODO
deleted file mode 100644
index ef2547f..0000000
--- a/contrib/perl5/ext/File/Glob/TODO
+++ /dev/null
@@ -1,21 +0,0 @@
-Some issues left to take care of:
-
- o sane ~ handling on non-Unix platforms
-
- Currently on non-Unix, when the glob code encounters a tilde glob
- (.e.g ~user/foo or ~/.cshrc), it simply returns that pattern
- without doing any expansion (meaning perl will weed it out since a
- file of that name isn't likely to exist).
-
- Please, if you have strong feelings about how tilde expansion
- should be done on your favorite non-Unix platform(s), submit a
- patch.
-
- o path separator handling
-
- Guido's code contains the assumption that the path separator is one
- character (byte, probably) in length. Win32 doesn't object to the
- true slash as a separator. I imagine MacPerl could change the SEP
- cpp #define to ":". I have no idea what it is for VMS. Again, if
- you have ideas and especially patches, please feel free to share
- them.
diff --git a/contrib/perl5/ext/File/Glob/bsd_glob.c b/contrib/perl5/ext/File/Glob/bsd_glob.c
deleted file mode 100644
index 15ee659..0000000
--- a/contrib/perl5/ext/File/Glob/bsd_glob.c
+++ /dev/null
@@ -1,971 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * 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. 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 sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * glob(3) -- a superset of the one defined in POSIX 1003.2.
- *
- * The [!...] convention to negate a range is supported (SysV, Posix, ksh).
- *
- * Optional extra services, controlled by flags not defined by POSIX:
- *
- * GLOB_QUOTE:
- * Escaping convention: \ inhibits any special meaning the following
- * character might have (except \ at end of string is retained).
- * GLOB_MAGCHAR:
- * Set in gl_flags if pattern contained a globbing character.
- * GLOB_NOMAGIC:
- * Same as GLOB_NOCHECK, but it will only append pattern if it did
- * not contain any magic characters. [Used in csh style globbing]
- * GLOB_ALTDIRFUNC:
- * Use alternately specified directory access functions.
- * GLOB_TILDE:
- * expand ~user/foo to the /home/dir/of/user/foo
- * GLOB_BRACE:
- * expand {1,2}{a,b} to 1a 1b 2a 2b
- * gl_matchc:
- * Number of matches in the current invocation of glob.
- * GLOB_ALPHASORT:
- * sort alphabetically like csh (case doesn't matter) instead of in ASCII
- * order
- */
-
-#include <EXTERN.h>
-#include <perl.h>
-#include <XSUB.h>
-
-#include "bsd_glob.h"
-#ifdef I_PWD
-# include <pwd.h>
-#else
-#ifdef HAS_PASSWD
- struct passwd *getpwnam(char *);
- struct passwd *getpwuid(Uid_t);
-#endif
-#endif
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# define MAXPATHLEN PATH_MAX
-# ifdef MACOS_TRADITIONAL
-# define MAXPATHLEN 255
-# else
-# define MAXPATHLEN 1024
-# endif
-# endif
-#endif
-
-#define BG_DOLLAR '$'
-#define BG_DOT '.'
-#define BG_EOS '\0'
-#define BG_LBRACKET '['
-#define BG_NOT '!'
-#define BG_QUESTION '?'
-#define BG_QUOTE '\\'
-#define BG_RANGE '-'
-#define BG_RBRACKET ']'
-#ifdef MACOS_TRADITIONAL
-# define BG_SEP ':'
-#else
-# define BG_SEP '/'
-#endif
-#ifdef DOSISH
-#define BG_SEP2 '\\'
-#endif
-#define BG_STAR '*'
-#define BG_TILDE '~'
-#define BG_UNDERSCORE '_'
-#define BG_LBRACE '{'
-#define BG_RBRACE '}'
-#define BG_SLASH '/'
-#define BG_COMMA ','
-
-#ifndef GLOB_DEBUG
-
-#define M_QUOTE 0x8000
-#define M_PROTECT 0x4000
-#define M_MASK 0xffff
-#define M_ASCII 0x00ff
-
-typedef U16 Char;
-
-#else
-
-#define M_QUOTE 0x80
-#define M_PROTECT 0x40
-#define M_MASK 0xff
-#define M_ASCII 0x7f
-
-typedef U8 Char;
-
-#endif /* !GLOB_DEBUG */
-
-
-#define CHAR(c) ((Char)((c)&M_ASCII))
-#define META(c) ((Char)((c)|M_QUOTE))
-#define M_ALL META('*')
-#define M_END META(']')
-#define M_NOT META('!')
-#define M_ONE META('?')
-#define M_RNG META('-')
-#define M_SET META('[')
-#define ismeta(c) (((c)&M_QUOTE) != 0)
-
-
-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);
-#ifdef GLOB_DEBUG
-static void qprintf(const char *, Char *);
-#endif /* GLOB_DEBUG */
-
-#ifdef PERL_IMPLICIT_CONTEXT
-static Direntry_t * my_readdir(DIR*);
-
-static Direntry_t *
-my_readdir(DIR *d)
-{
- return PerlDir_read(d);
-}
-#else
-#define my_readdir readdir
-#endif
-
-int
-bsd_glob(const char *pattern, int flags,
- int (*errfunc)(const char *, int), glob_t *pglob)
-{
- const U8 *patnext;
- int c;
- Char *bufnext, *bufend, patbuf[MAXPATHLEN+1];
-
- patnext = (U8 *) pattern;
- if (!(flags & GLOB_APPEND)) {
- pglob->gl_pathc = 0;
- pglob->gl_pathv = NULL;
- if (!(flags & GLOB_DOOFFS))
- pglob->gl_offs = 0;
- }
- pglob->gl_flags = flags & ~GLOB_MAGCHAR;
- pglob->gl_errfunc = errfunc;
- 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
- * on the C: drive. However, the glob code does not treat the
- * 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 &&
- bufend - bufnext > 4) {
- *bufnext++ = pattern[0];
- *bufnext++ = ':';
- *bufnext++ = '.';
- *bufnext++ = BG_SEP;
- patnext += 2;
- }
-#endif
- if (flags & GLOB_QUOTE) {
- /* Protect the quoted characters. */
- while (bufnext < bufend && (c = *patnext++) != BG_EOS)
- if (c == BG_QUOTE) {
-#ifdef DOSISH
- /* To avoid backslashitis on Win32,
- * we only treat \ as a quoting character
- * if it precedes one of the
- * metacharacters []-{}~\
- */
- if ((c = *patnext++) != '[' && c != ']' &&
- c != '-' && c != '{' && c != '}' &&
- c != '~' && c != '\\') {
-#else
- if ((c = *patnext++) == BG_EOS) {
-#endif
- c = BG_QUOTE;
- --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)
- return globexp1(patbuf, pglob);
- else
- return glob0(patbuf, pglob);
-}
-
-/*
- * Expand recursively a glob {} pattern. When there is no more expansion
- * 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;
-
- /* Protect a single {}, for find(1), like csh */
- if (pattern[0] == BG_LBRACE && pattern[1] == BG_RBRACE && pattern[2] == BG_EOS)
- return glob0(pattern, pglob);
-
- while ((ptr = (const Char *) g_strchr((Char *) ptr, BG_LBRACE)) != NULL)
- if (!globexp2(ptr, pattern, pglob, &rv))
- return rv;
-
- return glob0(pattern, pglob);
-}
-
-
-/*
- * Recursive brace globbing helper. Tries to expand a single brace.
- * 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 */
- for (i = 0, pe = ++ptr; *pe; pe++)
- 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.
- * Ignore and just look for BG_RBRACE
- */
- pe = pm;
- }
- }
- else if (*pe == BG_LBRACE)
- i++;
- else if (*pe == BG_RBRACE) {
- if (i == 0)
- break;
- i--;
- }
-
- /* Non matching braces; just glob the pattern */
- if (i != 0 || *pe == BG_EOS) {
- *rv = glob0(patbuf, pglob);
- 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.
- * Ignore and just look for BG_RBRACE
- */
- pm = pl;
- }
- break;
-
- case BG_LBRACE:
- i++;
- break;
-
- case BG_RBRACE:
- if (i) {
- i--;
- break;
- }
- /* FALLTHROUGH */
- case BG_COMMA:
- if (i && *pm == BG_COMMA)
- break;
- 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
- qprintf("globexp2:", patbuf);
-#endif /* GLOB_DEBUG */
- *rv = globexp1(patbuf, pglob);
-
- /* move after the comma, to the next string */
- pl = pm + 1;
- }
- break;
-
- default:
- break;
- }
- *rv = 0;
- return 0;
-}
-
-
-
-/*
- * 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
- * first and then trying the password file
- */
- if ((h = getenv("HOME")) == NULL) {
-#ifdef HAS_PASSWD
- if ((pwd = getpwuid(getuid())) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
-#else
- return pattern;
-#endif
- }
- }
- else {
- /*
- * Expand a ~user
- */
-#ifdef HAS_PASSWD
- if ((pwd = getpwnam((char*) patbuf)) == NULL)
- return pattern;
- else
- h = pwd->pw_dir;
-#else
- return pattern;
-#endif
- }
-
- /* 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;
-}
-
-
-/*
- * The main glob() routine: compiles the pattern (optionally processing
- * quotes), calls glob1() to do the real pattern matching, and finally
- * sorts the list (unless unsorted operation is requested). Returns 0
- * if things went well, nonzero if errors occurred. It is not an error
- * to find no matches.
- */
-static int
-glob0(const Char *pattern, glob_t *pglob)
-{
- 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;
- bufnext = patbuf;
-
- /* We don't need to check for buffer overflow any more. */
- while ((c = *qpatnext++) != BG_EOS) {
- switch (c) {
- case BG_LBRACKET:
- c = *qpatnext;
- if (c == BG_NOT)
- ++qpatnext;
- if (*qpatnext == BG_EOS ||
- g_strchr((Char *) qpatnext+1, BG_RBRACKET) == NULL) {
- *bufnext++ = BG_LBRACKET;
- if (c == BG_NOT)
- --qpatnext;
- break;
- }
- *bufnext++ = M_SET;
- if (c == BG_NOT)
- *bufnext++ = M_NOT;
- c = *qpatnext++;
- do {
- *bufnext++ = CHAR(c);
- if (*qpatnext == BG_RANGE &&
- (c = qpatnext[1]) != BG_RBRACKET) {
- *bufnext++ = M_RNG;
- *bufnext++ = CHAR(c);
- qpatnext += 2;
- }
- } while ((c = *qpatnext++) != BG_RBRACKET);
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_END;
- break;
- case BG_QUESTION:
- pglob->gl_flags |= GLOB_MAGCHAR;
- *bufnext++ = M_ONE;
- break;
- case BG_STAR:
- pglob->gl_flags |= GLOB_MAGCHAR;
- /* collapse adjacent stars to one,
- * to avoid exponential behavior
- */
- if (bufnext == patbuf || bufnext[-1] != M_ALL)
- *bufnext++ = M_ALL;
- break;
- default:
- *bufnext++ = CHAR(c);
- break;
- }
- }
- *bufnext = BG_EOS;
-#ifdef GLOB_DEBUG
- qprintf("glob0:", patbuf);
-#endif /* GLOB_DEBUG */
-
- if ((err = glob1(patbuf, pglob)) != 0) {
- pglob->gl_flags = oldflags;
- return(err);
- }
-
- /*
- * If there was no match we are going to append the pattern
- * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified
- * and the pattern did not contain any magic characters
- * GLOB_NOMAGIC is there just for compatibility with csh.
- */
- if (pglob->gl_pathc == oldpathc &&
- ((pglob->gl_flags & GLOB_NOCHECK) ||
- ((pglob->gl_flags & GLOB_NOMAGIC) &&
- !(pglob->gl_flags & GLOB_MAGCHAR))))
- {
-#ifdef GLOB_DEBUG
- 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,
- pglob->gl_pathc - oldpathc, sizeof(char *),
- (pglob->gl_flags & (GLOB_ALPHASORT|GLOB_NOCASE))
- ? ci_compare : compare);
- pglob->gl_flags = oldflags;
- return(0);
-}
-
-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
-compare(const void *p, const void *q)
-{
- return(strcmp(*(char **)p, *(char **)q));
-}
-
-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));
-}
-
-/*
- * The functions glob2 and glob3 are mutually recursive; there is one level
- * of recursion for each segment in the pattern that contains one or more
- * meta characters.
- */
-static int
-glob2(Char *pathbuf, Char *pathend, Char *pattern, glob_t *pglob)
-{
- Stat_t sb;
- Char *p, *q;
- int anymeta;
-
- /*
- * Loop over pattern segments until end of pattern or until
- * segment with meta character found.
- */
- for (anymeta = 0;;) {
- if (*pattern == BG_EOS) { /* End of pattern? */
- *pathend = BG_EOS;
-
- if (g_lstat(pathbuf, &sb, pglob))
- return(0);
-
- if (((pglob->gl_flags & GLOB_MARK) &&
- pathend[-1] != BG_SEP
-#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;
- }
- ++pglob->gl_matchc;
-#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. */
- q = pathend;
- p = pattern;
- while (*p != BG_EOS && *p != BG_SEP
-#ifdef DOSISH
- && *p != BG_SEP2
-#endif
- ) {
- if (ismeta(*p))
- anymeta = 1;
- *q++ = *p++;
- }
-
- if (!anymeta) { /* No expansion, do next segment. */
- pathend = q;
- pattern = p;
- while (*pattern == BG_SEP
-#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;
- int err;
- int nocase;
- char buf[MAXPATHLEN];
-
- /*
- * The readdirfunc declaration can't be prototyped, because it is
- * assigned, below, to two functions which are prototyped in glob.h
- * and dirent.h as taking pointers to differently typed opaque
- * structures.
- */
- 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);
- }
- return(0);
- }
-
- err = 0;
- nocase = ((pglob->gl_flags & GLOB_NOCASE) != 0);
-
- /* 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))) {
- register U8 *sc;
- register Char *dc;
-
- /* 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;
- }
-
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- (*pglob->gl_closedir)(dirp);
- else
- PerlDir_close(dirp);
- return(err);
-}
-
-
-/*
- * Extend the gl_pathv member of a glob_t structure to accomodate a new item,
- * add the new item, and update gl_pathc.
- *
- * This assumes the BSD realloc, which only copies the block when its size
- * crosses a power-of-two boundary; for v7 realloc, this would cause quadratic
- * behavior.
- *
- * Return 0 if new item added, error code if memory couldn't be allocated.
- *
- * Invariant of the glob_t structure:
- * Either gl_pathc is zero and gl_pathv is NULL; or gl_pathc > 0 and
- * 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;
-
-#ifdef GLOB_DEBUG
- printf("Adding ");
- for (p = path; *p; p++)
- (void)printf("%c", CHAR(*p));
- 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 */
- pathv += pglob->gl_offs;
- for (i = pglob->gl_offs; --i >= 0; )
- *--pathv = NULL;
- }
- 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);
-}
-
-
-/*
- * pattern matching function for filenames. Each occurrence of the *
- * pattern causes a recursion level.
- */
-static int
-match(register Char *name, register Char *pat, register Char *patend, int nocase)
-{
- int ok, negate_range;
- Char c, k;
-
- while (pat < patend) {
- c = *pat++;
- switch (c & M_MASK) {
- case M_ALL:
- if (pat == patend)
- return(1);
- do
- if (match(name, pat, patend, nocase))
- return(1);
- while (*name++ != BG_EOS);
- return(0);
- case M_ONE:
- if (*name++ == BG_EOS)
- return(0);
- break;
- case M_SET:
- ok = 0;
- if ((k = *name++) == BG_EOS)
- return(0);
- if ((negate_range = ((*pat & M_MASK) == M_NOT)) != BG_EOS)
- ++pat;
- while (((c = *pat++) & M_MASK) != M_END)
- if ((*pat & M_MASK) == M_RNG) {
- if (nocase) {
- if (tolower(c) <= tolower(k) && tolower(k) <= tolower(pat[1]))
- ok = 1;
- } else {
- if (c <= k && k <= pat[1])
- ok = 1;
- }
- pat += 2;
- } else if (nocase ? (tolower(c) == tolower(k)) : (c == k))
- ok = 1;
- if (ok == negate_range)
- return(0);
- break;
- default:
- k = *name++;
- if (nocase ? (tolower(k) != tolower(c)) : (k != c))
- return(0);
- break;
- }
- }
- return(*name == BG_EOS);
-}
-
-/* Free allocated data belonging to a glob_t structure. */
-void
-bsd_globfree(glob_t *pglob)
-{
- register int i;
- register char **pp;
-
- if (pglob->gl_pathv != NULL) {
- pp = pglob->gl_pathv + pglob->gl_offs;
- for (i = pglob->gl_pathc; i--; ++pp)
- if (*pp)
- Safefree(*pp);
- Safefree(pglob->gl_pathv);
- }
-}
-
-static DIR *
-g_opendir(register Char *str, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- if (!*str) {
-#ifdef MACOS_TRADITIONAL
- strcpy(buf, ":");
-#else
- 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
-g_lstat(register Char *fn, Stat_t *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- g_Ctoc(fn, buf);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_lstat)(buf, sb));
-#ifdef HAS_LSTAT
- return(PerlLIO_lstat(buf, sb));
-#else
- return(PerlLIO_stat(buf, sb));
-#endif /* HAS_LSTAT */
-}
-
-static int
-g_stat(register Char *fn, Stat_t *sb, glob_t *pglob)
-{
- char buf[MAXPATHLEN];
-
- g_Ctoc(fn, buf);
- if (pglob->gl_flags & GLOB_ALTDIRFUNC)
- return((*pglob->gl_stat)(buf, sb));
- return(PerlLIO_stat(buf, sb));
-}
-
-static Char *
-g_strchr(Char *str, int ch)
-{
- do {
- if (*str == ch)
- return (str);
- } while (*str++);
- 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
-static void
-qprintf(const char *str, register Char *s)
-{
- register Char *p;
-
- (void)printf("%s:\n", str);
- for (p = s; *p; p++)
- (void)printf("%c", CHAR(*p));
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", *p & M_PROTECT ? '"' : ' ');
- (void)printf("\n");
- for (p = s; *p; p++)
- (void)printf("%c", ismeta(*p) ? '_' : ' ');
- (void)printf("\n");
-}
-#endif /* GLOB_DEBUG */
diff --git a/contrib/perl5/ext/File/Glob/bsd_glob.h b/contrib/perl5/ext/File/Glob/bsd_glob.h
deleted file mode 100644
index 5d04fff..0000000
--- a/contrib/perl5/ext/File/Glob/bsd_glob.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (c) 1989, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Guido van Rossum.
- *
- * 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. 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.
- *
- * @(#)glob.h 8.1 (Berkeley) 6/2/93
- */
-
-#ifndef _BSD_GLOB_H_
-#define _BSD_GLOB_H_
-
-/* #include <sys/cdefs.h> */
-
-typedef struct {
- int gl_pathc; /* Count of total paths so far. */
- int gl_matchc; /* Count of paths matching pattern. */
- int gl_offs; /* Reserved at beginning of gl_pathv. */
- int gl_flags; /* Copy of flags parameter to glob. */
- char **gl_pathv; /* List of paths matching pattern. */
- /* Copy of errfunc parameter to glob. */
- int (*gl_errfunc)(const char *, int);
-
- /*
- * Alternate filesystem access methods for glob; replacement
- * versions of closedir(3), readdir(3), opendir(3), stat(2)
- * and lstat(2).
- */
- void (*gl_closedir)(void *);
- Direntry_t *(*gl_readdir)(void *);
- void *(*gl_opendir)(const char *);
- int (*gl_lstat)(const char *, Stat_t *);
- int (*gl_stat)(const char *, Stat_t *);
-} glob_t;
-
-#define GLOB_APPEND 0x0001 /* Append to output from previous call. */
-#define GLOB_DOOFFS 0x0002 /* Use gl_offs. */
-#define GLOB_ERR 0x0004 /* Return on error. */
-#define GLOB_MARK 0x0008 /* Append / to matching directories. */
-#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
-#define GLOB_NOSORT 0x0020 /* Don't sort. */
-
-#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
-#define GLOB_BRACE 0x0080 /* Expand braces ala csh. */
-#define GLOB_MAGCHAR 0x0100 /* Pattern had globbing characters. */
-#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
-#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */
-#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_NOSPACE (-1) /* Malloc call failed. */
-#define GLOB_ABEND (-2) /* Unignored error. */
-
-int bsd_glob(const char *, int, int (*)(const char *, int), glob_t *);
-void bsd_globfree(glob_t *);
-
-#endif /* !_BSD_GLOB_H_ */
OpenPOWER on IntegriCloud