Re: Return codes over 1 byte
On 07/09/2015 05:30 PM, Michael DePaulo wrote: > mark06 mentioned this on IRC today and then left the channel about 1 hour > later: > > has anyone ever discussed exit codes above one byte? they are > valid on modern windows, but cygwin's bash will mess them POSIX requires that all sizeof(int) bytes in exit() be visible to calling apps that use waitid(); however, while Solaris has implemented this, Linux has not (Linux intentionally truncates exit() values to 1 byte before storing it in the kernel task information, so later waitid() has no way to reconstruct the three truncated bytes). Since Cygwin is emulating Linux, we can also get by with truncating exit status to one byte, although it would be nice for POSIX reasons to eventually reach the point where waitid() can return all four bytes. > mike@executor ~ > $ ./return.exe > > mike@executor ~ > $ echo $? > 0 Most shells (bash included) are NOT using waitid() internally, but are still sticking to the older wait() and waitpid() interfaces. Per POSIX, those older interfaces MUST truncate the exit status into just 8 bits, because it is being combined with other pieces of information (hence the WIFEXITED() macro and friends). It is only waitid() that can return more than 8 bits, but that in turn requires the kernel to track more than 8 bits. And therein lies a bootstrap problem: since Linux doesn't yet track more than 8 bits in the kernel, most open source shell authors have no incentive to try and use newer interfaces; but until someone actively complains that the newer interfaces are not following POSIX, the kernel authors have no incentive to change the kernel process information. And even if shell authors did switch to waitid(), current POSIX is vague enough to state that a shell's $? will reflect only the lower 8 bits even if the shell were wired to use waitid() internally - that is, there is no requirement that exit(256) be mapped to a non-zero $? rather than the normal 0 you'd get from 8-bit truncation (although there has at least been a discussion of whether a future version of POSIX should add extensions to the shell to expose full 32-bit exit information [1]). [1] http://thread.gmane.org/gmane.comp.standards.posix.austin.general/11060 -- Eric Blake eblake redhat com+1-919-301-3266 Libvirt virtualization library http://libvirt.org signature.asc Description: OpenPGP digital signature
Re: Return codes over 1 byte
On Jul 9 20:20, Michael DePaulo wrote: > On Thu, Jul 9, 2015 at 7:42 PM, Yaakov Selkowitz > wrote: > > On Thu, 2015-07-09 at 19:30 -0400, Michael DePaulo wrote: > >> mark06 mentioned this on IRC today and then left the channel about 1 hour > >> later: > >> > >> has anyone ever discussed exit codes above one byte? they are > >> valid on modern windows, but cygwin's bash will mess them > >> > >> I was curious, so I googled it (I could not find an answer) and then > >> tried it out. I can confirm the what he said. > > > > http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html > > https://www.gnu.org/software/libc/manual/html_node/Exit-Status.html > > > > -- > > Yaakov > > Right, only the least significant 8 bits are outputted. So "257" becomes "1". > > I thought I read somewhere that the Cygwin mintty terminal + bash > shell is supposed to be suitable for running native windows apps. > Maybe I was thinking of the 1st paragraph on this page after the list > of features: > https://code.google.com/p/mintty/ > > Or maybe I was thinking about this reply: > https://cygwin.com/ml/cygwin/2007-03/msg00758.html > > Either way, I feel like this should be documented somewhere. Perhaps I > should submit a patch to add a section like "return codes" to to this > page? > https://cygwin.com/cygwin-ug-net/using-effectively.html > https://cygwin.com/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=winsup/doc/effectively.xml Feel free. Please send patches to the cygwin-patches ML. While you're at it, you might want to scratch the entire section called "Cygwin and Windows Networking". It's so 20th century... Thanks, Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Maintainer cygwin AT cygwin DOT com Red Hat pgpVCOF3FraUS.pgp Description: PGP signature
Re: Return codes over 1 byte
On Thu, Jul 9, 2015 at 7:42 PM, Yaakov Selkowitz wrote: > On Thu, 2015-07-09 at 19:30 -0400, Michael DePaulo wrote: >> mark06 mentioned this on IRC today and then left the channel about 1 hour >> later: >> >> has anyone ever discussed exit codes above one byte? they are >> valid on modern windows, but cygwin's bash will mess them >> >> I was curious, so I googled it (I could not find an answer) and then >> tried it out. I can confirm the what he said. > > http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html > https://www.gnu.org/software/libc/manual/html_node/Exit-Status.html > > -- > Yaakov Right, only the least significant 8 bits are outputted. So "257" becomes "1". I thought I read somewhere that the Cygwin mintty terminal + bash shell is supposed to be suitable for running native windows apps. Maybe I was thinking of the 1st paragraph on this page after the list of features: https://code.google.com/p/mintty/ Or maybe I was thinking about this reply: https://cygwin.com/ml/cygwin/2007-03/msg00758.html Either way, I feel like this should be documented somewhere. Perhaps I should submit a patch to add a section like "return codes" to to this page? https://cygwin.com/cygwin-ug-net/using-effectively.html https://cygwin.com/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=winsup/doc/effectively.xml -Mike -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Re: Return codes over 1 byte
On Thu, 2015-07-09 at 19:30 -0400, Michael DePaulo wrote: > mark06 mentioned this on IRC today and then left the channel about 1 hour > later: > > has anyone ever discussed exit codes above one byte? they are > valid on modern windows, but cygwin's bash will mess them > > I was curious, so I googled it (I could not find an answer) and then > tried it out. I can confirm the what he said. http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html https://www.gnu.org/software/libc/manual/html_node/Exit-Status.html -- Yaakov -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple