I've checked in the hunk that is a bug fix for do_tovmsspec() as
#25759.  Thanks.

The exit handling parts of the patch seem like mostly the right thing
to do and should be applicable with a bit of clean-up and minor
changes.  I've tested it under Mac OS X and it introduces no test
failures so we're good from that standpoint.

A few remarks on the patch and related matters in no particular order.

At a minimum, the documentation of C<$?> and C<$^E> in perlvms.pod
and the C<exit> entry in perlport.pod will need updating.

I won't be checking in code that is commented out.  If it's not ready
for prime time then we shouldn't clutter up the sources with it, and
if we need to get back to an older version later, that's why we've
got version control.

I'm not sure perl.h is a good place for a longish discussion of VMS
condition codes.  In fact I'm rather sure it's not.  This should probably
be in perlvms.pod or perlport.pod and the comments in the code should
just point to that.

At 1:49 AM -0400 10/14/05, John E. Malmberg wrote:

>+ * vaxc$errno is only suppose to be valid if errno == EVMSERR, otherwise
>+ * it's contents can not be trusted. 

That's what the CRTL does, not what Perl does.  There are many, many
cases where we set vaxc$errno even when errno is not EVMSERR.  The
documented behavior of $^E depends on that.  Obviously there is no
guarantee vaxc$errno will always have something interesting in it,
but as far as I know it's always either set appropriately or cleared
(by both the CRTL and by Perl) so there is no danger of getting a
stale, unrelated value.  I think we should be careful that calls to
unix_status_to_vms() do not wipe out potentially more precise values
that may already be in vaxc$errno.

>+
>+    /* Fixme: Per official UNIX specification: If pid = 0, or negative then
>+     * signals are to be sent to multiple processes.
>+     *  pid = 0 - all processes in group except ones that the system exempts
>+     *  pid = -1 - all processes except ones that the system exempts
>+     *  pid = -n - all processes in group (abs(n)) except ...
>+     * For now, just lie and say the user has no privileges.
>+     */
>+
>+    if (pid <= 0) {
>+      errno = EPERM;
>+      vaxc$errno = SS$_NOPRIV;

IMO this should be

        SETERRNO(ENOTSUP, SS$_UNSUPPORTED);

>         return -1;
>     }
> 


-- 
________________________________________
Craig A. Berry
mailto:[EMAIL PROTECTED]

"... getting out of a sonnet is much more
 difficult than getting in."
                 Brad Leithauser

Reply via email to