| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
Commit adf4621acac did this for Cwd.pm. but not for File::Spec and
family, which belong to the same distribution.
|
|
|
|
|
| |
This was added in 5.5/5.6 as a backwards-compatibility measure
when taint was extended to happen in more places.
|
|
|
|
|
| |
The new XS implementation of various File::Spec methods needs a couple of
casts to compile with a C++ compiler.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Reimplement parts of File::Spec in XS. Mainly File::Spec::Unix methods.
The methods can be used as methods on File::Spec::Unix, as methods
inherited by File::Spec::$notunix, and as standalone functions. Quite a
lot of complexity comes from making them work in all of these roles,
without the compatibility damaging the performance of any of them.
The methods therefore need to check their invocant, using C code
where the invocant is File::Spec::Unix, and calling other methods if
it is not, so that they play nicely in composition with other methods.
The standalone function is another XS entry point, entirely unencumbered
by OO interface paraphernalia. File::Spec::Functions is modified to
pick up the separate function version.
There is new logic for File::Spec to fall back to pure Perl, in the way
that Cwd.pm already does, for XS-impaired systems.
|
|
|
|
|
| |
This needs to return to the perl repository because the upcoming change to Cwd
needs to patch to include extra logic not in the auto-generated Makefile.PL
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
To be considered absolute, we had been requiring a file spec to
have a bracketed directory spec after the colon. This meant that
very common and idiomatic expressions such as sys$login:login.com
or sys$manager:operator.log were not considered absolute. Which
is wrong.
So we now consider a file spec starting with a valid device name
(which would also be a valid logical name) followed by an unescaped
colon to be absolute.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
to match the version number increases in some of the submodules and
to make the perldelta entry easier to describe.
|
| |
|
|
|
|
| |
Since version 3.39_01, the taint check has applied before 5.8.0, too.
|
|
|
|
|
|
|
|
|
|
| |
If the environment changes, File::Spec->tmpdir should respect that and
recalculate the temp directory.
The only objection raised in the ticket was that File::Spec is already
accused of being too slow, so removing the cache would not be a good
idea. So I put in a check to see whether the relevant environment
variables have changed since the last call to tmpdir.
|
| |
|
|
|
|
| |
Bump $VERSION.
|
| |
|
|
|
|
|
|
|
|
| |
This bug was noticed via https://github.com/dagolden/file-chdir/issues/3 and testing has led to this being the cause.
The problem is worse on some platforms (notably cygwin in this case) when abs_path is implemented by fast_abs_path.
Since File::chdir tests for proper behavior when a directory contains a newline, this bug then breaks File::chdir (one of my favorites and very useful xplatform tool).
Yes this should have tests, but since it will involve creating a directory with a newline, I thought I would do better to leave that to someone with better knowledge than I.
|
| |
|
|
|
|
|
|
|
| |
This finishes the removal of register declarations started by
eb578fdb5569b91c28466a4d1939e381ff6ceaf4. It neglected the ones in
function parameter declarations, and didn't include things in dist, ext,
and lib, which this does include
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
By defining NO_TAINT_SUPPORT, all the various checks that perl does for
tainting become no-ops. It's not an entirely complete change: it doesn't
attempt to remove the taint-related interpreter variables, but instead
virtually eliminates access to it.
Why, you ask? Because it appears to speed up perl's run-time
significantly by avoiding various "are we running under taint" checks
and the like.
This change is not in a state to go into blead yet. The actual way I
implemented it might raise some (valid) objections. Basically, I
replaced all uses of the global taint variables (but not PL_taint_warn!)
with an extra layer of get/set macros (TAINT_get/TAINTING_get).
Furthermore, the change is not complete:
- PL_taint_warn would likely deserve the same treatment.
- Obviously, tests fail. We have tests for -t/-T
- Right now, I added a Perl warn() on startup when -t/-T are detected
but the perl was not compiled support it. It might be argued that it
should be silently ignored! Needs some thinking.
- Code quality concerns - needs review.
- Configure support required.
- Needs thinking: How does this tie in with CPAN XS modules that use
PL_taint and friends? It's easy to backport the new macros via PPPort,
but that doesn't magically change all code out there. Might be
harmless, though, because whenever you're running under
NO_TAINT_SUPPORT, any check of PL_taint/etc is going to come up false.
Thus, the only CPAN code that SHOULD be adversely affected is code
that changes taint state.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
File::Spec::UNIX->abs2rel() returns wrong results in a few cases, most
of which involve ".." path components.
To reproduce, paste the following test cases into:
perl -MFile::Spec::Unix -n -e 'print File::Spec::Unix->abs2rel(split),"\n";'
../foo bar/bat
bar/bat ../foo
foo bar/../bat
. .
/ /
Correct results when run at /home/me and no symlinks in base path:
../../../foo
../me/bar/bat
../foo
.
.
Results for File::Spec::Unix from PathTols 3.33:
../../foo
../bar/bat
../../../foo
/
/
The error in the first test case is due to an optimisation applied when
both arguments are relative paths, which prepends "/" instead of the
current directory. "/../" is then converted to "/" by canonpath().
I have replaced this optimisation by a single call to _cwd() in the
following patch. This also fixes the fourth test case. Besides, I have
moved checks which make sense only for absolute path arguments to the
first branch of the if.
(hunk @@ -366,28 +367,32 @@)
The error in the last test case arises because a root dir $base is
treated specially, and catdir() does not work well for fewer than two
path components. The first added line in the following patch catches that.
As regards the second and third test case, they can be solved without
consulting the filesystem only if no symlinks are involved. Whereever
$path contains .. components, the corresponding directory has to be
descended into. The following patch does this.
(hunk @@ -395,19 +400,39 @@)
It can be impossible for abs2rel() to work correctly without looking at
the filesystem if $base contains symlinks. I understand from the
documentation that the File::Spec modules are not meant to consult the
filesystem. Even though the docs state that abs2rel() does not consult
the filesystem, the implications could perhaps be made clearer, for
example like this:
(hunk @@ -352,9 +352,10 @@)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ae5a807c7dcf made extensive changes to File::Spec on VMS, nominally
to support Extended Filename Syntax (EFS). The idea behind the
changes was that with EFS in effect, the File::Spec functions can
guess at whether incoming file specifications are in Unix format
or VMS format and provide output in the same format as the input.
This principle is in some ways desireable in that round-trip
conversions do have the potential to lose information and it
sounds like a nice bit of DWIMmery. However, in practice it leads
to its being a crap shoot what format you'll get back, and in some
really important cases (such as MakeMaker's assembly of paths for
external build utilities) you really have to know which syntax you
have and you may really have to have native syntax, which has
always been the default.
It's also impossible to guess in some of the more common use cases,
such as a splitdir followed by catdir, where catdir has no way of
knowing what delimiters were discarded by splitdir, and thus no
hints about what syntax the original path was in.
Plus there were numerous problems with the implementation, which
broke the build when EFS was in effect and didn't pass very many
of its own tests (which it had inadvertently disabled, since fixed
in 06ecd9c7d6f).
Plus EFS isn't primarily about Unix syntax versus VMS syntax but
about allowing additional characters, such as multiple dots in
filenames or any dots in directory names. The only real difference
for the File::Spec functions should be that they now need to avoid
splitting on traditional delimiters if those characters are escaped
with the caret (^) character.
So revert most of ae5a807c7dcf, and sprinkle negative look-behind
assertions liberally so that we correctly recognize when
traditional delimiters have been escaped and are not being used
as delimiters.
The partial support for Unix reporting mode (where we explicitly
request that output file specifications are in Unix format
regardless of input format) is left in place. It's somewhat less
partial than it was, but still incomplete.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
ae5a807c7dcf moved a check against $@ away from the eval it was
checking and inserted another eval in between, the effect of which
was to make the tests that can only run on VMS get skipped there
too. Ouch.
There are other problems with ae5a807c7dcf, but this is a start.
|
|
|
|
|
|
| |
Also bumps the version of all contained modules to 3.39_01, which is the
version of a new PathTools CPAN release (and the code is in sync with
this commit).
|
| |
|
|
|
|
|
|
| |
Perl 5.6 doesn’t have ${^TAINT}, so the taint check in
File::Spec::Unix->_tmpdir was skipped. This commit adds a taint check
using eval { eval $safe_substring } for 5.6.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Move the variable symlink inside the conditionally compiled code, to avoid
on platforms which don't have symlinks about an unused variable.
Move the pre-processor directives back to column zero - they were indented as
part of the upgrade to PathTools 3.26_01 in c7304ea2604337d2.
Correct the indentation of some lines [always just a closing '}'], which was
making the code harder to follow. All these lines seem to have been left
unaltered by c7304ea2604337d2, when code surrounding them changed.
|
| |
|
|
|
|
|
| |
As only 1 function enables prototypes, it seems sensible to set the default to
the majority case.
|
| |
|
|
|
|
|
|
|
|
|
| |
On VMS, call Perl_rmsexpand() directly from abs_path(), instead of making
bsd_realpath() a trivial wrapper to Perl_rmsexpand().
Initialise path at the point of declaration, instead of separately. Use
sv_setpv_mg() instead of sv_setpvn() with an explicit strlen(), changing
PUSHTARG to PUSHs(TARG) to avoid setting magic twice.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
To allow ExtUtils::MakeMaker to run tests as if it's "miniperl" we need to avoid
taking any sort of reference to the typeglob or the code in the optree, as its
test modules are loaded later than Cwd. Previously this was done with a string
eval, but that was causing problems (for unclear reasons - rt.cpan.org #56225).
Using a symbol table lookup and *foo{THING} syntax avoids the string eval.
Evolved from a suggestion by Reini Urban.
|
| |
|
|
|
|
|
| |
This reverts commit be6c6a23f06d680159ce323c1906d297abbe85cd.
The performance issue that prompted this commit has been fixed.
|
|
|
|
|
|
|
|
|
| |
Since change 56ca34cada940c7f moved the folding of ranges from runtime to
compile time, these VMS-only regexps would incur a startup cost penalty on
all platforms.
This also removes build-time warnings when Cwd is invoked before the Unicode
tables have been processed.
|