summaryrefslogtreecommitdiff
path: root/perl.h
diff options
context:
space:
mode:
authorJohn E. Malmberg <wb8tyw@qsl.net>2005-10-25 07:09:37 -0400
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-10-25 15:26:20 +0000
commit6ac6a52b90121db9304782c76ae9243ce4205369 (patch)
tree1e55b33dc4591c1f5e9842b650877fa257422324 /perl.h
parent7b9a32411c4ec6251e6f3ab9bb69dd43222d7692 (diff)
downloadperl-6ac6a52b90121db9304782c76ae9243ce4205369.tar.gz
Back out change #25839, and apply :
Subject: [patch@25838]Hopefully the last VMS exit/error fixes needed. From: "John E. Malmberg" <wb8tyw@qsl.net> Message-ID: <435E4AB1.1000106@qsl.net> p4raw-link: @25839 on //depot/perl: 0968cdad220f9ff42abaf7f92b7d3731a578e46d p4raw-id: //depot/perl@25849
Diffstat (limited to 'perl.h')
-rw-r--r--perl.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/perl.h b/perl.h
index 5a2a771168..d6ccfa470a 100644
--- a/perl.h
+++ b/perl.h
@@ -2662,8 +2662,8 @@ typedef pthread_key_t perl_key;
* the NATIVE error status based on it. It does not assume that
* the UNIX/POSIX exit codes have any relationship to errno, except
* that 0 indicates a success. When in the default mode to comply
- * with the Perl VMS documentation, status of one is set to the
- * failure code of SS$_ABORT. Any other number is passed through.
+ * with the Perl VMS documentation, any other code sets the NATIVE
+ * status to a failure code of SS$_ABORT.
*
* In the new POSIX EXIT mode, native status will be set so that the
* actual exit code will can be retrieved by the calling program or
@@ -2689,7 +2689,7 @@ typedef pthread_key_t perl_key;
(C_FAC_POSIX | (evalue << 3 ) | (evalue == 1)? \
(STS$K_ERROR | STS$M_INHIB_MSG) : 0); \
else \
- PL_statusvalue_vms = (evalue == 1)? SS$_ABORT : evalue; \
+ PL_statusvalue_vms = SS$_ABORT; \
} else { /* forgive them Perl, for they have sinned */ \
if (evalue != EVMSERR) PL_statusvalue_vms = evalue; \
else PL_statusvalue_vms = vaxc$errno; \
@@ -2701,6 +2701,33 @@ typedef pthread_key_t perl_key;
set_vaxc_errno(PL_statusvalue_vms); \
} STMT_END
+ /* STATUS_EXIT_SET - Takes a NATIVE/UNIX/POSIX exit code
+ * and sets the NATIVE error status based on it. This special case
+ * is needed to maintain compatibility with past VMS behavior.
+ *
+ * In the default mode on VMS, this number is passed through as
+ * both the NATIVE and UNIX status. Which makes it different
+ * that the STATUS_UNIX_EXIT_SET.
+ *
+ * In the new POSIX EXIT mode, native status will be set so that the
+ * actual exit code will can be retrieved by the calling program or
+ * shell.
+ *
+ */
+
+# define STATUS_EXIT_SET(n) \
+ STMT_START { \
+ I32 evalue = (I32)n; \
+ PL_statusvalue = evalue; \
+ if (MY_POSIX_EXIT) \
+ PL_statusvalue_vms = \
+ (C_FAC_POSIX | (evalue << 3 ) | (evalue == 1)? \
+ (STS$K_ERROR | STS$M_INHIB_MSG) : 0); \
+ else \
+ PL_statusvalue_vms = evalue ? evalue : SS$_NORMAL; \
+ set_vaxc_errno(PL_statusvalue_vms); \
+ } STMT_END
+
/* This macro forces a success status */
# define STATUS_ALL_SUCCESS \
@@ -2757,6 +2784,7 @@ typedef pthread_key_t perl_key;
PL_statusvalue &= 0xFFFF; \
} STMT_END
# define STATUS_UNIX_EXIT_SET(n) STATUS_UNIX_SET(n)
+# define STATUS_EXIT_SET(n) STATUS_UNIX_SET(n)
# define STATUS_CURRENT STATUS_UNIX
# define STATUS_EXIT STATUS_UNIX
# define STATUS_ALL_SUCCESS (PL_statusvalue = 0, PL_statusvalue_posix = 0)