Report inaccesible file on failed require
authorPetr Písař <ppisar@redhat.com>
Fri, 21 Nov 2014 09:48:51 +0000 (10:48 +0100)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 21 Nov 2014 16:17:57 +0000 (08:17 -0800)
Commit 2433d39e6 (require should die if a file exists but can't be
read) made first failed opened file fatal as request in
[perl #113422]. However error message produced in that case is not
much helpful in identifying which file ound not been accessed:

    $ LANG=C perl -I/root -e 'require strict'
    Can't locate strict.pm:   Permission denied at -e line 1.

This patch adds the name of the failed file to the message to help
identify which @INC directory is erroneous:

    $ LANG=C ./perl -I/root -I./lib -e 'require strict'
    Can't locate strict.pm:   /root/strict.pm: Permission denied at -e line 1.

Signed-off-by: Petr Písař <ppisar@redhat.com>
pp_ctl.c

index 4b16e14..4f1c480 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -4048,7 +4048,8 @@ PP(pp_require)
        if (PL_op->op_type == OP_REQUIRE) {
            if(saved_errno == EMFILE || saved_errno == EACCES) {
                /* diag_listed_as: Can't locate %s */
-               DIE(aTHX_ "Can't locate %s:   %s", name, Strerror(saved_errno));
+               DIE(aTHX_ "Can't locate %s:   %s: %s",
+                   name, tryname, Strerror(saved_errno));
            } else {
                if (namesv) {                   /* did we lookup @INC? */
                    AV * const ar = GvAVn(PL_incgv);