Skip to content
Snippets Groups Projects
Commit 511e596b authored by Richard Levitte's avatar Richard Levitte
Browse files

The previous exit code handling was completely bogus for VMS.

parent 2202d75e
No related branches found
No related tags found
No related merge requests found
......@@ -246,18 +246,38 @@ extern "C" {
# define RFILE ".rnd"
# define LIST_SEPARATOR_CHAR ','
# define NUL_DEV "NLA0:"
/* We need to do this, because DEC C converts exit code 0 to 1, but not 1
to 0. We will convert 1 to 3! Also, add the inhibit message bit... */
# ifndef MONOLITH
/* We need to do this since VMS has the following coding on status codes:
Bits 0-2: status type: 0 = warning, 1 = success, 2 = error, 3 = info ...
The important thing to know is that odd numbers are considered
good, while even ones are considered errors.
Bits 3-15: actual status number
Bits 16-27: facility number. 0 is considered "unknown"
Bits 28-31: control bits. If bit 28 is set, the shell won't try to
output the message (which, for random codes, just looks ugly)
So, what we do here is to change 0 to 1 to get the default success status,
and everything else is shifted up to fit into the status number field, and
the status is tagged as an error, which I believe is what is wanted here.
-- Richard Levitte
*/
# if !defined(MONOLITH) || defined(OPENSSL_C)
# define EXIT(n) do { int __VMS_EXIT = n; \
if (__VMS_EXIT == 1) __VMS_EXIT = 3; \
if (__VMS_EXIT == 0) \
__VMS_EXIT = 1; \
else \
__VMS_EXIT = (n << 3) | 2; \
__VMS_EXIT |= 0x10000000; \
exit(n); return(n); } while(0)
exit(__VMS_EXIT); \
return(__VMS_EXIT); } while(0)
# else
# define EXIT(n) do { int __VMS_EXIT = n; \
if (__VMS_EXIT == 1) __VMS_EXIT = 3; \
if (__VMS_EXIT == 0) \
__VMS_EXIT = 1; \
else \
__VMS_EXIT = (n << 3) | 2; \
__VMS_EXIT |= 0x10000000; \
return(n); } while(0)
return(__VMS_EXIT); } while(0)
# endif
# define NO_SYS_PARAM_H
# else
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment