Date: Mon, 16 Sep 2002 11:30:03 -0700 (PDT) From: "Jin Guojun [DSD]" <j_guojun@lbl.gov> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/42818: qsort can only sort up to 6 element for structure Message-ID: <200209161830.g8GIU3YE013033@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: "Jin Guojun [DSD]" <j_guojun@lbl.gov> To: Gregory Bond <gnb@itga.com.au> 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 11:26:29 -0700 My fault -- I typed a wrong operator "<". It supposes to be "-". So, the correct operation is: int smaller(const void *i1, const void *i2) { return *(int*)i1 - *(int*)i2; } Thanks, -Jin Gregory Bond wrote: > 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?200209161830.g8GIU3YE013033>