[GRASS5] Status of 5.0.0 release
Glynn Clements
glynn.clements at virgin.net
Sun Apr 29 00:30:58 EDT 2001
> > > > > Do you want the qsort() warnings fixed? AFAICT, all of these
> > > > > arise from comparison functions taking pointers to the actual
> > > > > object type, but qsort() having a fixed prototype with a fixed
> > > > > 4th parameter.
> > > > >
> > > > > Fixing them is basically a choice of either:
> > > > >
> > > > > a) changing e.g.:
> > > > >
> > > > > int compare(foo *a, foo *b)
> > > > > {
> > > > > return CMP(*a, *b);
> > > > > }
> > > > > to
> > > > > int compare(void *aa, void *bb)
> > > > > {
> > > > > foo *a = (foo*) aa;
> > > > > foo *b = (foo*) bb;
> > > > > return CMP(*a, *b);
> > > > > }
> > > > >
> > > > > or:
> > > > >
> > > > > b) explicitly casting the 4th argument to qsort()
[snip]
> The a) option is the correct way to fix this. The compare function
> should take void pointers as parameters and cast them to the proper type
> inside the function.
Well, in the course of fixing these, I've been reminded (by gcc) that
the arguments to the compare function are "const void *", not "void *".
This turns out to be a bit of a nuisance, as some of the comparison
functions call GRASS library functions, which generally omit the
"const".
There are two specific cases of library functions having the wrong
prototype:
1. src/raster/r.neighbors/cmd/sort_cell.c calls G_is_d_null_value(),
which omits the "const"; here I just discarded the const with an
explicit cast.
2. G_site_[cds]_cmp(), defined in src/libes/gis/sites.c and declared
in src/include/P_site.h. These are specifically intended to be passed
to qsort(), so I fixed the prototype.
However, even more weird than any of this is the comparison function
in do_v_stats(), in src.contrib/SCS/vector/v.report/cmd/do_v_stats.c:
static int cmp (const void *a,const void *b)
{
if(a < b)
return -1;
if(a > b)
return 1;
return 0;
}
Does anyone know if this is meant to be a placeholder for a
not-yet-written comparison function? Or should the qsort()s just be
removed?
One final point: some brain-dead compilers are known to have trouble
with non-trivial uses of the "const" qualifier. If anyone has "const"
trouble, let me know.
--
Glynn Clements <glynn.clements at virgin.net>
----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo at geog.uni-hannover.de with
subject 'unsubscribe grass5'
More information about the grass-dev
mailing list