Commit c3944a99 authored by Richard Levitte's avatar Richard Levitte
Browse files

Have the VMS exit code follow POSIX conventions



It seems like the convention for VMS exit codes is to combine the VMS
C facility code (0x35a000) with a recoded exit code as follows:

    0     => 1
    1-255 => 8*code + 2

We also add 0x10000000, which is the control bit that has DCL not
report the error on the terminal.  That's just as well, since it would
be quite nonsensical, for example:

    %C-W-NOMSG, Message number 0035A018

We could do all this by using the normal exit() function after having
defined the macro _POSIX_EXIT.  Unfortunately, this feature only
exists in VMS C V7.1 and up.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent b97c8c0e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -377,6 +377,13 @@ extern FILE *_imp___iob;
     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.

     Finally, we add the VMS C facility code 0x35a000, because there are some
     programs, such as Perl, that will reinterpret the code back to something
     POSIXly.  'man perlvms' explains it further.
     NOTE: the perlvms manual wants to turn all codes 2 to 255 into success
     codes (status type = 1).  I couldn't disagree more.  Fortunately, the
     status type doesn't seem to bother Perl.
     -- Richard Levitte
  */
#   define EXIT(n)             do { int __VMS_EXIT = n; \
@@ -385,6 +392,7 @@ extern FILE *_imp___iob;
                                     else \
                                       __VMS_EXIT = (n << 3) | 2; \
                                     __VMS_EXIT |= 0x10000000; \
                                     __VMS_EXIT |=   0x35a000; \
                                     exit(__VMS_EXIT); } while(0)
#   define NO_SYS_PARAM_H
#   define NO_SYS_UN_H