[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [BUG]? Strange return values of close()
From: |
arnold |
Subject: |
Re: [BUG]? Strange return values of close() |
Date: |
Thu, 10 Feb 2022 01:31:48 -0700 |
User-agent: |
Heirloom mailx 12.5 7/5/10 |
Jakub, thanks for the for the report.
Andy, that patch looks good, please push it to gawk-5.1-stable. You
may need to pull first. If you can add a test, that'd be great.
Eli Z., the code in wait_any supposedly gets the exit status properly
for Win32; please review.
Thanks all!
Arnold
"Andrew J. Schorr" <aschorr@telemetry-investments.com> wrote:
> Hi,
>
> Thanks for the bug report. The problem is that the exit status of a previously
> reaped process is not being handled properly. The attached patch seems to fix
> the issue for me, but I'm not able to test the Mingw32 piece of it. We should
> probably add a test case and check that it works on all platforms.
>
> Regards,
> Andy
>
> On Wed, Feb 09, 2022 at 03:44:03PM +0100, Jakub Martisko wrote:
> > Hello,
> >
> > there seems to be some strange behaviour with the close (reproducer is
> > attached in case the formatting gets messed). Is the RC echo=2304 expected
> > or is this a bug? I've tested the same thing with the gawk-4.0.2 (i.e.
> > before the change described in) and it returns 2304 in all four cases.
> >
> > Thanks,
> > Jakub
> >
> > [1]:
> > https://www.gnu.org/software/gawk/manual/html_node/Close-Files-And-Pipes.html#FOOT29
> >
> > $ ls
> > gwk_prog
> > $ gawk -f ./gwk_prog
> > RC Empty=9 #this is the expected value based on unzip's return values
> > RC echo=9
> > $ unzip -o ./test.zip 2>/dev/null; echo $?
> > 9
> >
> > $ touch ./test.zip
> >
> > $ ls
> >
> > gwk_prog test.zip
> > $ gawk -f ./gwk_prog
> > RC Empty=9
> > RC echo=2304 # this is 256*9 btw
> > $ unzip -o ./test.zip 2>/dev/null; echo $?
> >
> > Archive: ./test.zip
> > 9
> >
> > $ cat gwk_prog
> > #!/usr/bin/gawk -f
> >
> > BEGIN{
> > rc=0;
> >
> > extract_file="unzip -o ./test.zip 2>/dev/null";
> >
> > #Just an empty cycle - returns 9 as expected
> > while (extract_file|getline){
> > continue;
> > }
> > rc=close(extract_file);
> > print "RC Empty="rc;
> >
> >
> > #Non empty cycle - extract_file should return 9
> > while (extract_file|getline){
> > cmd="echo"
> > cmd|getline
> > close(cmd)
> > }
> > rc=close(extract_file);
> > print "RC echo="rc;
> > }
>
> >
> > #!/usr/bin/gawk -f
> >
> > BEGIN{
> > rc=0;
> >
> > extract_file="unzip -o ./test.zip 2>/dev/null";
> >
> > #Just an empty cycle - returns 9 as expected
> > while (extract_file|getline){
> > continue;
> > }
> > rc=close(extract_file);
> > print "RC Empty="rc;
> >
> >
> > #Non empty cycle - extract_file should return 9
> > while (extract_file|getline){
> > cmd="echo"
> > cmd|getline
> > close(cmd)
> > }
> > rc=close(extract_file);
> > print "RC echo="rc;
> >
> > }