'ruby' exit code 32512

Hi, I was having trouble with what seems to be an inconsistency in
ruby exit codes. I can explain this best with examples:

On Windows XP, the command:
ruby -e ‘exit(32512)’ || echo hi

yeilds output (as it seems it should):
hi

whereas on Mac OS X Darwin, the same command does not output anything
(where I expect it to output “hi”). Ruby on OS X behaves as I would
expect if other exit codes are used.

“ruby -v” for the windows computer: ruby 1.8.4 (2006-04-14) [i386- mswin32]
“ruby -v” for the mac computer: ruby 1.8.2 (2004-12-25) [universal-
darwin8.0]

Thank you ahead of time for help in this matter,

Jacob

unknown wrote:

Hi, I was having trouble with what seems to be an inconsistency in
ruby exit codes. I can explain this best with examples:

On Windows XP, the command:
ruby -e ‘exit(32512)’ || echo hi

yeilds output (as it seems it should):
hi

whereas on Mac OS X Darwin, the same command does not output anything
(where I expect it to output “hi”). Ruby on OS X behaves as I would
expect if other exit codes are used.

Not sure about Windows, but a quick glance through Stevens’ Advanced
Programming in the UNIX Environment
reinforces my off-the-cuff
recollection that POSIX doesn’t specify more than allowing an 8-bit exit
status code to make it through. See the wait(2) manual page for the
documentation for the WEXITSTATUS(status) macro, which on both OS X and
Linux specifically mention 8-bits.

On Tue, 6 Feb 2007 [email protected] wrote:

Hi, I was having trouble with what seems to be an inconsistency in
ruby exit codes. I can explain this best with examples:

nothing to do with ruby

man 2 wait
…

WEXITSTATUS(status)

evaluates to the least significant eight bits of the return code of the
child
which terminated, which may have been set as the argument to a call
to
exit() or _exit() or as the argument for a return statement in the main
program. This macro can only be evaluated if WIFEXITED returned true.

…

the exit staus in unix is stored in only the first byte of the exit
status
word. and

32512 => 11111110 0000000
^
^
^
exit status

this is one of the beautiful things about windows being non-posix.

:wink:

-a