----- "Garrett Cooper" <[email protected]> wrote:

> On Tue, Nov 9, 2010 at 7:32 PM, Caspar Zhang <[email protected]>
> wrote:
> > Hi all,
> >
> > I met a strange error (only) in RHEL4, syscalls/sysconf
> > failed the last test case because of the variable `actual'
> > was not evaluated by `errno':
> >
> > sysconf01   56  TFAIL  :  sysconf correctly failed, but expected
> errno (22) != actual (0)
> >
> > I remov the var `actual' and use `errno' directly, seems it
> > works. Re-test under RHEL4/5/6 and all of them pass the test.
> >
> > I have no idea why errno value couldn't be assigned to
> > `actual', either not sure whether my patch works on other
> > non-Red Hat distos. Please have a look at this patch if
> > you want, thanks.
> >
> > Signed-off-by: Caspar Zhang <[email protected]>
> >
> > ---
> >  testcases/kernel/syscalls/sysconf/sysconf01.c |    9 ++++-----
> >  1 files changed, 4 insertions(+), 5 deletions(-)
> >
> > diff --git a/testcases/kernel/syscalls/sysconf/sysconf01.c
> b/testcases/kernel/syscalls/sysconf/sysconf01.c
> > index 783c6f5..42246f0 100644
> > --- a/testcases/kernel/syscalls/sysconf/sysconf01.c
> > +++ b/testcases/kernel/syscalls/sysconf/sysconf01.c
> > @@ -153,19 +153,18 @@ int main()
> >
> >        /* 56 */
> >        {
> > -               int retval, actual;
> > +               int retval;
> >                errno = 0;
> >                retval = sysconf(INVAL_FLAG);
> > -               actual = errno;
> >                if (retval != -1) {
> >                        tst_resm(TFAIL,
> >                                 "sysconf succeeded for invalid flag
> (%i), "
> >                                 " retval=%d errno=%d: %s",
> > -                                INVAL_FLAG, retval, actual,
> strerror(actual));
> > -               } else if (actual != EINVAL) {
> > +                                INVAL_FLAG, retval, errno,
> strerror(errno));
> > +               } else if (errno != EINVAL) {
> >                        tst_resm(TFAIL,
> >                                 "sysconf correctly failed, but
> expected "
> > -                                "errno (%i) != actual (%i)",
> EINVAL, actual);
> > +                                "errno (%i) != actual (%i)",
> EINVAL, errno);
> >                } else
> >                        tst_resm(TPASS, "The invalid sysconf key was
> trapped "
> >                                        "appropriately");
> 
> Hmmm... well, for starters the definitions aren't the same:
> 
>            extern int * __error();
>            #define errno (* __error())
> 
> I wonder if that has to do something with it... try out the following
> program:
> 
> #define _GNU_SOURCE 1
> #include <errno.h>
> #include <stdio.h>
> 
> int
> main(void)
> {
>     open(NULL, 0);
>     int actual = errno;
>     printf("%i %d %i %d\n", actual, actual, errno, errno);
>     return (0);
> }

I've tried a similar simple program before in RHEL4, it worked
out that actual == errno. But when turned to the program in
this testcase, it always gave the error result.

> 
> It spit out this on FreeBSD at least:
> 
> $ gcc -Wall -o test_errno_assignment test_errno_assignment.c
> $ ./test_errno_assignment
> 14 14 14 14
> 
> HTH,
> -Garrett

-- 
Quality Assurance Associate (Kernel) in
Red Hat Software (Beijing) Co., R&D Branch

TEL: +86-10-62608150
WEB: http://www.redhat.com/

------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to