summaryrefslogtreecommitdiffstats
path: root/e_os.h
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2000-03-17 09:25:36 +0000
committerRichard Levitte <levitte@openssl.org>2000-03-17 09:25:36 +0000
commit511e596b8ac2132bd0a40fd4dcce64f72cb2e42a (patch)
tree945b9b852dd5218e8642685a61101b18190bed9e /e_os.h
parent2202d75ed7d34b1606466fbe55bdb29d97af8bbc (diff)
The previous exit code handling was completely bogus for VMS.
Diffstat (limited to 'e_os.h')
-rw-r--r--e_os.h34
1 files changed, 27 insertions, 7 deletions
diff --git a/e_os.h b/e_os.h
index 7f5f62d113..3eff833efb 100644
--- a/e_os.h
+++ b/e_os.h
@@ -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