Correct VMS-specific handling of $! in Perl_magic_get.
Craig A. Berry [Sat, 16 Jan 2010 22:31:01 +0000 (16:31 -0600)]
0097b436152452e403cc71b4f1a1cfd30ec0ba1a had introduced a test failure
on VMS because it only set the POK flag in the non-VMS code path,
which was an easy mistake to make because accumulated patches had
over time made the #ifdef jungle way more tangled than it needed to
be.  There is really only one line that needs to be VMS-specific.

mg.c

diff --git a/mg.c b/mg.c
index ddfc2ff..1728752 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1035,13 +1035,13 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
            sv_copypv(sv, PL_ors_sv);
        break;
     case '!':
+       {
+       dSAVE_ERRNO;
 #ifdef VMS
        sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
-       sv_setpv(sv, errno ? Strerror(errno) : "");
 #else
-       {
-       dSAVE_ERRNO;
        sv_setnv(sv, (NV)errno);
+#endif
 #ifdef OS2
        if (errno == errno_isOS2 || errno == errno_isOS2_set)
            sv_setpv(sv, os2error(Perl_rc));
@@ -1051,7 +1051,7 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
        SvPOK_on(sv);   /* may have got removed during taint processing */
        RESTORE_ERRNO;
        }
-#endif
+
        SvRTRIM(sv);
        SvNOK_on(sv);   /* what a wonderful hack! */
        break;