Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Sep 2002 23:40:03 -0700 (PDT)
From:      Gregory Bond <gnb@itga.com.au>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/42818: qsort can only sort up to 6 element for structure 
Message-ID:  <200209160640.g8G6e35s073174@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/42818; it has been noted by GNATS.

From: Gregory Bond <gnb@itga.com.au>
To: j_guojun@lbl.gov
Cc: FreeBSD-gnats-submit@FreeBSD.ORG
Subject: Re: kern/42818: qsort can only sort up to 6 element for structure 
Date: Mon, 16 Sep 2002 16:30:13 +1000

 The bug is in your program.  To quote qsort(3):
 
      The comparison function must return an integer less than, equal to, or
      greater than zero if the first argument is considered to be respectively
      less than, equal to, or greater than the second.
 
 Your comparison function returns 0 or 1 only.  Perhaps you are being confused 
 by the C++/STL comparison objects?
 
 Modifying your comparison fn to the following makes it work:
 	int
 	smaller(const void *i1, const void *i2)
 	{
 		if (*(int*)i1 < *(int*)i2) return -1;
 		return  *(int*)i1 > *(int*)i2;
 	}
 
 The fact that your test program seems to work for these test cases on Solaris
 and Linux is a simple coincidence, and depends on fine internal details of the
 sort algorithm on those systems.  There will probably be other cases where the
 Linux/Solaris qsort() will also fail.
 
 This PR can be closed.
 
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209160640.g8G6e35s073174>