• G
    This is the first of two commits (didn't want to dump them all into the · 7bb70435
    Geoff Thorpe 提交于
    same one). However, the first will temporarily break things until the
    second comes through. :-)
    
    The safestack.h handling was mapping compare callbacks that externally
    are of the type (int (*)(type **,type **)) into the underlying callback
    type used by stack.[ch], which is (int (*)(void *,void *)). After some
    degree of digging, it appears that the callback type in the underlying
    stack code should use double pointers too - when the compare operations
    are invoked (from sk_find and sk_sort), they are being used by bsearch
    and qsort to compare two pointers to pointers. This change corrects the
    prototyping (by only casting to the (void*,void*) form at the moment
    it is needed by bsearch and qsort) and makes the mapping in safestack.h
    more transparent. It also changes from "void*" to "char*" to stay in
    keeping with stack.[ch]'s assumed base type of "char".
    
    Also - the "const" situation was that safestack.h was throwing away
    "const"s, and to compound the problem - a close examination of stack.c
    showed that (const char **) is not really achieving what it is supposed
    to when the callback is being invoked, what is needed is
    (const char * const *). So the underlying stack.[ch] and the mapping
    macros in safestack.h have all been altered to correct this.
    
    What will follow are the vast quantities of "const" corrections required
    in stack-dependant code that was being let "slip" through when
    safestack.h was discarding "const"s. These now all come up as compiler
    warnings.
    7bb70435
safestack.h 6.2 KB