Return value of std.process.system

H. S. Teoh hsteoh at quickfur.ath.cx
Sat Feb 25 11:20:47 PST 2012


On Sat, Feb 25, 2012 at 08:14:05PM +0100, Artur Skawina wrote:
> On 02/25/12 19:39, H. S. Teoh wrote:
> > What should the return value of std.process.system be?
> > 
> > I'm looking at issue 6926, and upon investigation found that
> > std.process.system always returns WEXITSTATUS(status) regardless of the
> > value of WIFEXITED(status). This means that if the child process exits
> > with a signal or dumps core, it may still return 0, whereas one would
> > expect it should return some non-zero value.
> > 
> > The comments in the code indicate that WEXITSTATUS(status) is used to
> > provide maximum convenience (no need to use another macro/translation
> > scheme to get at the return code, uniformity with Windows, etc.), but
> > the current behaviour is obviously broken.
> > 
> > There's currently a check for status==-1, in which case -1 is returned.
> > I think we should extend this so that if WIFEXITED(status) is false,
> > then -1 should be returned. What do y'all think?
> > 
> > Furthermore, the version(Posix) block doesn't use any of the C macros at
> > all, but has (status & 0xff00)>>>8, which equals WEXITSTATUS(status) on
> > Linux systems. Do we know for sure that this is correct across *all*
> > Unixen? AFAIK, the Posix spec leaves the details of WEXITSTATUS up to
> > implementation. If so, the current implementation is technically broken.
> > 
> > What's the best way to fix this? I'm inclined to move the implementation
> > of this function into C, at least for version(Posix), so that we can get
> > at the C macros and be sure that the result will be correct.
> > 
> > Comments?
> 
> import core.sys.posix.sys.wait;?
[...]

Good idea! I'll do that.

Thanks!


T

-- 
MASM = Mana Ada Sistem, Man!


More information about the Digitalmars-d mailing list