I seem to have 1.0.0d builds working on VMS with 32- or 64-bit
pointers, but I'm still waiting for some guidance on how to make some of
the needed changes:

   1. I need a macro/typedef for an integer with the same size as a
pointer.  On non-VMS systems "intptr_t" might be suitable, but not on
VMS, so it appears to me that some new OpenSSL-specific thing must be
added.  I can get it defined appropriately on VMS.  Elsewhere, I don't
care; "size_t" (as is used now), "intptr_t", whatever.  But I'd be
happier (others, too, I'd guess) if someone else chose the name,
placement, and other details.

   I've identified two places where use of "size_t" caused problems on
VMS with 64-bit pointers, "crypto/bn/bn_mont.c" and
"crypto/bn/bn_nist.c".  It might be wise to scan the code for other
inappropriate uses of "size_t", as I haven't done that.

   2. The argv-using "apps/*.c" programs need reform to use "argc"
instead of looking for a NULL terminator at the end of "argv[]". 
(Looking for a NULL makes sense for "envp[]", which is expected to be
NULL-terminated, but not so much for "argv[]", where it causes bad
behavior on VMS Alpha with 64-bit pointers, and where "argc" is
obviously available and suitable.)  I've converted "apps/cms.c" and
"apps/smime.c", because those were causing test failures.  My current
scheme changes code like this:

[...]
int MAIN(int argc, char **argv)
[...]
        char **args;
[...]
        args = argv + 1;
[...]
                while (*args)   [or similar]
[...]
                        args++;
[...]

to code like this:

[...]
int MAIN(int argc, char **argv)
[...]
        int argi;
        char **args;
[...]
        argi = 1;
        args = &argv[argi])[0];
[...]
                while (argi < argc)   [or similar]
[...]
                        args = &argv[++argi];
[...]

The maintainer(s) may prefer some other scheme/details, so I'm reluctant
to fiddle with the other, similar programs in that collection until
someone higher up nods, or complains, or something.  (Also, I wouldn't
bet that any other of those programs gets tested on VMS, so there's
probably some risk in my making the changes to them.)  For the ones I
have changed, I can supply patches or whole replacement files, if anyone
is interested.

   If some decision maker can settle these pending items, then I can
pack this batch of changes into a form which might be more easily
adopted into the main code base.


   Other changes:

   I've added a C macro, OPENSSL_NO_SETVBUF_IONBF, which is defined only
on VMS, and which is used to bracket instances of "setvbuf(..., _IONBF,
...)".  On VMS, this use of setvbuf() is unsupported, and is
incompatible with 64-bit pointers.  Everyone else can ignore this new
macro, and get the same behavior as before.

   I've modified the VMS builders to allow the user to specify a path to
a zlib object library (expecting "zlib.h" to be in the same directory).

   I've also done some tidying in the VMS builders (typography, lame
code reduction, ...).

   I've added a new VMS-specific header file, "crypto/vms_rms.h" to
reduce the code clutter involved with NAM versus NAML (RMS file name)
structures (in "crypto/LPdir_vms.c" and "crypto/dso/dso_vms.c").  I use
essentially similar stuff in many other projects.  You're welcome to it. 
(I haven't added a copyright heading.)

------------------------------------------------------------------------

   Steven M. Schweda               sms@antinode-info
   382 South Warwick Street        (+1) 651-699-9818
   Saint Paul  MN  55105-2547
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to